[gnome-terminal] app: screen: Add API to map UUIDs to screens



commit 6a25d0388fcfc7d464ec73e67eedf73413df709a
Author: Debarshi Ray <debarshir gnome org>
Date:   Wed Jan 22 16:21:55 2014 +0100

    app: screen: Add API to map UUIDs to screens
    
    https://bugzilla.gnome.org/show_bug.cgi?id=711075

 src/terminal-app.c    |   34 ++++++++++++++++++++++++++++++++++
 src/terminal-app.h    |    9 +++++++++
 src/terminal-screen.c |   18 ++++++++++++++++++
 3 files changed, 61 insertions(+), 0 deletions(-)
---
diff --git a/src/terminal-app.c b/src/terminal-app.c
index c06c454..5834a18 100644
--- a/src/terminal-app.c
+++ b/src/terminal-app.c
@@ -78,6 +78,8 @@ struct _TerminalApp
   GHashTable *encodings;
   gboolean encodings_locked;
 
+  GHashTable *screen_map;
+
   GSettings *global_settings;
   GSettings *desktop_interface_settings;
   GSettings *system_proxy_settings;
@@ -372,6 +374,8 @@ terminal_app_init (TerminalApp *app)
                     G_CALLBACK (terminal_app_encoding_list_notify_cb),
                     app);
 
+  app->screen_map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
   settings = g_settings_get_child (app->global_settings, "keybindings");
   terminal_accels_init (G_APPLICATION (app), settings);
 }
@@ -385,6 +389,7 @@ terminal_app_finalize (GObject *object)
                                         G_CALLBACK (terminal_app_encoding_list_notify_cb),
                                         app);
   g_hash_table_destroy (app->encodings);
+  g_hash_table_destroy (app->screen_map);
 
   g_object_unref (app->global_settings);
   g_object_unref (app->desktop_interface_settings);
@@ -519,6 +524,35 @@ terminal_app_new_terminal (TerminalApp     *app,
   return screen;
 }
 
+TerminalScreen *
+terminal_app_get_screen_by_uuid (TerminalApp *app,
+                                 const char  *uuid)
+{
+  return g_hash_table_lookup (app->screen_map, uuid);
+}
+
+void
+terminal_app_register_screen (TerminalApp *app,
+                              TerminalScreen *screen)
+{
+  const char *uuid;
+
+  uuid = terminal_screen_get_uuid (screen);
+  g_hash_table_insert (app->screen_map, g_strdup (uuid), screen);
+}
+
+void
+terminal_app_unregister_screen (TerminalApp *app,
+                                TerminalScreen *screen)
+{
+  gboolean found;
+  const char *uuid;
+
+  uuid = terminal_screen_get_uuid (screen);
+  found = g_hash_table_remove (app->screen_map, uuid);
+  g_assert (found == TRUE);
+}
+
 void
 terminal_app_edit_profile (TerminalApp     *app,
                            GSettings       *profile,
diff --git a/src/terminal-app.h b/src/terminal-app.h
index 67d86c3..6da6036 100644
--- a/src/terminal-app.h
+++ b/src/terminal-app.h
@@ -80,6 +80,15 @@ TerminalScreen *terminal_app_new_terminal (TerminalApp     *app,
                                            char           **child_env,
                                            double           zoom);
 
+TerminalScreen *terminal_app_get_screen_by_uuid (TerminalApp *app,
+                                                 const char  *uuid);
+
+void terminal_app_register_screen (TerminalApp *app,
+                                   TerminalScreen *screen);
+
+void terminal_app_unregister_screen (TerminalApp *app,
+                                     TerminalScreen *screen);
+
 void terminal_app_edit_preferences (TerminalApp     *app,
                                     GtkWindow       *transient_parent);
 void terminal_app_edit_encodings   (TerminalApp     *app,
diff --git a/src/terminal-screen.c b/src/terminal-screen.c
index e5ec711..ac971c0 100644
--- a/src/terminal-screen.c
+++ b/src/terminal-screen.c
@@ -118,6 +118,7 @@ enum
   TARGET_TAB
 };
 
+static void terminal_screen_constructed (GObject             *object);
 static void terminal_screen_dispose     (GObject             *object);
 static void terminal_screen_finalize    (GObject             *object);
 static void terminal_screen_drag_data_received (GtkWidget        *widget,
@@ -440,6 +441,7 @@ terminal_screen_class_init (TerminalScreenClass *klass)
   GSettings *settings;
   guint i;
 
+  object_class->constructed = terminal_screen_constructed;
   object_class->dispose = terminal_screen_dispose;
   object_class->finalize = terminal_screen_finalize;
   object_class->get_property = terminal_screen_get_property;
@@ -562,6 +564,18 @@ terminal_screen_class_init (TerminalScreenClass *klass)
 }
 
 static void
+terminal_screen_constructed (GObject *object)
+{
+  TerminalScreen *screen = TERMINAL_SCREEN (object);
+  TerminalApp *app;
+
+  G_OBJECT_CLASS (terminal_screen_parent_class)->constructed (object);
+
+  app = terminal_app_get ();
+  terminal_app_register_screen (app, screen);
+}
+
+static void
 terminal_screen_dispose (GObject *object)
 {
   TerminalScreen *screen = TERMINAL_SCREEN (object);
@@ -587,6 +601,10 @@ terminal_screen_finalize (GObject *object)
 {
   TerminalScreen *screen = TERMINAL_SCREEN (object);
   TerminalScreenPrivate *priv = screen->priv;
+  TerminalApp *app;
+
+  app = terminal_app_get ();
+  terminal_app_unregister_screen (app, screen);
 
   g_signal_handlers_disconnect_by_func (terminal_app_get_desktop_interface_settings (terminal_app_get ()),
                                         G_CALLBACK (terminal_screen_system_font_changed_cb),


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