[mutter] backends: Center pointer on primary monitor on startup
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] backends: Center pointer on primary monitor on startup
- Date: Mon, 30 Mar 2015 12:02:58 +0000 (UTC)
commit c6e6ed87c537deee99998694d2b593228bc91efa
Author: Carlos Garnacho <carlosg gnome org>
Date: Fri Mar 27 15:50:59 2015 +0100
backends: Center pointer on primary monitor on startup
This seems nicer/tidier than the current X11 (center on the span of all
monitors) or native (so close to the activities corner it's hard not
to trigger it) platform behaviors.
This code also takes over the native-specific pointer warping that
happens when the pointer was over a removed output.
https://bugzilla.gnome.org/show_bug.cgi?id=746896
src/backends/meta-backend.c | 27 +++++++++++++++++++++++
src/backends/native/meta-backend-native.c | 34 -----------------------------
2 files changed, 27 insertions(+), 34 deletions(-)
---
diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c
index f55a4a0..4a88c89 100644
--- a/src/backends/meta-backend.c
+++ b/src/backends/meta-backend.c
@@ -93,11 +93,36 @@ meta_backend_sync_screen_size (MetaBackend *backend)
}
static void
+center_pointer (MetaBackend *backend)
+{
+ MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
+ MetaMonitorInfo *monitors, *primary;
+ guint n_monitors;
+
+ monitors = meta_monitor_manager_get_monitor_infos (priv->monitor_manager, &n_monitors);
+ primary = &monitors[meta_monitor_manager_get_primary_index (priv->monitor_manager)];
+ meta_backend_warp_pointer (backend,
+ primary->rect.x + primary->rect.width / 2,
+ primary->rect.y + primary->rect.height / 2);
+}
+
+static void
on_monitors_changed (MetaMonitorManager *monitors,
gpointer user_data)
{
MetaBackend *backend = META_BACKEND (user_data);
+ ClutterDeviceManager *manager = clutter_device_manager_get_default ();
+ ClutterInputDevice *device = clutter_device_manager_get_core_device (manager, CLUTTER_POINTER_DEVICE);
+ ClutterPoint point;
+
meta_backend_sync_screen_size (backend);
+
+ if (clutter_input_device_get_coords (device, NULL, &point))
+ {
+ /* If we're outside all monitors, warp the pointer back inside */
+ if (meta_monitor_manager_get_monitor_at_point (monitors, point.x, point.y) < 0)
+ center_pointer (backend);
+ }
}
static MetaIdleMonitor *
@@ -283,6 +308,8 @@ meta_backend_real_post_init (MetaBackend *backend)
}
priv->input_settings = meta_input_settings_create ();
+
+ center_pointer (backend);
}
static MetaCursorRenderer *
diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c
index 9f2cb9b..b33c936 100644
--- a/src/backends/native/meta-backend-native.c
+++ b/src/backends/native/meta-backend-native.c
@@ -153,48 +153,14 @@ pointer_constrain_callback (ClutterInputDevice *device,
}
static void
-on_monitors_changed (MetaMonitorManager *monitor_manager,
- MetaBackend *backend)
-{
- ClutterDeviceManager *manager = clutter_device_manager_get_default ();
- ClutterInputDevice *device = clutter_device_manager_get_core_device (manager, CLUTTER_POINTER_DEVICE);
- MetaMonitorInfo *monitors, *primary;
- unsigned int n_monitors;
- ClutterPoint point;
-
- if (!clutter_input_device_get_coords (device, NULL, &point))
- return;
-
- monitors = meta_monitor_manager_get_monitor_infos (monitor_manager, &n_monitors);
-
- /* if we're inside a monitor, we're fine */
- if (meta_monitor_manager_get_monitor_at_point (monitor_manager, point.x, point.y) >= 0)
- return;
-
- /* warp the pointer to the primary monitor so it isn't lost */
- primary = &monitors[meta_monitor_manager_get_primary_index (monitor_manager)];
- meta_backend_warp_pointer (backend,
- primary->rect.x + primary->rect.width / 2,
- primary->rect.y + primary->rect.height / 2);
-}
-
-static void
meta_backend_native_post_init (MetaBackend *backend)
{
- MetaMonitorManager *monitor_manager;
ClutterDeviceManager *manager = clutter_device_manager_get_default ();
META_BACKEND_CLASS (meta_backend_native_parent_class)->post_init (backend);
clutter_evdev_set_pointer_constrain_callback (manager, pointer_constrain_callback,
NULL, NULL);
-
- monitor_manager = meta_backend_get_monitor_manager (backend);
- g_signal_connect_object (monitor_manager, "monitors-changed",
- G_CALLBACK (on_monitors_changed), backend, G_CONNECT_AFTER);
-
- /* make sure the pointer is in the visible area after init */
- on_monitors_changed (monitor_manager, backend);
}
static MetaIdleMonitor *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]