diff --git a/src/core/display.c b/src/core/display.c index 7dfa3b375..2b05b7b55 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -553,7 +553,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 00f36edfe..9d9cfde94 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -301,9 +301,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)); @@ -414,6 +417,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 0ab87bb49..81c0f8fea 100644 --- a/src/core/util.c +++ b/src/core/util.c @@ -50,6 +50,7 @@ meta_topic_real_valist (MetaDebugTopic topic, 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 @@ -178,6 +179,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 04bb7bfe1..c1b2bd950 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 56505741c..87419d94f 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));