[Xfce4-commits] <xfce4-terminal:master> Check display for the real display, not display.screen.

Nick Schermer noreply at xfce.org
Sun May 5 20:52:01 CEST 2013


Updating branch refs/heads/master
         to d1dc0d1f1ef0591d06ef7998c1956834bc4d9869 (commit)
       from 050981f5433a4b0d6fe04046353efb96ff4a68ed (commit)

commit d1dc0d1f1ef0591d06ef7998c1956834bc4d9869
Author: Nick Schermer <nick at xfce.org>
Date:   Sun May 5 20:50:33 2013 +0200

    Check display for the real display, not display.screen.
    
    Respond to a running version for the display (:0 and :1) not
    per screen (:0.0, :0.1).

 terminal/terminal-gdbus.c |   32 ++++++++++++++++++++++++++++++--
 1 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/terminal/terminal-gdbus.c b/terminal/terminal-gdbus.c
index 352d7cb..ee7a0ab 100644
--- a/terminal/terminal-gdbus.c
+++ b/terminal/terminal-gdbus.c
@@ -48,6 +48,27 @@ static const gchar terminal_gdbus_introspection_xml[] =
 
 
 
+static gchar *
+terminal_gdbus_display_name (void)
+{
+  const gchar *display_name;
+  gchar       *name;
+  gchar       *period;
+
+  display_name = g_getenv ("DISPLAY");
+  if (G_UNLIKELY (display_name == NULL))
+    return "";
+
+  name = g_strdup (display_name);
+  period = strrchr (name, '.');
+  if (period != NULL)
+    *period = '\0';
+
+  return name;
+}
+
+
+
 static void
 terminal_gdbus_method_call (GDBusConnection       *connection,
                             const gchar           *sender,
@@ -63,6 +84,7 @@ terminal_gdbus_method_call (GDBusConnection       *connection,
   gchar        *display_name = NULL;
   gchar       **argv = NULL;
   GError       *error = NULL;
+  gchar        *display_name2;
 
   terminal_return_if_fail (TERMINAL_IS_APP (app));
   terminal_return_if_fail (!g_strcmp0 (object_path, TERMINAL_DBUS_PATH));
@@ -73,13 +95,15 @@ terminal_gdbus_method_call (GDBusConnection       *connection,
       /* get paramenters */
       g_variant_get (parameters, "(u^ay^aay)", &uid, &display_name, &argv);
 
+      display_name2 = terminal_gdbus_display_name ();
+
       if (uid != getuid ())
         {
           g_dbus_method_invocation_return_error (invocation,
               TERMINAL_ERROR, TERMINAL_ERROR_USER_MISMATCH,
               _("User id mismatch"));
         }
-      else if (g_strcmp0 (display_name, g_getenv ("DISPLAY")) != 0)
+      else if (g_strcmp0 (display_name, display_name2) != 0)
         {
           g_dbus_method_invocation_return_error (invocation,
               TERMINAL_ERROR, TERMINAL_ERROR_DISPLAY_MISMATCH,
@@ -99,6 +123,7 @@ terminal_gdbus_method_call (GDBusConnection       *connection,
         }
 
       g_free (display_name);
+      g_free (display_name2);
       g_strfreev (argv);
     }
   else
@@ -184,6 +209,7 @@ terminal_gdbus_invoke_launch (gint     argc,
   GError          *err = NULL;
   gboolean         result;
   guint32          uid;
+  gchar           *display_name;
 
   terminal_return_val_if_fail (argc == (gint) g_strv_length (argv), FALSE);
 
@@ -193,6 +219,7 @@ terminal_gdbus_invoke_launch (gint     argc,
 
   /* store in an uin32 for gvariant */
   uid = getuid ();
+  display_name = terminal_gdbus_display_name ();
 
   reply = g_dbus_connection_call_sync (connection,
                                        TERMINAL_DBUS_SERVICE,
@@ -201,7 +228,7 @@ terminal_gdbus_invoke_launch (gint     argc,
                                        TERMINAL_DBUS_METHOD_LAUNCH,
                                        g_variant_new ("(u^ay^aay)",
                                                       uid,
-                                                      g_getenv ("DISPLAY"),
+                                                      display_name,
                                                       argv),
                                        NULL,
                                        G_DBUS_CALL_FLAGS_NO_AUTO_START,
@@ -210,6 +237,7 @@ terminal_gdbus_invoke_launch (gint     argc,
                                        &err);
 
   g_object_unref (connection);
+  g_free (display_name);
 
   result = (reply != NULL);
   if (G_LIKELY (result))


More information about the Xfce4-commits mailing list