diff options
author | Giovanni Campagna <gcampagn@redhat.com> | 2013-07-16 14:37:49 +0200 |
---|---|---|
committer | Giovanni Campagna <gcampagn@redhat.com> | 2013-08-28 11:12:44 +0200 |
commit | 7f07b4a0fcaaeaa0f53b5e8c078b0e4e886c3e7a (patch) | |
tree | 9dfa817134a0433ee62be7fa48b2b05b8c04f4d3 | |
parent | c9a9c5fe79c63ca46990c42e77869a9a845a8aee (diff) | |
download | mutter-7f07b4a0fcaaeaa0f53b5e8c078b0e4e886c3e7a.tar.gz |
Add keybindings for switching VTswip/wayland-bare-metal
Once mutter is started from weston-launch on its own VT, there is
no way to change VT again (for example to actually start an application),
because the keyboard is put in raw mode.
So introduce some keybindings mimicking the standard X ones (Ctrl+Alt+Fn)
that switch the VT manually when activated.
https://bugzilla.gnome.org/show_bug.cgi?id=705861
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/core/keybindings.c | 94 | ||||
-rw-r--r-- | src/org.gnome.mutter.wayland.gschema.xml.in | 33 |
3 files changed, 128 insertions, 1 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 462e8a82d..a2648f8d5 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -319,7 +319,7 @@ xml_DATA = $(xml_in_files:.xml.in=.xml) dbus_idle_built_sources = meta-dbus-idle-monitor.c meta-dbus-idle-monitor.h -gsettings_SCHEMAS = org.gnome.mutter.gschema.xml +gsettings_SCHEMAS = org.gnome.mutter.gschema.xml org.gnome.mutter.wayland.gschema.xml @INTLTOOL_XML_NOMERGE_RULE@ @GSETTINGS_RULES@ diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 7f58334f8..5b8be79e8 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -53,8 +53,13 @@ #include <X11/XKBlib.h> #endif +#ifdef HAVE_WAYLAND +#include "meta-wayland-private.h" +#endif + #define SCHEMA_COMMON_KEYBINDINGS "org.gnome.desktop.wm.keybindings" #define SCHEMA_MUTTER_KEYBINDINGS "org.gnome.mutter.keybindings" +#define SCHEMA_MUTTER_WAYLAND_KEYBINDINGS "org.gnome.mutter.wayland.keybindings" static gboolean add_builtin_keybinding (MetaDisplay *display, const char *name, @@ -4098,6 +4103,40 @@ handle_set_spew_mark (MetaDisplay *display, meta_verbose ("-- MARK MARK MARK MARK --\n"); } +#ifdef HAVE_WAYLAND +static void +handle_switch_vt (MetaDisplay *display, + MetaScreen *screen, + MetaWindow *window, + XIDeviceEvent *event, + MetaKeyBinding *binding, + gpointer dummy) +{ + gint vt = binding->handler->data; + MetaWaylandCompositor *compositor; + MetaLauncher *launcher; + + compositor = meta_wayland_compositor_get_default (); + launcher = meta_wayland_compositor_get_launcher (compositor); + + if (launcher) + { + GError *error; + + error = NULL; + if (!meta_launcher_activate_vt (launcher, vt, &error)) + { + g_warning ("Failed to switch VT: %s", error->message); + g_error_free (error); + } + } + else + { + g_debug ("Ignoring VT switch keybinding, not running as VT manager"); + } +} +#endif + /** * meta_keybindings_set_custom_handler: * @name: The name of the keybinding to set @@ -4161,6 +4200,7 @@ init_builtin_key_bindings (MetaDisplay *display) META_KEY_BINDING_IS_REVERSED) GSettings *common_keybindings = g_settings_new (SCHEMA_COMMON_KEYBINDINGS); GSettings *mutter_keybindings = g_settings_new (SCHEMA_MUTTER_KEYBINDINGS); + GSettings *mutter_wayland_keybindings = g_settings_new (SCHEMA_MUTTER_WAYLAND_KEYBINDINGS); add_builtin_keybinding (display, "switch-to-workspace-1", @@ -4422,6 +4462,60 @@ init_builtin_key_bindings (MetaDisplay *display) META_KEYBINDING_ACTION_SET_SPEW_MARK, handle_set_spew_mark, 0); +#ifdef HAVE_WAYLAND + if (meta_is_wayland_compositor ()) + { + add_builtin_keybinding (display, + "switch-to-session-1", + mutter_wayland_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 1); + + add_builtin_keybinding (display, + "switch-to-session-2", + mutter_wayland_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 2); + + add_builtin_keybinding (display, + "switch-to-session-3", + mutter_wayland_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 3); + + add_builtin_keybinding (display, + "switch-to-session-4", + mutter_wayland_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 4); + + add_builtin_keybinding (display, + "switch-to-session-5", + mutter_wayland_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 5); + + add_builtin_keybinding (display, + "switch-to-session-6", + mutter_wayland_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 6); + + add_builtin_keybinding (display, + "switch-to-session-7", + mutter_wayland_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 7); + } +#endif + #undef REVERSES_AND_REVERSED /************************ PER WINDOW BINDINGS ************************/ diff --git a/src/org.gnome.mutter.wayland.gschema.xml.in b/src/org.gnome.mutter.wayland.gschema.xml.in new file mode 100644 index 000000000..4bb5c1dfd --- /dev/null +++ b/src/org.gnome.mutter.wayland.gschema.xml.in @@ -0,0 +1,33 @@ +<schemalist> + <schema id="org.gnome.mutter.wayland.keybindings" path="/org/gnome/mutter/wayland/keybindings/" + gettext-domain="@GETTEXT_DOMAIN@"> + <key name="switch-to-session-1" type="as"> + <default><![CDATA[['<Primary><Alt>F1']]]></default> + <_summary>Switch to VT 1</_summary> + </key> + <key name="switch-to-session-2" type="as"> + <default><![CDATA[['<Primary><Alt>F2']]]></default> + <_summary>Switch to VT 2</_summary> + </key> + <key name="switch-to-session-3" type="as"> + <default><![CDATA[['<Primary><Alt>F3']]]></default> + <_summary>Switch to VT 3</_summary> + </key> + <key name="switch-to-session-4" type="as"> + <default><![CDATA[['<Primary><Alt>F4']]]></default> + <_summary>Switch to VT 4</_summary> + </key> + <key name="switch-to-session-5" type="as"> + <default><![CDATA[['<Primary><Alt>F5']]]></default> + <_summary>Switch to VT 5</_summary> + </key> + <key name="switch-to-session-6" type="as"> + <default><![CDATA[['<Primary><Alt>F6']]]></default> + <_summary>Switch to VT 6</_summary> + </key> + <key name="switch-to-session-7" type="as"> + <default><![CDATA[['<Primary><Alt>F7']]]></default> + <_summary>Switch to VT 7</_summary> + </key> + </schema> +</schemalist> |