[mutter/wayland] meta-weston-launch: Call VT_ACTIVATE ourselves



commit ebe6e3180ed842445c5145c6947aae9c3fa270a5
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Tue Dec 31 17:44:35 2013 -0500

    meta-weston-launch: Call VT_ACTIVATE ourselves
    
    We don't need any special permissions, so we don't need to go through
    weston-launch to do so...

 src/core/keybindings.c             |   39 ++++++++++++++++-------------------
 src/wayland/meta-wayland-private.h |    1 -
 src/wayland/meta-wayland.c         |    6 -----
 src/wayland/meta-weston-launch.c   |   14 ------------
 src/wayland/meta-weston-launch.h   |    4 ---
 src/wayland/weston-launch.c        |   37 ----------------------------------
 src/wayland/weston-launch.h        |    3 +-
 7 files changed, 19 insertions(+), 85 deletions(-)
---
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 1f40c68..515e591 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -56,6 +56,9 @@
 
 #ifdef HAVE_WAYLAND
 #include "meta-wayland-private.h"
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <linux/vt.h>
 #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;
-
-    compositor = meta_wayland_compositor_get_default ();
-    launcher = meta_wayland_compositor_get_launcher (compositor);
+  gint vt = binding->handler->data;
 
-    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 e444ae5..3533034 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 4cee683..20d0dcd 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 709eacc..184a48d 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 19d3756..ea45308 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 773eea4..cbd7c9e 100644
--- a/src/wayland/weston-launch.c
+++ b/src/wayland/weston-launch.c
@@ -270,40 +270,6 @@ out:
 }
 
 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)
 {
         struct weston_launcher_reply reply;
@@ -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 74e6c3b..63e2809 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 {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]