Tk Source Code

Check-in [92b9ecc3]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:[Bug 3599312]: Apply fix for Alt key problems.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | core-8-5-branch
Files: files | file ages | folders
SHA1: 92b9ecc3f8ac2ffa2954926f056c38ec55cd1920
User & Date: dkf 2013-02-28 09:07:06
Context
2013-02-28
09:35
minor: tidy up change log formatting check-in: 5a0a5e30 user: dkf tags: core-8-5-branch
09:10
[Bug 3599312]: Apply fix for Alt key problems. check-in: 3972832e user: dkf tags: trunk
09:07
[Bug 3599312]: Apply fix for Alt key problems. check-in: 92b9ecc3 user: dkf tags: core-8-5-branch
2013-02-15
16:04
Extend the public and private stub tables with dummy NULL entries, up to the size of the Tk 8.6 stub tables. This makes it easier to debug Tk extensions which use Tk 8.6 features but (erroneously) are attempted to be loaded in wish8.5 check-in: c1fb112b user: jan.nijtmans tags: core-8-5-branch
2013-01-07
14:44
The proposed fix from Bug 3599312, which should make key map handling interact better with input methods. Note that this does not work on OSX (in X11 mode) because that handles the Alt key in its own special way. Closed-Leaf check-in: 4bb01e25 user: dkf tags: bug-3599312
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to ChangeLog.








1
2
3
4
5
6
7







2013-01-16  Jan Nijtmans  <[email protected]>

	* win/Makefile.in: Don't compile Tk with -DTCL_NO_DEPRECATED by default
	* unix/Makefile.in: any more, it might hurt when we compile Tk 8.x
	against Tcl 8.y with y > x, because new deprecated constructs might be
	added in higher Tcl versions (except for Tk 8.6, for now, because there
	is no higher 8.x yet)
>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
2013-02-28  Donal K. Fellows  <[email protected]>

	* unix/tkUnixKey.c (TkpGetKeySym): [Bug 3599312]: Put the
	initialization of the key mapping before the input method handling
	so that Alt key handling is correct on non-OSX Unix. Thanks to
	Colin McDonald for developing the fix.

2013-01-16  Jan Nijtmans  <[email protected]>

	* win/Makefile.in: Don't compile Tk with -DTCL_NO_DEPRECATED by default
	* unix/Makefile.in: any more, it might hurt when we compile Tk 8.x
	against Tcl 8.y with y > x, because new deprecated constructs might be
	added in higher Tcl versions (except for Tk 8.6, for now, because there
	is no higher 8.x yet)

Changes to unix/tkUnixKey.c.

280
281
282
283
284
285
286









287
288
289
290
291
292
293
294
295
296
297
298
299

300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
TkpGetKeySym(
    TkDisplay *dispPtr,		/* Display in which to map keycode. */
    XEvent *eventPtr)		/* Description of X event. */
{
    KeySym sym;
    int index;
    TkKeyEvent* kePtr = (TkKeyEvent*) eventPtr;










#ifdef TK_USE_INPUT_METHODS
    /*
     * If input methods are active, we may already have determined a keysym.
     * Return it.
     */

    if (eventPtr->type == KeyPress && dispPtr
	    && (dispPtr->flags & TK_DISPLAY_USE_IM)) {
	if (kePtr->charValuePtr == NULL) {
	    Tcl_DString ds;
	    TkWindow *winPtr = (TkWindow *)
		Tk_IdToWindow(eventPtr->xany.display, eventPtr->xany.window);

	    Tcl_DStringInit(&ds);
	    (void) TkpGetString(winPtr, eventPtr, &ds);
	    Tcl_DStringFree(&ds);
	}
	if (kePtr->charValuePtr != NULL) {
	    return kePtr->keysym;
	}
    }
#endif

    /*
     * Refresh the mapping information if it's stale
     */

    if (dispPtr->bindInfoStale) {
	TkpInitKeymapInfo(dispPtr);
    }

    /*
     * Figure out which of the four slots in the keymap vector to use for this
     * key. Refer to Xlib documentation for more info on how this computation
     * works.
     */

    index = 0;







>
>
>
>
>
>
>
>
>













>










<
<
<
<
<
<
<
<







280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319








320
321
322
323
324
325
326
TkpGetKeySym(
    TkDisplay *dispPtr,		/* Display in which to map keycode. */
    XEvent *eventPtr)		/* Description of X event. */
{
    KeySym sym;
    int index;
    TkKeyEvent* kePtr = (TkKeyEvent*) eventPtr;

    /*
     * Refresh the mapping information if it's stale. This must happen before
     * we do any input method processing. [Bug 3599312]
     */

    if (dispPtr->bindInfoStale) {
	TkpInitKeymapInfo(dispPtr);
    }

#ifdef TK_USE_INPUT_METHODS
    /*
     * If input methods are active, we may already have determined a keysym.
     * Return it.
     */

    if (eventPtr->type == KeyPress && dispPtr
	    && (dispPtr->flags & TK_DISPLAY_USE_IM)) {
	if (kePtr->charValuePtr == NULL) {
	    Tcl_DString ds;
	    TkWindow *winPtr = (TkWindow *)
		Tk_IdToWindow(eventPtr->xany.display, eventPtr->xany.window);

	    Tcl_DStringInit(&ds);
	    (void) TkpGetString(winPtr, eventPtr, &ds);
	    Tcl_DStringFree(&ds);
	}
	if (kePtr->charValuePtr != NULL) {
	    return kePtr->keysym;
	}
    }
#endif









    /*
     * Figure out which of the four slots in the keymap vector to use for this
     * key. Refer to Xlib documentation for more info on how this computation
     * works.
     */

    index = 0;