From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?utf-8?Q?H=C3=A5kon?= Flatval Newsgroups: gmane.emacs.devel Subject: Re: Sv: Sv: Sv: Support for background transparency Date: Sat, 29 Jan 2022 01:01:23 +0100 Message-ID: References: <87wnlnptf2.fsf@gnus.org> <83h7bwybeg.fsf@gnu.org> <87y24t1ed1.fsf@gnus.org> <87wniv2pp8.fsf@yahoo.com> <874k5x29be.fsf@yahoo.com> <87czkhph4s.fsf@yahoo.com> <87ilu7mhlq.fsf@yahoo.com> <87ee4ukn5u.fsf@yahoo.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="26860"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: mu4e 1.6.10; emacs 27.2 Cc: "emacs-devel@gnu.org" To: Po Lu Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sat Jan 29 00:28:15 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nDaf6-0006jO-DD for ged-emacs-devel@m.gmane-mx.org; Sat, 29 Jan 2022 00:28:12 +0100 Original-Received: from localhost ([::1]:60312 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nDaf4-0008KJ-Qn for ged-emacs-devel@m.gmane-mx.org; Fri, 28 Jan 2022 18:28:10 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:41316) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nDad8-0007Zr-QU for emacs-devel@gnu.org; Fri, 28 Jan 2022 18:26:11 -0500 Original-Received: from mail-vi1eur05olkn2070.outbound.protection.outlook.com ([40.92.90.70]:21472 helo=EUR05-VI1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nDad4-0001Pj-I0 for emacs-devel@gnu.org; Fri, 28 Jan 2022 18:26:10 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YfJr8M8MYJqKMzYNJrIOP4Cp5Se0ZX7eN1QperM99QvqvYPyrjp5iU+/98mYVrBf4ZqIgm7cQ/ex4P+SRPTlvXFdjf10yfULpKvEASqrzdDlVgV5dIWrQ4FZtNWvHnHUiCnYKdBuewj4RxtFJ9ftRCiI8aDVmu98avxZtkmOnJEXo8vw9uKLZgvcigEAmAVv7gl9CMuvdqeN0WofX7+4H3CP6khNUn7DlcPVuwsS5l9KduKj2YIJTE0gG3BSN9SqTNIxrSFjnavySgGX63dyfJIWN/OuW/ZHkgfW+0k/vaCpN34jJrhsd3syd4sDhER2Oj7Tsjjb+EUjqDAoZY/xjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mMlGpKxOU6WprdQKilmiUoaue6AtfEy8rOSOhKmzpkE=; b=jDc0FAq7Ay0XZxaZFjQs/QQF26oe76SwN9ygEb3Zl9rDiIFlOaNzXGwz4G+KPmvMu/A+i25vJU0D03j9EqwIusB4hIGMPIZlEnANLGiwQTNPOwoMhobwpGykbQZttk4aFwgW+P2RiDmC5SMJEI6ViLqVDeL33atXnEejEI0+nRXcOFEBNC9lu48CD0rvM0MLygO4z33VWdsHwmb7pc+0CSUUo0v8INqX3RxrWpwCG3koD6V061OWFggfVb3zExr7Tl792Po6zizuRX0eb3WvKHz7jlrzFB9Lvw0OC3uyHb3PITpt9Hp7KQJwMZvYUSjGpxUibZu1bfGJtXhTbByApg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mMlGpKxOU6WprdQKilmiUoaue6AtfEy8rOSOhKmzpkE=; b=Stgk9SxXl2XOMg6VpUOgisE2q3NBU/WSUR8K88RXZ9qhOeHsvAzw+VVbVAo76sa9DyAWPKQUlWoMBFGEb0hNZcQpoaAe1tyd6HOjNM4Vdk7ooG6eFHRjWwfVArAuBpCHXwo7LmmQ6tzrfi4IzSrpe6/e/Pit0MkcOpkZIf+xHvXTY+CB3/EY++lfRelIV17pBLpUh8Fowy8IyC4r3UYKTSKpC8mGToHs3XUuyWLm//94aEZIvHxL96WsxURLqSb+UcTAkyUFeJp5gaEjoOQ6uR5MWpP0Fe7Qu5yopouokPyV9SCGZUEcijvx6E4duQlICbQ1/6+m+xsXQjuRVZ63GQ== Original-Received: from PRAP251MB0688.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:293::21) by AM9P251MB0040.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:419::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.19; Fri, 28 Jan 2022 23:05:15 +0000 Original-Received: from PRAP251MB0688.EURP251.PROD.OUTLOOK.COM ([fe80::15ff:34d8:e4d9:a23f]) by PRAP251MB0688.EURP251.PROD.OUTLOOK.COM ([fe80::15ff:34d8:e4d9:a23f%5]) with mapi id 15.20.4930.019; Fri, 28 Jan 2022 23:05:15 +0000 In-reply-to: <87ee4ukn5u.fsf@yahoo.com> X-TMN: [dx/krepQ2fAaIooqCw5dISXXI33+9uhk] X-ClientProxiedBy: OL1P279CA0048.NORP279.PROD.OUTLOOK.COM (2603:10a6:e10:14::17) To PRAP251MB0688.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:293::21) X-Microsoft-Original-Message-ID: <871r0rpftc.fsf@hotmail.com> X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0c2672af-cf0a-4fef-b4dc-08d9e2b2a513 X-MS-TrafficTypeDiagnostic: AM9P251MB0040:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UK9JqEtFXIKkVaSNvZMfPsYfrH2HzmmcmLnspOt+ixF3iSP/k3Jb1KpnOO1PKP0L0A68MuQ56cUarjhLLjtdgKuWl/i7HwGIrekMwkBIB0K1sL0cOYtNPgdVJy/urOcgtUwdqAHZRZLY3obXxkoRzs3jypLTSu0HpjhHxqa5Mo5/TIlKG+dy4ZAS4qLDpjEjkQFdok3Qiqf9LIL/8c2IaxxWosE5wErN6EANun+W1cIQJWP9e4xRMKu6jYtxbHfdyEO/kS1TCAfHj7yYDtK9aS48PzS1fAfAfvcTDeJtd8XD8KJHM77BOddfHhJhU6rYD/z2h3TbGMpHy0/t69urERVQ7yjbtIkEC3ls3LFLJpQuyvB36Lsb7LcnMAFHb3Slpd4LrLlswchpy++nQbWtQn754q+K4F+SQq0K1GjiQxkjfxAnkVxc6IMczpHYG26Wxv8UTlEgACmGGbXBK0laDvSc/qoAKdiyuugk8K/fhsgQI1HYjhMMglD/yRB09zPxfW8OJlbKcV1BmHMQBUiA5SE1fS3LNzfHDd8czvmzHYQ= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S3RtVHA3Z0s3RFRMODFodWRER2NiTFhna2R6dXNIcWZjYXJGUWdvSlF4ZEZr?= =?utf-8?B?K3BteVdLelBQdHFoNXRCRnJsRnRGWkZUSkF4SmJMQThmOEU5MGxrMFJjaFlE?= =?utf-8?B?WkVpQ0xoNUpZaGgrb1FBT1dzaCtGZGxzUmJVL3dKcnh4MG0rWW42ZGs5bFl4?= =?utf-8?B?QmpObm5OdFVaaldkT2UyeHVoK0F1NTYzRTV5UENLZC94clFGNmoxY0g2U0wz?= =?utf-8?B?Mm5idDhsSUxVZG1RRXpTUnBGeC9nUDFkK1NpTkk5ek92aEsrd2sySzNXeFFM?= =?utf-8?B?TGpZWTVRSFcxUzdMZkhROEFHaUl3YUozRE9hUFdHTFpWd2w1ekFaTzBuNS9o?= =?utf-8?B?eGZnSVZxR3B2T2I1UVJEOXlIOEUvSzA3STQyN2RHbGlpdmluTU1pdHlFZHM0?= =?utf-8?B?MWJGVlRuc3dyRk50WWViamQyMWg2L0JLMGpnSks0U1VuSHNjdDJUVVdVcmoz?= =?utf-8?B?ekVDdjEyUjd1UTQzU2tKR3MyQytoSWtOZ1dvYkNmNk80b2docVdocytDQ3ps?= =?utf-8?B?alJpbk1icFFFRlVsOFlqNm1aLzZIemd5MC93cWdZT1NZSnpkYVVPVGJ3b3pp?= =?utf-8?B?SXhib0M1dFVDbnVhdCtqSGdYLzI1N2orWERzcE0vZFM2RGI3emU5V2piN2JS?= =?utf-8?B?UU1UbGFDUWF3SndSQmtlbmlZVktVeU9wOHgxNV X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-00b75.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 0c2672af-cf0a-4fef-b4dc-08d9e2b2a513 X-MS-Exchange-CrossTenant-AuthSource: PRAP251MB0688.EURP251.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jan 2022 23:05:15.3098 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9P251MB0040 Received-SPF: pass client-ip=40.92.90.70; envelope-from=hkon20@hotmail.com; helo=EUR05-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:285534 Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > Well, it's not a prerequisite to installing your change, but could you > please attach to that frozen Emacs process with gdb and print a > backtrace? I have attached the backtrace I got from attaching with gdb to the frozen process. I also removed the `defined (USE_CAIRO)` part from the preprocessor statement, so that cairo builds can now have 32- bit visuals. - H=C3=A5kon --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=bt2 Content-Transfer-Encoding: base64 IzAgIDB4MDAwMDdmZWMyOWQ2ODBkYSBpbiBfX2Z1dGV4X2Fic3RpbWVkX3dhaXRfY29tbW9uNjQg KCkgYXQgL2xpYjY0L2xpYnB0aHJlYWQuc28uMAojMSAgMHgwMDAwN2ZlYzI5ZDYxYzIwIGluIHB0 aHJlYWRfY29uZF93YWl0QEBHTElCQ18yLjMuMiAoKSBhdCAvbGliNjQvbGlicHRocmVhZC5zby4w CiMyICAweDAwMDA3ZmVjMmI0ZWEzYjMgaW4gX1hSZXBseSAoKSBhdCAvdXNyL2xpYjY0L2xpYlgx MS5zby42CiMzICAweDAwMDA3ZmVjMmI0ZTViYmIgaW4gWFN5bmMgKCkgYXQgL3Vzci9saWI2NC9s aWJYMTEuc28uNgojNCAgMHgwMDAwN2ZlYzJiNGU1YzViIGluIF9YU3luY0Z1bmN0aW9uICgpIGF0 IC91c3IvbGliNjQvbGliWDExLnNvLjYKIzUgIDB4MDAwMDdmZWMyYjVmNjJjYiBpbiBYZGJlRGVh bGxvY2F0ZUJhY2tCdWZmZXJOYW1lICgpIGF0IC91c3IvbGliNjQvbGliWGV4dC5zby42CiM2ICAw eDAwMDA1NTZlNjhiOTBhOGIgaW4gdGVhcl9kb3duX3hfYmFja19idWZmZXIgKGY9MHg1NTZlNjlm OGRhYTApIGF0IHhmbnMuYzozMzM4CiM3ICAweDAwMDA1NTZlNjhiODQ2MDEgaW4geF9mcmVlX2Zy YW1lX3Jlc291cmNlcyAoZj0weDU1NmU2OWY4ZGFhMCkgYXQgeHRlcm0uYzoxNDQ5NAojOCAgMHgw MDAwNTU2ZTY4Yjg0ZmIxIGluIHhfZGVzdHJveV93aW5kb3cgKGY9MHg1NTZlNjlmOGRhYTApIGF0 IHh0ZXJtLmM6MTQ2NTEKIzkgIDB4MDAwMDU1NmU2OGE1YTcxNCBpbiBkZWxldGVfZnJhbWUgKGZy YW1lPTB4NTU2ZTY5ZjhkYWE1LCBmb3JjZT0weGI3MDApIGF0IGZyYW1lLmM6MjIwNwojMTAgMHgw MDAwNTU2ZTY4YjgwYTY0IGluIHhfY29ubmVjdGlvbl9jbG9zZWQKICAgIChkcHk9MHg1NTZlNjll MjFhYjAsIGVycm9yX21lc3NhZ2U9MHg3ZmZjNzBjOTYxMTAgIlggcHJvdG9jb2wgZXJyb3I6IEJh ZE1hdGNoIChpbnZhbGlkIHBhcmFtZXRlciBhdHRyaWJ1dGVzKSBvbiBwcm90b2NvbCByZXF1ZXN0 IDcwIiwgaW9lcnJvcj1mYWxzZSkgYXQgeHRlcm0uYzoxMjU0OQojMTEgMHgwMDAwNTU2ZTY4Yjgw Y2IwIGluIHhfZXJyb3JfcXVpdHRlciAoZGlzcGxheT0weDU1NmU2OWUyMWFiMCwgZXZlbnQ9MHg3 ZmZjNzBjOTYyYzApCiAgICBhdCB4dGVybS5jOjEyNjUyCiMxMiAweDAwMDA1NTZlNjhiODBiZmIg aW4geF9lcnJvcl9oYW5kbGVyIChkaXNwbGF5PTB4NTU2ZTY5ZTIxYWIwLCBldmVudD0weDdmZmM3 MGM5NjJjMCkKICAgIGF0IHh0ZXJtLmM6MTI2MjUKIzEzIDB4MDAwMDdmZWMyYjRlYzVmNCBpbiBf WEVycm9yICgpIGF0IC91c3IvbGliNjQvbGliWDExLnNvLjYKIzE0IDB4MDAwMDdmZWMyYjRlOTMz NyBpbiBoYW5kbGVfZXJyb3IgKCkgYXQgL3Vzci9saWI2NC9saWJYMTEuc28uNgojMTUgMHgwMDAw N2ZlYzJiNGU5M2Q1IGluIGhhbmRsZV9yZXNwb25zZSAoKSBhdCAvdXNyL2xpYjY0L2xpYlgxMS5z by42CiMxNiAweDAwMDA3ZmVjMmI0ZWEzY2QgaW4gX1hSZXBseSAoKSBhdCAvdXNyL2xpYjY0L2xp YlgxMS5zby42CiMxNyAweDAwMDA3ZmVjMmI0ZTViYmIgaW4gWFN5bmMgKCkgYXQgL3Vzci9saWI2 NC9saWJYMTEuc28uNgojMTggMHgwMDAwN2ZlYzJiNGU1YzViIGluIF9YU3luY0Z1bmN0aW9uICgp IGF0IC91c3IvbGliNjQvbGliWDExLnNvLjYKIzE5IDB4MDAwMDdmZWMyYjRjYjA1YSBpbiBYRmls bFJlY3RhbmdsZSAoKSBhdCAvdXNyL2xpYjY0L2xpYlgxMS5zby42CiMyMCAweDAwMDA1NTZlNjhk NmQ4YzggaW4gZGlzcGxheV9tZW51CiAgICAobXc9MHg1NTZlNmEwNTgzNTAsIGxldmVsPTAsIGp1 c3RfY29tcHV0ZV9wPTAgJ1wwMDAnLCBoaWdobGlnaHRlZF9wb3M9MHgwLCBoaXQ9MHgwLCBoaXRf cmV0dXJuPTB4MCkgYXQgeGx3bWVudS5jOjEyMDcKIzIxIDB4MDAwMDU1NmU2OGQ3MDYzYSBpbiBY bHdNZW51UmVkaXNwbGF5ICh3PTB4NTU2ZTZhMDU4MzUwLCBldj0weDAsIHJlZ2lvbj0weDApCiAg ICBhdCB4bHdtZW51LmM6MjA4NQojMjIgMHgwMDAwNTU2ZTY4ZDcwNjVmIGluIHhsd21lbnVfcmVk aXNwbGF5ICh3PTB4NTU2ZTZhMDU4MzUwKSBhdCB4bHdtZW51LmM6MjA5NQojMjMgMHgwMDAwNTU2 ZTY4YjdjNWNhIGluIGhhbmRsZV9vbmVfeGV2ZW50CiAgICAoZHB5aW5mbz0weDU1NmU2OWUzMjFl MCwgZXZlbnQ9MHg3ZmZjNzBjOTZlNTAsIGZpbmlzaD0weDdmZmM3MGM5NmU0MCwgaG9sZF9xdWl0 PTB4N2ZmYzcwYzk2ZjcwKSBhdCB4dGVybS5jOjkxNzMKIzI0IDB4MDAwMDU1NmU2OGI3ZjJhZCBp biBYVHJlYWRfc29ja2V0ICh0ZXJtaW5hbD0weDU1NmU2OWRmOWNmMCwgaG9sZF9xdWl0PTB4N2Zm YzcwYzk2ZjcwKQogICAgYXQgeHRlcm0uYzoxMTg0MwojMjUgMHgwMDAwNTU2ZTY4YmM3ZWMwIGlu IGdvYmJsZV9pbnB1dCAoKSBhdCBrZXlib2FyZC5jOjcxMTMKIzI2IDB4MDAwMDU1NmU2OGJjODNi MiBpbiBoYW5kbGVfYXN5bmNfaW5wdXQgKCkgYXQga2V5Ym9hcmQuYzo3MzQ0CiMyNyAweDAwMDA1 NTZlNjhiYzgzZDEgaW4gcHJvY2Vzc19wZW5kaW5nX3NpZ25hbHMgKCkgYXQga2V5Ym9hcmQuYzo3 MzU4CiMyOCAweDAwMDA1NTZlNjhiYzg0MTEgaW4gdW5ibG9ja19pbnB1dF90byAobGV2ZWw9MCkg YXQga2V5Ym9hcmQuYzo3MzczCiMyOSAweDAwMDA1NTZlNjhiYzg0NDYgaW4gdG90YWxseV91bmJs b2NrX2lucHV0ICgpIGF0IGtleWJvYXJkLmM6NzQwMQojMzAgMHgwMDAwNTU2ZTY4YjgzMWYyIGlu IHhfd2FpdF9mb3JfZXZlbnQgKGY9MHg1NTZlNjlmOGRhYTAsIGV2ZW50dHlwZT0xOSkgYXQgeHRl cm0uYzoxMzc5MwojMzEgMHgwMDAwNTU2ZTY4Yjg0MTg2IGluIHhfbWFrZV9mcmFtZV92aXNpYmxl IChmPTB4NTU2ZTY5ZjhkYWEwKSBhdCB4dGVybS5jOjE0Mjc2CiMzMiAweDAwMDA1NTZlNjhiODQz NmMgaW4geF9tYWtlX2ZyYW1lX3Zpc2libGVfaW52aXNpYmxlIChmPTB4NTU2ZTY5ZjhkYWEwLCB2 aXNpYmxlPXRydWUpCiAgICBhdCB4dGVybS5jOjE0MzQ0CiMzMyAweDAwMDA1NTZlNjhhNWI3Njcg aW4gRm1ha2VfZnJhbWVfdmlzaWJsZSAoZnJhbWU9MHg1NTZlNjlmOGRhYTUpIGF0IGZyYW1lLmM6 MjczMQojMzQgMHgwMDAwNTU2ZTY4YzgyNWQzIGluIGZ1bmNhbGxfc3VicgogICAgKHN1YnI9MHg1 NTZlNjkxNDVmMDAgPFNtYWtlX2ZyYW1lX3Zpc2libGU+LCBudW1hcmdzPTEsIGFyZ3M9MHg3ZmZj NzBjOTcyZjgpCiAgICBhdCBldmFsLmM6MzEzNwojMzUgMHgwMDAwNTU2ZTY4Y2Q0ZWFiIGluIGV4 ZWNfYnl0ZV9jb2RlCiAgICAoYnl0ZXN0cj0weDdmZWMyNmI4M2ZmNCwgdmVjdG9yPTB4N2ZlYzI2 YjgyZmI1LCBtYXhkZXB0aD0weDJlLCBhcmdzX3RlbXBsYXRlPTI1NiwgbmFyZ3M9MSwgYXJncz0w eDdmZmM3MGM5NzdjOCkgYXQgYnl0ZWNvZGUuYzo2NzYKIzM2IDB4MDAwMDU1NmU2OGNkNGU1NCBp biBleGVjX2J5dGVfY29kZQogICAgKGJ5dGVzdHI9MHg3ZmVjMjZiODQwYjQsIHZlY3Rvcj0weDdm ZWMyNmI4MmYzNSwgbWF4ZGVwdGg9MHhlLCBhcmdzX3RlbXBsYXRlPTI1NywgbmFyZ3M9MSwgYXJn cz0weDdmZmM3MGM5N2VmOCkgYXQgYnl0ZWNvZGUuYzo2NzEKIzM3IDB4MDAwMDU1NmU2OGM4Mjhh ZiBpbiBmZXRjaF9hbmRfZXhlY19ieXRlX2NvZGUKICAgIChmdW49MHg3ZmVjMjZiODJlZTUsIGFy Z3NfdGVtcGxhdGU9MjU3LCBuYXJncz0xLCBhcmdzPTB4N2ZmYzcwYzk3ZWYwKSBhdCBldmFsLmM6 MzE4NwojMzggMHgwMDAwNTU2ZTY4YzgyYzcyIGluIGZ1bmNhbGxfbGFtYmRhCiAgICAoZnVuPTB4 N2ZlYzI2YjgyZWU1LCBuYXJncz0xLCBhcmdfdmVjdG9yPTB4N2ZmYzcwYzk3ZWYwKSBhdCBldmFs LmM6MzI2OAojMzkgMHgwMDAwNTU2ZTY4YzgyMGJhIGluIGZ1bmNhbGxfZ2VuZXJhbAogICAgKGZ1 bj0weDdmZWMyNmI4MmVlNSwgbnVtYXJncz0xLCBhcmdzPTB4N2ZmYzcwYzk3ZWYwKSBhdCBldmFs LmM6MzAzNQojNDAgMHgwMDAwNTU2ZTY4YzgyMzE2IGluIEZmdW5jYWxsIChuYXJncz0yLCBhcmdz PTB4N2ZmYzcwYzk3ZWU4KSBhdCBldmFsLmM6MzA4NQojNDEgMHgwMDAwNTU2ZTY4YzgwZmVkIGlu IEZhcHBseSAobmFyZ3M9MiwgYXJncz0weDdmZmM3MGM5N2VlOCkgYXQgZXZhbC5jOjI2NDkKIzQy IDB4MDAwMDU1NmU2OGM4MjRkZSBpbiBmdW5jYWxsX3N1YnIKICAgIChzdWJyPTB4NTU2ZTY5MTU0 MTAwIDxTYXBwbHk+LCBudW1hcmdzPTIsIGFyZ3M9MHg3ZmZjNzBjOTdlZTgpIGF0IGV2YWwuYzoz MTE3CiM0MyAweDAwMDA1NTZlNjhjZDRlYWIgaW4gZXhlY19ieXRlX2NvZGUKICAgIChieXRlc3Ry PTB4N2ZlYzI2N2Y3M2U0LCB2ZWN0b3I9MHg3ZmVjMjY3Zjc0MDUsIG1heGRlcHRoPTB4M2EsIGFy Z3NfdGVtcGxhdGU9MTI4LCBuYXJncz0xLCBhcmdzPTB4N2ZmYzcwYzk4NDIwKSBhdCBieXRlY29k ZS5jOjY3NgojNDQgMHgwMDAwNTU2ZTY4Y2Q0ZTU0IGluIGV4ZWNfYnl0ZV9jb2RlCiAgICAoYnl0 ZXN0cj0weDdmZWMyNmE0Y2Q5YywgdmVjdG9yPTB4N2ZlYzI2ODQ1NGQ1LCBtYXhkZXB0aD0weDNh LCBhcmdzX3RlbXBsYXRlPTI1NiwgbmFyZ3M9MSwgYXJncz0weDdmZmM3MGM5ODkwMCkgYXQgYnl0 ZWNvZGUuYzo2NzEKIzQ1IDB4MDAwMDU1NmU2OGNkNGU1NCBpbiBleGVjX2J5dGVfY29kZQogICAg KGJ5dGVzdHI9MHg3ZmVjMjY5YzAwZmMsIHZlY3Rvcj0weDdmZWMyNjliZmUzNSwgbWF4ZGVwdGg9 MHgxYSwgYXJnc190ZW1wbGF0ZT0wLCBuYXJncz0wLCBhcmdzPTB4N2ZmYzcwYzk4ZGQ4KSBhdCBi eXRlY29kZS5jOjY3MQojNDYgMHgwMDAwNTU2ZTY4Y2Q0ZTU0IGluIGV4ZWNfYnl0ZV9jb2RlCiAg ICAoYnl0ZXN0cj0weDdmZWMyNjljM2EyNCwgdmVjdG9yPTB4N2ZlYzI2OTk3MWFkLCBtYXhkZXB0 aD0weDNhLCBhcmdzX3RlbXBsYXRlPTAsIG5hcmdzPTAsIGFyZ3M9MHg3ZmZjNzBjOTkyZTApIGF0 IGJ5dGVjb2RlLmM6NjcxCiM0NyAweDAwMDA1NTZlNjhjZDRlNTQgaW4gZXhlY19ieXRlX2NvZGUK ICAgIChieXRlc3RyPTB4N2ZlYzI2OWM1ZDdjLCB2ZWN0b3I9MHg3ZmVjMjY5OTY5NzUsIG1heGRl cHRoPTB4MjYsIGFyZ3NfdGVtcGxhdGU9MCwgbmFyZ3M9MCwgYXJncz0weDdmZmM3MGM5OTg3MCkg YXQgYnl0ZWNvZGUuYzo2NzEKIzQ4IDB4MDAwMDU1NmU2OGM4MjhhZiBpbiBmZXRjaF9hbmRfZXhl Y19ieXRlX2NvZGUKICAgIChmdW49MHg3ZmVjMjY5OTY5MzUsIGFyZ3NfdGVtcGxhdGU9MCwgbmFy Z3M9MCwgYXJncz0weDdmZmM3MGM5OTg3MCkgYXQgZXZhbC5jOjMxODcKIzQ5IDB4MDAwMDU1NmU2 OGM4MmM3MiBpbiBmdW5jYWxsX2xhbWJkYQogICAgKGZ1bj0weDdmZWMyNjk5NjkzNSwgbmFyZ3M9 MCwgYXJnX3ZlY3Rvcj0weDdmZmM3MGM5OTg3MCkgYXQgZXZhbC5jOjMyNjgKIzUwIDB4MDAwMDU1 NmU2OGM4MmE2OCBpbiBhcHBseV9sYW1iZGEgKGZ1bj0weDdmZWMyNjk5NjkzNSwgYXJncz0weDAs IGNvdW50PTQpIGF0IGV2YWwuYzozMjEyCiM1MSAweDAwMDA1NTZlNjhjODBiM2UgaW4gZXZhbF9z dWIgKGZvcm09MHg3ZmVjMjZlYTcyMzMpIGF0IGV2YWwuYzoyNTcxCiM1MiAweDAwMDA1NTZlNjhj N2ZmMmIgaW4gRmV2YWwgKGZvcm09MHg3ZmVjMjZlYTcyMzMsIGxleGljYWw9MHgwKSBhdCBldmFs LmM6MjM0OQojNTMgMHgwMDAwNTU2ZTY4YmI5NzRmIGluIHRvcF9sZXZlbF8yICgpIGF0IGtleWJv YXJkLmM6MTE0NgojNTQgMHgwMDAwNTU2ZTY4YzdlMGU1IGluIGludGVybmFsX2NvbmRpdGlvbl9j YXNlCiAgICAoYmZ1bj0weDU1NmU2OGJiOTcyYyA8dG9wX2xldmVsXzI+LCBoYW5kbGVycz0weDkw LCBoZnVuPTB4NTU2ZTY4YmI5MDRiIDxjbWRfZXJyb3I+KQogICAgYXQgZXZhbC5jOjE0ODUKIzU1 IDB4MDAwMDU1NmU2OGJiOTdhMCBpbiB0b3BfbGV2ZWxfMSAoaWdub3JlPTB4MCkgYXQga2V5Ym9h cmQuYzoxMTU0CiM1NiAweDAwMDA1NTZlNjhjN2Q3OGMgaW4gaW50ZXJuYWxfY2F0Y2gKICAgICh0 YWc9MHhlZjcwLCBmdW5jPTB4NTU2ZTY4YmI5NzUxIDx0b3BfbGV2ZWxfMT4sIGFyZz0weDApIGF0 IGV2YWwuYzoxMjE2CiM1NyAweDAwMDA1NTZlNjhiYjk2NzcgaW4gY29tbWFuZF9sb29wICgpIGF0 IGtleWJvYXJkLmM6MTExNAojNTggMHgwMDAwNTU2ZTY4YmI4YmVkIGluIHJlY3Vyc2l2ZV9lZGl0 XzEgKCkgYXQga2V5Ym9hcmQuYzo3MjQKIzU5IDB4MDAwMDU1NmU2OGJiOGQ5OSBpbiBGcmVjdXJz aXZlX2VkaXQgKCkgYXQga2V5Ym9hcmQuYzo4MDcKIzYwIDB4MDAwMDU1NmU2OGJiNTIyMCBpbiBt YWluIChhcmdjPTQsIGFyZ3Y9MHg3ZmZjNzBjOTlkZTgpIGF0IGVtYWNzLmM6MjQyNwo= --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=gdk-cairo-background-transparency-010.patch diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi index ccf7e35eee..bb362ca3ea 100644 --- a/doc/emacs/xresources.texi +++ b/doc/emacs/xresources.texi @@ -149,6 +149,15 @@ Table of Resources is the case. @table @asis +@item @code{alpha} (class @code{Alpha}) +Sets the @samp{alpha} frame parameter, determining frame transparency +(@pxref{Frame Parameters,,, elisp, The Emacs Lisp Reference Manual}). + +@item @code{alphaBackground} (class @code{AlphaBackground}) +Sets the @samp{alpha-background} frame parameter, determining background +transparency +(@pxref{Frame Parameters,,, elisp, The Emacs Lisp Reference Manual}). + @item @code{background} (class @code{Background}) Background color (@pxref{Colors}). diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 2eeb8b7ed7..16748ac922 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -2433,6 +2433,16 @@ Font and Color Parameters Some window systems do not support the @code{alpha} parameter for child frames (@pxref{Child Frames}). + +@vindex alpha-background@r{, a frame parameter} +@item alpha-background +@cindex opacity, frame +@cindex transparency, frame +Sets the background transparency of the frame. Unlike the @code{alpha} +frame parameter, this only controls the transparency of the background +while keeping foreground elements such as text fully opaque. It +should be an integer between 0 and 100, where 0 means +completely transparent and 100 means completely opaque (default). @end table The following frame parameters are semi-obsolete in that they are diff --git a/src/frame.c b/src/frame.c index 8aaff949ba..c331cff32b 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3907,6 +3907,7 @@ DEFUN ("frame-scale-factor", Fframe_scale_factor, Sframe_scale_factor, {"z-group", SYMBOL_INDEX (Qz_group)}, {"override-redirect", SYMBOL_INDEX (Qoverride_redirect)}, {"no-special-glyphs", SYMBOL_INDEX (Qno_special_glyphs)}, + {"alpha-background", SYMBOL_INDEX (Qalpha_background)}, #ifdef NS_IMPL_COCOA {"ns-appearance", SYMBOL_INDEX (Qns_appearance)}, {"ns-transparent-titlebar", SYMBOL_INDEX (Qns_transparent_titlebar)}, @@ -5024,6 +5025,33 @@ gui_set_alpha (struct frame *f, Lisp_Object arg, Lisp_Object oldval) } } +void +gui_set_alpha_background (struct frame *f, Lisp_Object arg, Lisp_Object oldval) +{ + double alpha = 1.0; + + if (NILP (arg)) + alpha = 1.0; + else if (FLOATP (arg)) + { + alpha = XFLOAT_DATA (arg); + if (! (0 <= alpha && alpha <= 1.0)) + args_out_of_range (make_float (0.0), make_float (1.0)); + } + else if (FIXNUMP (arg)) + { + EMACS_INT ialpha = XFIXNUM (arg); + if (! (0 <= ialpha && ialpha <= 100)) + args_out_of_range (make_fixnum (0), make_fixnum (100)); + alpha = ialpha / 100.0; + } + else + wrong_type_argument (Qnumberp, arg); + + f->alpha_background = alpha; + + SET_FRAME_GARBAGED (f); +} /** * gui_set_no_special_glyphs: @@ -6100,6 +6128,7 @@ syms_of_frame (void) #endif DEFSYM (Qalpha, "alpha"); + DEFSYM (Qalpha_background, "alpha-background"); DEFSYM (Qauto_lower, "auto-lower"); DEFSYM (Qauto_raise, "auto-raise"); DEFSYM (Qborder_color, "border-color"); diff --git a/src/frame.h b/src/frame.h index cb2f58e261..5d5f2122fb 100644 --- a/src/frame.h +++ b/src/frame.h @@ -637,6 +637,9 @@ #define EMACS_FRAME_H Negative values mean not to change alpha. */ double alpha[2]; + /* Background opacity */ + double alpha_background; + /* Exponent for gamma correction of colors. 1/(VIEWING_GAMMA * SCREEN_GAMMA) where viewing_gamma is 0.4545 and SCREEN_GAMMA is a frame parameter. 0 means don't do gamma correction. */ @@ -1669,6 +1672,7 @@ #define EMACS_CLASS "Emacs" extern long gui_figure_window_size (struct frame *, Lisp_Object, bool, bool); extern void gui_set_alpha (struct frame *, Lisp_Object, Lisp_Object); +extern void gui_set_alpha_background (struct frame *, Lisp_Object, Lisp_Object); extern void gui_set_no_special_glyphs (struct frame *, Lisp_Object, Lisp_Object); extern void validate_x_resource_name (void); diff --git a/src/gtkutil.c b/src/gtkutil.c index 98907bf022..8b8123c807 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -1467,6 +1467,10 @@ xg_create_frame_widgets (struct frame *f) } wtop = gtk_window_new (type); gtk_widget_add_events (wtop, GDK_ALL_EVENTS_MASK); + + /* This prevents GTK from painting the window's background, which + would interfere with transparent background in some environments */ + gtk_widget_set_app_paintable (wtop, TRUE); #endif /* gtk_window_set_has_resize_grip is a Gtk+ 3.0 function but Ubuntu @@ -1587,6 +1591,15 @@ xg_create_frame_widgets (struct frame *f) #endif | GDK_VISIBILITY_NOTIFY_MASK); + GdkScreen *screen = gtk_widget_get_screen (wtop); + + if (FRAME_DISPLAY_INFO (f)->n_planes == 32) + { + GdkVisual *visual = gdk_screen_get_rgba_visual (screen); + gtk_widget_set_visual (wtop, visual); + gtk_widget_set_visual (wfixed, visual); + } + #ifndef HAVE_PGTK /* Must realize the windows so the X window gets created. It is used by callers of this function. */ @@ -1651,7 +1664,6 @@ xg_create_frame_widgets (struct frame *f) #endif { - GdkScreen *screen = gtk_widget_get_screen (wtop); GtkSettings *gs = gtk_settings_get_for_screen (screen); /* Only connect this signal once per screen. */ if (! g_signal_handler_find (G_OBJECT (gs), diff --git a/src/haikufns.c b/src/haikufns.c index 58a2e1d464..0e0cffea72 100644 --- a/src/haikufns.c +++ b/src/haikufns.c @@ -830,6 +830,8 @@ #define ASSIGN_CURSOR(cursor, be_cursor) \ RES_TYPE_NUMBER); gui_default_parameter (f, parms, Qalpha, Qnil, "alpha", "Alpha", RES_TYPE_NUMBER); + gui_default_parameter (f, parms, Qalpha_background, Qnil, + "alphaBackground", "AlphaBackground", RES_TYPE_NUMBER); gui_default_parameter (f, parms, Qfullscreen, Qnil, "fullscreen", "Fullscreen", RES_TYPE_SYMBOL); @@ -1043,6 +1045,8 @@ haiku_create_tip_frame (Lisp_Object parms) "cursorType", "CursorType", RES_TYPE_SYMBOL); gui_default_parameter (f, parms, Qalpha, Qnil, "alpha", "Alpha", RES_TYPE_NUMBER); + gui_default_parameter (f, parms, Qalpha_background, Qnil, + "alphaBackground", "AlphaBackground", RES_TYPE_NUMBER); initial_setup_back_buffer (f); @@ -2609,7 +2613,8 @@ DEFUN ("haiku-frame-restack", Fhaiku_frame_restack, Shaiku_frame_restack, 2, 3, haiku_set_no_accept_focus, NULL, /* set z group */ haiku_set_override_redirect, - gui_set_no_special_glyphs + gui_set_no_special_glyphs, + gui_set_alpha_background, }; void diff --git a/src/nsfns.m b/src/nsfns.m index 11132a294a..467e56ece4 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -1004,6 +1004,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side. ns_set_z_group, 0, /* x_set_override_redirect */ gui_set_no_special_glyphs, + gui_set_alpha_background, #ifdef NS_IMPL_COCOA ns_set_appearance, ns_set_transparent_titlebar, @@ -1436,6 +1437,8 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side. RES_TYPE_NUMBER); gui_default_parameter (f, parms, Qalpha, Qnil, "alpha", "Alpha", RES_TYPE_NUMBER); + gui_default_parameter (f, parms, Qalpha_background, Qnil, + "alphaBackground", "AlphaBackground", RES_TYPE_NUMBER); gui_default_parameter (f, parms, Qfullscreen, Qnil, "fullscreen", "Fullscreen", RES_TYPE_SYMBOL); diff --git a/src/pgtkfns.c b/src/pgtkfns.c index 9c37c04810..5980b31d6e 100644 --- a/src/pgtkfns.c +++ b/src/pgtkfns.c @@ -1043,6 +1043,7 @@ frames (each of which corresponds to one page). Each frame should be x_set_z_group, x_set_override_redirect, gui_set_no_special_glyphs, + gui_set_alpha_background, }; @@ -1667,6 +1668,8 @@ #define INSTALL_CURSOR(FIELD, NAME) \ RES_TYPE_NUMBER); gui_default_parameter (f, parms, Qalpha, Qnil, "alpha", "Alpha", RES_TYPE_NUMBER); + gui_default_parameter (f, parms, Qalpha, Qnil, + "alphaBackground", "AlphaBackground", RES_TYPE_NUMBER); if (!NILP (parent_frame)) { @@ -2936,6 +2939,8 @@ x_create_tip_frame (struct pgtk_display_info *dpyinfo, Lisp_Object parms, struct "cursorType", "CursorType", RES_TYPE_SYMBOL); gui_default_parameter (f, parms, Qalpha, Qnil, "alpha", "Alpha", RES_TYPE_NUMBER); + gui_default_parameter (f, parms, Qalpha_background, Qnil, + "alphaBackground", "AlphaBackground", RES_TYPE_NUMBER); /* Add `tooltip' frame parameter's default value. */ if (NILP (Fframe_parameter (frame, Qtooltip))) diff --git a/src/w32fns.c b/src/w32fns.c index 1ea685d194..009855602e 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -6018,6 +6018,8 @@ DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame, NULL, NULL, RES_TYPE_BOOLEAN); gui_default_parameter (f, parameters, Qno_special_glyphs, Qnil, NULL, NULL, RES_TYPE_BOOLEAN); + gui_default_parameter (f, parameters, Qalpha_background, Qnil, + "alphaBackground", "AlphaBackground", RES_TYPE_NUMBER); /* Process alpha here (Bug#16619). On XP this fails with child frames. For `no-focus-on-map' frames delay processing of alpha @@ -6155,6 +6157,9 @@ DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame, gui_default_parameter (f, parameters, Qz_group, Qnil, NULL, NULL, RES_TYPE_SYMBOL); + gui_default_parameter (f, parameters, Qalpha_background, Qnil, + "alphaBackground", "AlphaBackground", RES_TYPE_NUMBER); + /* Make the window appear on the frame and enable display, unless the caller says not to. However, with explicit parent, Emacs cannot control visibility, so don't try. */ @@ -7089,6 +7094,8 @@ w32_create_tip_frame (struct w32_display_info *dpyinfo, Lisp_Object parms) /* Process alpha here (Bug#17344). */ gui_default_parameter (f, parms, Qalpha, Qnil, "alpha", "Alpha", RES_TYPE_NUMBER); + gui_default_parameter (f, parms, Qalpha_background, Qnil, + "alphaBackground", "AlphaBackground", RES_TYPE_NUMBER); /* Add `tooltip' frame parameter's default value. */ if (NILP (Fframe_parameter (frame, Qtooltip))) @@ -10436,6 +10443,7 @@ w32_get_resource (const char *key, const char *name, LPDWORD lpdwtype) w32_set_z_group, 0, /* x_set_override_redirect */ gui_set_no_special_glyphs, + gui_set_alpha_background, }; void diff --git a/src/xfns.c b/src/xfns.c index faab1b1158..2f2e33fa69 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -4598,6 +4598,8 @@ DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame, RES_TYPE_NUMBER); gui_default_parameter (f, parms, Qalpha, Qnil, "alpha", "Alpha", RES_TYPE_NUMBER); + gui_default_parameter (f, parms, Qalpha_background, Qnil, + "alphaBackground", "AlphaBackground", RES_TYPE_NUMBER); if (!NILP (parent_frame)) { @@ -6371,10 +6373,29 @@ select_visual (struct x_display_info *dpyinfo) int n_visuals; XVisualInfo *vinfo, vinfo_template; - dpyinfo->visual = DefaultVisualOfScreen (screen); + vinfo_template.screen = XScreenNumberOfScreen (screen); + +#if defined (USE_GTK) + /* First attempt to use 32-bit visual if available */ + + vinfo_template.depth = 32; + + vinfo = XGetVisualInfo (dpy, VisualScreenMask | VisualDepthMask, + &vinfo_template, &n_visuals); + if (n_visuals > 0) + { + dpyinfo->n_planes = vinfo->depth; + dpyinfo->visual = vinfo->visual; + XFree (vinfo); + return; + } + +#endif /* defined (USE_GTK) */ + + /* 32-bit visual not available, fallback to default visual */ + dpyinfo->visual = DefaultVisualOfScreen (screen); vinfo_template.visualid = XVisualIDFromVisual (dpyinfo->visual); - vinfo_template.screen = XScreenNumberOfScreen (screen); vinfo = XGetVisualInfo (dpy, VisualIDMask | VisualScreenMask, &vinfo_template, &n_visuals); if (n_visuals <= 0) @@ -7232,6 +7253,8 @@ x_create_tip_frame (struct x_display_info *dpyinfo, Lisp_Object parms) "cursorType", "CursorType", RES_TYPE_SYMBOL); gui_default_parameter (f, parms, Qalpha, Qnil, "alpha", "Alpha", RES_TYPE_NUMBER); + gui_default_parameter (f, parms, Qalpha_background, Qnil, + "alphaBackground", "AlphaBackground", RES_TYPE_NUMBER); /* Add `tooltip' frame parameter's default value. */ if (NILP (Fframe_parameter (frame, Qtooltip))) @@ -8560,6 +8583,7 @@ DEFUN ("x-gtk-debug", Fx_gtk_debug, Sx_gtk_debug, 1, 1, 0, x_set_z_group, x_set_override_redirect, gui_set_no_special_glyphs, + gui_set_alpha_background, }; void diff --git a/src/xterm.c b/src/xterm.c index 3f277c5b87..ab5fd46c4c 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -874,12 +874,27 @@ x_set_cr_source_with_gc_background (struct frame *f, GC gc) { XGCValues xgcv; XColor color; + unsigned int depth; XGetGCValues (FRAME_X_DISPLAY (f), gc, GCBackground, &xgcv); color.pixel = xgcv.background; + x_query_colors (f, &color, 1); - cairo_set_source_rgb (FRAME_CR_CONTEXT (f), color.red / 65535.0, - color.green / 65535.0, color.blue / 65535.0); + + depth = FRAME_DISPLAY_INFO (f)->n_planes; + + if (f->alpha_background < 1.0 && depth == 32) + { + cairo_set_source_rgba (FRAME_CR_CONTEXT (f), color.red / 65535.0, + color.green / 65535.0, color.blue / 65535.0, + f->alpha_background); + + cairo_set_operator (FRAME_CR_CONTEXT (f), CAIRO_OPERATOR_SOURCE); + } + else + cairo_set_source_rgb (FRAME_CR_CONTEXT (f), color.red / 65535.0, + color.green / 65535.0, color.blue / 65535.0); + } static const cairo_user_data_key_t xlib_surface_key, saved_drawable_key; @@ -1318,6 +1333,29 @@ x_fill_rectangle (struct frame *f, GC gc, int x, int y, int width, int height) #endif } + +static void +x_clear_rectangle (struct frame *f, GC gc, int x, int y, int width, int height) +{ +#ifdef USE_CAIRO + cairo_t *cr; + + cr = x_begin_cr_clip (f, gc); + x_set_cr_source_with_gc_background (f, gc); + cairo_rectangle (cr, x, y, width, height); + cairo_fill (cr); + x_end_cr_clip (f); +#else + XGCValues xgcv; + Display *dpy = FRAME_X_DISPLAY (f); + XGetGCValues (dpy, gc, GCBackground | GCForeground, &xgcv); + XSetForeground (dpy, gc, xgcv.background); + XFillRectangle (dpy, FRAME_X_DRAWABLE (f), + gc, x, y, width, height); + XSetForeground (dpy, gc, xgcv.foreground); +#endif +} + static void x_draw_rectangle (struct frame *f, GC gc, int x, int y, int width, int height) { @@ -1898,9 +1936,9 @@ x_draw_fringe_bitmap (struct window *w, struct glyph_row *row, struct draw_fring if (face->stipple) XSetFillStyle (display, face->gc, FillOpaqueStippled); else - XSetForeground (display, face->gc, face->background); + XSetBackground (display, face->gc, face->background); - x_fill_rectangle (f, face->gc, p->bx, p->by, p->nx, p->ny); + x_clear_rectangle (f, face->gc, p->bx, p->by, p->nx, p->ny); if (!face->stipple) XSetForeground (display, face->gc, face->foreground); @@ -2201,12 +2239,7 @@ x_compute_glyph_string_overhangs (struct glyph_string *s) static void x_clear_glyph_string_rect (struct glyph_string *s, int x, int y, int w, int h) { - Display *display = FRAME_X_DISPLAY (s->f); - XGCValues xgcv; - XGetGCValues (display, s->gc, GCForeground | GCBackground, &xgcv); - XSetForeground (display, s->gc, xgcv.background); - x_fill_rectangle (s->f, s->gc, x, y, w, h); - XSetForeground (display, s->gc, xgcv.foreground); + x_clear_rectangle (s->f, s->gc, x, y, w, h); } --=-=-=--