[gnome-terminal] server: Use UUIDs to generate the terminal IDs



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]