[gnome-terminal] server: Use UUIDs to generate the terminal IDs
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-terminal] server: Use UUIDs to generate the terminal IDs
- Date: Fri, 21 Jun 2013 13:21:48 +0000 (UTC)
commit b40078ffd9ae832167fc49091299fef84cbabba0
Author: Christian Persch <chpe gnome org>
Date: Mon Feb 18 16:08:51 2013 +0100
server: Use UUIDs to generate the terminal IDs
Conflicts:
src/terminal-window.c
src/terminal-defines.h | 2 +-
src/terminal-gdbus.c | 16 +++++++++++++---
src/terminal-screen.c | 17 +++++++++++++++++
src/terminal-screen.h | 2 ++
src/terminal-window.c | 27 +++++++++++++++++++++++++++
src/terminal-window.h | 4 ++++
6 files changed, 64 insertions(+), 4 deletions(-)
---
diff --git a/src/terminal-defines.h b/src/terminal-defines.h
index f8adcf8..03b2da1 100644
--- a/src/terminal-defines.h
+++ b/src/terminal-defines.h
@@ -28,7 +28,7 @@ G_BEGIN_DECLS
#define TERMINAL_FACTORY_OBJECT_PATH TERMINAL_OBJECT_PATH_PREFIX "/Factory0"
#define TERMINAL_FACTORY_INTERFACE_NAME TERMINAL_OBJECT_INTERFACE_PREFIX ".Factory0"
-#define TERMINAL_RECEIVER_OBJECT_PATH_PREFIX TERMINAL_OBJECT_PATH_PREFIX "/Terminals"
+#define TERMINAL_RECEIVER_OBJECT_PATH_FORMAT TERMINAL_OBJECT_PATH_PREFIX "/window/%u/terminal/%s"
#define TEMRINAL_RECEIVER_INTERFACE_NAME TERMINAL_OBJECT_INTERFACE_PREFIX ".Terminal0"
G_END_DECLS
diff --git a/src/terminal-gdbus.c b/src/terminal-gdbus.c
index 2893d03..0e90127 100644
--- a/src/terminal-gdbus.c
+++ b/src/terminal-gdbus.c
@@ -44,6 +44,17 @@ enum {
/* helper functions */
+static char *
+get_object_path_for_screen (TerminalWindow *window,
+ TerminalScreen *screen)
+{
+ return g_strdelimit (g_strdup_printf (TERMINAL_RECEIVER_OBJECT_PATH_FORMAT,
+ gtk_application_window_get_id (GTK_APPLICATION_WINDOW (window)),
+ terminal_screen_get_uuid (screen)),
+ "-", '_');
+
+}
+
static void
child_exited_cb (VteTerminal *terminal,
TerminalReceiver *receiver)
@@ -459,9 +470,8 @@ terminal_factory_impl_create_instance (TerminalFactory *factory,
terminal_window_switch_screen (window, screen);
gtk_widget_grab_focus (GTK_WIDGET (screen));
- object_path = g_strdup_printf (TERMINAL_RECEIVER_OBJECT_PATH_PREFIX "/window/%u/terminal/%u",
- gtk_application_window_get_id (GTK_APPLICATION_WINDOW (window)),
- terminal_mdi_container_get_n_screens (TERMINAL_MDI_CONTAINER
(terminal_window_get_mdi_container (window))));
+ object_path = get_object_path_for_screen (window, screen);
+ g_assert (g_variant_is_object_path (object_path));
skeleton = terminal_object_skeleton_new (object_path);
impl = terminal_receiver_impl_new (screen);
diff --git a/src/terminal-screen.c b/src/terminal-screen.c
index f789940..0d42b10 100644
--- a/src/terminal-screen.c
+++ b/src/terminal-screen.c
@@ -27,6 +27,7 @@
#include <unistd.h>
#include <sys/wait.h>
#include <fcntl.h>
+#include <uuid.h>
#include <glib.h>
#include <glib/gi18n.h>
@@ -70,6 +71,8 @@ typedef struct
struct _TerminalScreenPrivate
{
+ char *uuid;
+
GSettings *profile; /* never NULL */
guint profile_changed_id;
guint profile_forgotten_id;
@@ -305,9 +308,15 @@ terminal_screen_init (TerminalScreen *screen)
GtkTargetEntry *targets;
int n_targets;
guint i;
+ uuid_t u;
+ char uuidstr[37];
priv = screen->priv = G_TYPE_INSTANCE_GET_PRIVATE (screen, TERMINAL_TYPE_SCREEN, TerminalScreenPrivate);
+ uuid_generate (u);
+ uuid_unparse (u, uuidstr);
+ priv->uuid = g_strdup (uuidstr);
+
vte_terminal_set_mouse_autohide (terminal, TRUE);
vte_terminal_set_background_image (terminal, NULL);
vte_terminal_set_scroll_background (terminal, FALSE);
@@ -2140,3 +2149,11 @@ terminal_screen_has_foreground_process (TerminalScreen *screen)
return TRUE;
#endif
}
+
+const char *
+terminal_screen_get_uuid (TerminalScreen *screen)
+{
+ g_return_val_if_fail (TERMINAL_IS_SCREEN (screen), NULL);
+
+ return screen->priv->uuid;
+}
diff --git a/src/terminal-screen.h b/src/terminal-screen.h
index 00c5062..e773006 100644
--- a/src/terminal-screen.h
+++ b/src/terminal-screen.h
@@ -72,6 +72,8 @@ struct _TerminalScreenClass
GType terminal_screen_get_type (void) G_GNUC_CONST;
+const char *terminal_screen_get_uuid (TerminalScreen *screen);
+
TerminalScreen *terminal_screen_new (GSettings *profile,
char **override_command,
const char *title,
diff --git a/src/terminal-window.c b/src/terminal-window.c
index 80c9f16..f28af03 100644
--- a/src/terminal-window.c
+++ b/src/terminal-window.c
@@ -29,6 +29,7 @@
#ifdef GDK_WINDOWING_X11
#include <gdk/gdkx.h>
#endif
+#include <uuid.h>
#include "terminal-app.h"
#include "terminal-debug.h"
@@ -47,6 +48,8 @@
struct _TerminalWindowPrivate
{
+ char *uuid;
+
GtkActionGroup *action_group;
GtkUIManager *ui_manager;
guint ui_id;
@@ -1755,9 +1758,15 @@ terminal_window_init (TerminalWindow *window)
GtkWindowGroup *window_group;
GtkAccelGroup *accel_group;
GtkClipboard *clipboard;
+ uuid_t u;
+ char uuidstr[37];
priv = window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, TERMINAL_TYPE_WINDOW, TerminalWindowPrivate);
+ uuid_generate (u);
+ uuid_unparse (u, uuidstr);
+ priv->uuid = g_strdup (uuidstr);
+
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK(terminal_window_delete_event),
NULL);
@@ -1999,6 +2008,8 @@ terminal_window_finalize (GObject *object)
gtk_dialog_response (GTK_DIALOG (priv->search_find_dialog),
GTK_RESPONSE_DELETE_EVENT);
+ g_free (priv->uuid);
+
G_OBJECT_CLASS (terminal_window_parent_class)->finalize (object);
}
@@ -3536,3 +3547,19 @@ terminal_window_request_close (TerminalWindow *window)
gtk_widget_destroy (GTK_WIDGET (window));
}
+
+GtkActionGroup *
+terminal_window_get_main_action_group (TerminalWindow *window)
+{
+ TerminalWindowPrivate *priv = window->priv;
+
+ return priv->action_group;
+}
+
+const char *
+terminal_window_get_uuid (TerminalWindow *window)
+{
+ g_return_val_if_fail (TERMINAL_IS_WINDOW (window), NULL);
+
+ return window->priv->uuid;
+}
diff --git a/src/terminal-window.h b/src/terminal-window.h
index 1f2191d..9ef2d91 100644
--- a/src/terminal-window.h
+++ b/src/terminal-window.h
@@ -87,6 +87,10 @@ GtkWidget* terminal_window_get_mdi_container (TerminalWindow *window);
void terminal_window_request_close (TerminalWindow *window);
+GtkActionGroup *terminal_window_get_main_action_group (TerminalWindow *window);
+
+const char *terminal_window_get_uuid (TerminalWindow *window);
+
G_END_DECLS
#endif /* TERMINAL_WINDOW_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]