mirror of
https://github.com/brl/mutter.git
synced 2025-05-09 08:34:55 +00:00
tests/screen-cast: Also make it a remote desktop session
This will allow emitting input events / remote control too. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2270>
This commit is contained in:
parent
88cfd31f18
commit
d649445bb7
@ -191,6 +191,7 @@ if have_native_tests
|
|||||||
screen_cast_client = executable('mutter-screen-cast-client',
|
screen_cast_client = executable('mutter-screen-cast-client',
|
||||||
sources: [
|
sources: [
|
||||||
'screen-cast-client.c',
|
'screen-cast-client.c',
|
||||||
|
dbus_remote_desktop_built_sources,
|
||||||
dbus_screen_cast_built_sources,
|
dbus_screen_cast_built_sources,
|
||||||
],
|
],
|
||||||
include_directories: tests_includes,
|
include_directories: tests_includes,
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
||||||
|
#include "meta-dbus-remote-desktop.h"
|
||||||
#include "meta-dbus-screen-cast.h"
|
#include "meta-dbus-screen-cast.h"
|
||||||
|
|
||||||
typedef struct _Stream
|
typedef struct _Stream
|
||||||
@ -46,9 +47,15 @@ typedef struct _Stream
|
|||||||
|
|
||||||
typedef struct _Session
|
typedef struct _Session
|
||||||
{
|
{
|
||||||
MetaDBusScreenCastSession *proxy;
|
MetaDBusScreenCastSession *screen_cast_session_proxy;
|
||||||
|
MetaDBusRemoteDesktopSession *remote_desktop_session_proxy;
|
||||||
} Session;
|
} Session;
|
||||||
|
|
||||||
|
typedef struct _RemoteDesktop
|
||||||
|
{
|
||||||
|
MetaDBusRemoteDesktop *proxy;
|
||||||
|
} RemoteDesktop;
|
||||||
|
|
||||||
typedef struct _ScreenCast
|
typedef struct _ScreenCast
|
||||||
{
|
{
|
||||||
MetaDBusScreenCast *proxy;
|
MetaDBusScreenCast *proxy;
|
||||||
@ -453,9 +460,10 @@ session_start (Session *session)
|
|||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
if (!meta_dbus_screen_cast_session_call_start_sync (session->proxy,
|
if (!meta_dbus_remote_desktop_session_call_start_sync (
|
||||||
NULL,
|
session->remote_desktop_session_proxy,
|
||||||
&error))
|
NULL,
|
||||||
|
&error))
|
||||||
g_error ("Failed to start session: %s", error->message);
|
g_error ("Failed to start session: %s", error->message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -464,9 +472,10 @@ session_stop (Session *session)
|
|||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
if (!meta_dbus_screen_cast_session_call_stop_sync (session->proxy,
|
if (!meta_dbus_remote_desktop_session_call_stop_sync (
|
||||||
NULL,
|
session->remote_desktop_session_proxy,
|
||||||
&error))
|
NULL,
|
||||||
|
&error))
|
||||||
g_error ("Failed to stop session: %s", error->message);
|
g_error ("Failed to stop session: %s", error->message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -485,7 +494,7 @@ session_record_virtual (Session *session,
|
|||||||
properties_variant = g_variant_builder_end (&properties_builder);
|
properties_variant = g_variant_builder_end (&properties_builder);
|
||||||
|
|
||||||
if (!meta_dbus_screen_cast_session_call_record_virtual_sync (
|
if (!meta_dbus_screen_cast_session_call_record_virtual_sync (
|
||||||
session->proxy,
|
session->screen_cast_session_proxy,
|
||||||
properties_variant,
|
properties_variant,
|
||||||
&stream_path,
|
&stream_path,
|
||||||
NULL,
|
NULL,
|
||||||
@ -498,21 +507,14 @@ session_record_virtual (Session *session,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Session *
|
static Session *
|
||||||
session_new (const char *path)
|
session_new (MetaDBusRemoteDesktopSession *remote_desktop_session_proxy,
|
||||||
|
MetaDBusScreenCastSession *screen_cast_session_proxy)
|
||||||
{
|
{
|
||||||
Session *session;
|
Session *session;
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
session = g_new0 (Session, 1);
|
session = g_new0 (Session, 1);
|
||||||
session->proxy = meta_dbus_screen_cast_session_proxy_new_for_bus_sync (
|
session->remote_desktop_session_proxy = remote_desktop_session_proxy;
|
||||||
G_BUS_TYPE_SESSION,
|
session->screen_cast_session_proxy = screen_cast_session_proxy;
|
||||||
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
|
||||||
"org.gnome.Mutter.ScreenCast",
|
|
||||||
path,
|
|
||||||
NULL,
|
|
||||||
&error);
|
|
||||||
if (!session->proxy)
|
|
||||||
g_error ("Failed to acquire proxy: %s", error->message);
|
|
||||||
|
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
@ -520,34 +522,103 @@ session_new (const char *path)
|
|||||||
static void
|
static void
|
||||||
session_free (Session *session)
|
session_free (Session *session)
|
||||||
{
|
{
|
||||||
g_clear_object (&session->proxy);
|
g_clear_object (&session->screen_cast_session_proxy);
|
||||||
|
g_clear_object (&session->remote_desktop_session_proxy);
|
||||||
g_free (session);
|
g_free (session);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Session *
|
static Session *
|
||||||
screen_cast_create_session (ScreenCast *screen_cast)
|
screen_cast_create_session (RemoteDesktop *remote_desktop,
|
||||||
|
ScreenCast *screen_cast)
|
||||||
{
|
{
|
||||||
GVariantBuilder properties_builder;
|
GVariantBuilder properties_builder;
|
||||||
GVariant *properties_variant;
|
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
g_autofree char *session_path = NULL;
|
g_autofree char *remote_desktop_session_path = NULL;
|
||||||
|
MetaDBusRemoteDesktopSession *remote_desktop_session_proxy;
|
||||||
|
g_autofree char *screen_cast_session_path = NULL;
|
||||||
|
MetaDBusScreenCastSession *screen_cast_session_proxy;
|
||||||
|
const char *session_id;
|
||||||
Session *session;
|
Session *session;
|
||||||
|
|
||||||
g_variant_builder_init (&properties_builder, G_VARIANT_TYPE ("a{sv}"));
|
if (!meta_dbus_remote_desktop_call_create_session_sync (
|
||||||
properties_variant = g_variant_builder_end (&properties_builder);
|
remote_desktop->proxy,
|
||||||
|
&remote_desktop_session_path,
|
||||||
if (!meta_dbus_screen_cast_call_create_session_sync (screen_cast->proxy,
|
NULL,
|
||||||
properties_variant,
|
&error))
|
||||||
&session_path,
|
|
||||||
NULL,
|
|
||||||
&error))
|
|
||||||
g_error ("Failed to create session: %s", error->message);
|
g_error ("Failed to create session: %s", error->message);
|
||||||
|
|
||||||
session = session_new (session_path);
|
remote_desktop_session_proxy =
|
||||||
|
meta_dbus_remote_desktop_session_proxy_new_for_bus_sync (
|
||||||
|
G_BUS_TYPE_SESSION,
|
||||||
|
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
||||||
|
"org.gnome.Mutter.RemoteDesktop",
|
||||||
|
remote_desktop_session_path,
|
||||||
|
NULL,
|
||||||
|
&error);
|
||||||
|
if (!remote_desktop_session_proxy)
|
||||||
|
g_error ("Failed to acquire proxy: %s", error->message);
|
||||||
|
|
||||||
|
session_id =
|
||||||
|
meta_dbus_remote_desktop_session_get_session_id (
|
||||||
|
remote_desktop_session_proxy);
|
||||||
|
|
||||||
|
g_variant_builder_init (&properties_builder, G_VARIANT_TYPE ("a{sv}"));
|
||||||
|
g_variant_builder_add (&properties_builder, "{sv}",
|
||||||
|
"remote-desktop-session-id",
|
||||||
|
g_variant_new_string (session_id));
|
||||||
|
|
||||||
|
if (!meta_dbus_screen_cast_call_create_session_sync (
|
||||||
|
screen_cast->proxy,
|
||||||
|
g_variant_builder_end (&properties_builder),
|
||||||
|
&screen_cast_session_path,
|
||||||
|
NULL,
|
||||||
|
&error))
|
||||||
|
g_error ("Failed to create session: %s", error->message);
|
||||||
|
|
||||||
|
screen_cast_session_proxy =
|
||||||
|
meta_dbus_screen_cast_session_proxy_new_for_bus_sync (
|
||||||
|
G_BUS_TYPE_SESSION,
|
||||||
|
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
||||||
|
"org.gnome.Mutter.ScreenCast",
|
||||||
|
screen_cast_session_path,
|
||||||
|
NULL,
|
||||||
|
&error);
|
||||||
|
if (!screen_cast_session_proxy)
|
||||||
|
g_error ("Failed to acquire proxy: %s", error->message);
|
||||||
|
|
||||||
|
session = session_new (remote_desktop_session_proxy,
|
||||||
|
screen_cast_session_proxy);
|
||||||
g_assert_nonnull (session);
|
g_assert_nonnull (session);
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static RemoteDesktop *
|
||||||
|
remote_desktop_new (void)
|
||||||
|
{
|
||||||
|
RemoteDesktop *remote_desktop;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
remote_desktop = g_new0 (RemoteDesktop, 1);
|
||||||
|
remote_desktop->proxy = meta_dbus_remote_desktop_proxy_new_for_bus_sync (
|
||||||
|
G_BUS_TYPE_SESSION,
|
||||||
|
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
||||||
|
"org.gnome.Mutter.RemoteDesktop",
|
||||||
|
"/org/gnome/Mutter/RemoteDesktop",
|
||||||
|
NULL,
|
||||||
|
&error);
|
||||||
|
if (!remote_desktop->proxy)
|
||||||
|
g_error ("Failed to acquire proxy: %s", error->message);
|
||||||
|
|
||||||
|
return remote_desktop;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
remote_desktop_free (RemoteDesktop *remote_desktop)
|
||||||
|
{
|
||||||
|
g_clear_object (&remote_desktop->proxy);
|
||||||
|
g_free (remote_desktop);
|
||||||
|
}
|
||||||
|
|
||||||
static ScreenCast *
|
static ScreenCast *
|
||||||
screen_cast_new (void)
|
screen_cast_new (void)
|
||||||
{
|
{
|
||||||
@ -579,14 +650,16 @@ int
|
|||||||
main (int argc,
|
main (int argc,
|
||||||
char **argv)
|
char **argv)
|
||||||
{
|
{
|
||||||
|
RemoteDesktop *remote_desktop;
|
||||||
ScreenCast *screen_cast;
|
ScreenCast *screen_cast;
|
||||||
Session *session;
|
Session *session;
|
||||||
Stream *stream;
|
Stream *stream;
|
||||||
|
|
||||||
init_pipewire ();
|
init_pipewire ();
|
||||||
|
|
||||||
|
remote_desktop = remote_desktop_new ();
|
||||||
screen_cast = screen_cast_new ();
|
screen_cast = screen_cast_new ();
|
||||||
session = screen_cast_create_session (screen_cast);
|
session = screen_cast_create_session (remote_desktop, screen_cast);
|
||||||
stream = session_record_virtual (session, 50, 40);
|
stream = session_record_virtual (session, 50, 40);
|
||||||
|
|
||||||
session_start (session);
|
session_start (session);
|
||||||
@ -613,11 +686,15 @@ main (int argc,
|
|||||||
g_assert_cmpint (stream->spa_format.size.height, ==, 40);
|
g_assert_cmpint (stream->spa_format.size.height, ==, 40);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check that resizing works */
|
||||||
|
stream_resize (stream, 60, 60);
|
||||||
|
|
||||||
session_stop (session);
|
session_stop (session);
|
||||||
|
|
||||||
stream_free (stream);
|
stream_free (stream);
|
||||||
session_free (session);
|
session_free (session);
|
||||||
screen_cast_free (screen_cast);
|
screen_cast_free (screen_cast);
|
||||||
|
remote_desktop_free (remote_desktop);
|
||||||
|
|
||||||
release_pipewire ();
|
release_pipewire ();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user