diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/keybindings.c | 92 | ||||
-rw-r--r-- | src/org.gnome.mutter.gschema.xml.in | 29 | ||||
-rw-r--r-- | src/wayland/meta-tty.c | 17 | ||||
-rw-r--r-- | src/wayland/meta-tty.h | 4 | ||||
-rw-r--r-- | src/wayland/meta-wayland-private.h | 2 | ||||
-rw-r--r-- | src/wayland/meta-wayland.c | 6 |
6 files changed, 145 insertions, 5 deletions
diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 8439ea830..bfc06c3c6 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -53,6 +53,10 @@ #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" @@ -4081,6 +4085,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; + MetaTTY *tty; + + compositor = meta_wayland_compositor_get_default (); + tty = meta_wayland_compositor_get_tty (compositor); + + if (tty) + { + GError *error; + + error = NULL; + if (!meta_tty_activate_vt (tty, 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 @@ -4405,6 +4443,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_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 1); + + add_builtin_keybinding (display, + "switch-to-session-2", + mutter_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 2); + + add_builtin_keybinding (display, + "switch-to-session-3", + mutter_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 3); + + add_builtin_keybinding (display, + "switch-to-session-4", + mutter_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 4); + + add_builtin_keybinding (display, + "switch-to-session-5", + mutter_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 5); + + add_builtin_keybinding (display, + "switch-to-session-6", + mutter_keybindings, + META_KEY_BINDING_NONE, + META_KEYBINDING_ACTION_NONE, + handle_switch_vt, 6); + + add_builtin_keybinding (display, + "switch-to-session-7", + mutter_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.gschema.xml.in b/src/org.gnome.mutter.gschema.xml.in index 9d83cf3aa..81566cf2b 100644 --- a/src/org.gnome.mutter.gschema.xml.in +++ b/src/org.gnome.mutter.gschema.xml.in @@ -116,5 +116,34 @@ <_summary>Cancel tab popup</_summary> </key> + <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> diff --git a/src/wayland/meta-tty.c b/src/wayland/meta-tty.c index 0ac342a46..859f9cadc 100644 --- a/src/wayland/meta-tty.c +++ b/src/wayland/meta-tty.c @@ -157,12 +157,19 @@ try_open_vt (MetaTTY *tty, return fd; } -/* FIXME? */ -static int -tty_activate_vt (MetaTTY *tty, - int vt) +gboolean +meta_tty_activate_vt (MetaTTY *tty, + int vt, + GError **error) { - return ioctl(tty->fd, VT_ACTIVATE, vt); + if (ioctl(tty->fd, VT_ACTIVATE, vt) < 0) + { + g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), + strerror (errno)); + return FALSE; + } + else + return TRUE; } static int diff --git a/src/wayland/meta-tty.h b/src/wayland/meta-tty.h index 2c3bf2adc..f5a24644b 100644 --- a/src/wayland/meta-tty.h +++ b/src/wayland/meta-tty.h @@ -38,6 +38,10 @@ GType meta_tty_get_type (void) G_GNUC_CONST; MetaTTY *meta_tty_new (void); +gboolean meta_tty_activate_vt (MetaTTY *self, + int number, + GError **error); + G_END_DECLS #endif /* META_TTY_H */ diff --git a/src/wayland/meta-wayland-private.h b/src/wayland/meta-wayland-private.h index 7d111ec42..7f99493c9 100644 --- a/src/wayland/meta-wayland-private.h +++ b/src/wayland/meta-wayland-private.h @@ -359,6 +359,8 @@ void meta_wayland_compositor_repick (MetaWaylandComp void meta_wayland_compositor_set_input_focus (MetaWaylandCompositor *compositor, MetaWindow *window); +MetaTTY *meta_wayland_compositor_get_tty (MetaWaylandCompositor *compositor); + void meta_wayland_surface_free (MetaWaylandSurface *surface); #endif /* META_WAYLAND_PRIVATE_H */ diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c index 3cd71f248..01ad4379b 100644 --- a/src/wayland/meta-wayland.c +++ b/src/wayland/meta-wayland.c @@ -1589,3 +1589,9 @@ meta_wayland_finalize (void) meta_xwayland_stop (compositor); g_clear_object (&compositor->tty); } + +MetaTTY * +meta_wayland_compositor_get_tty (MetaWaylandCompositor *compositor) +{ + return compositor->tty; +} |