diff options
Diffstat (limited to 'src/compositor/meta-dnd.c')
-rw-r--r-- | src/compositor/meta-dnd.c | 74 |
1 files changed, 57 insertions, 17 deletions
diff --git a/src/compositor/meta-dnd.c b/src/compositor/meta-dnd.c index ffe695643..d495cb24c 100644 --- a/src/compositor/meta-dnd.c +++ b/src/compositor/meta-dnd.c @@ -19,6 +19,8 @@ #include "config.h" +#include "compositor/meta-dnd-private.h" + #include <gdk/gdkx.h> #include "meta/meta-backend.h" @@ -28,7 +30,6 @@ #include "backends/x11/meta-backend-x11.h" #include "backends/x11/meta-clutter-backend-x11.h" #include "backends/x11/meta-stage-x11.h" -#include "meta/meta-dnd.h" #include "x11/meta-x11-display-private.h" struct _MetaDndClass @@ -45,19 +46,16 @@ typedef struct _MetaDndPrivate MetaDndPrivate; struct _MetaDndPrivate { + MetaBackend *backend; + #ifdef HAVE_WAYLAND gboolean dnd_during_modal; -#else - /* to avoid warnings (g_type_class_add_private: assertion `private_size > 0' failed) */ - gchar dummy; #endif }; struct _MetaDnd { GObject parent; - - MetaDndPrivate *priv; }; G_DEFINE_TYPE_WITH_PRIVATE (MetaDnd, meta_dnd, G_TYPE_OBJECT); @@ -108,10 +106,33 @@ meta_dnd_init (MetaDnd *dnd) { } +MetaDnd * +meta_dnd_new (MetaBackend *backend) +{ + MetaDnd *dnd; + MetaDndPrivate *priv; + + dnd = g_object_new (META_TYPE_DND, NULL); + priv = meta_dnd_get_instance_private (dnd); + priv->backend = backend; + + return dnd; +} + +MetaBackend * +meta_dnd_get_backend (MetaDnd *dnd) +{ + MetaDndPrivate *priv = meta_dnd_get_instance_private (dnd); + + return priv->backend; +} + void meta_dnd_init_xdnd (MetaX11Display *x11_display) { - MetaBackend *backend = meta_get_backend (); + MetaDisplay *display = meta_x11_display_get_display (x11_display); + MetaContext *context = meta_display_get_context (display); + MetaBackend *backend = meta_context_get_backend (context); Display *xdisplay = x11_display->xdisplay; Window xwindow, overlay_xwindow; long xdnd_version = 5; @@ -226,20 +247,31 @@ meta_dnd_handle_xdnd_event (MetaBackend *backend, } #ifdef HAVE_WAYLAND +static MetaWaylandDataDevice * +data_device_from_dnd (MetaDnd *dnd) +{ + MetaBackend *backend = meta_dnd_get_backend (dnd); + MetaContext *context = meta_backend_get_context (backend); + MetaWaylandCompositor *compositor = + meta_context_get_wayland_compositor (context); + + return &compositor->seat->data_device; +} + static void meta_dnd_wayland_on_motion_event (MetaDnd *dnd, const ClutterEvent *event) { MetaWaylandDragGrab *current_grab; gfloat event_x, event_y; - MetaWaylandCompositor *wl_compositor = meta_wayland_compositor_get_default (); + MetaWaylandDataDevice *data_device = data_device_from_dnd (dnd); g_return_if_fail (event != NULL); clutter_event_get_coords (event, &event_x, &event_y); meta_dnd_notify_dnd_position_change (dnd, (int)event_x, (int)event_y); - current_grab = meta_wayland_data_device_get_current_grab (&wl_compositor->seat->data_device); + current_grab = meta_wayland_data_device_get_current_grab (data_device); if (current_grab) meta_wayland_drag_grab_update_feedback_actor (current_grab, event); } @@ -248,9 +280,9 @@ static void meta_dnd_wayland_end_notify (MetaDnd *dnd) { MetaDndPrivate *priv = meta_dnd_get_instance_private (dnd); - MetaWaylandCompositor *wl_compositor = meta_wayland_compositor_get_default (); + MetaWaylandDataDevice *data_device = data_device_from_dnd (dnd); - meta_wayland_data_device_end_drag (&wl_compositor->seat->data_device); + meta_wayland_data_device_end_drag (data_device); priv->dnd_during_modal = FALSE; @@ -280,10 +312,10 @@ void meta_dnd_wayland_maybe_handle_event (MetaDnd *dnd, const ClutterEvent *event) { - MetaWaylandCompositor *wl_compositor = meta_wayland_compositor_get_default (); + MetaWaylandDataDevice *data_device = data_device_from_dnd (dnd); MetaDndPrivate *priv = meta_dnd_get_instance_private (dnd); - if (!meta_wayland_data_device_get_current_grab (&wl_compositor->seat->data_device)) + if (!meta_wayland_data_device_get_current_grab (data_device)) return; g_warn_if_fail (priv->dnd_during_modal); @@ -299,12 +331,17 @@ meta_dnd_wayland_maybe_handle_event (MetaDnd *dnd, void meta_dnd_wayland_handle_begin_modal (MetaCompositor *compositor) { - MetaWaylandCompositor *wl_compositor = meta_wayland_compositor_get_default (); - MetaDnd *dnd = meta_backend_get_dnd (meta_get_backend ()); + MetaDisplay *display = meta_compositor_get_display (compositor); + MetaContext *context = meta_display_get_context (display); + MetaWaylandCompositor *wayland_compositor = + meta_context_get_wayland_compositor (context); + MetaWaylandDataDevice *data_device = &wayland_compositor->seat->data_device; + MetaBackend *backend = meta_context_get_backend (context); + MetaDnd *dnd = meta_backend_get_dnd (backend); MetaDndPrivate *priv = meta_dnd_get_instance_private (dnd); if (!priv->dnd_during_modal && - meta_wayland_data_device_get_current_grab (&wl_compositor->seat->data_device) != NULL) + meta_wayland_data_device_get_current_grab (data_device)) { priv->dnd_during_modal = TRUE; @@ -315,7 +352,10 @@ meta_dnd_wayland_handle_begin_modal (MetaCompositor *compositor) void meta_dnd_wayland_handle_end_modal (MetaCompositor *compositor) { - MetaDnd *dnd = meta_backend_get_dnd (meta_get_backend ()); + MetaDisplay *display = meta_compositor_get_display (compositor); + MetaContext *context = meta_display_get_context (display); + MetaBackend *backend = meta_context_get_backend (context); + MetaDnd *dnd = meta_backend_get_dnd (backend); MetaDndPrivate *priv = meta_dnd_get_instance_private (dnd); if (!priv->dnd_during_modal) |