r18881 - gnucash/trunk/src/gnome-utils - Bug #610675 Register Tabs Do Not Display Since Nightly Build r18685

Geert Janssens gjanssens at code.gnucash.org
Tue Mar 9 14:38:41 EST 2010


Author: gjanssens
Date: 2010-03-09 14:38:41 -0500 (Tue, 09 Mar 2010)
New Revision: 18881
Trac: http://svn.gnucash.org/trac/changeset/18881

Modified:
   gnucash/trunk/src/gnome-utils/gnc-main-window.c
Log:
Bug #610675 Register Tabs Do Not Display Since Nightly Build r18685
Apply Bob's patch after fixing the whitespace. This patch may cause issues on Windows
(a previous version of the patch did). If the next Windows nightly build exhibits
the missing register tab names again, it will have to be reverted again
and improved upon.

Modified: gnucash/trunk/src/gnome-utils/gnc-main-window.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-main-window.c	2010-03-09 18:28:04 UTC (rev 18880)
+++ gnucash/trunk/src/gnome-utils/gnc-main-window.c	2010-03-09 19:38:41 UTC (rev 18881)
@@ -1825,22 +1825,26 @@
                             GtkWidget **entry_p)
 {
     GncMainWindowPrivate *priv;
-    GtkWidget *tab_hbox, *widget;
+    GtkWidget *tab_hbox, *widget, *event_box;
     GList *children, *tmp;
 
     ENTER("window %p, page %p, label_p %p, entry_p %p",
           window, page, label_p, entry_p);
     priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
     *label_p = *entry_p = NULL;
-    tab_hbox = gtk_notebook_get_tab_label(GTK_NOTEBOOK(priv->notebook),
-                                          page->notebook_page);
+
+    event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(priv->notebook),
+                                           page->notebook_page);
+
+    tab_hbox = gtk_bin_get_child(GTK_BIN(event_box));
+
     children = gtk_container_get_children(GTK_CONTAINER(tab_hbox));
     for (tmp = children; tmp; tmp = g_list_next(tmp))
     {
         widget = tmp->data;
-        if (GTK_IS_EVENT_BOX(widget))
+        if (GTK_IS_LABEL(widget))
         {
-            *label_p = gtk_bin_get_child(GTK_BIN(widget));
+            *label_p = widget;
         }
         else if (GTK_IS_ENTRY(widget))
         {
@@ -1853,14 +1857,40 @@
     return (*label_p && *entry_p);
 }
 
+static gboolean
+main_window_find_tab_event (GncMainWindow *window,
+                            GncPluginPage *page,
+                            GtkWidget **event_p)
+{
+    GncMainWindowPrivate *priv;
+    GtkWidget *event_box;
+
+    ENTER("window %p, page %p, event %p",
+          window, page, event_p);
+    priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
+    *event_p = NULL;
+
+    event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(priv->notebook),
+                                           page->notebook_page);
+    if (GTK_IS_EVENT_BOX(event_box))
+    {
+        *event_p = event_box;
+        LEAVE("event %p", *event_p);
+        return (TRUE);
+    }
+
+    LEAVE("event %p", *event_p);
+    return (FALSE);
+}
+
 void
 main_window_update_page_name (GncPluginPage *page,
                               const gchar *name_in)
 {
     GncMainWindow *window;
     GncMainWindowPrivate *priv;
-    GtkWidget *label, *entry;
-    gchar *name;
+    GtkWidget *label, *entry, *event_box;
+    gchar *name, *old_page_name, *old_page_long_name;
 
     ENTER(" ");
 
@@ -1870,6 +1900,7 @@
         return;
     }
     name = g_strstrip(g_strdup(name_in));
+
     /* Optimization, if the name hasn't changed, don't update X. */
     if (*name == '\0' || 0 == strcmp(name, gnc_plugin_page_get_page_name(page)))
     {
@@ -1878,6 +1909,9 @@
         return;
     }
 
