summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2019-08-22 15:15:51 +0200
committerJonas Ådahl <jadahl@gmail.com>2019-09-03 19:14:47 +0200
commit9582f7b207a77c431771c52aa9481d14e172ffbc (patch)
tree5ec89e44b8f6e866cb627589514c152315a16a81
parent5fa38f4cd5cc594cb7d9c7a9ffc18947549edd12 (diff)
downloadmutter-wip/kms-connector-add-remove.tar.gz
monitor-manager/kms: Get hotplug events from MetaKmswip/kms-connector-add-remove
This makes it clearer that MetaMonitorManagerKms keeps updated as MetaKms updates its state. https://gitlab.gnome.org/GNOME/mutter/merge_requests/743
-rw-r--r--src/backends/native/meta-kms.c19
-rw-r--r--src/backends/native/meta-monitor-manager-kms.c37
2 files changed, 31 insertions, 25 deletions
diff --git a/src/backends/native/meta-kms.c b/src/backends/native/meta-kms.c
index 8397f872e..39d1f3155 100644
--- a/src/backends/native/meta-kms.c
+++ b/src/backends/native/meta-kms.c
@@ -119,6 +119,15 @@
*
*/
+enum
+{
+ RESOURCES_CHANGED,
+
+ N_SIGNALS
+};
+
+static int signals[N_SIGNALS];
+
typedef struct _MetaKmsCallbackData
{
MetaKmsCallback callback;
@@ -503,6 +512,8 @@ handle_hotplug_event (MetaKms *kms)
META_KMS_UPDATE_STATES_FLAG_HOTPLUG,
&error))
g_warning ("Updating KMS state failed: %s", error->message);
+
+ g_signal_emit (kms, signals[RESOURCES_CHANGED], 0);
}
static void
@@ -605,4 +616,12 @@ meta_kms_class_init (MetaKmsClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = meta_kms_finalize;
+
+ signals[RESOURCES_CHANGED] =
+ g_signal_new ("resources-changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
}
diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
index 26c2ddb61..389f3f9a9 100644
--- a/src/backends/native/meta-monitor-manager-kms.c
+++ b/src/backends/native/meta-monitor-manager-kms.c
@@ -75,8 +75,7 @@ struct _MetaMonitorManagerKms
{
MetaMonitorManager parent_instance;
- guint hotplug_handler_id;
- guint removed_handler_id;
+ gulong kms_resources_changed_handler_id;
};
struct _MetaMonitorManagerKmsClass
@@ -479,16 +478,8 @@ handle_hotplug_event (MetaMonitorManager *manager)
}
static void
-on_udev_hotplug (MetaUdev *udev,
- MetaMonitorManager *manager)
-{
- handle_hotplug_event (manager);
-}
-
-static void
-on_udev_device_removed (MetaUdev *udev,
- GUdevDevice *device,
- MetaMonitorManager *manager)
+on_kms_resources_changed (MetaKms *kms,
+ MetaMonitorManager *manager)
{
handle_hotplug_event (manager);
}
@@ -498,14 +489,12 @@ meta_monitor_manager_kms_connect_hotplug_handler (MetaMonitorManagerKms *manager
{
MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_kms);
MetaBackend *backend = meta_monitor_manager_get_backend (manager);
- MetaUdev *udev = meta_backend_native_get_udev (META_BACKEND_NATIVE (backend));
-
- manager_kms->hotplug_handler_id =
- g_signal_connect_after (udev, "hotplug",
- G_CALLBACK (on_udev_hotplug), manager);
- manager_kms->removed_handler_id =
- g_signal_connect_after (udev, "device-removed",
- G_CALLBACK (on_udev_device_removed), manager);
+ MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
+ MetaKms *kms = meta_backend_native_get_kms (backend_native);
+
+ manager_kms->kms_resources_changed_handler_id =
+ g_signal_connect (kms, "resources-changed",
+ G_CALLBACK (on_kms_resources_changed), manager);
}
static void
@@ -513,12 +502,10 @@ meta_monitor_manager_kms_disconnect_hotplug_handler (MetaMonitorManagerKms *mana
{
MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_kms);
MetaBackend *backend = meta_monitor_manager_get_backend (manager);
- MetaUdev *udev = meta_backend_native_get_udev (META_BACKEND_NATIVE (backend));
+ MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
+ MetaKms *kms = meta_backend_native_get_kms (backend_native);
- g_signal_handler_disconnect (udev, manager_kms->hotplug_handler_id);
- manager_kms->hotplug_handler_id = 0;
- g_signal_handler_disconnect (udev, manager_kms->removed_handler_id);
- manager_kms->removed_handler_id = 0;
+ g_clear_signal_handler (&manager_kms->kms_resources_changed_handler_id, kms);
}
void