diff --git a/src/backends/meta-backend-private.h b/src/backends/meta-backend-private.h index b930462b2..33a375211 100644 --- a/src/backends/meta-backend-private.h +++ b/src/backends/meta-backend-private.h @@ -129,9 +129,8 @@ ClutterSeat * meta_backend_get_default_seat (MetaBackend *bakcend); MetaIdleMonitor * meta_backend_get_idle_monitor (MetaBackend *backend, ClutterInputDevice *device); -void meta_backend_foreach_device_monitor (MetaBackend *backend, - GFunc func, - gpointer user_data); + +MetaIdleManager * meta_backend_get_idle_manager (MetaBackend *backend); META_EXPORT_TEST MetaMonitorManager * meta_backend_get_monitor_manager (MetaBackend *backend); diff --git a/src/backends/meta-backend-types.h b/src/backends/meta-backend-types.h index eae62c02f..a959f6db2 100644 --- a/src/backends/meta-backend-types.h +++ b/src/backends/meta-backend-types.h @@ -62,6 +62,8 @@ typedef struct _MetaWaylandCompositor MetaWaylandCompositor; typedef struct _MetaVirtualMonitor MetaVirtualMonitor; typedef struct _MetaVirtualMonitorInfo MetaVirtualMonitorInfo; +typedef struct _MetaIdleManager MetaIdleManager; + #ifdef HAVE_REMOTE_DESKTOP typedef struct _MetaRemoteDesktop MetaRemoteDesktop; #endif diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c index ff84bfe6a..1dd90a356 100644 --- a/src/backends/meta-backend.c +++ b/src/backends/meta-backend.c @@ -55,6 +55,7 @@ #include "backends/meta-cursor-renderer.h" #include "backends/meta-cursor-tracker-private.h" +#include "backends/meta-idle-manager.h" #include "backends/meta-idle-monitor-private.h" #include "backends/meta-input-mapper-private.h" #include "backends/meta-input-settings-private.h" @@ -125,6 +126,7 @@ struct _MetaBackendPrivate MetaOrientationManager *orientation_manager; MetaCursorTracker *cursor_tracker; MetaInputMapper *input_mapper; + MetaIdleManager *idle_manager; MetaRenderer *renderer; #ifdef HAVE_EGL MetaEgl *egl; @@ -160,8 +162,6 @@ struct _MetaBackendPrivate guint device_update_idle_id; - GHashTable *device_monitors; - ClutterInputDevice *current_device; MetaPointerConstraint *client_pointer_constraint; @@ -233,8 +233,6 @@ meta_backend_dispose (GObject *object) g_clear_handle_id (&priv->device_update_idle_id, g_source_remove); - g_clear_pointer (&priv->device_monitors, g_hash_table_destroy); - g_clear_object (&priv->settings); #ifdef HAVE_PROFILER @@ -244,6 +242,7 @@ meta_backend_dispose (GObject *object) g_clear_pointer (&priv->default_seat, clutter_seat_destroy); g_clear_pointer (&priv->stage, clutter_actor_destroy); g_clear_pointer (&priv->clutter_backend, clutter_backend_destroy); + g_clear_pointer (&priv->idle_manager, meta_idle_manager_free); g_clear_object (&priv->renderer); g_clear_list (&priv->gpus, g_object_unref); @@ -361,63 +360,6 @@ meta_backend_monitors_changed (MetaBackend *backend) update_cursors (backend); } -void -meta_backend_foreach_device_monitor (MetaBackend *backend, - GFunc func, - gpointer user_data) -{ - MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); - GHashTableIter iter; - gpointer value; - - g_hash_table_iter_init (&iter, priv->device_monitors); - while (g_hash_table_iter_next (&iter, NULL, &value)) - { - MetaIdleMonitor *device_monitor = META_IDLE_MONITOR (value); - - func (device_monitor, user_data); - } -} - -static MetaIdleMonitor * -meta_backend_create_idle_monitor (MetaBackend *backend, - ClutterInputDevice *device) -{ - return g_object_new (META_TYPE_IDLE_MONITOR, - "device", device, - NULL); -} - -static void -create_device_monitor (MetaBackend *backend, - ClutterInputDevice *device) -{ - MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); - MetaIdleMonitor *idle_monitor; - - if (g_hash_table_contains (priv->device_monitors, device)) - return; - - idle_monitor = meta_backend_create_idle_monitor (backend, device); - g_hash_table_insert (priv->device_monitors, device, idle_monitor); -} - -static void -destroy_device_monitor (MetaBackend *backend, - ClutterInputDevice *device) -{ - MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); - - g_hash_table_remove (priv->device_monitors, device); -} - -static void -meta_backend_monitor_device (MetaBackend *backend, - ClutterInputDevice *device) -{ - create_device_monitor (backend, device); -} - static inline gboolean check_has_pointing_device (ClutterSeat *seat) { @@ -454,8 +396,6 @@ on_device_added (ClutterSeat *seat, MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); ClutterInputDeviceType device_type; - create_device_monitor (backend, device); - if (clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_LOGICAL) return; @@ -485,8 +425,6 @@ on_device_removed (ClutterSeat *seat, MetaBackend *backend = META_BACKEND (user_data); MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); - destroy_device_monitor (backend, device); - if (clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_LOGICAL) return; @@ -526,26 +464,6 @@ on_device_removed (ClutterSeat *seat, meta_backend_update_last_device (backend, NULL); } -static void -create_device_monitors (MetaBackend *backend, - ClutterSeat *seat) -{ - GList *l, *devices; - - create_device_monitor (backend, clutter_seat_get_pointer (seat)); - create_device_monitor (backend, clutter_seat_get_keyboard (seat)); - - devices = clutter_seat_list_devices (seat); - for (l = devices; l; l = l->next) - { - ClutterInputDevice *device = l->data; - - meta_backend_monitor_device (backend, device); - } - - g_list_free (devices); -} - static void input_mapper_device_mapped_cb (MetaInputMapper *mapper, ClutterInputDevice *device, @@ -617,10 +535,7 @@ meta_backend_real_post_init (MetaBackend *backend) meta_backend_sync_screen_size (backend); - priv->device_monitors = - g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) g_object_unref); - - create_device_monitors (backend, seat); + priv->idle_manager = meta_idle_manager_new (backend); g_signal_connect_object (seat, "device-added", G_CALLBACK (on_device_added), backend, 0); @@ -740,7 +655,7 @@ upower_properties_changed (GDBusProxy *proxy, if (lid_is_closed) return; - meta_idle_monitor_reset_idletime (meta_idle_monitor_get_core ()); + meta_idle_manager_reset_idle_time (priv->idle_manager); } static void @@ -935,12 +850,15 @@ prepare_for_sleep_cb (GDBusConnection *connection, GVariant *parameters, gpointer user_data) { + MetaBackend *backend = user_data; + MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); gboolean suspending; g_variant_get (parameters, "(b)", &suspending); if (suspending) return; - meta_idle_monitor_reset_idletime (meta_idle_monitor_get_core ()); + + meta_idle_manager_reset_idle_time (priv->idle_manager); } static void @@ -948,6 +866,7 @@ system_bus_gotten_cb (GObject *object, GAsyncResult *res, gpointer user_data) { + MetaBackend *backend = user_data; MetaBackendPrivate *priv; GDBusConnection *bus; @@ -955,7 +874,7 @@ system_bus_gotten_cb (GObject *object, if (!bus) return; - priv = meta_backend_get_instance_private (user_data); + priv = meta_backend_get_instance_private (backend); priv->system_bus = bus; priv->sleep_signal_id = g_dbus_connection_signal_subscribe (priv->system_bus, @@ -966,7 +885,7 @@ system_bus_gotten_cb (GObject *object, NULL, G_DBUS_SIGNAL_FLAGS_NONE, prepare_for_sleep_cb, - NULL, + backend, NULL); } @@ -1170,7 +1089,32 @@ meta_backend_get_idle_monitor (MetaBackend *backend, { MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); - return g_hash_table_lookup (priv->device_monitors, device); + return meta_idle_manager_get_monitor (priv->idle_manager, device); +} + +/** + * meta_backend_get_core_idle_monitor: + * + * Returns: (transfer none): the #MetaIdleMonitor that tracks server-global + * idle time for all devices. + */ +MetaIdleMonitor * +meta_backend_get_core_idle_monitor (MetaBackend *backend) +{ + MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); + + return meta_idle_manager_get_core_monitor (priv->idle_manager); +} + +/** + * meta_backend_get_idle_manager: (skip) + */ +MetaIdleManager * +meta_backend_get_idle_manager (MetaBackend *backend) +{ + MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); + + return priv->idle_manager; } /** diff --git a/src/backends/meta-idle-monitor-dbus.c b/src/backends/meta-idle-manager.c similarity index 60% rename from src/backends/meta-idle-monitor-dbus.c rename to src/backends/meta-idle-manager.c index 1ed54b033..8369ae506 100644 --- a/src/backends/meta-idle-monitor-dbus.c +++ b/src/backends/meta-idle-manager.c @@ -1,7 +1,7 @@ /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ /* - * Copyright 2013 Red Hat, Inc. + * Copyright 2013-2021 Red Hat, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -22,7 +22,7 @@ #include "config.h" -#include "backends/meta-idle-monitor-dbus.h" +#include "backends/meta-idle-manager.h" #include "backends/meta-idle-monitor-private.h" #include "clutter/clutter.h" @@ -32,6 +32,14 @@ #include "meta-dbus-idle-monitor.h" +typedef struct _MetaIdleManager +{ + MetaBackend *backend; + guint dbus_name_id; + + GHashTable *device_monitors; +} MetaIdleManager; + static gboolean handle_get_idletime (MetaDBusIdleMonitor *skeleton, GDBusMethodInvocation *invocation, @@ -59,7 +67,7 @@ handle_reset_idletime (MetaDBusIdleMonitor *skeleton, return TRUE; } - meta_idle_monitor_reset_idletime (meta_idle_monitor_get_core ()); + meta_idle_manager_reset_idle_time (meta_idle_monitor_get_manager (monitor)); meta_dbus_idle_monitor_complete_reset_idletime (skeleton, invocation); return TRUE; @@ -189,16 +197,16 @@ create_monitor_skeleton (GDBusObjectManagerServer *manager, MetaDBusObjectSkeleton *object; skeleton = meta_dbus_idle_monitor_skeleton_new (); - g_signal_connect_object (skeleton, "handle-add-idle-watch", - G_CALLBACK (handle_add_idle_watch), monitor, 0); - g_signal_connect_object (skeleton, "handle-add-user-active-watch", - G_CALLBACK (handle_add_user_active_watch), monitor, 0); - g_signal_connect_object (skeleton, "handle-remove-watch", - G_CALLBACK (handle_remove_watch), monitor, 0); - g_signal_connect_object (skeleton, "handle-reset-idletime", - G_CALLBACK (handle_reset_idletime), monitor, 0); - g_signal_connect_object (skeleton, "handle-get-idletime", - G_CALLBACK (handle_get_idletime), monitor, 0); + g_signal_connect (skeleton, "handle-add-idle-watch", + G_CALLBACK (handle_add_idle_watch), monitor); + g_signal_connect (skeleton, "handle-add-user-active-watch", + G_CALLBACK (handle_add_user_active_watch), monitor); + g_signal_connect (skeleton, "handle-remove-watch", + G_CALLBACK (handle_remove_watch), monitor); + g_signal_connect (skeleton, "handle-reset-idletime", + G_CALLBACK (handle_reset_idletime), monitor); + g_signal_connect (skeleton, "handle-get-idletime", + G_CALLBACK (handle_get_idletime), monitor); object = meta_dbus_object_skeleton_new (path); meta_dbus_object_skeleton_set_idle_monitor (object, skeleton); @@ -214,20 +222,21 @@ on_bus_acquired (GDBusConnection *connection, const char *name, gpointer user_data) { - GDBusObjectManagerServer *manager; + MetaIdleManager *manager = user_data; + GDBusObjectManagerServer *object_manager; MetaIdleMonitor *monitor; char *path; - manager = g_dbus_object_manager_server_new ("/org/gnome/Mutter/IdleMonitor"); + object_manager = g_dbus_object_manager_server_new ("/org/gnome/Mutter/IdleMonitor"); /* We never clear the core monitor, as that's supposed to cumulate idle times from all devices */ - monitor = meta_idle_monitor_get_core (); + monitor = meta_idle_manager_get_core_monitor (manager); path = g_strdup ("/org/gnome/Mutter/IdleMonitor/Core"); - create_monitor_skeleton (manager, monitor, path); + create_monitor_skeleton (object_manager, monitor, path); g_free (path); - g_dbus_object_manager_server_set_connection (manager, connection); + g_dbus_object_manager_server_set_connection (object_manager, connection); } static void @@ -246,21 +255,122 @@ on_name_lost (GDBusConnection *connection, meta_verbose ("Lost or failed to acquire name %s", name); } -void -meta_idle_monitor_init_dbus (void) +MetaIdleMonitor * +meta_idle_manager_get_monitor (MetaIdleManager *idle_manager, + ClutterInputDevice *device) { - static int dbus_name_id; + return g_hash_table_lookup (idle_manager->device_monitors, device); +} - if (dbus_name_id > 0) +MetaIdleMonitor * +meta_idle_manager_get_core_monitor (MetaIdleManager *idle_manager) +{ + MetaBackend *backend = meta_get_backend (); + ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend); + ClutterSeat *seat = clutter_backend_get_default_seat (clutter_backend); + + return meta_backend_get_idle_monitor (backend, + clutter_seat_get_pointer (seat)); +} + +void +meta_idle_manager_reset_idle_time (MetaIdleManager *idle_manager) +{ + MetaIdleMonitor *core_monitor; + + core_monitor = meta_idle_manager_get_core_monitor (idle_manager); + meta_idle_monitor_reset_idletime (core_monitor); +} + +static void +create_device_monitor (MetaIdleManager *idle_manager, + ClutterInputDevice *device) +{ + MetaIdleMonitor *idle_monitor; + + if (g_hash_table_contains (idle_manager->device_monitors, device)) return; - dbus_name_id = g_bus_own_name (G_BUS_TYPE_SESSION, - "org.gnome.Mutter.IdleMonitor", - G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT | - (meta_get_replace_current_wm () ? - G_BUS_NAME_OWNER_FLAGS_REPLACE : 0), - on_bus_acquired, - on_name_acquired, - on_name_lost, - NULL, NULL); + idle_monitor = meta_idle_monitor_new (idle_manager, device); + g_hash_table_insert (idle_manager->device_monitors, device, idle_monitor); +} + +static void +on_device_added (ClutterSeat *seat, + ClutterInputDevice *device, + gpointer user_data) +{ + MetaIdleManager *idle_manager = user_data; + + create_device_monitor (idle_manager, device); +} + +static void +on_device_removed (ClutterSeat *seat, + ClutterInputDevice *device, + gpointer user_data) +{ + MetaIdleManager *idle_manager = user_data; + + g_hash_table_remove (idle_manager->device_monitors, device); +} + +static void +create_device_monitors (MetaIdleManager *idle_manager, + ClutterSeat *seat) +{ + GList *l, *devices; + + create_device_monitor (idle_manager, clutter_seat_get_pointer (seat)); + create_device_monitor (idle_manager, clutter_seat_get_keyboard (seat)); + + devices = clutter_seat_list_devices (seat); + for (l = devices; l; l = l->next) + { + ClutterInputDevice *device = l->data; + + create_device_monitor (idle_manager, device); + } + + g_list_free (devices); +} + +MetaIdleManager * +meta_idle_manager_new (MetaBackend *backend) +{ + ClutterSeat *seat = meta_backend_get_default_seat (backend); + MetaIdleManager *idle_manager; + + idle_manager = g_new0 (MetaIdleManager, 1); + idle_manager->backend = backend; + + idle_manager->dbus_name_id = + g_bus_own_name (G_BUS_TYPE_SESSION, + "org.gnome.Mutter.IdleMonitor", + G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT | + (meta_get_replace_current_wm () ? + G_BUS_NAME_OWNER_FLAGS_REPLACE : 0), + on_bus_acquired, + on_name_acquired, + on_name_lost, + idle_manager, + NULL); + + idle_manager->device_monitors = + g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) g_object_unref); + g_signal_connect (seat, "device-added", + G_CALLBACK (on_device_added), idle_manager); + g_signal_connect_after (seat, "device-removed", + G_CALLBACK (on_device_removed), idle_manager); + create_device_monitors (idle_manager, seat); + + return idle_manager; +} + +void +meta_idle_manager_free (MetaIdleManager *idle_manager) +{ + g_clear_pointer (&idle_manager->device_monitors, g_hash_table_destroy); + g_bus_unown_name (idle_manager->dbus_name_id); + g_free (idle_manager); } diff --git a/src/backends/meta-idle-manager.h b/src/backends/meta-idle-manager.h new file mode 100644 index 000000000..c2a998feb --- /dev/null +++ b/src/backends/meta-idle-manager.h @@ -0,0 +1,39 @@ +/* + * Copyright 2021 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + */ + +#ifndef META_IDLE_MANAGER_H +#define META_IDLE_MANAGER_H + +#include "backends/meta-backend-types.h" +#include "clutter/clutter.h" + +typedef struct _MetaIdleMonitor MetaIdleMonitor; +typedef struct _MetaIdleManager MetaIdleManager; + +MetaIdleMonitor * meta_idle_manager_get_monitor (MetaIdleManager *idle_manager, + ClutterInputDevice *device); + +MetaIdleMonitor * meta_idle_manager_get_core_monitor (MetaIdleManager *idle_manager); + +void meta_idle_manager_reset_idle_time (MetaIdleManager *idle_manager); + +MetaIdleManager * meta_idle_manager_new (MetaBackend *backend); + +void meta_idle_manager_free (MetaIdleManager *idle_manager); + +#endif /* META_IDLE_MANAGER_H */ diff --git a/src/backends/meta-idle-monitor-dbus.h b/src/backends/meta-idle-monitor-dbus.h deleted file mode 100644 index a0d703f0e..000000000 --- a/src/backends/meta-idle-monitor-dbus.h +++ /dev/null @@ -1,28 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ - -/* - * Copyright 2013 Red Hat, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, see . - * - * Adapted from gnome-session/gnome-session/gs-idle-monitor.c and - * from gnome-desktop/libgnome-desktop/gnome-idle-monitor.c - */ - -#ifndef META_IDLE_MONITOR_DBUS_H -#define META_IDLE_MONITOR_DBUS_H - -void meta_idle_monitor_init_dbus (void); - -#endif diff --git a/src/backends/meta-idle-monitor-private.h b/src/backends/meta-idle-monitor-private.h index d498f13f9..6d4387876 100644 --- a/src/backends/meta-idle-monitor-private.h +++ b/src/backends/meta-idle-monitor-private.h @@ -38,17 +38,6 @@ typedef struct GSource *timeout_source; } MetaIdleMonitorWatch; -struct _MetaIdleMonitor -{ - GObject parent_instance; - - GDBusProxy *session_proxy; - gboolean inhibited; - GHashTable *watches; - ClutterInputDevice *device; - guint64 last_event_time; -}; - struct _MetaIdleMonitorClass { GObjectClass parent_class; @@ -56,4 +45,9 @@ struct _MetaIdleMonitorClass void meta_idle_monitor_reset_idletime (MetaIdleMonitor *monitor); +MetaIdleManager * meta_idle_monitor_get_manager (MetaIdleMonitor *monitor); + +MetaIdleMonitor * meta_idle_monitor_new (MetaIdleManager *idle_manager, + ClutterInputDevice *device); + #endif /* META_IDLE_MONITOR_PRIVATE_H */ diff --git a/src/backends/meta-idle-monitor.c b/src/backends/meta-idle-monitor.c index c678271cc..df924d4dd 100644 --- a/src/backends/meta-idle-monitor.c +++ b/src/backends/meta-idle-monitor.c @@ -35,7 +35,6 @@ #include "backends/gsm-inhibitor-flag.h" #include "backends/meta-backend-private.h" #include "backends/meta-idle-monitor-private.h" -#include "backends/meta-idle-monitor-dbus.h" #include "clutter/clutter.h" #include "meta/main.h" #include "meta/meta-idle-monitor.h" @@ -52,6 +51,18 @@ enum static GParamSpec *obj_props[PROP_LAST]; +struct _MetaIdleMonitor +{ + GObject parent; + + MetaIdleManager *idle_manager; + GDBusProxy *session_proxy; + gboolean inhibited; + GHashTable *watches; + ClutterInputDevice *device; + int64_t last_event_time; +}; + G_DEFINE_TYPE (MetaIdleMonitor, meta_idle_monitor, G_TYPE_OBJECT) static void @@ -266,22 +277,6 @@ meta_idle_monitor_init (MetaIdleMonitor *monitor) } } -/** - * meta_idle_monitor_get_core: - * - * Returns: (transfer none): the #MetaIdleMonitor that tracks the server-global - * idletime for all devices. - */ -MetaIdleMonitor * -meta_idle_monitor_get_core (void) -{ - MetaBackend *backend = meta_get_backend (); - ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend); - ClutterSeat *seat = clutter_backend_get_default_seat (clutter_backend); - - return meta_backend_get_idle_monitor (backend, clutter_seat_get_pointer (seat)); -} - static guint32 get_next_watch_serial (void) { @@ -513,3 +508,23 @@ meta_idle_monitor_reset_idletime (MetaIdleMonitor *monitor) g_list_free (watch_ids); } + +MetaIdleManager * +meta_idle_monitor_get_manager (MetaIdleMonitor *monitor) +{ + return monitor->idle_manager; +} + +MetaIdleMonitor * +meta_idle_monitor_new (MetaIdleManager *idle_manager, + ClutterInputDevice *device) +{ + MetaIdleMonitor *monitor; + + monitor = g_object_new (META_TYPE_IDLE_MONITOR, + "device", device, + NULL); + monitor->idle_manager = idle_manager; + + return monitor; +} diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c index 98d6c1a57..dbf39d7e0 100644 --- a/src/backends/native/meta-backend-native.c +++ b/src/backends/native/meta-backend-native.c @@ -42,7 +42,7 @@ #include #include "backends/meta-cursor-tracker-private.h" -#include "backends/meta-idle-monitor-private.h" +#include "backends/meta-idle-manager.h" #include "backends/meta-keymap-utils.h" #include "backends/meta-logical-monitor.h" #include "backends/meta-monitor-manager-private.h" @@ -726,11 +726,11 @@ void meta_backend_native_resume (MetaBackendNative *native) meta_backend_get_monitor_manager (backend); MetaMonitorManagerNative *monitor_manager_native = META_MONITOR_MANAGER_NATIVE (monitor_manager); - MetaIdleMonitor *idle_monitor; ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend); MetaSeatNative *seat = META_SEAT_NATIVE (clutter_backend_get_default_seat (clutter_backend)); MetaRenderer *renderer = meta_backend_get_renderer (backend); + MetaIdleManager *idle_manager; MetaInputSettings *input_settings; COGL_TRACE_BEGIN_SCOPED (MetaBackendNativeResume, @@ -746,8 +746,8 @@ void meta_backend_native_resume (MetaBackendNative *native) clutter_actor_queue_redraw (CLUTTER_ACTOR (stage)); - idle_monitor = meta_idle_monitor_get_core (); - meta_idle_monitor_reset_idletime (idle_monitor); + idle_manager = meta_backend_get_idle_manager (backend); + meta_idle_manager_reset_idle_time (idle_manager); input_settings = meta_backend_get_input_settings (backend); meta_input_settings_maybe_restore_numlock_state (input_settings); diff --git a/src/core/display.c b/src/core/display.c index 6c7c6b26b..f19e5cb63 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -43,7 +43,6 @@ #include "backends/meta-backend-private.h" #include "backends/meta-cursor-sprite-xcursor.h" #include "backends/meta-cursor-tracker-private.h" -#include "backends/meta-idle-monitor-dbus.h" #include "backends/meta-input-device-private.h" #include "backends/meta-input-mapper-private.h" #include "backends/meta-stage-private.h" @@ -960,8 +959,6 @@ meta_display_open (GError **error) meta_display_unset_input_focus (display, timestamp); } - meta_idle_monitor_init_dbus (); - display->sound_player = g_object_new (META_TYPE_SOUND_PLAYER, NULL); /* Done opening new display */ diff --git a/src/core/events.c b/src/core/events.c index 7c23ac174..92fb602c7 100644 --- a/src/core/events.c +++ b/src/core/events.c @@ -25,7 +25,7 @@ #include "core/events.h" #include "backends/meta-cursor-tracker-private.h" -#include "backends/meta-idle-monitor-private.h" +#include "backends/meta-idle-manager.h" #include "backends/x11/meta-backend-x11.h" #include "backends/x11/meta-input-device-x11.h" #include "compositor/meta-window-actor-private.h" @@ -102,7 +102,8 @@ get_window_for_event (MetaDisplay *display, static void handle_idletime_for_event (const ClutterEvent *event) { - MetaIdleMonitor *core_monitor; + MetaBackend *backend = meta_get_backend (); + MetaIdleManager *idle_manager; if (clutter_event_get_device (event) == NULL) return; @@ -112,8 +113,8 @@ handle_idletime_for_event (const ClutterEvent *event) event->type == CLUTTER_LEAVE) return; - core_monitor = meta_idle_monitor_get_core (); - meta_idle_monitor_reset_idletime (core_monitor); + idle_manager = meta_backend_get_idle_manager (backend); + meta_idle_manager_reset_idle_time (idle_manager); } static gboolean diff --git a/src/meson.build b/src/meson.build index 64a65bc88..85d66a455 100644 --- a/src/meson.build +++ b/src/meson.build @@ -188,8 +188,8 @@ mutter_sources = [ 'backends/meta-gpu.c', 'backends/meta-gpu.h', 'backends/meta-idle-monitor.c', - 'backends/meta-idle-monitor-dbus.c', - 'backends/meta-idle-monitor-dbus.h', + 'backends/meta-idle-manager.c', + 'backends/meta-idle-manager.h', 'backends/meta-idle-monitor-private.h', 'backends/meta-input-device.c', 'backends/meta-input-mapper.c', diff --git a/src/meta/meta-backend.h b/src/meta/meta-backend.h index 8edc0bf2c..49e252ade 100644 --- a/src/meta/meta-backend.h +++ b/src/meta/meta-backend.h @@ -29,6 +29,7 @@ #include "clutter/clutter.h" #include "meta/meta-dnd.h" +#include "meta/meta-idle-monitor.h" #include "meta/meta-remote-access-controller.h" #define META_TYPE_BACKEND (meta_backend_get_type ()) @@ -61,6 +62,9 @@ MetaDnd *meta_backend_get_dnd (MetaBackend *backend); META_EXPORT MetaSettings *meta_backend_get_settings (MetaBackend *backend); +META_EXPORT +MetaIdleMonitor * meta_backend_get_core_idle_monitor (MetaBackend *backend); + META_EXPORT MetaRemoteAccessController * meta_backend_get_remote_access_controller (MetaBackend *backend); diff --git a/src/meta/meta-idle-monitor.h b/src/meta/meta-idle-monitor.h index caacd1f79..b8b38a606 100644 --- a/src/meta/meta-idle-monitor.h +++ b/src/meta/meta-idle-monitor.h @@ -40,9 +40,6 @@ typedef void (*MetaIdleMonitorWatchFunc) (MetaIdleMonitor *monitor, guint watch_id, gpointer user_data); -META_EXPORT -MetaIdleMonitor *meta_idle_monitor_get_core (void); - META_EXPORT guint meta_idle_monitor_add_idle_watch (MetaIdleMonitor *monitor, guint64 interval_msec,