gnome-terminal r2683 - trunk/src



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

Log:
Only update the settings that are dependent on the changed property.


Modified:
   trunk/src/terminal-screen.c

Modified: trunk/src/terminal-screen.c
==============================================================================
--- trunk/src/terminal-screen.c	(original)
+++ trunk/src/terminal-screen.c	Thu May 29 19:44:55 2008
@@ -568,18 +568,13 @@
   VteTerminal *vte_terminal = VTE_TERMINAL (screen);
   TerminalWindow *window;
   const char *prop_name;
-/*  VteTerminalEraseBinding backspace_binding, delete_binding;*/
   TerminalBackgroundType bg_type;
-//   gboolean silent_bell, scroll_on_keystroke, scroll_on_output;
 
   if (pspec)
     prop_name = pspec->name;
   else
     prop_name = NULL;
 
-  terminal_screen_cook_title (screen);
-  terminal_screen_cook_icon_title (screen);
-  
   if (priv->window)
     {
       /* We need these in line for the set_size in
@@ -589,77 +584,110 @@
       terminal_window_update_geometry (priv->window);
     }
   
-  if (GTK_WIDGET_REALIZED (screen))
+  if (!prop_name ||
+      prop_name == I_(TERMINAL_PROFILE_TITLE_MODE) ||
+      prop_name == I_(TERMINAL_PROFILE_TITLE))
+    {
+      terminal_screen_cook_title (screen);
+      terminal_screen_cook_icon_title (screen);
+    }
+  
+  if (GTK_WIDGET_REALIZED (screen) &&
+      (!prop_name ||
+       prop_name == I_(TERMINAL_PROFILE_USE_SYSTEM_FONT) ||
+       prop_name == I_(TERMINAL_PROFILE_FONT) ||
+       prop_name == I_(TERMINAL_PROFILE_NO_AA_WITHOUT_RENDER)))
     terminal_screen_change_font (screen);
 
-  update_color_scheme (screen);
+  if (!prop_name ||
+      prop_name == I_(TERMINAL_PROFILE_USE_THEME_COLORS) ||
+      prop_name == I_(TERMINAL_PROFILE_FOREGROUND_COLOR) ||
+      prop_name == I_(TERMINAL_PROFILE_BACKGROUND_COLOR) ||
+      prop_name == I_(TERMINAL_PROFILE_PALETTE))
+    update_color_scheme (screen);
+
+  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SILENT_BELL))
+      vte_terminal_set_audible_bell (vte_terminal, !terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SILENT_BELL));
+
+  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_WORD_CHARS))
+    vte_terminal_set_word_chars (vte_terminal,
+                                 terminal_profile_get_property_string (profile, TERMINAL_PROFILE_WORD_CHARS));
+  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE))
+    vte_terminal_set_scroll_on_keystroke (vte_terminal,
+                                          terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE));
+  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLL_ON_OUTPUT))
+    vte_terminal_set_scroll_on_output (vte_terminal,
+                                       terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_ON_OUTPUT));
+  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_SCROLLBACK_LINES))
+    vte_terminal_set_scrollback_lines (vte_terminal,
+                                       terminal_profile_get_property_int (profile, TERMINAL_PROFILE_SCROLLBACK_LINES));
 
-/*  g_object_get (profile,
-                TERMINAL_PROFILE_SILENT_BELL, &silent_bell,*/
-  if (prop_name == I_(TERMINAL_PROFILE_SILENT_BELL))
-    vte_terminal_set_audible_bell (vte_terminal, !terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SILENT_BELL));
-
-  vte_terminal_set_word_chars (vte_terminal,
-                               terminal_profile_get_property_string (profile, TERMINAL_PROFILE_WORD_CHARS));
-  vte_terminal_set_scroll_on_keystroke (vte_terminal,
-                                        terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_ON_KEYSTROKE));
-  vte_terminal_set_scroll_on_output (vte_terminal,
-                                        terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_ON_OUTPUT));
-  vte_terminal_set_scrollback_lines (vte_terminal,
-                                     terminal_profile_get_property_int (profile, TERMINAL_PROFILE_SCROLLBACK_LINES));
-
-  if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_SKEY))
-    {
-      terminal_screen_skey_match_add (screen,
-				      "s/key [0-9]* [-A-Za-z0-9]*",
-				      FLAVOR_AS_IS);
-
-      terminal_screen_skey_match_add (screen,
-				      "otp-[a-z0-9]* [0-9]* [-A-Za-z0-9]*",
-				      FLAVOR_AS_IS);
-    }
-  else
-    {
-      terminal_screen_skey_match_remove (screen);
-    }
-  bg_type = terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_BACKGROUND_TYPE);
-  
-  if (bg_type == TERMINAL_BACKGROUND_IMAGE)
+  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_USE_SKEY))
     {
-      set_background_image_file (vte_terminal,
-                                 terminal_profile_get_property_string (profile, TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE));
-      vte_terminal_set_scroll_background (vte_terminal,
-                                          terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_BACKGROUND));
-    }
-  else
-    {
-      set_background_image_file (vte_terminal, NULL);
-      vte_terminal_set_scroll_background (vte_terminal, FALSE);
+      if (terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_USE_SKEY))
+        {
+          terminal_screen_skey_match_add (screen,
+                                          "s/key [0-9]* [-A-Za-z0-9]*",
+                                          FLAVOR_AS_IS);
+
+          terminal_screen_skey_match_add (screen,
+                                          "otp-[a-z0-9]* [0-9]* [-A-Za-z0-9]*",
+                                          FLAVOR_AS_IS);
+        }
+      else
+        {
+          terminal_screen_skey_match_remove (screen);
+        }
     }
 
