gnome-terminal r2768 - trunk/src



Author: chpe
Date: Thu May 29 19:52:24 2008
New Revision: 2768
URL: http://svn.gnome.org/viewvc/gnome-terminal?rev=2768&view=rev

Log:
Fix FIXME: make icon-title work again, and use gobject properties for it instead of signals.


Modified:
   trunk/src/terminal-screen.c
   trunk/src/terminal-window.c

Modified: trunk/src/terminal-screen.c
==============================================================================
--- trunk/src/terminal-screen.c	(original)
+++ trunk/src/terminal-screen.c	Thu May 29 19:52:24 2008
@@ -833,13 +833,16 @@
 terminal_screen_cook_icon_title (TerminalScreen *screen)
 {
   TerminalScreenPrivate *priv = screen->priv;
+  GObject *object = G_OBJECT (screen);      
   
+  g_object_freeze_notify (object);
+
   cook_title (screen, priv->raw_icon_title, &priv->cooked_icon_title);
-#if 0
-  /* FIXMEchpe */
+
   if (cook_title (screen, priv->raw_icon_title, &priv->cooked_icon_title))
-    g_signal_emit (G_OBJECT (screen), signals[ICON_TITLE_CHANGED], 0);
-#endif
+    g_object_notify (G_OBJECT (screen), "icon-title");
+  
+  g_object_thaw_notify (object);
 }
 
 static void
@@ -1540,6 +1543,7 @@
 					gboolean       userset)
 {
   TerminalScreenPrivate *priv = screen->priv;
+  GObject *object = G_OBJECT (screen);
   
   g_assert (TERMINAL_IS_SCREEN (screen));
 
@@ -1550,10 +1554,16 @@
        strcmp (priv->raw_icon_title, icon_title) == 0))
     return;
 
+  g_object_freeze_notify (object);
+
   g_free (priv->raw_icon_title);
   priv->raw_icon_title = g_strdup (icon_title);
   priv->icon_title_set = TRUE;
+
+  g_object_notify (object, "icon-title-set");
   terminal_screen_cook_icon_title (screen);
+
+  g_object_thaw_notify (object);
 }
 
 void

Modified: trunk/src/terminal-window.c
==============================================================================
--- trunk/src/terminal-window.c	(original)
+++ trunk/src/terminal-window.c	Thu May 29 19:52:24 2008
@@ -1620,35 +1620,51 @@
 }
 
 static void
-title_changed_callback (TerminalScreen *screen,
+sync_screen_title (TerminalScreen *screen,
+                   GParamSpec *psepc,
+                   TerminalWindow *window)
+{
+  TerminalWindowPrivate *priv = window->priv;
+  
+  if (screen != priv->active_term)
+    return;
+
+  gtk_window_set_title (GTK_WINDOW (window), terminal_screen_get_title (screen));
+}
+
+static void
+sync_screen_icon_title (TerminalScreen *screen,
                         GParamSpec *psepc,
                         TerminalWindow *window)
 {
   TerminalWindowPrivate *priv = window->priv;
-  const char *title;
-  
-  if (screen == priv->active_term)
-    {
-      title = terminal_screen_get_title (screen);
 
-      gtk_window_set_title (GTK_WINDOW (window), title);
+  if (screen != priv->active_term)
+    return;
 
-      if (terminal_screen_get_icon_title_set (screen))
-        {
-          title = terminal_screen_get_icon_title (screen);
-        }
-      gdk_window_set_icon_name (GTK_WIDGET (window)->window, title);
-    }
+  if (!terminal_screen_get_icon_title_set (screen))
+    return;
+
+  gdk_window_set_icon_name (GTK_WIDGET (window)->window, terminal_screen_get_icon_title (screen));
 }
 
 static void
-icon_title_changed_callback (TerminalScreen *screen,
-                             TerminalWindow *window)
+sync_screen_icon_title_set (TerminalScreen *screen,
+                            GParamSpec *psepc,
+                            TerminalWindow *window)
 {
   TerminalWindowPrivate *priv = window->priv;
 
-  if (screen == priv->active_term)
-    gdk_window_set_icon_name (GTK_WIDGET (window)->window, terminal_screen_get_icon_title (screen));
+  if (screen != priv->active_term)
+    return;
+
+  if (terminal_screen_get_icon_title_set (screen))
+    return;
+
+  /* Need to reset the icon name */
+  /* FIXMEchpe: needs a gdk function to unset the icon title! */
+
+  gdk_window_set_icon_name (GTK_WIDGET (window)->window, terminal_screen_get_title (screen));
 }
 
 /* Notebook callbacks */
@@ -1969,8 +1985,9 @@
       terminal_window_set_menubar_visible (window, setting);
     }
 
-  gdk_window_set_icon_name (GTK_WIDGET (window)->window, terminal_screen_get_icon_title (screen));
-  gtk_window_set_title (GTK_WINDOW (window), terminal_screen_get_title (screen));
+  sync_screen_title (screen, NULL, window);
+  sync_screen_icon_title_set (screen, NULL, window);
+  sync_screen_icon_title (screen, NULL, window);
 
   /* set size of window to current grid size */
 #ifdef DEBUG_GEOMETRY
@@ -2052,15 +2069,12 @@
                     window);
 
   /* FIXMEchpe: only connect on the active screen, not all screens! */
-  g_signal_connect (G_OBJECT (screen),
-                    "notify::title",
-                    G_CALLBACK (title_changed_callback),
-                    window);
-
-  g_signal_connect (G_OBJECT (screen),
-                    "icon-title-changed",
-                    G_CALLBACK (icon_title_changed_callback),
-                    window);
+  g_signal_connect (screen, "notify::title",
+                    G_CALLBACK (sync_screen_title), window);
+  g_signal_connect (screen, "notify::icon-title",
+                    G_CALLBACK (sync_screen_icon_title), window);
+  g_signal_connect (screen, "notify::icon-title-set",
+                    G_CALLBACK (sync_screen_icon_title_set), window);
 
   g_signal_connect_swapped (G_OBJECT (screen),
                             "selection-changed",
@@ -2132,11 +2146,15 @@
                                         window);
 
   g_signal_handlers_disconnect_by_func (G_OBJECT (screen),
-                                        G_CALLBACK (title_changed_callback),
+                                        G_CALLBACK (sync_screen_title),
+                                        window);
+
+  g_signal_handlers_disconnect_by_func (G_OBJECT (screen),
+                                        G_CALLBACK (sync_screen_icon_title),
                                         window);
 
   g_signal_handlers_disconnect_by_func (G_OBJECT (screen),
-                                        G_CALLBACK (icon_title_changed_callback),
+                                        G_CALLBACK (sync_screen_icon_title_set),
                                         window);
 
   g_signal_handlers_disconnect_by_func (G_OBJECT (screen),



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