[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