summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2018-01-29 14:38:13 +0800
committerJonas Ådahl <jadahl@gmail.com>2018-02-23 19:33:31 +0800
commit5ee825c0816ca5391702ac6271bd1d30a900ddb1 (patch)
treea65b0d44299a35f09203aebed58c59c91272154b
parent1ead513b66a6bb9ce62255e685aa8d0d9f8ff34c (diff)
downloadmutter-5ee825c0816ca5391702ac6271bd1d30a900ddb1.tar.gz
remote-desktop: Add keyboard keycode event support
Keyboard keycode events will act as a physical keyboard thus depend on the active keyboard layout.
-rw-r--r--src/backends/meta-remote-desktop-session.c33
-rw-r--r--src/org.gnome.Mutter.RemoteDesktop.xml10
2 files changed, 43 insertions, 0 deletions
diff --git a/src/backends/meta-remote-desktop-session.c b/src/backends/meta-remote-desktop-session.c
index 3c39ef6e4..eaf6e718b 100644
--- a/src/backends/meta-remote-desktop-session.c
+++ b/src/backends/meta-remote-desktop-session.c
@@ -256,6 +256,38 @@ handle_stop (MetaDBusRemoteDesktopSession *skeleton,
}
static gboolean
+handle_notify_keyboard_keycode (MetaDBusRemoteDesktopSession *skeleton,
+ GDBusMethodInvocation *invocation,
+ unsigned int keycode,
+ gboolean pressed)
+{
+ MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
+ ClutterKeyState state;
+
+ if (!check_permission (session, invocation))
+ {
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
+ G_DBUS_ERROR_ACCESS_DENIED,
+ "Permission denied");
+ return TRUE;
+ }
+
+ if (pressed)
+ state = CLUTTER_KEY_STATE_PRESSED;
+ else
+ state = CLUTTER_KEY_STATE_RELEASED;
+
+ clutter_virtual_input_device_notify_key (session->virtual_keyboard,
+ CLUTTER_CURRENT_TIME,
+ keycode,
+ state);
+
+ meta_dbus_remote_desktop_session_complete_notify_keyboard_keycode (skeleton,
+ invocation);
+ return TRUE;
+}
+
+static gboolean
handle_notify_keyboard_keysym (MetaDBusRemoteDesktopSession *skeleton,
GDBusMethodInvocation *invocation,
unsigned int keysym,
@@ -445,6 +477,7 @@ meta_remote_desktop_session_init_iface (MetaDBusRemoteDesktopSessionIface *iface
{
iface->handle_start = handle_start;
iface->handle_stop = handle_stop;
+ iface->handle_notify_keyboard_keycode = handle_notify_keyboard_keycode;
iface->handle_notify_keyboard_keysym = handle_notify_keyboard_keysym;
iface->handle_notify_pointer_button = handle_notify_pointer_button;
iface->handle_notify_pointer_axis_discrete = handle_notify_pointer_axis_discrete;
diff --git a/src/org.gnome.Mutter.RemoteDesktop.xml b/src/org.gnome.Mutter.RemoteDesktop.xml
index 7807f1608..4af5fe317 100644
--- a/src/org.gnome.Mutter.RemoteDesktop.xml
+++ b/src/org.gnome.Mutter.RemoteDesktop.xml
@@ -58,6 +58,16 @@
<signal name="Closed" />
<!--
+ NotifyKeyboardKeycode:
+
+ A key identified by a keysym was pressed or released
+ -->
+ <method name="NotifyKeyboardKeycode">
+ <arg name="keycode" type="u" direction="in" />
+ <arg name="state" type="b" direction="in" />
+ </method>
+
+ <!--
NotifyKeyboardKeysym:
A key identified by a keysym was pressed or released