wayland/drm-lease: Send drm_fd to pending clients
Listen to the signal that indicates that the current session is active and send the drm_fd, connector(s) and done events to the clients that were waiting for them. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3921>
This commit is contained in:
parent
d49a5b37a9
commit
3203fbafad
@ -35,6 +35,7 @@
|
|||||||
#include "backends/native/meta-kms-impl-device.h"
|
#include "backends/native/meta-kms-impl-device.h"
|
||||||
#include "backends/native/meta-kms.h"
|
#include "backends/native/meta-kms.h"
|
||||||
#include "backends/edid.h"
|
#include "backends/edid.h"
|
||||||
|
#include "backends/meta-launcher.h"
|
||||||
#include "wayland/meta-wayland-private.h"
|
#include "wayland/meta-wayland-private.h"
|
||||||
|
|
||||||
#include "drm-lease-v1-server-protocol.h"
|
#include "drm-lease-v1-server-protocol.h"
|
||||||
@ -644,6 +645,49 @@ on_device_removed (MetaDrmLeaseManager *drm_lease_manager,
|
|||||||
g_hash_table_remove (lease_manager->devices, kms_device);
|
g_hash_table_remove (lease_manager->devices, kms_device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
send_pending_on_device_bind_events (MetaWaylandDrmLeaseManager *lease_manager,
|
||||||
|
MetaWaylandDrmLeaseDevice *lease_device)
|
||||||
|
{
|
||||||
|
GList *l;
|
||||||
|
|
||||||
|
for (l = lease_device->pending_resources; l;)
|
||||||
|
{
|
||||||
|
struct wl_resource *resource = l->data;
|
||||||
|
struct wl_client *client = resource->client;
|
||||||
|
GList *l_next = l->next;
|
||||||
|
|
||||||
|
if (send_on_device_bind_events (client, lease_device, resource))
|
||||||
|
{
|
||||||
|
lease_device->pending_resources =
|
||||||
|
g_list_remove_link (lease_device->pending_resources, l);
|
||||||
|
lease_device->resources =
|
||||||
|
g_list_insert_before_link (lease_device->resources,
|
||||||
|
lease_device->resources,
|
||||||
|
l);
|
||||||
|
}
|
||||||
|
|
||||||
|
l = l_next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_active_session_changed (MetaLauncher *launcher,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
MetaWaylandDrmLeaseManager *lease_manager = user_data;
|
||||||
|
MetaWaylandDrmLeaseDevice *lease_device;
|
||||||
|
GHashTableIter iter;
|
||||||
|
|
||||||
|
if (!meta_launcher_is_session_active (launcher))
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, lease_manager->devices);
|
||||||
|
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &lease_device))
|
||||||
|
send_pending_on_device_bind_events (lease_manager, lease_device);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on_connector_added (MetaDrmLeaseManager *drm_lease_manager,
|
on_connector_added (MetaDrmLeaseManager *drm_lease_manager,
|
||||||
MetaKmsConnector *kms_connector,
|
MetaKmsConnector *kms_connector,
|
||||||
@ -714,6 +758,7 @@ meta_wayland_drm_lease_manager_new (MetaWaylandCompositor *compositor)
|
|||||||
{
|
{
|
||||||
MetaContext *context = meta_wayland_compositor_get_context (compositor);
|
MetaContext *context = meta_wayland_compositor_get_context (compositor);
|
||||||
MetaBackend *backend = meta_context_get_backend (context);
|
MetaBackend *backend = meta_context_get_backend (context);
|
||||||
|
MetaLauncher *launcher = meta_backend_get_launcher (backend);
|
||||||
MetaBackendNative *backend_native;
|
MetaBackendNative *backend_native;
|
||||||
MetaKms *kms;
|
MetaKms *kms;
|
||||||
MetaWaylandDrmLeaseManager *lease_manager;
|
MetaWaylandDrmLeaseManager *lease_manager;
|
||||||
@ -753,6 +798,13 @@ meta_wayland_drm_lease_manager_new (MetaWaylandCompositor *compositor)
|
|||||||
G_CALLBACK (on_connector_removed),
|
G_CALLBACK (on_connector_removed),
|
||||||
lease_manager);
|
lease_manager);
|
||||||
|
|
||||||
|
if (launcher)
|
||||||
|
{
|
||||||
|
g_signal_connect (launcher, "notify::session-active",
|
||||||
|
G_CALLBACK (on_active_session_changed),
|
||||||
|
lease_manager);
|
||||||
|
}
|
||||||
|
|
||||||
return lease_manager;
|
return lease_manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user