[mutter] cursor-tracker: Don't require a screen



commit e49bbe2ed8aed844f15aabe289323036e2459245
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Tue Jul 22 11:09:12 2014 -0400

    cursor-tracker: Don't require a screen
    
    This allows us to do initialization earlier and not have to poke into
    Wayland internals from the cursor tracker.

 src/backends/meta-cursor-tracker-private.h |    1 -
 src/backends/meta-cursor-tracker.c         |   60 ++++++----------------------
 src/core/screen.c                          |    3 +
 src/wayland/meta-wayland-pointer.c         |    2 +
 4 files changed, 18 insertions(+), 48 deletions(-)
---
diff --git a/src/backends/meta-cursor-tracker-private.h b/src/backends/meta-cursor-tracker-private.h
index 8eebd9f..f901e6e 100644
--- a/src/backends/meta-cursor-tracker-private.h
+++ b/src/backends/meta-cursor-tracker-private.h
@@ -30,7 +30,6 @@
 struct _MetaCursorTracker {
   GObject parent_instance;
 
-  MetaScreen *screen;
   MetaCursorRenderer *renderer;
 
   gboolean is_showing;
diff --git a/src/backends/meta-cursor-tracker.c b/src/backends/meta-cursor-tracker.c
index 16e876d..3f35bab 100644
--- a/src/backends/meta-cursor-tracker.c
+++ b/src/backends/meta-cursor-tracker.c
@@ -44,9 +44,6 @@
 
 #include "meta-cursor-private.h"
 #include "meta-cursor-tracker-private.h"
-#include "screen-private.h"
-
-#include "wayland/meta-wayland-private.h"
 
 G_DEFINE_TYPE (MetaCursorTracker, meta_cursor_tracker, G_TYPE_OBJECT);
 
@@ -60,10 +57,12 @@ static guint signals[LAST_SIGNAL];
 static MetaCursorReference *
 get_displayed_cursor (MetaCursorTracker *tracker)
 {
+  MetaDisplay *display = meta_get_display ();
+
   if (!tracker->is_showing)
     return NULL;
 
-  if (tracker->screen->display->grab_op == META_GRAB_OP_NONE)
+  if (display->grab_op == META_GRAB_OP_NONE)
     {
       if (tracker->has_window_cursor)
         return tracker->window_cursor;
@@ -97,6 +96,9 @@ sync_cursor (MetaCursorTracker *tracker)
 static void
 meta_cursor_tracker_init (MetaCursorTracker *self)
 {
+  MetaBackend *backend = meta_get_backend ();
+
+  self->renderer = meta_backend_get_cursor_renderer (backend);
   self->is_showing = TRUE;
 }
 
@@ -129,47 +131,9 @@ meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass)
 }
 
 static MetaCursorTracker *
-make_wayland_cursor_tracker (MetaScreen *screen)
+meta_cursor_tracker_new (void)
 {
-  MetaBackend *backend = meta_get_backend ();
-  MetaWaylandCompositor *compositor;
-  MetaCursorTracker *self;
-
-  self = g_object_new (META_TYPE_CURSOR_TRACKER, NULL);
-  self->screen = screen;
-  self->renderer = meta_backend_get_cursor_renderer (backend);
-
-  compositor = meta_wayland_compositor_get_default ();
-  compositor->seat->pointer.cursor_tracker = self;
-  meta_cursor_tracker_update_position (self, 0, 0);
-
-  return self;
-}
-
-static MetaCursorTracker *
-make_x11_cursor_tracker (MetaScreen *screen)
-{
-  MetaBackend *backend = meta_get_backend ();
-  MetaCursorTracker *self;
-
-  self = g_object_new (META_TYPE_CURSOR_TRACKER, NULL);
-  self->screen = screen;
-  self->renderer = meta_backend_get_cursor_renderer (backend);
-
-  XFixesSelectCursorInput (screen->display->xdisplay,
-                           screen->xroot,
-                           XFixesDisplayCursorNotifyMask);
-
-  return self;
-}
-
-static MetaCursorTracker *
-meta_cursor_tracker_new (MetaScreen *screen)
-{
-  if (meta_is_wayland_compositor ())
-    return make_wayland_cursor_tracker (screen);
-  else
-    return make_x11_cursor_tracker (screen);
+  return g_object_new (META_TYPE_CURSOR_TRACKER, NULL);
 }
 
 static MetaCursorTracker *_cursor_tracker;
@@ -186,7 +150,7 @@ MetaCursorTracker *
 meta_cursor_tracker_get_for_screen (MetaScreen *screen)
 {
   if (!_cursor_tracker)
-    _cursor_tracker = meta_cursor_tracker_new (screen);
+    _cursor_tracker = meta_cursor_tracker_new ();
 
   return _cursor_tracker;
 }
@@ -207,12 +171,13 @@ gboolean
 meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker,
                                    XEvent            *xevent)
 {
+  MetaDisplay *display = meta_get_display ();
   XFixesCursorNotifyEvent *notify_event;
 
   if (meta_is_wayland_compositor ())
     return FALSE;
 
-  if (xevent->xany.type != tracker->screen->display->xfixes_event_base + XFixesCursorNotify)
+  if (xevent->xany.type != display->xfixes_event_base + XFixesCursorNotify)
     return FALSE;
 
   notify_event = (XFixesCursorNotifyEvent *)xevent;
@@ -243,6 +208,7 @@ meta_cursor_reference_take_texture (CoglTexture2D *texture,
 static void
 ensure_xfixes_cursor (MetaCursorTracker *tracker)
 {
+  MetaDisplay *display = meta_get_display ();
   XFixesCursorImage *cursor_image;
   CoglTexture2D *sprite;
   guint8 *cursor_data;
@@ -252,7 +218,7 @@ ensure_xfixes_cursor (MetaCursorTracker *tracker)
   if (tracker->xfixes_cursor)
     return;
 
-  cursor_image = XFixesGetCursorImage (tracker->screen->display->xdisplay);
+  cursor_image = XFixesGetCursorImage (display->xdisplay);
   if (!cursor_image)
     return;
 
diff --git a/src/core/screen.c b/src/core/screen.c
index 959907f..9742db7 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -667,6 +667,9 @@ meta_screen_new (MetaDisplay *display,
       return NULL;
     }
 
+  /* Select for cursor changes so the cursor tracker is up to date. */
+  XFixesSelectCursorInput (xdisplay, xroot, XFixesDisplayCursorNotifyMask);
+
   screen = g_object_new (META_TYPE_SCREEN, NULL);
   screen->closing = 0;
 
diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c
index 06ee78b..ce22e7c 100644
--- a/src/wayland/meta-wayland-pointer.c
+++ b/src/wayland/meta-wayland-pointer.c
@@ -207,6 +207,8 @@ meta_wayland_pointer_init (MetaWaylandPointer *pointer,
 
   manager = clutter_device_manager_get_default ();
   pointer->device = clutter_device_manager_get_core_device (manager, CLUTTER_POINTER_DEVICE);
+
+  pointer->cursor_tracker = meta_cursor_tracker_get_for_screen (NULL);
 }
 
 void


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