SOURCES: tk-genericevent.patch (NEW) - fix for "no event type or button # o...

draenog draenog at pld-linux.org
Fri Aug 8 17:47:52 CEST 2008


Author: draenog                      Date: Fri Aug  8 15:47:52 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- fix for "no event type or button # or keysym while executing 
  "bind Listbox <MouseWheel> [...]"
- taken from Fedora cvs

---- Files affected:
SOURCES:
   tk-genericevent.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/tk-genericevent.patch
diff -u /dev/null SOURCES/tk-genericevent.patch:1.1
--- /dev/null	Fri Aug  8 17:47:53 2008
+++ SOURCES/tk-genericevent.patch	Fri Aug  8 17:47:47 2008
@@ -0,0 +1,84 @@
+diff -up tk8.5.3/generic/tkEvent.c.crash1 tk8.5.3/generic/tkEvent.c
+--- tk8.5.3/generic/tkEvent.c.crash1	2008-03-26 20:04:09.000000000 +0100
++++ tk8.5.3/generic/tkEvent.c	2008-08-06 09:47:03.000000000 +0200
+@@ -75,7 +75,7 @@ typedef struct TkWindowEvent {
+  * Array of event masks corresponding to each X event:
+  */
+ 
+-static unsigned long eventMasks[TK_LASTEVENT] = {
++static unsigned long realEventMasks[MappingNotify+1] = {
+     0,
+     0,
+     KeyPressMask,			/* KeyPress */
+@@ -113,7 +113,10 @@ static unsigned long eventMasks[TK_LASTE
+     0,					/* SelectionNotify */
+     ColormapChangeMask,			/* ColormapNotify */
+     0,					/* ClientMessage */
+-    0,					/* Mapping Notify */
++    0					/* Mapping Notify */
++};
++
++static unsigned long virtualEventMasks[TK_LASTEVENT-VirtualEvent] = {
+     VirtualEventMask,			/* VirtualEvents */
+     ActivateMask,			/* ActivateNotify */
+     ActivateMask,			/* DeactivateNotify */
+@@ -489,7 +492,7 @@ GetTkWindowFromXEvent(
+  *
+  * GetEventMaskFromXEvent --
+  *
+- *	The event type is looked up in our eventMasks table, and may be
++ *	The event type is looked up in our eventMasks tables, and may be
+  *	changed to a different mask depending on the state of the event and
+  *	window members.
+  *
+@@ -506,7 +509,23 @@ static unsigned long
+ GetEventMaskFromXEvent(
+     XEvent *eventPtr)
+ {
+-    unsigned long mask = eventMasks[eventPtr->xany.type];
++    unsigned long mask;
++
++    /*
++     * Get the event mask from the correct table. Note that there are two
++     * tables here because that means we no longer need this code to rely on
++     * the exact value of VirtualEvent, which has caused us problems in the
++     * past when X11 changed the value of LASTEvent. [Bug ???]
++     */
++
++    if (eventPtr->xany.type <= MappingNotify) {
++	    mask = realEventMasks[eventPtr->xany.type];
++    } else if (eventPtr->xany.type >= VirtualEvent
++	    && eventPtr->xany.type<TK_LASTEVENT) {
++	    mask = virtualEventMasks[eventPtr->xany.type - VirtualEvent]; 
++    } else {
++        mask = 0;
++    }
+ 
+     /*
+      * Events selected by StructureNotify require special handling. They look
+diff -up tk8.5.3/generic/tk.h.crash1 tk8.5.3/generic/tk.h
+--- tk8.5.3/generic/tk.h.crash1	2008-06-30 05:37:37.000000000 +0200
++++ tk8.5.3/generic/tk.h	2008-08-06 09:47:40.000000000 +0200
+@@ -627,17 +627,15 @@ typedef struct Tk_GeomMgr {
+  *---------------------------------------------------------------------------
+  */
+ 
+-#define VirtualEvent	    (LASTEvent)
+-#define ActivateNotify	    (LASTEvent + 1)
+-#define DeactivateNotify    (LASTEvent + 2)
+-#define MouseWheelEvent     (LASTEvent + 3)
+-#define TK_LASTEVENT	    (LASTEvent + 4)
++#define VirtualEvent	    (MappingNotify + 1)
++#define ActivateNotify	    (MappingNotify + 2)
++#define DeactivateNotify    (MappingNotify + 3)
++#define MouseWheelEvent     (MappingNotify + 4)
++#define TK_LASTEVENT	    (MappingNotify + 5)
+ 
+ #define MouseWheelMask	    (1L << 28)
+-
+ #define ActivateMask	    (1L << 29)
+ #define VirtualEventMask    (1L << 30)
+-#define TK_LASTEVENT	    (LASTEvent + 4)
+ 
+ /*
+  * A virtual event shares most of its fields with the XKeyEvent and
================================================================


More information about the pld-cvs-commit mailing list