Index: app/display/gimpdisplayshell-callbacks.c =================================================================== RCS file: /cvs/gnome/gimp/app/display/gimpdisplayshell-callbacks.c,v retrieving revision 1.240 diff -u -p -r1.240 gimpdisplayshell-callbacks.c --- app/display/gimpdisplayshell-callbacks.c 10 Mar 2004 15:32:27 -0000 1.240 +++ app/display/gimpdisplayshell-callbacks.c 10 Mar 2004 16:25:01 -0000 @@ -133,6 +133,29 @@ gimp_display_shell_events (GtkWidget if (gimp->busy) return TRUE; +#ifdef G_OS_WIN32 + /* work around missing GDK_BUTTON*_MASK bits in GdkEventKey::state + * (see http://bugzilla.gnome.org/show_bug.cgi?id=136636) + */ + { + GdkModifierType mouse_mask; + + gdk_device_get_state (gimp_devices_get_current (gimp), + widget->window, NULL, &mouse_mask); + + if (mouse_mask & GDK_BUTTON1_MASK) + kevent->state |= GDK_BUTTON1_MASK; + if (mouse_mask & GDK_BUTTON2_MASK) + kevent->state |= GDK_BUTTON2_MASK; + if (mouse_mask & GDK_BUTTON3_MASK) + kevent->state |= GDK_BUTTON3_MASK; + if (mouse_mask & GDK_BUTTON4_MASK) + kevent->state |= GDK_BUTTON4_MASK; + if (mouse_mask & GDK_BUTTON5_MASK) + kevent->state |= GDK_BUTTON5_MASK; + } +#endif /* G_OS_WIN32 */ + /* do not process any key events while BUTTON1 is down. We do this * so tools keep the modifier state they were in when BUTTON1 was * pressed and to prevent accelerators from being invoked.