-  if (bg_type == TERMINAL_BACKGROUND_IMAGE ||
-      bg_type == TERMINAL_BACKGROUND_TRANSPARENT)
-    {
-      vte_terminal_set_background_saturation (vte_terminal,
-                                              1.0 - terminal_profile_get_property_double (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS));
-      vte_terminal_set_opacity (vte_terminal,
-                                0xffff * terminal_profile_get_property_double (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS));
-    }
-  else
+  if (!prop_name ||
+      prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TYPE) ||
+      prop_name == I_(TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE) ||
+      prop_name == I_(TERMINAL_PROFILE_BACKGROUND_DARKNESS) ||
+      prop_name == I_(TERMINAL_PROFILE_SCROLL_BACKGROUND))
     {
-      vte_terminal_set_background_saturation (vte_terminal, 1.0); /* normal color */
-      vte_terminal_set_opacity (vte_terminal, 0xffff);
+      bg_type = terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_BACKGROUND_TYPE);
+      
+      if (bg_type == TERMINAL_BACKGROUND_IMAGE)
+        {
+          /* FIXMEchpe: use the BACKGROUND property intead */
+          set_background_image_file (vte_terminal,
+                                    terminal_profile_get_property_string (profile, TERMINAL_PROFILE_BACKGROUND_IMAGE_FILE));
+          vte_terminal_set_scroll_background (vte_terminal,
+                                              terminal_profile_get_property_boolean (profile, TERMINAL_PROFILE_SCROLL_BACKGROUND));
+        }
+      else
+        {
+          set_background_image_file (vte_terminal, NULL);
+          vte_terminal_set_scroll_background (vte_terminal, FALSE);
+        }
+
+      if (bg_type == TERMINAL_BACKGROUND_IMAGE ||
+          bg_type == TERMINAL_BACKGROUND_TRANSPARENT)
+        {
+          vte_terminal_set_background_saturation (vte_terminal,
+                                                  1.0 - terminal_profile_get_property_double (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS));
+          vte_terminal_set_opacity (vte_terminal,
+                                    0xffff * terminal_profile_get_property_double (profile, TERMINAL_PROFILE_BACKGROUND_DARKNESS));
+        }
+      else
+        {
+          vte_terminal_set_background_saturation (vte_terminal, 1.0); /* normal color */
+          vte_terminal_set_opacity (vte_terminal, 0xffff);
+        }
+      
+      window = terminal_screen_get_window (screen);
+      /* FIXME: Don't enable this if we have a compmgr. */
+      vte_terminal_set_background_transparent (vte_terminal,
+                                              bg_type == TERMINAL_BACKGROUND_TRANSPARENT &&
+                                              (!window || !terminal_window_uses_argb_visual (window)));
     }
-  
-  window = terminal_screen_get_window (screen);
-  /* FIXME: Don't enable this if we have a compmgr. */
-  vte_terminal_set_background_transparent (vte_terminal,
-                                           bg_type == TERMINAL_BACKGROUND_TRANSPARENT &&
-                                           (!window || !terminal_window_uses_argb_visual (window)));
 
+  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_BACKSPACE_BINDING))
   vte_terminal_set_backspace_binding (vte_terminal,
                                       terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_BACKSPACE_BINDING));
   
+  if (!prop_name || prop_name == I_(TERMINAL_PROFILE_DELETE_BINDING))
   vte_terminal_set_delete_binding (vte_terminal,
                                    terminal_profile_get_property_enum (profile, TERMINAL_PROFILE_DELETE_BINDING));
 }
@@ -933,9 +961,10 @@
       priv->profile_forgotten_id = 0;
     }
   
+  priv->profile = profile;
   if (profile)
     {
-      g_object_ref (G_OBJECT (profile));
+      g_object_ref (profile);
       priv->profile_changed_id =
         g_signal_connect (profile, "notify",
                           G_CALLBACK (terminal_screen_profile_notify_cb),
@@ -945,19 +974,7 @@
                           "forgotten",
                           G_CALLBACK (profile_forgotten_callback),
                           screen);
-    }
 
-#if 0
-  g_print ("Switching profile from '%s' to '%s'\n",
-           priv->profile ?
-           terminal_profile_get_visible_name (priv->profile) : "none",
-           profile ? terminal_profile_get_visible_name (profile) : "none");
-#endif
-  
-  priv->profile = profile;
-
-  if (priv->profile)
-    {
       terminal_screen_profile_notify_cb (profile, NULL, screen);
       g_signal_emit (G_OBJECT (screen), signals[PROFILE_SET], 0, old_profile);
     }
@@ -1598,7 +1615,6 @@
     }
 }
 
-
 void
 terminal_screen_set_font_scale (TerminalScreen *screen,
                                 double          factor)



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