Author: stephan
Date: 2008-06-03 20:52:52 +0000 (Tue, 03 Jun 2008)
New Revision: 27026

Modified:
   terminal/trunk/terminal/terminal-preferences-dialog.c
   terminal/trunk/terminal/terminal-preferences.c
   terminal/trunk/terminal/terminal-preferences.h
   terminal/trunk/terminal/terminal-screen.c
   terminal/trunk/terminal/terminal-tab-header.c
   terminal/trunk/terminal/terminal-window.c
   terminal/trunk/terminal/terminal-window.h
Log:
Applied patch from Colin Leroy (Bug #3994)
Add colors to the tab-headers.



Modified: terminal/trunk/terminal/terminal-preferences-dialog.c
===================================================================
--- terminal/trunk/terminal/terminal-preferences-dialog.c       2008-06-03 
20:43:14 UTC (rev 27025)
+++ terminal/trunk/terminal/terminal-preferences-dialog.c       2008-06-03 
20:52:52 UTC (rev 27026)
@@ -768,6 +768,52 @@
       g_free (name);
     }
 
+  frame = g_object_new (GTK_TYPE_FRAME, "border-width", 0, "shadow-type", 
GTK_SHADOW_NONE, NULL);
+  gtk_box_pack_start (GTK_BOX (box), frame, FALSE, TRUE, 0);
+  gtk_widget_show (frame);
+
+  label = g_object_new (GTK_TYPE_LABEL, "label", _("<b>Tab activity</b>"), 
"use-markup", TRUE, NULL);
+  gtk_frame_set_label_widget (GTK_FRAME (frame), label);
+  gtk_widget_show (label);
+
+  table = gtk_table_new (2, 1, FALSE);
+  gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+  gtk_table_set_col_spacings (GTK_TABLE (table), 12);
+  gtk_container_set_border_width (GTK_CONTAINER (table), 12);
+  gtk_container_add (GTK_CONTAINER (frame), table);
+  gtk_widget_show (table);
+
+  label = g_object_new (GTK_TYPE_LABEL,
+                        "label", _("T_ab activity color:"),
+                        "use-underline", TRUE,
+                        "xalign", 0.0,
+                        NULL);
+  gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 
0, 0);
+  gtk_widget_show (label);
+
+  align = gtk_alignment_new (0.0, 0.5, 0.0, 0.0);
+  gtk_table_attach (GTK_TABLE (table), align, 1, 2, 0, 1, GTK_EXPAND | 
GTK_FILL, GTK_FILL, 0, 0);
+  gtk_widget_show (align);
+
+  hbox = gtk_hbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (align), hbox);
+  gtk_widget_show (hbox);
+
+  button = g_object_new (GTK_TYPE_COLOR_BUTTON, "title", _("Choose tab 
activity color"), NULL);
+  exo_mutual_binding_new (G_OBJECT (dialog->preferences), 
"tab-activity-color", G_OBJECT (button), "color");
+  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+  gtk_label_set_mnemonic_widget (GTK_LABEL (label), button);
+  gtk_widget_show (button);
+
+  /* set Atk name/description and label relation for the button */
+  object = gtk_widget_get_accessible (button);
+  atk_object_set_name (object, _("Color Selector"));
+  atk_object_set_description (object, _("Open a dialog to specify the color"));
+  relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label));
+  relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR);
+  atk_relation_set_add (relations, relation);
+  g_object_unref (G_OBJECT (relation));
+
   icon = gtk_widget_render_icon (GTK_WIDGET (dialog->icon_bar),
                                  TERMINAL_STOCK_COLORS,
                                  GTK_ICON_SIZE_DIALOG,
@@ -982,6 +1028,46 @@
   /* set Atk label relation for the entry */
   terminal_gtk_label_set_a11y_relation (GTK_LABEL (label), entry);
 
+/* start */
+  frame = g_object_new (GTK_TYPE_FRAME, "border-width", 0, "shadow-type", 
GTK_SHADOW_NONE, NULL);
+  gtk_box_pack_start (GTK_BOX (box), frame, FALSE, TRUE, 0);
+  gtk_widget_show (frame);
+
+  label = g_object_new (GTK_TYPE_LABEL, "label", _("<b>Tab activity 
indicator</b>"), "use-markup", TRUE, NULL);
+  gtk_frame_set_label_widget (GTK_FRAME (frame), label);
+  gtk_widget_show (label);
+
+  vbox = gtk_vbox_new (FALSE, 6);
+  gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
+  gtk_container_add (GTK_CONTAINER (frame), vbox);
+  gtk_widget_show (vbox);
+
+  hbox = gtk_hbox_new (FALSE, 6);
+  gtk_container_set_border_width (GTK_CONTAINER (hbox), 0);
+  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+  gtk_widget_show (hbox);
+
+  label = gtk_label_new (_("Reset tab activity indicator after"));
+  g_object_set (G_OBJECT (label), "wrap", TRUE, "xalign", 0.0, NULL);
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+  gtk_widget_show (label);
+
+  button = gtk_spin_button_new_with_range (0.0, 30.0, 1.0);
+  gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(button), TRUE);
+  exo_mutual_binding_new (G_OBJECT (dialog->preferences), 
"tab-activity-timeout", G_OBJECT (button), "value");
+  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+  gtk_label_set_mnemonic_widget (GTK_LABEL (label), button);
+  gtk_widget_show (button);
+
+  /* set Atk label relation for the button */
+  terminal_gtk_label_set_a11y_relation (GTK_LABEL (label), button);
+
+  label = gtk_label_new (_("seconds"));
+  g_object_set (G_OBJECT (label), "wrap", TRUE, "xalign", 0.0, NULL);
+  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+  gtk_widget_show (label);
+
+/*end */
   icon = gtk_widget_render_icon (GTK_WIDGET (dialog->icon_bar),
                                  TERMINAL_STOCK_ADVANCED,
                                  GTK_ICON_SIZE_DIALOG,

Modified: terminal/trunk/terminal/terminal-preferences.c
===================================================================
--- terminal/trunk/terminal/terminal-preferences.c      2008-06-03 20:43:14 UTC 
(rev 27025)
+++ terminal/trunk/terminal/terminal-preferences.c      2008-06-03 20:52:52 UTC 
(rev 27026)
@@ -130,6 +130,8 @@
   PROP_TERM,
   PROP_VTE_WORKAROUND_TITLE_BUG,
   PROP_WORD_CHARS,
+  PROP_TAB_ACTIVITY_COLOR,
+  PROP_TAB_ACTIVITY_TIMEOUT,
   N_PROPERTIES,
 };
 
@@ -910,6 +912,27 @@
                                                         EXO_PARAM_READWRITE));
 
   /**
+   * TerminalPreferences:tab-activity-color:
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_TAB_ACTIVITY_COLOR,
+                                   g_param_spec_string ("tab-activity-color",
+                                                        "tab-activity-color",
+                                                        "tab-activity-color",
+                                                        "#afff00000000",
+                                                        EXO_PARAM_READWRITE));
+  /**
+   * TerminalPreferences:tab-activity-timeout:
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_TAB_ACTIVITY_TIMEOUT,
+                                   g_param_spec_double ("tab-activity-timeout",
+                                                        "tab-activity-timeout",
+                                                        "tab-activity-timeout",
+                                                        0.0, 30.0, 2.0,
+                                                        EXO_PARAM_READWRITE));
+
+  /**
    * TerminalPreferences:command-update-records:
    **/
   g_object_class_install_property (gobject_class,
@@ -1640,5 +1663,16 @@
   return preferences;
 }
 
