diff --git a/src/core/display.c b/src/core/display.c index 529378015..cee90b4c0 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -488,7 +488,8 @@ meta_display_open (void) the_display->static_gravity_works = g_getenv ("MUTTER_USE_STATIC_GRAVITY") != NULL; meta_bell_init (the_display); - the_display->device_map = meta_device_map_new (the_display, TRUE); + the_display->device_map = meta_device_map_new (the_display, + meta_get_use_core_devices ()); meta_display_init_keys (the_display); diff --git a/src/core/main.c b/src/core/main.c index 2c00e8b99..5becc5627 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -311,9 +311,12 @@ static GSourceFuncs event_funcs = { static void meta_clutter_init (void) { + if (!meta_get_use_core_devices ()) + clutter_x11_enable_xinput (); + clutter_x11_set_display (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())); clutter_x11_disable_event_retrieval (); - + if (CLUTTER_INIT_SUCCESS == clutter_init (NULL, NULL)) { GSource *source = g_source_new (&event_funcs, sizeof (GSource)); @@ -424,6 +427,8 @@ meta_init (void) meta_set_verbose (TRUE); if (g_getenv ("MUTTER_DEBUG")) meta_set_debugging (TRUE); + if (g_getenv ("MUTTER_USE_CORE_DEVICES")) + meta_set_use_core_devices (TRUE); if (g_get_home_dir ()) if (chdir (g_get_home_dir ()) < 0) diff --git a/src/core/util.c b/src/core/util.c index 298a45cd8..e9c508548 100644 --- a/src/core/util.c +++ b/src/core/util.c @@ -81,6 +81,7 @@ meta_print_backtrace (void) static gint verbose_topics = 0; static gboolean is_debugging = FALSE; static gboolean replace_current = FALSE; +static gboolean use_core_devices = FALSE; static int no_prefix = 0; #ifdef WITH_VERBOSE_MODE @@ -209,6 +210,18 @@ meta_set_debugging (gboolean setting) is_debugging = setting; } +gboolean +meta_get_use_core_devices (void) +{ + return use_core_devices; +} + +void +meta_set_use_core_devices (gboolean setting) +{ + use_core_devices = setting; +} + gboolean meta_get_replace_current_wm (void) { diff --git a/src/meta/util.h b/src/meta/util.h index d3458403c..5708eb823 100644 --- a/src/meta/util.h +++ b/src/meta/util.h @@ -38,6 +38,9 @@ gboolean meta_is_syncing (void); void meta_set_syncing (gboolean setting); void meta_set_replace_current_wm (gboolean setting); +gboolean meta_get_use_core_devices (void); +void meta_set_use_core_devices (gboolean setting); + void meta_debug_spew_real (const char *format, ...) G_GNUC_PRINTF (1, 2); void meta_verbose_real (const char *format, diff --git a/src/ui/ui.c b/src/ui/ui.c index 1f7d75576..be053ab74 100644 --- a/src/ui/ui.c +++ b/src/ui/ui.c @@ -61,15 +61,8 @@ struct _MetaUI void meta_ui_init (void) { - /* As of 2.91.7, Gdk uses XI2 by default, which conflicts with the - * direct X calls we use - in particular, events caused by calls to - * XGrabPointer/XGrabKeyboard are no longer understood by GDK, while - * GDK will no longer generate the core XEvents we process. - * So at least for now, enforce the previous behavior. - */ -#if GTK_CHECK_VERSION(2, 91, 7) - gdk_disable_multidevice (); -#endif + if (meta_get_use_core_devices ()) + gdk_disable_multidevice (); if (!gtk_init_check (NULL, NULL)) meta_fatal ("Unable to open X display %s\n", XDisplayName (NULL));