[mutter/wip/xinput2: 49/49] core: enable XInput2 by default



commit 2c873990d14951bade4315e6b706a6f3d3289a09
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Jul 9 18:49:35 2011 +0200

    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 6445d07..31a87dd 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 b5c8e09..5dac9e1 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 aea1210..8bcb954 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
@@ -210,6 +211,18 @@ meta_set_debugging (gboolean 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)
 {
   return replace_current;
diff --git a/src/meta/util.h b/src/meta/util.h
index d345840..5708eb8 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 922c4b7..64a39b2 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));



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]