+void
+query_color (TerminalPreferences *preferences,
+             const gchar         *property,
+             GdkColor            *color_return)
+{
+  gchar *spec;
 
+  g_object_get (G_OBJECT (preferences), property, &spec, NULL);
+  gdk_color_parse (spec, color_return);
+  g_free (spec);
+}
 
+

Modified: terminal/trunk/terminal/terminal-preferences.h
===================================================================
--- terminal/trunk/terminal/terminal-preferences.h      2008-06-03 20:43:14 UTC 
(rev 27025)
+++ terminal/trunk/terminal/terminal-preferences.h      2008-06-03 20:52:52 UTC 
(rev 27026)
@@ -83,6 +83,11 @@
 
 TerminalPreferences *terminal_preferences_get       (void);
 
+void                 query_color                    (TerminalPreferences 
*preferences,
+                                                     const gchar         
*property,
+                                                     GdkColor            
*color_return);
+
+
 G_END_DECLS;
 
 #endif /* !__TERMINAL_PREFERENCES_H__ */

Modified: terminal/trunk/terminal/terminal-screen.c
===================================================================
--- terminal/trunk/terminal/terminal-screen.c   2008-06-03 20:43:14 UTC (rev 
27025)
+++ terminal/trunk/terminal/terminal-screen.c   2008-06-03 20:52:52 UTC (rev 
27026)
@@ -44,6 +44,7 @@
 #include <terminal/terminal-private.h>
 #include <terminal/terminal-screen.h>
 #include <terminal/terminal-widget.h>
