[gnome-terminal] app: screen: Add API to map UUIDs to screens
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-terminal] app: screen: Add API to map UUIDs to screens
- Date: Mon, 27 Jan 2014 14:27:31 +0000 (UTC)
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]