[mutter] cursor-tracker: Move out more X11:isms to the X11 backend
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] cursor-tracker: Move out more X11:isms to the X11 backend
- Date: Thu, 6 Aug 2020 16:26:40 +0000 (UTC)
commit 3d19b8f49ca7a21c370885447ef7492e1a55381d
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Fri Jul 31 21:08:15 2020 +0200
cursor-tracker: Move out more X11:isms to the X11 backend
This includes the xfixes cursor management.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1391
src/backends/meta-cursor-tracker-private.h | 7 +-
src/backends/meta-cursor-tracker.c | 103 +++++++----------------------
src/backends/x11/meta-cursor-tracker-x11.c | 56 ++++++++++++++++
src/backends/x11/meta-cursor-tracker-x11.h | 3 +
src/x11/events.c | 13 +++-
5 files changed, 96 insertions(+), 86 deletions(-)
---
diff --git a/src/backends/meta-cursor-tracker-private.h b/src/backends/meta-cursor-tracker-private.h
index 2a3d99a13e..60f8e899c0 100644
--- a/src/backends/meta-cursor-tracker-private.h
+++ b/src/backends/meta-cursor-tracker-private.h
@@ -24,7 +24,6 @@
#include "backends/meta-cursor.h"
#include "backends/meta-cursor-renderer.h"
-#include "backends/x11/cm/meta-cursor-sprite-xfixes.h"
#include "meta/meta-cursor-tracker.h"
struct _MetaCursorTrackerClass
@@ -33,11 +32,9 @@ struct _MetaCursorTrackerClass
void (* set_force_track_position) (MetaCursorTracker *tracker,
gboolean is_enabled);
+ MetaCursorSprite * (* get_sprite) (MetaCursorTracker *tracker);
};
-gboolean meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker,
- XEvent *xevent);
-
void meta_cursor_tracker_set_window_cursor (MetaCursorTracker *tracker,
MetaCursorSprite *cursor_sprite);
void meta_cursor_tracker_unset_window_cursor (MetaCursorTracker *tracker);
@@ -54,4 +51,6 @@ void meta_cursor_tracker_untrack_position (MetaCursorTracker *tracker);
MetaCursorSprite * meta_cursor_tracker_get_displayed_cursor (MetaCursorTracker *tracker);
+void meta_cursor_tracker_notify_cursor_changed (MetaCursorTracker *tracker);
+
#endif
diff --git a/src/backends/meta-cursor-tracker.c b/src/backends/meta-cursor-tracker.c
index a411413e27..5a9d5f226b 100644
--- a/src/backends/meta-cursor-tracker.c
+++ b/src/backends/meta-cursor-tracker.c
@@ -36,14 +36,12 @@
#include <string.h>
#include "backends/meta-backend-private.h"
-#include "backends/x11/cm/meta-cursor-sprite-xfixes.h"
#include "cogl/cogl.h"
+#include "core/display-private.h"
#include "clutter/clutter.h"
#include "meta-marshal.h"
#include "meta/main.h"
-#include "meta/meta-x11-errors.h"
#include "meta/util.h"
-#include "x11/meta-x11-display-private.h"
enum
{
@@ -79,9 +77,6 @@ typedef struct _MetaCursorTrackerPrivate
MetaCursorSprite *window_cursor;
MetaCursorSprite *root_cursor;
-
- /* The cursor from the X11 server. */
- MetaCursorSpriteXfixes *xfixes_cursor;
} MetaCursorTrackerPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (MetaCursorTracker, meta_cursor_tracker,
@@ -97,6 +92,12 @@ enum
static guint signals[LAST_SIGNAL];
+void
+meta_cursor_tracker_notify_cursor_changed (MetaCursorTracker *tracker)
+{
+ g_signal_emit (tracker, signals[CURSOR_CHANGED], 0);
+}
+
static void
cursor_texture_updated (MetaCursorSprite *cursor,
MetaCursorTracker *tracker)
@@ -183,6 +184,15 @@ meta_cursor_tracker_real_set_force_track_position (MetaCursorTracker *tracker,
{
}
+static MetaCursorSprite *
+meta_cursor_tracker_real_get_sprite (MetaCursorTracker *tracker)
+{
+ MetaCursorTrackerPrivate *priv =
+ meta_cursor_tracker_get_instance_private (tracker);
+
+ return priv->displayed_cursor;
+}
+
static void
meta_cursor_tracker_init (MetaCursorTracker *tracker)
{
@@ -261,6 +271,8 @@ meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass)
klass->set_force_track_position =
meta_cursor_tracker_real_set_force_track_position;
+ klass->get_sprite =
+ meta_cursor_tracker_real_get_sprite;
obj_props[PROP_BACKEND] =
g_param_spec_object ("backend",
@@ -341,47 +353,6 @@ set_window_cursor (MetaCursorTracker *tracker,
sync_cursor (tracker);
}
-gboolean
-meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker,
- XEvent *xevent)
-{
- MetaCursorTrackerPrivate *priv =
- meta_cursor_tracker_get_instance_private (tracker);
- MetaX11Display *x11_display = meta_get_display ()->x11_display;
- XFixesCursorNotifyEvent *notify_event;
-
- if (meta_is_wayland_compositor ())
- return FALSE;
-
- if (xevent->xany.type != x11_display->xfixes_event_base + XFixesCursorNotify)
- return FALSE;
-
- notify_event = (XFixesCursorNotifyEvent *)xevent;
- if (notify_event->subtype != XFixesDisplayCursorNotify)
- return FALSE;
-
- g_clear_object (&priv->xfixes_cursor);
- g_signal_emit (tracker, signals[CURSOR_CHANGED], 0);
-
- return TRUE;
-}
-
-static void
-ensure_xfixes_cursor (MetaCursorTracker *tracker)
-{
- MetaCursorTrackerPrivate *priv =
- meta_cursor_tracker_get_instance_private (tracker);
- MetaDisplay *display = meta_get_display ();
- g_autoptr (GError) error = NULL;
-
- if (priv->xfixes_cursor)
- return;
-
- priv->xfixes_cursor = meta_cursor_sprite_xfixes_new (display, &error);
- if (!priv->xfixes_cursor)
- g_warning ("Failed to create XFIXES cursor: %s", error->message);
-}
-
/**
* meta_cursor_tracker_get_sprite:
*
@@ -390,31 +361,15 @@ ensure_xfixes_cursor (MetaCursorTracker *tracker)
CoglTexture *
meta_cursor_tracker_get_sprite (MetaCursorTracker *tracker)
{
- MetaCursorTrackerPrivate *priv =
- meta_cursor_tracker_get_instance_private (tracker);
MetaCursorSprite *cursor_sprite;
- g_return_val_if_fail (META_IS_CURSOR_TRACKER (tracker), NULL);
+ cursor_sprite = META_CURSOR_TRACKER_GET_CLASS (tracker)->get_sprite (tracker);
- if (meta_is_wayland_compositor ())
- {
- cursor_sprite = priv->displayed_cursor;
- }
- else
- {
- ensure_xfixes_cursor (tracker);
- cursor_sprite = META_CURSOR_SPRITE (priv->xfixes_cursor);
- }
+ if (!cursor_sprite)
+ return NULL;
- if (cursor_sprite)
- {
- meta_cursor_sprite_realize_texture (cursor_sprite);
- return meta_cursor_sprite_get_cogl_texture (cursor_sprite);
- }
- else
- {
- return NULL;
- }
+ meta_cursor_sprite_realize_texture (cursor_sprite);
+ return meta_cursor_sprite_get_cogl_texture (cursor_sprite);
}
/**
@@ -429,21 +384,11 @@ meta_cursor_tracker_get_hot (MetaCursorTracker *tracker,
int *x,
int *y)
{
- MetaCursorTrackerPrivate *priv =
- meta_cursor_tracker_get_instance_private (tracker);
MetaCursorSprite *cursor_sprite;
g_return_if_fail (META_IS_CURSOR_TRACKER (tracker));
- if (meta_is_wayland_compositor ())
- {
- cursor_sprite = priv->displayed_cursor;
- }
- else
- {
- ensure_xfixes_cursor (tracker);
- cursor_sprite = META_CURSOR_SPRITE (priv->xfixes_cursor);
- }
+ cursor_sprite = META_CURSOR_TRACKER_GET_CLASS (tracker)->get_sprite (tracker);
if (cursor_sprite)
meta_cursor_sprite_get_hotspot (cursor_sprite, x, y);
diff --git a/src/backends/x11/meta-cursor-tracker-x11.c b/src/backends/x11/meta-cursor-tracker-x11.c
index f47ca9c23d..6f718f9e89 100644
--- a/src/backends/x11/meta-cursor-tracker-x11.c
+++ b/src/backends/x11/meta-cursor-tracker-x11.c
@@ -22,7 +22,10 @@
#include "backends/x11/meta-cursor-tracker-x11.h"
+#include "backends/x11/cm/meta-cursor-sprite-xfixes.h"
#include "clutter/clutter-private.h"
+#include "meta/meta-x11-errors.h"
+#include "x11/meta-x11-display-private.h"
#define UPDATE_POSITION_TIMEOUT_MS (ms (100))
@@ -32,11 +35,36 @@ struct _MetaCursorTrackerX11
gboolean is_force_track_position_enabled;
guint update_position_timeout_id;
+
+ MetaCursorSpriteXfixes *xfixes_cursor;
};
G_DEFINE_TYPE (MetaCursorTrackerX11, meta_cursor_tracker_x11,
META_TYPE_CURSOR_TRACKER)
+static void
+ensure_xfixes_cursor (MetaCursorTrackerX11 *tracker_x11);
+
+gboolean
+meta_cursor_tracker_x11_handle_xevent (MetaCursorTrackerX11 *tracker_x11,
+ XEvent *xevent)
+{
+ MetaX11Display *x11_display = meta_get_display ()->x11_display;
+ XFixesCursorNotifyEvent *notify_event;
+
+ if (xevent->xany.type != x11_display->xfixes_event_base + XFixesCursorNotify)
+ return FALSE;
+
+ notify_event = (XFixesCursorNotifyEvent *)xevent;
+ if (notify_event->subtype != XFixesDisplayCursorNotify)
+ return FALSE;
+
+ g_clear_object (&tracker_x11->xfixes_cursor);
+ meta_cursor_tracker_notify_cursor_changed (META_CURSOR_TRACKER (tracker_x11));
+
+ return TRUE;
+}
+
static void
update_position (MetaCursorTrackerX11 *tracker_x11)
{
@@ -47,6 +75,20 @@ update_position (MetaCursorTrackerX11 *tracker_x11)
meta_cursor_tracker_update_position (tracker, x, y);
}
+static void
+ensure_xfixes_cursor (MetaCursorTrackerX11 *tracker_x11)
+{
+ MetaDisplay *display = meta_get_display ();
+ g_autoptr (GError) error = NULL;
+
+ if (tracker_x11->xfixes_cursor)
+ return;
+
+ tracker_x11->xfixes_cursor = meta_cursor_sprite_xfixes_new (display, &error);
+ if (!tracker_x11->xfixes_cursor)
+ g_warning ("Failed to create XFIXES cursor: %s", error->message);
+}
+
static gboolean
update_position_timeout (gpointer user_data)
{
@@ -83,6 +125,18 @@ meta_cursor_tracker_x11_set_force_track_position (MetaCursorTracker *tracker,
}
}
+static MetaCursorSprite *
+meta_cursor_tracker_x11_get_sprite (MetaCursorTracker *tracker)
+{
+ MetaCursorTrackerX11 *tracker_x11 = META_CURSOR_TRACKER_X11 (tracker);
+
+ ensure_xfixes_cursor (META_CURSOR_TRACKER_X11 (tracker));
+ if (tracker_x11->xfixes_cursor)
+ return META_CURSOR_SPRITE (tracker_x11->xfixes_cursor);
+ else
+ return NULL;
+}
+
static void
meta_cursor_tracker_x11_dispose (GObject *object)
{
@@ -108,4 +162,6 @@ meta_cursor_tracker_x11_class_init (MetaCursorTrackerX11Class *klass)
tracker_class->set_force_track_position =
meta_cursor_tracker_x11_set_force_track_position;
+ tracker_class->get_sprite =
+ meta_cursor_tracker_x11_get_sprite;
}
diff --git a/src/backends/x11/meta-cursor-tracker-x11.h b/src/backends/x11/meta-cursor-tracker-x11.h
index 033c43b1a7..a4b4628443 100644
--- a/src/backends/x11/meta-cursor-tracker-x11.h
+++ b/src/backends/x11/meta-cursor-tracker-x11.h
@@ -28,4 +28,7 @@ G_DECLARE_FINAL_TYPE (MetaCursorTrackerX11, meta_cursor_tracker_x11,
META, CURSOR_TRACKER_X11,
MetaCursorTracker)
+gboolean meta_cursor_tracker_x11_handle_xevent (MetaCursorTrackerX11 *tracker_x11,
+ XEvent *xevent);
+
#endif /* META_CURSOR_TRACKER_X11_H */
diff --git a/src/x11/events.c b/src/x11/events.c
index f159f1db3b..8ca2fb9832 100644
--- a/src/x11/events.c
+++ b/src/x11/events.c
@@ -31,6 +31,7 @@
#include "backends/meta-cursor-tracker-private.h"
#include "backends/x11/meta-backend-x11.h"
+#include "backends/x11/meta-cursor-tracker-x11.h"
#include "compositor/meta-compositor-x11.h"
#include "cogl/cogl.h"
#include "core/bell.h"
@@ -1829,10 +1830,16 @@ meta_x11_display_handle_xevent (MetaX11Display *x11_display,
if (event->xany.window == x11_display->xroot)
{
cursor_tracker = meta_backend_get_cursor_tracker (backend);
- if (meta_cursor_tracker_handle_xevent (cursor_tracker, event))
+ if (META_IS_CURSOR_TRACKER_X11 (cursor_tracker))
{
- bypass_gtk = bypass_compositor = TRUE;
- goto out;
+ MetaCursorTrackerX11 *cursor_tracker_x11 =
+ META_CURSOR_TRACKER_X11 (cursor_tracker);
+
+ if (meta_cursor_tracker_x11_handle_xevent (cursor_tracker_x11, event))
+ {
+ bypass_gtk = bypass_compositor = TRUE;
+ goto out;
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]