+#include <terminal/terminal-window.h>
 
 #if defined(GDK_WINDOWING_X11)
 #include <gdk/gdkx.h>
@@ -56,6 +57,7 @@
   PROP_0,
   PROP_CUSTOM_TITLE,
   PROP_TITLE,
+  PROP_ACTIVITY,
 };
 
 enum
@@ -107,6 +109,8 @@
                                                                  
TerminalScreen        *screen);
 static void       terminal_screen_vte_window_title_changed      (VteTerminal   
        *terminal,
                                                                  
TerminalScreen        *screen);
+static void       terminal_screen_vte_window_contents_changed   (VteTerminal   
        *terminal,
+                                                                 
TerminalScreen        *screen);
 static gboolean   terminal_screen_timer_background              (gpointer      
         user_data);
 static void       terminal_screen_timer_background_destroy      (gpointer      
         user_data);
 
@@ -138,6 +142,9 @@
 
   guint                background_timer_id;
   guint                launch_idle_id;
+  
+  gboolean             activity;
+  guint                reset_activity_cb;
 };
 
 
@@ -188,6 +195,17 @@
                                                         G_PARAM_READABLE));
 
   /**
+   * TerminalScreen:activity:
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_ACTIVITY,
+                                   g_param_spec_boolean ("activity",
+                                                         "activity",
+                                                         "activity",
+                                                         FALSE,
+                                                         G_PARAM_READWRITE));
+
+  /**
    * TerminalScreen::get-context-menu
    **/
   screen_signals[GET_CONTEXT_MENU] =
@@ -227,6 +245,7 @@
                     "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::contents-changed", G_CALLBACK 
(terminal_screen_vte_window_contents_changed), screen,
                     "swapped-signal::size-allocate", G_CALLBACK 
(terminal_screen_timer_background), screen,
                     "swapped-signal::style-set", G_CALLBACK 
(terminal_screen_update_colors), screen,
                     NULL);
@@ -340,6 +359,10 @@
       g_value_take_string (value, terminal_screen_get_title (screen));
       break;
 
+    case PROP_ACTIVITY:
+      g_value_set_boolean (value, screen->activity);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -362,6 +385,10 @@
       terminal_screen_set_custom_title (screen, g_value_get_string (value));
       break;
 
+    case PROP_ACTIVITY:
+      screen->activity = g_value_get_boolean (value);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -597,23 +624,7 @@
     }
 }
 
-
-
 static void
-query_color (TerminalPreferences *preferences,
-             const gchar         *property,
-             GdkColor            *color_return)
-{
-  gchar *spec;
-
-  g_object_get (G_OBJECT (preferences), property, &spec, NULL);
-  gdk_color_parse (spec, color_return);
-  g_free (spec);
-}
-
-
-
-static void
 terminal_screen_update_colors (TerminalScreen *screen)
 {
   GdkColor palette[16];
@@ -843,8 +854,39 @@
   g_object_notify (G_OBJECT (screen), "title");
 }
 
