| Ticket UUID: | 6bdf1a7ec35114f7475ed9f1efb9d74ba6f831a5 | |||
| Title: | Bind mechanism vs. GNOME | |||
| Type: | Bug | Version: | 9 | |
| Submitter: | chw | Created on: | 2024-12-08 06:47:57 | |
| Subsystem: | 69. Events | Assigned To: | jan.nijtmans | |
| Priority: | 5 Medium | Severity: | Important | |
| Status: | Closed | Last Modified: | 2024-12-10 11:31:16 | |
| Resolution: | Fixed | Closed By: | jan.nijtmans | |
| Closed on: | 2024-12-10 11:31:16 | |||
| Description: |
The GNOME keyboard infrastructure badly interacts with Tk 9.x when
multiple keyboard maps can be chosen by GNOME menu and the currently
selected map asserts the modifier masks 0x2000 and/or 0x4000. These
masks happen to be the modifiers for Button6 and Button7 in Tk.
On my laptop I have this situation:
German -> 0x0000
German (eliminate dead keys) -> 0x2000
English (US) -> 0x4000
English (UK) -> 0x0000
French -> 0X2000
The effect can be observed with the widget demo, whose links to the
various demos in the front page cannot be activated when certain
keyboard maps are selected.
Other desktop environments (KDE?, XFCE?...) are possibly affected, too.
The following patch moves the Button6 and Button7 modifiers out of the
way (but experts, I'm very unsure that this is the correct solution,
so please review it).
Index: generic/tkInt.h
==================================================================
--- generic/tkInt.h
+++ generic/tkInt.h
@@ -1035,14 +1035,22 @@
#ifndef Button9
# define Button9 9
#endif
#ifndef Button6Mask
+#if !(defined(_WIN32) && !defined(MAC_OSX_TK))
+# define Button6Mask (AnyModifier<<6)
+#else
# define Button6Mask (1<<13)
+#endif
#endif
#ifndef Button7Mask
+#if !(defined(_WIN32) && !defined(MAC_OSX_TK))
+# define Button7Mask (AnyModifier<<7)
+#else
# define Button7Mask (1<<14)
+#endif
#endif
#ifndef Button8Mask
# define Button8Mask (AnyModifier<<4)
#endif
#ifndef Button9Mask
| |||
| User Comments: |
jan.nijtmans added on 2024-12-10 11:31:16:
I'm OK with that. Thanks! chw added on 2024-12-08 22:37:31: OK, Jan, but then what about being somewhat more consequent
and make it like so (proof of concept):
/*
* The Button<B>Mask modifieres for <B> in {6 7 8 9}
* are internally used by Tk. They must be above the
* AnyModifier bit since anything below is reserved
* for the X protocol.
*/
#define Button6Mask (AnyModifier<<6)
#define Button7Mask (AnyModifier<<7)
#define Button8Mask (AnyModifier<<8)
#define Button9Mask (AnyModifier<<9)
jan.nijtmans added on 2024-12-08 22:12:16: Thanks for noting this! Your solution is fine: the "Button6Mask" and "Button7Mask" defines are only used internally in Tk. It's purpose is to be able to move the bits to somewhere else, if the necessity arises. Fixed[4166cb483d55085b|here]. This will be in Tk 9.0.1. | |||
Home
Timeline
Branches
Tags
Forum
Tickets
Download
Wiki