1
0
Fork 0

monitor-manager/native: Make type derivable

Will be derived by the test backend to override some state for testing
purposes.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3812>
This commit is contained in:
Jonas Ådahl 2024-06-15 23:07:31 +02:00 committed by Marge Bot
parent 4bdc51454d
commit d9d2f2c06f
2 changed files with 46 additions and 26 deletions

View file

@ -71,7 +71,7 @@ enum
static GParamSpec *obj_props[N_PROPS]; static GParamSpec *obj_props[N_PROPS];
struct _MetaMonitorManagerNative typedef struct _MetaMonitorManagerNativePrivate
{ {
MetaMonitorManager parent_instance; MetaMonitorManager parent_instance;
@ -82,12 +82,7 @@ struct _MetaMonitorManagerNative
gboolean needs_outputs; gboolean needs_outputs;
guint rebuild_virtual_idle_id; guint rebuild_virtual_idle_id;
}; } MetaMonitorManagerNativePrivate;
struct _MetaMonitorManagerNativeClass
{
MetaMonitorManagerClass parent_class;
};
static void static void
initable_iface_init (GInitableIface *initable_iface); initable_iface_init (GInitableIface *initable_iface);
@ -95,7 +90,8 @@ initable_iface_init (GInitableIface *initable_iface);
G_DEFINE_TYPE_WITH_CODE (MetaMonitorManagerNative, meta_monitor_manager_native, G_DEFINE_TYPE_WITH_CODE (MetaMonitorManagerNative, meta_monitor_manager_native,
META_TYPE_MONITOR_MANAGER, META_TYPE_MONITOR_MANAGER,
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
initable_iface_init)) initable_iface_init)
G_ADD_PRIVATE (MetaMonitorManagerNative))
static GBytes * static GBytes *
meta_monitor_manager_native_read_edid (MetaMonitorManager *manager, meta_monitor_manager_native_read_edid (MetaMonitorManager *manager,
@ -335,10 +331,12 @@ MetaGammaLut *
meta_monitor_manager_native_get_cached_crtc_gamma (MetaMonitorManagerNative *manager_native, meta_monitor_manager_native_get_cached_crtc_gamma (MetaMonitorManagerNative *manager_native,
MetaCrtcKms *crtc_kms) MetaCrtcKms *crtc_kms)
{ {
MetaMonitorManagerNativePrivate *priv =
meta_monitor_manager_native_get_instance_private (manager_native);
uint64_t crtc_id; uint64_t crtc_id;
crtc_id = meta_crtc_get_id (META_CRTC (crtc_kms)); crtc_id = meta_crtc_get_id (META_CRTC (crtc_kms));
return g_hash_table_lookup (manager_native->crtc_gamma_cache, return g_hash_table_lookup (priv->crtc_gamma_cache,
GUINT_TO_POINTER (crtc_id)); GUINT_TO_POINTER (crtc_id));
} }
@ -347,9 +345,11 @@ meta_monitor_manager_native_update_cached_crtc_gamma (MetaMonitorManagerNative *
MetaCrtcKms *crtc_kms, MetaCrtcKms *crtc_kms,
MetaGammaLut *gamma) MetaGammaLut *gamma)
{ {
MetaMonitorManagerNativePrivate *priv =
meta_monitor_manager_native_get_instance_private (manager_native);
MetaCrtc *crtc = META_CRTC (crtc_kms); MetaCrtc *crtc = META_CRTC (crtc_kms);
g_hash_table_replace (manager_native->crtc_gamma_cache, g_hash_table_replace (priv->crtc_gamma_cache,
GUINT_TO_POINTER (meta_crtc_get_id (crtc)), GUINT_TO_POINTER (meta_crtc_get_id (crtc)),
gamma); gamma);
} }
@ -403,12 +403,14 @@ out:
static void static void
meta_monitor_manager_native_connect_hotplug_handler (MetaMonitorManagerNative *manager_native) meta_monitor_manager_native_connect_hotplug_handler (MetaMonitorManagerNative *manager_native)
{ {
MetaMonitorManagerNativePrivate *priv =
meta_monitor_manager_native_get_instance_private (manager_native);
MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_native); MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_native);
MetaBackend *backend = meta_monitor_manager_get_backend (manager); MetaBackend *backend = meta_monitor_manager_get_backend (manager);
MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend); MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
MetaKms *kms = meta_backend_native_get_kms (backend_native); MetaKms *kms = meta_backend_native_get_kms (backend_native);
manager_native->kms_resources_changed_handler_id = priv->kms_resources_changed_handler_id =
g_signal_connect (kms, "resources-changed", g_signal_connect (kms, "resources-changed",
G_CALLBACK (on_kms_resources_changed), manager); G_CALLBACK (on_kms_resources_changed), manager);
} }
@ -416,12 +418,14 @@ meta_monitor_manager_native_connect_hotplug_handler (MetaMonitorManagerNative *m
static void static void
meta_monitor_manager_native_disconnect_hotplug_handler (MetaMonitorManagerNative *manager_native) meta_monitor_manager_native_disconnect_hotplug_handler (MetaMonitorManagerNative *manager_native)
{ {
MetaMonitorManagerNativePrivate *priv =
meta_monitor_manager_native_get_instance_private (manager_native);
MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_native); MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_native);
MetaBackend *backend = meta_monitor_manager_get_backend (manager); MetaBackend *backend = meta_monitor_manager_get_backend (manager);
MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend); MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
MetaKms *kms = meta_backend_native_get_kms (backend_native); MetaKms *kms = meta_backend_native_get_kms (backend_native);
g_clear_signal_handler (&manager_native->kms_resources_changed_handler_id, kms); g_clear_signal_handler (&priv->kms_resources_changed_handler_id, kms);
} }
void void
@ -559,8 +563,10 @@ rebuild_virtual_idle_cb (gpointer user_data)
MetaMonitorManager *manager = user_data; MetaMonitorManager *manager = user_data;
MetaMonitorManagerNative *manager_native = MetaMonitorManagerNative *manager_native =
META_MONITOR_MANAGER_NATIVE (manager); META_MONITOR_MANAGER_NATIVE (manager);
MetaMonitorManagerNativePrivate *priv =
meta_monitor_manager_native_get_instance_private (manager_native);
manager_native->rebuild_virtual_idle_id = 0; priv->rebuild_virtual_idle_id = 0;
meta_monitor_manager_reconfigure (manager); meta_monitor_manager_reconfigure (manager);
@ -574,12 +580,13 @@ on_virtual_monitor_mode_changed (MetaVirtualMonitor *virtual_monitor,
{ {
MetaMonitorManagerNative *manager_native = MetaMonitorManagerNative *manager_native =
META_MONITOR_MANAGER_NATIVE (manager); META_MONITOR_MANAGER_NATIVE (manager);
MetaMonitorManagerNativePrivate *priv =
meta_monitor_manager_native_get_instance_private (manager_native);
if (manager_native->rebuild_virtual_idle_id) if (priv->rebuild_virtual_idle_id)
return; return;
manager_native->rebuild_virtual_idle_id = priv->rebuild_virtual_idle_id = g_idle_add (rebuild_virtual_idle_cb, manager);
g_idle_add (rebuild_virtual_idle_cb, manager);
} }
static MetaVirtualMonitor * static MetaVirtualMonitor *
@ -610,11 +617,13 @@ meta_monitor_manager_native_set_property (GObject *object,
{ {
MetaMonitorManagerNative *manager_native = MetaMonitorManagerNative *manager_native =
META_MONITOR_MANAGER_NATIVE (object); META_MONITOR_MANAGER_NATIVE (object);
MetaMonitorManagerNativePrivate *priv =
meta_monitor_manager_native_get_instance_private (manager_native);
switch (prop_id) switch (prop_id)
{ {
case PROP_NEED_OUTPUTS: case PROP_NEED_OUTPUTS:
manager_native->needs_outputs = g_value_get_boolean (value); priv->needs_outputs = g_value_get_boolean (value);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -627,10 +636,11 @@ meta_monitor_manager_native_dispose (GObject *object)
{ {
MetaMonitorManagerNative *manager_native = MetaMonitorManagerNative *manager_native =
META_MONITOR_MANAGER_NATIVE (object); META_MONITOR_MANAGER_NATIVE (object);
MetaMonitorManagerNativePrivate *priv =
meta_monitor_manager_native_get_instance_private (manager_native);
g_clear_handle_id (&manager_native->rebuild_virtual_idle_id, g_source_remove); g_clear_handle_id (&priv->rebuild_virtual_idle_id, g_source_remove);
g_clear_pointer (&manager_native->crtc_gamma_cache, g_clear_pointer (&priv->crtc_gamma_cache, g_hash_table_unref);
g_hash_table_unref);
G_OBJECT_CLASS (meta_monitor_manager_native_parent_class)->dispose (object); G_OBJECT_CLASS (meta_monitor_manager_native_parent_class)->dispose (object);
} }
@ -642,6 +652,8 @@ meta_monitor_manager_native_initable_init (GInitable *initable,
{ {
MetaMonitorManagerNative *manager_native = MetaMonitorManagerNative *manager_native =
META_MONITOR_MANAGER_NATIVE (initable); META_MONITOR_MANAGER_NATIVE (initable);
MetaMonitorManagerNativePrivate *priv =
meta_monitor_manager_native_get_instance_private (manager_native);
MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_native); MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_native);
MetaBackend *backend = meta_monitor_manager_get_backend (manager); MetaBackend *backend = meta_monitor_manager_get_backend (manager);
gboolean can_have_outputs; gboolean can_have_outputs;
@ -661,14 +673,14 @@ meta_monitor_manager_native_initable_init (GInitable *initable,
} }
} }
if (manager_native->needs_outputs && !can_have_outputs) if (priv->needs_outputs && !can_have_outputs)
{ {
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
"No GPUs with outputs found"); "No GPUs with outputs found");
return FALSE; return FALSE;
} }
manager_native->crtc_gamma_cache = priv->crtc_gamma_cache =
g_hash_table_new_full (NULL, NULL, g_hash_table_new_full (NULL, NULL,
NULL, NULL,
(GDestroyNotify) meta_gamma_lut_free); (GDestroyNotify) meta_gamma_lut_free);
@ -685,7 +697,10 @@ initable_iface_init (GInitableIface *initable_iface)
static void static void
meta_monitor_manager_native_init (MetaMonitorManagerNative *manager_native) meta_monitor_manager_native_init (MetaMonitorManagerNative *manager_native)
{ {
manager_native->needs_outputs = TRUE; MetaMonitorManagerNativePrivate *priv =
meta_monitor_manager_native_get_instance_private (manager_native);
priv->needs_outputs = TRUE;
} }
static void static void

View file

@ -32,9 +32,14 @@
typedef struct _MetaGpuKms MetaGpuKms; typedef struct _MetaGpuKms MetaGpuKms;
#define META_TYPE_MONITOR_MANAGER_NATIVE (meta_monitor_manager_native_get_type ()) #define META_TYPE_MONITOR_MANAGER_NATIVE (meta_monitor_manager_native_get_type ())
G_DECLARE_FINAL_TYPE (MetaMonitorManagerNative, meta_monitor_manager_native, G_DECLARE_DERIVABLE_TYPE (MetaMonitorManagerNative, meta_monitor_manager_native,
META, MONITOR_MANAGER_NATIVE, META, MONITOR_MANAGER_NATIVE,
MetaMonitorManager) MetaMonitorManager)
struct _MetaMonitorManagerNativeClass
{
MetaMonitorManagerClass parent_class;
};
void meta_monitor_manager_native_pause (MetaMonitorManagerNative *manager_native); void meta_monitor_manager_native_pause (MetaMonitorManagerNative *manager_native);