2008-08-06 07:50:19 +00:00
|
|
|
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 {
|
2008-08-04 12:33:10 +00:00
|
|
|
* 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 */
|
2008-08-06 07:50:19 +00:00
|
|
|
@@ -113,7 +113,10 @@ static unsigned long eventMasks[TK_LASTE
|
2008-08-04 12:33:10 +00:00
|
|
|
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 */
|
2008-08-06 07:50:19 +00:00
|
|
|
@@ -489,7 +492,7 @@ GetTkWindowFromXEvent(
|
2008-08-04 12:33:10 +00:00
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*
|
2008-08-06 07:50:19 +00:00
|
|
|
@@ -506,7 +509,23 @@ static unsigned long
|
2008-08-04 12:33:10 +00:00
|
|
|
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) {
|
2008-08-06 07:50:19 +00:00
|
|
|
+ mask = realEventMasks[eventPtr->xany.type];
|
2008-08-04 12:33:10 +00:00
|
|
|
+ } else if (eventPtr->xany.type >= VirtualEvent
|
|
|
|
+ && eventPtr->xany.type<TK_LASTEVENT) {
|
2008-08-06 07:50:19 +00:00
|
|
|
+ mask = virtualEventMasks[eventPtr->xany.type - VirtualEvent];
|
|
|
|
+ } else {
|
|
|
|
+ mask = 0;
|
2008-08-04 12:33:10 +00:00
|
|
|
+ }
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Events selected by StructureNotify require special handling. They look
|
2008-08-06 07:50:19 +00:00
|
|
|
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 {
|
|
|
|
*---------------------------------------------------------------------------
|
|
|
|
*/
|
2008-08-04 12:33:10 +00:00
|
|
|
|
2008-08-06 07:50:19 +00:00
|
|
|
-#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
|