From 2c873990d14951bade4315e6b706a6f3d3289a09 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sat, 9 Jul 2011 18:49:35 +0200 Subject: [PATCH] core: enable XInput2 by default This is nothing but the beginning, things work with a single pointer/keyboard pair, but will be largely broken with multiple devices interacting simultaneously, so we first need a policy to establish a sensible behavior for extra pointer/keyboard pairs. the MUTTER_USE_CORE_DEVICES envvar has been added to force use of Xlib core events for devices in order to check for regressions. --- src/core/display.c | 3 ++- src/core/main.c | 7 ++++++- src/core/util.c | 13 +++++++++++++ src/meta/util.h | 3 +++ src/ui/ui.c | 11 ++--------- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/core/display.c b/src/core/display.c index 6445d0757..31a87ddbb 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 b5c8e0940..5dac9e15a 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 aea1210c1..8bcb95449 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 922c4b7ca..64a39b25b 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));