diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 1f40c6841..515e591d1 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -56,6 +56,9 @@ #ifdef HAVE_WAYLAND #include "meta-wayland-private.h" +#include +#include +#include #endif #define SCHEMA_COMMON_KEYBINDINGS "org.gnome.desktop.wm.keybindings" @@ -4083,6 +4086,18 @@ handle_set_spew_mark (MetaDisplay *display, } #ifdef HAVE_WAYLAND +static gboolean +activate_vt (int vt) +{ + int tty, reply; + + tty = open ("/dev/tty", O_RDWR | O_NOCTTY | O_CLOEXEC); + reply = ioctl (tty, VT_ACTIVATE, vt); + close (tty); + + return (reply == 0); +} + static void handle_switch_vt (MetaDisplay *display, MetaScreen *screen, @@ -4091,28 +4106,10 @@ handle_switch_vt (MetaDisplay *display, MetaKeyBinding *binding, gpointer dummy) { - gint vt = binding->handler->data; - MetaWaylandCompositor *compositor; - MetaLauncher *launcher; + gint vt = binding->handler->data; - 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"); - } + if (!activate_vt (vt)) + g_warning ("Failed to switch VT"); } #endif diff --git a/src/wayland/meta-wayland-private.h b/src/wayland/meta-wayland-private.h index e444ae596..353303456 100644 --- a/src/wayland/meta-wayland-private.h +++ b/src/wayland/meta-wayland-private.h @@ -99,7 +99,6 @@ void meta_wayland_compositor_set_input_focus (MetaWaylandComp gboolean meta_wayland_compositor_handle_event (MetaWaylandCompositor *compositor, const ClutterEvent *event); -MetaLauncher *meta_wayland_compositor_get_launcher (MetaWaylandCompositor *compositor); gboolean meta_wayland_compositor_is_native (MetaWaylandCompositor *compositor); MetaWaylandBuffer * meta_wayland_buffer_from_resource (struct wl_resource *resource); diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c index 4cee683cc..20d0dcd28 100644 --- a/src/wayland/meta-wayland.c +++ b/src/wayland/meta-wayland.c @@ -754,12 +754,6 @@ meta_wayland_finalize (void) g_clear_object (&compositor->launcher); } -MetaLauncher * -meta_wayland_compositor_get_launcher (MetaWaylandCompositor *compositor) -{ - return compositor->launcher; -} - gboolean meta_wayland_compositor_is_native (MetaWaylandCompositor *compositor) { diff --git a/src/wayland/meta-weston-launch.c b/src/wayland/meta-weston-launch.c index 709eacc5a..184a48d94 100644 --- a/src/wayland/meta-weston-launch.c +++ b/src/wayland/meta-weston-launch.c @@ -437,17 +437,3 @@ meta_launcher_new (void) { return g_object_new (META_TYPE_LAUNCHER, NULL); } - -gboolean -meta_launcher_activate_vt (MetaLauncher *launcher, - int vt, - GError **error) -{ - struct weston_launcher_activate_vt message; - - message.header.opcode = WESTON_LAUNCHER_ACTIVATE_VT; - message.vt = vt; - - return send_message_to_wl (launcher, &message, sizeof (message), NULL, NULL, error); -} - diff --git a/src/wayland/meta-weston-launch.h b/src/wayland/meta-weston-launch.h index 19d3756a2..ea4530871 100644 --- a/src/wayland/meta-weston-launch.h +++ b/src/wayland/meta-weston-launch.h @@ -37,10 +37,6 @@ GType meta_launcher_get_type (void) G_GNUC_CONST; MetaLauncher *meta_launcher_new (void); -gboolean meta_launcher_activate_vt (MetaLauncher *self, - int number, - GError **error); - gboolean meta_launcher_set_drm_fd (MetaLauncher *self, int drm_fd, GError **error); diff --git a/src/wayland/weston-launch.c b/src/wayland/weston-launch.c index 773eea4bd..cbd7c9e67 100644 --- a/src/wayland/weston-launch.c +++ b/src/wayland/weston-launch.c @@ -269,40 +269,6 @@ out: return 0; } -static int -handle_activate_vt(struct weston_launch *wl, struct msghdr *msg, ssize_t len) -{ - struct weston_launcher_reply reply; - struct weston_launcher_activate_vt *message; - - reply.header.opcode = WESTON_LAUNCHER_ACTIVATE_VT; - reply.ret = -1; - - if (len != sizeof(*message)) { - error(0, 0, "missing value in activate_vt request"); - goto out; - } - - message = msg->msg_iov->iov_base; - - reply.ret = ioctl(wl->tty, VT_ACTIVATE, message->vt); - if (reply.ret < 0) - reply.ret = -errno; - - if (wl->verbose) - fprintf(stderr, "mutter-launch: activate VT, ret: %d\n", reply.ret); - -out: - do { - len = send(wl->sock[0], &reply, sizeof reply, 0); - } while (len < 0 && errno == EINTR); - if (len < 0) - return -1; - - return 0; -} - - static int handle_open(struct weston_launch *wl, struct msghdr *msg, ssize_t len) { @@ -419,9 +385,6 @@ handle_socket_msg(struct weston_launch *wl) case WESTON_LAUNCHER_CONFIRM_VT_SWITCH: ret = handle_confirm_vt_switch(wl, &msg, len); break; - case WESTON_LAUNCHER_ACTIVATE_VT: - ret = handle_activate_vt(wl, &msg, len); - break; } return ret; diff --git a/src/wayland/weston-launch.h b/src/wayland/weston-launch.h index 74e6c3be6..63e28098c 100644 --- a/src/wayland/weston-launch.h +++ b/src/wayland/weston-launch.h @@ -32,8 +32,7 @@ enum weston_launcher_message_type { enum weston_launcher_opcode { WESTON_LAUNCHER_OPEN = (1 << 1 | WESTON_LAUNCHER_REQUEST), WESTON_LAUNCHER_DRM_SET_FD = (2 << 1 | WESTON_LAUNCHER_REQUEST), - WESTON_LAUNCHER_ACTIVATE_VT = (3 << 1 | WESTON_LAUNCHER_REQUEST), - WESTON_LAUNCHER_CONFIRM_VT_SWITCH = (4 << 1 | WESTON_LAUNCHER_REQUEST), + WESTON_LAUNCHER_CONFIRM_VT_SWITCH = (3 << 1 | WESTON_LAUNCHER_REQUEST), }; enum weston_launcher_server_opcode {