diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/keybindings.c | 7 | ||||
-rw-r--r-- | src/prefs.c | 1 | ||||
-rw-r--r-- | src/ui.c | 19 | ||||
-rw-r--r-- | src/ui.h | 3 |
4 files changed, 29 insertions, 1 deletions
diff --git a/src/keybindings.c b/src/keybindings.c index aecb448..b128fdc 100644 --- a/src/keybindings.c +++ b/src/keybindings.c @@ -1276,8 +1276,13 @@ meta_display_process_key_event (MetaDisplay *display, if (screen == NULL) return; /* event window is destroyed */ + + /* ignore key events on popup menus and such. */ + if (window == NULL && + meta_ui_window_is_widget (screen->ui, event->xany.window)) + return; - /* window may be NULL */ + /* window may be NULL */ keysym = XKeycodeToKeysym (display->xdisplay, event->xkey.keycode, 0); diff --git a/src/prefs.c b/src/prefs.c index 770accd..9a9b59f 100644 --- a/src/prefs.c +++ b/src/prefs.c @@ -542,6 +542,7 @@ change_notify (GConfClient *client, out: /* nothing */ + return; /* AIX compiler wants something after a label like out: */ } static gboolean @@ -662,3 +662,22 @@ meta_ui_parse_accelerator (const char *accel, return TRUE; } + +gboolean +meta_ui_window_is_widget (MetaUI *ui, + Window xwindow) +{ + GdkWindow *window; + + window = gdk_xid_table_lookup (xwindow); + + if (window && + gdk_window_get_window_type (window) != GDK_WINDOW_FOREIGN) + { + void *user_data = NULL; + gdk_window_get_user_data (window, &user_data); + return user_data != NULL; + } + else + return FALSE; +} @@ -157,6 +157,9 @@ gboolean meta_ui_parse_accelerator (const char *accel, unsigned int *keysym, MetaVirtualModifier *mask); +gboolean meta_ui_window_is_widget (MetaUI *ui, + Window xwindow); + #include "tabpopup.h" #endif |