+static gboolean terminal_screen_reset_activity(TerminalScreen *screen)
+{
+  screen->activity = FALSE;
+  screen->reset_activity_cb = 0;
+  g_object_notify (G_OBJECT (screen), "activity");
+  return FALSE;
+}
 
+static void
+terminal_screen_vte_window_contents_changed (VteTerminal    *terminal,
+                                             TerminalScreen *screen)
+{
+  gdouble timeout_seconds = 2.0;
 
+  _terminal_return_if_fail (VTE_IS_TERMINAL (terminal));
+  _terminal_return_if_fail (TERMINAL_IS_SCREEN (screen));
+
+  if (terminal_window_is_screen_active (screen))
+    return;
+
+  g_object_get (G_OBJECT (screen->preferences), "tab-activity-timeout", 
&timeout_seconds, NULL);
+  if (timeout_seconds < 1.0)
+    return;
+
+  screen->activity = TRUE;
+  g_object_notify (G_OBJECT (screen), "activity");
+  if (screen->reset_activity_cb != 0) {
+    g_source_remove(screen->reset_activity_cb);
+  }
+  screen->reset_activity_cb = g_timeout_add_seconds ((gint)timeout_seconds,
+                     (GSourceFunc)terminal_screen_reset_activity, screen);
+}
+
 static gboolean
 terminal_screen_timer_background (gpointer user_data)
 {
@@ -1232,8 +1274,6 @@
   return title;
 }
 
-
-
 /**
  * terminal_screen_get_working_directory:
  * @screen      : A #TerminalScreen.

Modified: terminal/trunk/terminal/terminal-tab-header.c
===================================================================
--- terminal/trunk/terminal/terminal-tab-header.c       2008-06-03 20:43:14 UTC 
(rev 27025)
+++ terminal/trunk/terminal/terminal-tab-header.c       2008-06-03 20:52:52 UTC 
(rev 27026)
@@ -27,6 +27,7 @@
 #include <terminal/terminal-preferences.h>
 #include <terminal/terminal-stock.h>
 #include <terminal/terminal-tab-header.h>
+#include <terminal/terminal-screen.h>
 
 
 
@@ -35,6 +36,7 @@
   PROP_0,
   PROP_TAB_POS,
   PROP_TITLE,
+  PROP_ACTIVITY,
 };
 
 enum
@@ -122,6 +124,17 @@
                                                         G_PARAM_READWRITE));
 
   /**
+   * TerminalTabHeader:activity:
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_ACTIVITY,
+                                   g_param_spec_boolean ("activity",
+                                                         "activity",
+                                                         "activity",
+                                                         FALSE,
+                                                         G_PARAM_READWRITE));
+
+  /**
    * TerminalTabHeader::close-tab:
    **/
   header_signals[CLOSE_TAB] =
@@ -237,6 +250,10 @@
       g_object_get_property (G_OBJECT (header->label), "label", value);
       break;
 
+    case PROP_ACTIVITY:
+      g_object_get_property (G_OBJECT (header), "activity", value);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -254,7 +271,9 @@
   TerminalTabHeader *header = TERMINAL_TAB_HEADER (object);
   GtkPositionType    position;
   const gchar       *title;
