@@ -264,11 +264,13 @@ update_kbd_cb (GSettings *settings,
264
264
MsdMediaKeysManager * manager )
265
265
{
266
266
int i ;
267
+ GdkDisplay * dpy ;
267
268
gboolean need_flush = TRUE;
268
269
269
270
g_return_if_fail (settings_key != NULL );
270
271
271
- gdk_error_trap_push ();
272
+ dpy = gdk_display_get_default ();
273
+ gdk_x11_display_error_trap_push (dpy );
272
274
273
275
/* Find the key that was modified */
274
276
for (i = 0 ; i < HANDLED_KEYS ; i ++ ) {
@@ -313,19 +315,21 @@ update_kbd_cb (GSettings *settings,
313
315
}
314
316
315
317
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 ))
318
320
g_warning ("Grab failed for some keys, another application may already have access the them." );
319
321
}
320
322
321
323
static void init_kbd (MsdMediaKeysManager * manager )
322
324
{
323
325
int i ;
326
+ GdkDisplay * dpy ;
324
327
gboolean need_flush = FALSE;
325
328
326
329
mate_settings_profile_start (NULL );
327
330
328
- gdk_error_trap_push ();
331
+ dpy = gdk_display_get_default ();
332
+ gdk_x11_display_error_trap_push (dpy );
329
333
330
334
for (i = 0 ; i < HANDLED_KEYS ; i ++ )
331
335
{
@@ -373,10 +377,10 @@ static void init_kbd(MsdMediaKeysManager* manager)
373
377
374
378
if (need_flush )
375
379
{
376
- gdk_flush ( );
380
+ gdk_display_flush ( dpy );
377
381
}
378
382
379
- if (gdk_error_trap_pop ( ))
383
+ if (gdk_x11_display_error_trap_pop ( dpy ))
380
384
{
381
385
g_warning ("Grab failed for some keys, another application may already have access the them." );
382
386
}
@@ -1057,7 +1061,7 @@ acme_filter_events (GdkXEvent *xevent,
1057
1061
int i ;
1058
1062
1059
1063
/* verify we have a key event */
1060
- if (xev -> type != KeyPress && xev -> type != KeyRelease ) {
1064
+ if (xev -> type != KeyPress ) {
1061
1065
return GDK_FILTER_CONTINUE ;
1062
1066
}
1063
1067
@@ -1071,10 +1075,6 @@ acme_filter_events (GdkXEvent *xevent,
1071
1075
return GDK_FILTER_CONTINUE ;
1072
1076
}
1073
1077
break ;
1074
- default :
1075
- if (xev -> type != KeyRelease ) {
1076
- return GDK_FILTER_CONTINUE ;
1077
- }
1078
1078
}
1079
1079
1080
1080
manager -> priv -> current_screen = acme_get_screen_from_event (manager , xany );
@@ -1094,9 +1094,15 @@ static gboolean
1094
1094
start_media_keys_idle_cb (MsdMediaKeysManager * manager )
1095
1095
{
1096
1096
GSList * l ;
1097
+ GdkDisplay * dpy ;
1098
+ Display * xdpy ;
1097
1099
1098
1100
g_debug ("Starting media_keys manager" );
1099
1101
mate_settings_profile_start (NULL );
1102
+
1103
+ dpy = gdk_display_get_default ();
1104
+ xdpy = GDK_DISPLAY_XDISPLAY (dpy );
1105
+
1100
1106
manager -> priv -> volume_monitor = g_volume_monitor_get ();
1101
1107
manager -> priv -> settings = g_settings_new (BINDING_SCHEMA );
1102
1108
@@ -1105,14 +1111,28 @@ start_media_keys_idle_cb (MsdMediaKeysManager *manager)
1105
1111
1106
1112
/* Start filtering the events */
1107
1113
for (l = manager -> priv -> screens ; l != NULL ; l = l -> next ) {
1114
+ GdkWindow * window ;
1115
+ Window xwindow ;
1116
+ XWindowAttributes atts ;
1117
+
1108
1118
mate_settings_profile_start ("gdk_window_add_filter" );
1109
1119
1120
+ window = gdk_screen_get_root_window (l -> data );
1121
+ xwindow = GDK_WINDOW_XID (window );
1122
+
1110
1123
g_debug ("adding key filter for screen: %d" ,
1111
1124
gdk_x11_screen_get_screen_number (l -> data ));
1112
1125
1113
- gdk_window_add_filter (gdk_screen_get_root_window ( l -> data ) ,
1126
+ gdk_window_add_filter (window ,
1114
1127
(GdkFilterFunc )acme_filter_events ,
1115
1128
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
+
1116
1136
mate_settings_profile_end ("gdk_window_add_filter" );
1117
1137
}
1118
1138
@@ -1161,6 +1181,7 @@ void
1161
1181
msd_media_keys_manager_stop (MsdMediaKeysManager * manager )
1162
1182
{
1163
1183
MsdMediaKeysManagerPrivate * priv = manager -> priv ;
1184
+ GdkDisplay * dpy ;
1164
1185
GSList * ls ;
1165
1186
GList * l ;
1166
1187
int i ;
@@ -1190,7 +1211,8 @@ msd_media_keys_manager_stop (MsdMediaKeysManager *manager)
1190
1211
}
1191
1212
1192
1213
need_flush = FALSE;
1193
- gdk_error_trap_push ();
1214
+ dpy = gdk_display_get_default ();
1215
+ gdk_x11_display_error_trap_push (dpy );
1194
1216
1195
1217
for (i = 0 ; i < HANDLED_KEYS ; ++ i ) {
1196
1218
if (keys [i ].key ) {
@@ -1204,9 +1226,9 @@ msd_media_keys_manager_stop (MsdMediaKeysManager *manager)
1204
1226
}
1205
1227
1206
1228
if (need_flush )
1207
- gdk_flush ( );
1229
+ gdk_display_flush ( dpy );
1208
1230
1209
- gdk_error_trap_pop_ignored ( );
1231
+ gdk_x11_display_error_trap_pop_ignored ( dpy );
1210
1232
1211
1233
g_slist_free (priv -> screens );
1212
1234
priv -> screens = NULL ;
0 commit comments