]> spindle.queued.net Git - midori/commitdiff
Rearrange statusbar packing to keep themes happy
authorChristian Dywan <christian@twotoasts.de>
Tue, 27 Oct 2009 22:55:17 +0000 (23:55 +0100)
committerChristian Dywan <christian@twotoasts.de>
Wed, 28 Oct 2009 19:34:39 +0000 (20:34 +0100)
midori/midori-browser.c

index 819f294304cffda112233875865cf86321820d2a..98a58c74cc735e66a7c2404c7f39877fe891eb42 100644 (file)
@@ -67,6 +67,7 @@ struct _MidoriBrowser
     gboolean find_typing;
 
     GtkWidget* statusbar;
+    GtkWidget* statusbar_contents;
     GtkWidget* transferbar;
     GtkWidget* transferbar_clear;
     GtkWidget* progressbar;
@@ -1903,13 +1904,19 @@ midori_browser_class_init (MidoriBrowserClass* class)
                                      MIDORI_LOAD_FINISHED,
                                      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
 
+    /**
+    * MidoriBrowser:statusbar:
+    *
+    * The widget representing the statusbar contents. This is
+    * not an actual #GtkStatusbar but rather a #GtkBox.
+    */
     g_object_class_install_property (gobject_class,
                                      PROP_STATUSBAR,
                                      g_param_spec_object (
                                      "statusbar",
                                      "Statusbar",
                                      "The statusbar",
-                                     GTK_TYPE_STATUSBAR,
+                                     GTK_TYPE_BOX,
                                      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
 
     /**
@@ -5696,22 +5703,39 @@ midori_browser_init (MidoriBrowser* browser)
 
     /* Statusbar */
     browser->statusbar = gtk_statusbar_new ();
+    /* Rearrange the statusbar packing. This is necessariy to keep
+        themes happy while there is no support from GtkStatusbar. */
+    #if 1
+    browser->statusbar_contents = gtk_hbox_new (FALSE, 4);
+    gtk_widget_show (browser->statusbar_contents);
+    g_object_ref (GTK_STATUSBAR (browser->statusbar)->label);
+    gtk_container_remove (GTK_CONTAINER (GTK_STATUSBAR (browser->statusbar)->frame),
+                          GTK_STATUSBAR (browser->statusbar)->label);
+    gtk_box_pack_start (GTK_BOX (browser->statusbar_contents),
+                        GTK_STATUSBAR (browser->statusbar)->label, TRUE, TRUE, 0);
+    g_object_unref (GTK_STATUSBAR (browser->statusbar)->label);
+    gtk_container_add (GTK_CONTAINER (GTK_STATUSBAR (browser->statusbar)->frame),
+                       browser->statusbar_contents);
+    gtk_label_set_ellipsize (GTK_LABEL (GTK_STATUSBAR (browser->statusbar)->label), FALSE);
+    #else
+    browser->statusbar_contents = browser->statusbar;
+    #endif
     /* Adjust the statusbar's padding to avoid child overlapping */
     rcstyle = gtk_rc_style_new ();
     rcstyle->xthickness = rcstyle->ythickness = -4;
-    gtk_widget_modify_style (browser->statusbar, rcstyle);
+    gtk_widget_modify_style (browser->statusbar_contents, rcstyle);
     g_object_unref (rcstyle);
     gtk_box_pack_start (GTK_BOX (vbox), browser->statusbar, FALSE, FALSE, 0);
 
     browser->progressbar = gtk_progress_bar_new ();
     /* Set the progressbar's height to 1 to fit it in the statusbar */
     gtk_widget_set_size_request (browser->progressbar, -1, 1);
-    gtk_box_pack_start (GTK_BOX (browser->statusbar), browser->progressbar,
-                        FALSE, FALSE, 3);
+    gtk_box_pack_start (GTK_BOX (browser->statusbar_contents),
+                        browser->progressbar, FALSE, FALSE, 3);
 
     browser->transferbar = gtk_hbox_new (FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (browser->statusbar), browser->transferbar,
-                        FALSE, FALSE, 3);
+    gtk_box_pack_start (GTK_BOX (browser->statusbar_contents),
+                        browser->transferbar, FALSE, FALSE, 3);
     gtk_widget_show (browser->transferbar);
     browser->transferbar_clear = gtk_button_new_with_label (_("Clear All"));
     icon = gtk_image_new_from_stock (GTK_STOCK_CLEAR, GTK_ICON_SIZE_MENU);
@@ -6314,7 +6338,7 @@ midori_browser_get_property (GObject*    object,
         break;
     }
     case PROP_STATUSBAR:
-        g_value_set_object (value, browser->statusbar);
+        g_value_set_object (value, browser->statusbar_contents);
         break;
     case PROP_STATUSBAR_TEXT:
         g_value_set_string (value, browser->statusbar_text);