-
+  gboolean           act = FALSE;
+  GdkColor           act_color;
+  
   switch (prop_id)
     {
     case PROP_TAB_POS:
@@ -285,6 +304,13 @@
       gtk_label_set_text (GTK_LABEL (header->label), title);
       break;
 
+    case PROP_ACTIVITY:
+      act = g_value_get_boolean(value);
+      query_color (header->preferences, "tab-activity-color", &act_color);
+      /* strangely, inactive tab are in state ACTIVE */
+      gtk_widget_modify_fg(header->label, GTK_STATE_ACTIVE, act ? 
&act_color:NULL);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;

Modified: terminal/trunk/terminal/terminal-window.c
===================================================================
--- terminal/trunk/terminal/terminal-window.c   2008-06-03 20:43:14 UTC (rev 
27025)
+++ terminal/trunk/terminal/terminal-window.c   2008-06-03 20:52:52 UTC (rev 
27026)
@@ -889,8 +889,8 @@
       title = terminal_screen_get_title (terminal);
       gtk_window_set_title (GTK_WINDOW (window), title);
       g_free (title);
-
       terminal_window_update_actions (window);
+      g_object_set (G_OBJECT (terminal), "activity", FALSE, NULL);
     }
 }
 
@@ -1225,8 +1225,6 @@
     }
 }
 
-
-
 static void
 terminal_window_action_new_tab (GtkAction       *action,
                                 TerminalWindow  *window)
@@ -1702,9 +1700,11 @@
 
   header = terminal_tab_header_new ();
   exo_binding_new (G_OBJECT (screen), "title", G_OBJECT (header), "title");
+  exo_binding_new (G_OBJECT (screen), "activity", G_OBJECT (header), 
"activity");
   g_signal_connect_swapped (G_OBJECT (header), "close-tab", G_CALLBACK 
(gtk_widget_destroy), screen);
   g_object_set_data_full (G_OBJECT (header), I_("terminal-window-screen"), 
g_object_ref (G_OBJECT (screen)), (GDestroyNotify) g_object_unref);
   g_object_set_data_full (G_OBJECT (screen), I_("terminal-tab-header"), 
g_object_ref (G_OBJECT (header)), (GDestroyNotify) g_object_unref);
+  g_object_set_data_full (G_OBJECT (screen), I_("terminal-window"), 
g_object_ref (G_OBJECT (window)), (GDestroyNotify) g_object_unref);
   gtk_widget_show (header);
 
   page = gtk_notebook_append_page (GTK_NOTEBOOK (window->notebook), GTK_WIDGET 
(screen), header);
@@ -1760,8 +1760,31 @@
     return NULL;
 }
 
+/**
+ * terminal_window_is_screen_active:
+ * @screen : a #TerminalScreen.
+ *
+ * Return value: TRUE if @screen is active.
+ **/
+gboolean 
+terminal_window_is_screen_active (TerminalScreen *screen)
+{
+  TerminalWindow *window = NULL;
+  GtkNotebook    *notebook;
+  gint            page_num;
+  
+  window = g_object_get_data (G_OBJECT (screen), I_("terminal-window"));
+  _terminal_return_val_if_fail (TERMINAL_IS_WINDOW (window), FALSE);
+  notebook = GTK_NOTEBOOK (window->notebook);
+  page_num = gtk_notebook_get_current_page (notebook);
+  if (G_LIKELY (page_num >= 0))
+    return (TERMINAL_SCREEN (gtk_notebook_get_nth_page (notebook, page_num)) 
== screen);
+  else
+    return FALSE;
+}
 
 
+
 /**
  * terminal_window_set_startup_id:
  * @window

Modified: terminal/trunk/terminal/terminal-window.h
===================================================================
--- terminal/trunk/terminal/terminal-window.h   2008-06-03 20:43:14 UTC (rev 
27025)
+++ terminal/trunk/terminal/terminal-window.h   2008-06-03 20:52:52 UTC (rev 
27026)
@@ -23,6 +23,7 @@
 #define __TERMINAL_WINDOW_H__
 
 #include <terminal/terminal-screen.h>
+#include <terminal/terminal-options.h>
 
 G_BEGIN_DECLS;
 
@@ -70,6 +71,8 @@
 
 GList          *terminal_window_get_restart_command  (TerminalWindow     
*window);
 
+gboolean        terminal_window_is_screen_active     (TerminalScreen     
*screen);
+
 G_END_DECLS;
 
 #endif /* !__TERMINAL_WINDOW_H__ */

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to