Garry R. Osgood
Sun, 19 Nov 2000 13:16:37 -0800
Simon, Raphael, All... I have attached a patch to gtk+-1.2.8/gdk/gdkinputcommon.h that modifies gdk_input_common_find_events() so that it will simply select device-specific event classes, given an event_mask of GDK_XXXX_MASK values, without imposing relationships among events. Ants march. I no longer see diversionary menus fly in my face, and gimp otherwise seems to work well on the SGI's and the Linux laptop. I'd appreciate it if any sufferers of #10498 could try it out and see (1) if #10498 goes away and (2) brand new strangeness does not arise in gimp or other applications. Post feedback/problems here. I'd like to submit this (or something very much like this), 2000-11-22, to the GTK+ crew. The GTK+ bug describing this GTK+/GDK issue, which #10498 has a dependency on, is #32617 "gdk_pointer_grab() Behaves Differently for X Input Events" Austin Donnelly wrote: [Fri, 17 Nov 2000 15:07:29 +0000] >> We would like a new GTK release for one other reason: the g_io_channel >> handlers needed an new error code, and we supplied TimJ with a patch >> to implement this. Having this in GTK would mean we can get rid of >> the mega-evil hack in the Gimp's g_io_channel use. Has that patch >> gone into GTK yet? I saw no evidence of a GTK bug report covering this in the gnome database/gtk+ list. I recall that you and Tim discussing it at Berlin last summer; is the gio_channels patch being handled informally? Marc Lehmann wrote: [Fri, 17 Nov 2000 19:16:01 +0100] >> > 1) Document, warn, but otherwise ignore the problem. >> > >> Probably the only viable way to go for 1.2, unless gtk+ can be fixed in >> time. Maybe the best thing would be to issue a warning dialog ONCE. >> > >> > 3) Re-engineer select tool code to be more robust in button >> >> That's out of the question for 1.2, I think. I lean toward 1), since a tentative patch is in hand, I feed no motivation to do complicated things at the gimp level. I have no idea how long this patch (or something like it) migrates into production. The largest concern I have in that regard is some application having a dependency on old gdk_input_common_find_event() behaviour. Be good, be well Garry
--- /alice/WorkSpace/gtk+-1.2.8/gdk/gdkinputcommon.h-orig Sat Nov 27 02:51:24
1999
+++ /alice/WorkSpace/gdkinputcommon.h Sun Nov 19 14:09:36 2000
@@ -315,18 +315,17 @@
XEventClass class;
i = 0;
- /* We have to track press and release events in pairs to keep
- track of button state correctly and implement grabbing for
- the gxi support */
- if (mask & GDK_BUTTON_PRESS_MASK || mask & GDK_BUTTON_RELEASE_MASK)
+
+ if (mask & GDK_BUTTON_PRESS_MASK)
{
DeviceButtonPress (gdkdev->xdevice, gdkdev->buttonpress_type,
class);
if (class != 0)
classes[i++] = class;
- DeviceButtonPressGrab (gdkdev->xdevice, 0, class);
- if (class != 0)
- classes[i++] = class;
+ }
+
+ if (mask & GDK_BUTTON_RELEASE_MASK)
+ {
DeviceButtonRelease (gdkdev->xdevice, gdkdev->buttonrelease_type,
class);
if (class != 0)