[Xfce4-commits] <terminal:master> Use individual signals and single notify signal.
Nick Schermer
noreply at xfce.org
Thu Dec 27 15:30:02 CET 2012
Updating branch refs/heads/master
to cab85ed2ba0c0045ae10ac6d9b1c4f7a6fd95544 (commit)
from 173a433023f3817195eb6cff41ac39030b346ff0 (commit)
commit cab85ed2ba0c0045ae10ac6d9b1c4f7a6fd95544
Author: Nick Schermer <nick at xfce.org>
Date: Thu Dec 27 14:42:52 2012 +0100
Use individual signals and single notify signal.
The internal function only does a lot of strcmp, so
use this instead.
terminal/terminal-screen.c | 120 +++++++++++++++++++++++++++----------------
1 files changed, 75 insertions(+), 45 deletions(-)
diff --git a/terminal/terminal-screen.c b/terminal/terminal-screen.c
index e7c127d..19bf4eb 100644
--- a/terminal/terminal-screen.c
+++ b/terminal/terminal-screen.c
@@ -106,6 +106,9 @@ static void terminal_screen_set_property (GObject
GParamSpec *pspec);
static void terminal_screen_realize (GtkWidget *widget);
static void terminal_screen_unrealize (GtkWidget *widget);
+static void terminal_screen_preferences_changed (TerminalPreferences *preferences,
+ GParamSpec *pspec,
+ TerminalScreen *screen);
static gboolean terminal_screen_get_child_command (TerminalScreen *screen,
gchar **command,
gchar ***argv,
@@ -265,14 +268,18 @@ terminal_screen_init (TerminalScreen *screen)
screen->session_id = ++screen_last_session_id;
screen->terminal = g_object_new (TERMINAL_TYPE_WIDGET, NULL);
- g_object_connect (G_OBJECT (screen->terminal),
- "signal::child-exited", G_CALLBACK (terminal_screen_vte_child_exited), screen,
- "signal::eof", G_CALLBACK (terminal_screen_vte_eof), screen,
- "signal::context-menu", G_CALLBACK (terminal_screen_vte_get_context_menu), screen,
- "signal::selection-changed", G_CALLBACK (terminal_screen_vte_selection_changed), screen,
- "signal::window-title-changed", G_CALLBACK (terminal_screen_vte_window_title_changed), screen,
- "signal::resize-window", G_CALLBACK (terminal_screen_vte_resize_window), screen,
- NULL);
+ g_signal_connect (G_OBJECT (screen->terminal), "child-exited",
+ G_CALLBACK (terminal_screen_vte_child_exited), screen);
+ g_signal_connect (G_OBJECT (screen->terminal), "eof",
+ G_CALLBACK (terminal_screen_vte_eof), screen);
+ g_signal_connect (G_OBJECT (screen->terminal), "context-menu",
+ G_CALLBACK (terminal_screen_vte_get_context_menu), screen);
+ g_signal_connect (G_OBJECT (screen->terminal), "selection-changed",
+ G_CALLBACK (terminal_screen_vte_selection_changed), screen);
+ g_signal_connect (G_OBJECT (screen->terminal), "window-title-changed",
+ G_CALLBACK (terminal_screen_vte_window_title_changed), screen);
+ g_signal_connect (G_OBJECT (screen->terminal), "resize-window",
+ G_CALLBACK (terminal_screen_vte_resize_window), screen);
gtk_box_pack_start (GTK_BOX (screen), screen->terminal, TRUE, TRUE, 0);
screen->scrollbar = gtk_vscrollbar_new (VTE_TERMINAL (screen->terminal)->adjustment);
@@ -280,39 +287,10 @@ terminal_screen_init (TerminalScreen *screen)
g_signal_connect_after (G_OBJECT (screen->scrollbar), "button-press-event", G_CALLBACK (gtk_true), NULL);
gtk_widget_show (screen->scrollbar);
+ /* watch preferences changes */
screen->preferences = terminal_preferences_get ();
- g_object_connect (G_OBJECT (screen->preferences),
- "swapped-signal::notify::background-mode", G_CALLBACK (terminal_screen_update_background), screen,
- "swapped-signal::notify::background-image-file", G_CALLBACK (terminal_screen_update_background), screen,
- "swapped-signal::notify::background-image-style", G_CALLBACK (terminal_screen_update_background), screen,
- "swapped-signal::notify::background-darkness", G_CALLBACK (terminal_screen_update_background), screen,
- "swapped-signal::notify::binding-backspace", G_CALLBACK (terminal_screen_update_binding_backspace), screen,
- "swapped-signal::notify::binding-delete", G_CALLBACK (terminal_screen_update_binding_delete), screen,
- "swapped-signal::notify::color-foreground", G_CALLBACK (terminal_screen_update_colors), screen,
- "swapped-signal::notify::color-background", G_CALLBACK (terminal_screen_update_colors), screen,
- "swapped-signal::notify::color-background-vary", G_CALLBACK (terminal_screen_update_colors), screen,
- "swapped-signal::notify::color-cursor", G_CALLBACK (terminal_screen_update_colors), screen,
- "swapped-signal::notify::color-selection", G_CALLBACK (terminal_screen_update_colors), screen,
- "swapped-signal::notify::color-selection-use-default", G_CALLBACK (terminal_screen_update_colors), screen,
- "swapped-signal::notify::color-bold", G_CALLBACK (terminal_screen_update_colors), screen,
- "swapped-signal::notify::color-bold-use-default", G_CALLBACK (terminal_screen_update_colors), screen,
- "swapped-signal::notify::color-palette", G_CALLBACK (terminal_screen_update_colors), screen,
- "swapped-signal::notify::font-allow-bold", G_CALLBACK (terminal_screen_update_font), screen,
- "swapped-signal::notify::font-name", G_CALLBACK (terminal_screen_update_font), screen,
- "swapped-signal::notify::misc-bell", G_CALLBACK (terminal_screen_update_misc_bell), screen,
- "swapped-signal::notify::term", G_CALLBACK (terminal_screen_update_term), screen,
- "swapped-signal::notify::misc-cursor-blinks", G_CALLBACK (terminal_screen_update_misc_cursor_blinks), screen,
- "swapped-signal::notify::misc-cursor-shape", G_CALLBACK (terminal_screen_update_misc_cursor_shape), screen,
- "swapped-signal::notify::misc-mouse-autohide", G_CALLBACK (terminal_screen_update_misc_mouse_autohide), screen,
- "swapped-signal::notify::scrolling-bar", G_CALLBACK (terminal_screen_update_scrolling_bar), screen,
- "swapped-signal::notify::scrolling-lines", G_CALLBACK (terminal_screen_update_scrolling_lines), screen,
- "swapped-signal::notify::scrolling-on-output", G_CALLBACK (terminal_screen_update_scrolling_on_output), screen,
- "swapped-signal::notify::scrolling-on-keystroke", G_CALLBACK (terminal_screen_update_scrolling_on_keystroke), screen,
- "swapped-signal::notify::title-initial", G_CALLBACK (terminal_screen_update_title), screen,
- "swapped-signal::notify::title-mode", G_CALLBACK (terminal_screen_update_title), screen,
- "swapped-signal::notify::word-chars", G_CALLBACK (terminal_screen_update_word_chars), screen,
- "swapped-signal::notify::misc-tab-position", G_CALLBACK (terminal_screen_update_label_orientation), screen,
- NULL);
+ g_signal_connect (G_OBJECT (screen->preferences), "notify",
+ G_CALLBACK (terminal_screen_preferences_changed), screen);
/* apply current settings */
terminal_screen_update_binding_backspace (screen);
@@ -332,7 +310,7 @@ terminal_screen_init (TerminalScreen *screen)
terminal_screen_timer_background (screen);
terminal_screen_update_colors (screen);
- /* Last, connect contents-changed to avoid a race with updates above */
+ /* last, connect contents-changed to avoid a race with updates above */
g_signal_connect_swapped (G_OBJECT (screen->terminal), "contents-changed",
G_CALLBACK (terminal_screen_vte_window_contents_changed), screen);
g_signal_connect_swapped (G_OBJECT (screen->terminal), "size-allocate",
@@ -352,10 +330,9 @@ terminal_screen_finalize (GObject *object)
if (G_UNLIKELY (screen->background_timer_id != 0))
g_source_remove (screen->background_timer_id);
- g_signal_handlers_disconnect_matched (G_OBJECT (screen->preferences),
- G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, screen);
-
+ /* detach from preferences */
+ g_signal_handlers_disconnect_by_func (screen->preferences,
+ G_CALLBACK (terminal_screen_preferences_changed), screen);
g_object_unref (G_OBJECT (screen->preferences));
g_strfreev (screen->custom_command);
@@ -484,6 +461,59 @@ terminal_screen_unrealize (GtkWidget *widget)
+static void
+terminal_screen_preferences_changed (TerminalPreferences *preferences,
+ GParamSpec *pspec,
+ TerminalScreen *screen)
+{
+ const gchar *name;
+
+ terminal_return_if_fail (TERMINAL_IS_SCREEN (screen));
+ terminal_return_if_fail (TERMINAL_IS_PREFERENCES (preferences));
+ terminal_return_if_fail (screen->preferences == preferences);
+
+ /* get name */
+ name = g_param_spec_get_name (pspec);
+ terminal_assert (name != NULL);
+
+ if (strncmp ("background-", name, 11) == 0)
+ terminal_screen_update_background (screen);
+ else if (strcmp ("binding-backspace", name) == 0)
+ terminal_screen_update_binding_backspace (screen);
+ else if (strcmp ("binding-delete", name) == 0)
+ terminal_screen_update_binding_delete (screen);
+ else if (strncmp ("color-", name, 6) == 0)
+ terminal_screen_update_colors (screen);
+ else if (strncmp ("font-", name, 5) == 0)
+ terminal_screen_update_font (screen);
+ else if (strcmp ("misc-bell", name) == 0)
+ terminal_screen_update_misc_bell (screen);
+ else if (strcmp ("term", name) == 0)
+ terminal_screen_update_term (screen);
+ else if (strcmp ("misc-cursor-blinks", name) == 0)
+ terminal_screen_update_misc_cursor_blinks (screen);
+ else if (strcmp ("misc-cursor-shape", name) == 0)
+ terminal_screen_update_misc_cursor_shape (screen);
+ else if (strcmp ("misc-mouse-autohide", name) == 0)
+ terminal_screen_update_misc_mouse_autohide (screen);
+ else if (strcmp ("scrolling-bar", name) == 0)
+ terminal_screen_update_scrolling_bar (screen);
+ else if (strcmp ("scrolling-lines", name) == 0)
+ terminal_screen_update_scrolling_lines (screen);
+ else if (strcmp ("scrolling-on-output", name) == 0)
+ terminal_screen_update_scrolling_on_output (screen);
+ else if (strcmp ("scrolling-on-keystroke", name) == 0)
+ terminal_screen_update_scrolling_on_keystroke (screen);
+ else if (strncmp ("title-", name, 6) == 0)
+ terminal_screen_update_title (screen);
+ else if (strcmp ("word-chars", name) == 0)
+ terminal_screen_update_word_chars (screen);
+ else if (strcmp ("misc-tab-position", name) == 0)
+ terminal_screen_update_label_orientation (screen);
+}
+
+
+
static gboolean
terminal_screen_get_child_command (TerminalScreen *screen,
gchar **command,
More information about the Xfce4-commits
mailing list