remote-desktop: Check for screencast only when required

The portal API requires a screencast session only for absolution motion
with remote desktop, other methods including relative motion do not
require a screencast session.

There is no reason to be more strict than the API actually is, check for
a screencast session only when required, like for absolute motion events
and touch events.

Tested with https://gitlab.gnome.org/snippets/1122

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1307
This commit is contained in:
Olivier Fourdan 2020-06-29 15:01:55 +02:00 committed by Georges Basile Stavracas Neto
parent c1933cfd09
commit b8524504f4

View File

@ -273,14 +273,6 @@ meta_remote_desktop_session_check_can_notify (MetaRemoteDesktopSession *session,
return FALSE; return FALSE;
} }
if (!session->screen_cast_session)
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"No screen cast active");
return FALSE;
}
return TRUE; return TRUE;
} }
@ -591,6 +583,15 @@ handle_notify_pointer_motion_absolute (MetaDBusRemoteDesktopSession *skeleton,
if (!meta_remote_desktop_session_check_can_notify (session, invocation)) if (!meta_remote_desktop_session_check_can_notify (session, invocation))
return TRUE; return TRUE;
if (!session->screen_cast_session)
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"No screen cast active");
return TRUE;
}
stream = meta_screen_cast_session_get_stream (session->screen_cast_session, stream = meta_screen_cast_session_get_stream (session->screen_cast_session,
stream_path); stream_path);
if (!stream) if (!stream)
@ -628,6 +629,14 @@ handle_notify_touch_down (MetaDBusRemoteDesktopSession *skeleton,
if (!meta_remote_desktop_session_check_can_notify (session, invocation)) if (!meta_remote_desktop_session_check_can_notify (session, invocation))
return TRUE; return TRUE;
if (!session->screen_cast_session)
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"No screen cast active");
return TRUE;
}
stream = meta_screen_cast_session_get_stream (session->screen_cast_session, stream = meta_screen_cast_session_get_stream (session->screen_cast_session,
stream_path); stream_path);
if (!stream) if (!stream)
@ -666,6 +675,15 @@ handle_notify_touch_motion (MetaDBusRemoteDesktopSession *skeleton,
if (!meta_remote_desktop_session_check_can_notify (session, invocation)) if (!meta_remote_desktop_session_check_can_notify (session, invocation))
return TRUE; return TRUE;
if (!session->screen_cast_session)
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
G_DBUS_ERROR_FAILED,
"No screen cast active");
return TRUE;
}
stream = meta_screen_cast_session_get_stream (session->screen_cast_session, stream = meta_screen_cast_session_get_stream (session->screen_cast_session,
stream_path); stream_path);
if (!stream) if (!stream)