@@ -264,11 +264,13 @@ update_kbd_cb (GSettings *settings,
264264 MsdMediaKeysManager * manager )
265265{
266266 int i ;
267+ GdkDisplay * dpy ;
267268 gboolean need_flush = TRUE;
268269
269270 g_return_if_fail (settings_key != NULL );
270271
271- gdk_error_trap_push ();
272+ dpy = gdk_display_get_default ();
273+ gdk_x11_display_error_trap_push (dpy );
272274
273275 /* Find the key that was modified */
274276 for (i = 0 ; i < HANDLED_KEYS ; i ++ ) {
@@ -313,19 +315,21 @@ update_kbd_cb (GSettings *settings,
313315 }
314316
315317 if (need_flush )
316- gdk_flush ( );
317- if (gdk_error_trap_pop ( ))
318+ gdk_display_flush ( dpy );
319+ if (gdk_x11_display_error_trap_pop ( dpy ))
318320 g_warning ("Grab failed for some keys, another application may already have access the them." );
319321}
320322
321323static void init_kbd (MsdMediaKeysManager * manager )
322324{
323325 int i ;
326+ GdkDisplay * dpy ;
324327 gboolean need_flush = FALSE;
325328
326329 mate_settings_profile_start (NULL );
327330
328- gdk_error_trap_push ();
331+ dpy = gdk_display_get_default ();
332+ gdk_x11_display_error_trap_push (dpy );
329333
330334 for (i = 0 ; i < HANDLED_KEYS ; i ++ )
331335 {
@@ -373,10 +377,10 @@ static void init_kbd(MsdMediaKeysManager* manager)
373377
374378 if (need_flush )
375379 {
376- gdk_flush ( );
380+ gdk_display_flush ( dpy );
377381 }
378382
379- if (gdk_error_trap_pop ( ))
383+ if (gdk_x11_display_error_trap_pop ( dpy ))
380384 {
381385 g_warning ("Grab failed for some keys, another application may already have access the them." );
382386 }
@@ -1057,7 +1061,7 @@ acme_filter_events (GdkXEvent *xevent,
10571061 int i ;
10581062
10591063 /* verify we have a key event */
1060- if (xev -> type != KeyPress && xev -> type != KeyRelease ) {
1064+ if (xev -> type != KeyPress ) {
10611065 return GDK_FILTER_CONTINUE ;
10621066 }
10631067
@@ -1071,10 +1075,6 @@ acme_filter_events (GdkXEvent *xevent,
10711075 return GDK_FILTER_CONTINUE ;
10721076 }
10731077 break ;
1074- default :
1075- if (xev -> type != KeyRelease ) {
1076- return GDK_FILTER_CONTINUE ;
1077- }
10781078 }
10791079
10801080 manager -> priv -> current_screen = acme_get_screen_from_event (manager , xany );
@@ -1094,9 +1094,15 @@ static gboolean
10941094start_media_keys_idle_cb (MsdMediaKeysManager * manager )
10951095{
10961096 GSList * l ;
1097+ GdkDisplay * dpy ;
1098+ Display * xdpy ;
10971099
10981100 g_debug ("Starting media_keys manager" );
10991101 mate_settings_profile_start (NULL );
1102+
1103+ dpy = gdk_display_get_default ();
1104+ xdpy = GDK_DISPLAY_XDISPLAY (dpy );
1105+
11001106 manager -> priv -> volume_monitor = g_volume_monitor_get ();
11011107 manager -> priv -> settings = g_settings_new (BINDING_SCHEMA );
11021108
@@ -1105,14 +1111,28 @@ start_media_keys_idle_cb (MsdMediaKeysManager *manager)
11051111
11061112 /* Start filtering the events */
11071113 for (l = manager -> priv -> screens ; l != NULL ; l = l -> next ) {
1114+ GdkWindow * window ;
1115+ Window xwindow ;
1116+ XWindowAttributes atts ;
1117+
11081118 mate_settings_profile_start ("gdk_window_add_filter" );
11091119
1120+ window = gdk_screen_get_root_window (l -> data );
1121+ xwindow = GDK_WINDOW_XID (window );
1122+
11101123 g_debug ("adding key filter for screen: %d" ,
11111124 gdk_x11_screen_get_screen_number (l -> data ));
11121125
1113- gdk_window_add_filter (gdk_screen_get_root_window ( l -> data ) ,
1126+ gdk_window_add_filter (window ,
11141127 (GdkFilterFunc )acme_filter_events ,
11151128 manager );
1129+
1130+ gdk_x11_display_error_trap_push (dpy );
1131+ /* Add KeyPressMask to the currently reportable event masks */
1132+ XGetWindowAttributes (xdpy , xwindow , & atts );
1133+ XSelectInput (xdpy , xwindow , atts .your_event_mask | KeyPressMask );
1134+ gdk_x11_display_error_trap_pop_ignored (dpy );
1135+
11161136 mate_settings_profile_end ("gdk_window_add_filter" );
11171137 }
11181138
@@ -1161,6 +1181,7 @@ void
11611181msd_media_keys_manager_stop (MsdMediaKeysManager * manager )
11621182{
11631183 MsdMediaKeysManagerPrivate * priv = manager -> priv ;
1184+ GdkDisplay * dpy ;
11641185 GSList * ls ;
11651186 GList * l ;
11661187 int i ;
@@ -1190,7 +1211,8 @@ msd_media_keys_manager_stop (MsdMediaKeysManager *manager)
11901211 }
11911212
11921213 need_flush = FALSE;
1193- gdk_error_trap_push ();
1214+ dpy = gdk_display_get_default ();
1215+ gdk_x11_display_error_trap_push (dpy );
11941216
11951217 for (i = 0 ; i < HANDLED_KEYS ; ++ i ) {
11961218 if (keys [i ].key ) {
@@ -1204,9 +1226,9 @@ msd_media_keys_manager_stop (MsdMediaKeysManager *manager)
12041226 }
12051227
12061228 if (need_flush )
1207- gdk_flush ( );
1229+ gdk_display_flush ( dpy );
12081230
1209- gdk_error_trap_pop_ignored ( );
1231+ gdk_x11_display_error_trap_pop_ignored ( dpy );
12101232
12111233 g_slist_free (priv -> screens );
12121234 priv -> screens = NULL ;
0 commit comments