summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/keybindings.c7
-rw-r--r--src/prefs.c1
-rw-r--r--src/ui.c19
-rw-r--r--src/ui.h3
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
diff --git a/src/ui.c b/src/ui.c
index 0d95af0..3e3e619 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -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;
+}
diff --git a/src/ui.h b/src/ui.h
index 1296338..d671f21 100644
--- a/src/ui.h
+++ b/src/ui.h
@@ -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