+    old_page_name = g_strdup( gnc_plugin_page_get_page_name(page));
+    old_page_long_name = g_strdup( gnc_plugin_page_get_page_long_name(page));
+
     /* Update the plugin */
     window = GNC_MAIN_WINDOW(page->window);
     priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
@@ -1887,6 +1921,23 @@
     main_window_find_tab_items(window, page, &label, &entry);
     gtk_label_set_text(GTK_LABEL(label), name);
 
+    /* Update Tooltip on notebook Tab */
+    main_window_find_tab_event(window, page, &event_box);
+
+    if (strstr(old_page_long_name,old_page_name) != NULL)
+    {
+        gchar *new_page_long_name;
+        gint string_position;
+
+        string_position = strlen(old_page_long_name) - strlen(old_page_name);
+        new_page_long_name = g_strconcat(g_strndup(old_page_long_name, string_position), name, NULL);
+
+        gnc_plugin_page_set_page_long_name(page, new_page_long_name);
+        gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), event_box, new_page_long_name, NULL);
+
+        g_free(new_page_long_name);
+    }
+
     /* Update the notebook menu */
     label = gtk_notebook_get_menu_label (GTK_NOTEBOOK(priv->notebook),
                                          page->notebook_page);
@@ -1894,6 +1945,8 @@
 
     /* Force an update of the window title */
     gnc_main_window_update_title(window);
+    g_free(old_page_long_name);
+    g_free(old_page_name);
     g_free(name);
     LEAVE("done");
 }
@@ -1933,9 +1986,12 @@
     gnc_plugin_page_set_page_color(page, color_string);
 
     /* Update the notebook tab */
+    main_window_find_tab_event(window, page, &event_box);
 
     if (gdk_color_parse(color_string, &tab_color))
     {
+        gtk_widget_modify_bg(event_box, GTK_STATE_NORMAL, &tab_color);
+        gtk_widget_modify_bg(event_box, GTK_STATE_ACTIVE, &tab_color);
     }
     g_free(color_string);
     LEAVE("done");
@@ -2465,10 +2521,11 @@
     GncMainWindowPrivate *priv;
     GtkWidget *tab_hbox;
     GtkWidget *label, *entry, *event_box;
-    const gchar *icon, *text;
+    const gchar *icon, *text, *color_string;
     GtkWidget *image;
     GList *tmp;
     gint width;
+    GdkColor tab_color;
 
     ENTER("window %p, page %p", window, page);
 
@@ -2532,14 +2589,25 @@
         image = gtk_image_new_from_stock (icon, GTK_ICON_SIZE_MENU);
         gtk_widget_show (image);
         gtk_box_pack_start (GTK_BOX (tab_hbox), image, FALSE, FALSE, 0);
+        gtk_box_pack_start (GTK_BOX (tab_hbox), label, FALSE, FALSE, 0);
     }
+    else
+        gtk_box_pack_start (GTK_BOX (tab_hbox), label, FALSE, FALSE, 0);
 
     event_box = gtk_event_box_new();
-    gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box), FALSE);
+    gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box), TRUE);
     gtk_widget_show(event_box);
-    gtk_container_add(GTK_CONTAINER(event_box), label);
-    gtk_box_pack_start (GTK_BOX (tab_hbox), event_box, TRUE, TRUE, 0);
 
+    gtk_container_add(GTK_CONTAINER(event_box), tab_hbox);
+
+    color_string = gnc_plugin_page_get_page_color(page);
+    if (color_string == NULL) color_string = "";
+    if (gdk_color_parse(color_string, &tab_color))
+    {
+        gtk_widget_modify_bg(event_box, GTK_STATE_NORMAL, &tab_color);
+        gtk_widget_modify_bg(event_box, GTK_STATE_ACTIVE, &tab_color);
+    }
+
     text = gnc_plugin_page_get_page_long_name(page);
     if (text)
     {
@@ -2597,7 +2665,7 @@
     /*
      * Now install it all in the window.
      */
-    gnc_main_window_connect(window, page, tab_hbox, label);
+    gnc_main_window_connect(window, page, event_box, label);
 
     LEAVE("");
 }



More information about the gnucash-changes mailing list