[mutter] cursor-tracker: Don't require a screen
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] cursor-tracker: Don't require a screen
- Date: Tue, 22 Jul 2014 15:10:24 +0000 (UTC)
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]