]> Pileus Git - ~andy/gtk/commitdiff
XIM: Don't force random windows to become native
authorMatthias Clasen <mclasen@redhat.com>
Mon, 1 Oct 2012 00:33:38 +0000 (20:33 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 2 Oct 2012 02:12:07 +0000 (22:12 -0400)
GDK_WINDOW_XID() has the side-effect of turning a window native;
this in turn can have unexpected effects such as black backgrounds.
Avoid this by using the XID of the toplevel.
https://bugzilla.gnome.org/show_bug.cgi?id=682395

modules/input/gtkimcontextxim.c

index 1a32e5abfd5671efb4bed7e9e354567381c964ec..6a20b60e7f9c9bfcee491b9a2c4f9d8684920223 100644 (file)
@@ -697,18 +697,21 @@ gtk_im_context_xim_filter_keypress (GtkIMContext *context,
   KeySym keysym;
   Status status;
   gboolean result = FALSE;
-  GdkWindow *root_window = gdk_screen_get_root_window (gdk_window_get_screen (event->window));
-
+  GdkWindow *root_window;
+  GdkWindow *window;
   XKeyPressedEvent xevent;
 
   if (event->type == GDK_KEY_RELEASE && !context_xim->filter_key_release)
     return FALSE;
 
+  root_window = gdk_screen_get_root_window (gdk_window_get_screen (event->window));
+  window = gdk_window_get_toplevel (event->window);
+
   xevent.type = (event->type == GDK_KEY_PRESS) ? KeyPress : KeyRelease;
   xevent.serial = 0;           /* hope it doesn't matter */
   xevent.send_event = event->send_event;
-  xevent.display = GDK_WINDOW_XDISPLAY (event->window);
-  xevent.window = GDK_WINDOW_XID (event->window);
+  xevent.display = GDK_WINDOW_XDISPLAY (window);
+  xevent.window = GDK_WINDOW_XID (window);
   xevent.root = GDK_WINDOW_XID (root_window);
   xevent.subwindow = xevent.window;
   xevent.time = event->time;