[Xfce4-commits] <midori:master> Grow and shrink tabs dynamically to available space
Christian Dywan
noreply at xfce.org
Wed Mar 23 20:44:01 CET 2011
Updating branch refs/heads/master
to a9a5b38c292e89fa104e1561ab8b1e2ca47d052b (commit)
from 6e2d9fdcc2e45b8f67dfb4ae92647aa475ddcb1b (commit)
commit a9a5b38c292e89fa104e1561ab8b1e2ca47d052b
Author: Tomasz Szatkowski <szatkus at gmail.com>
Date: Wed Mar 23 20:41:40 2011 +0100
Grow and shrink tabs dynamically to available space
Fixes: https://bugs.launchpad.net/midori/+bug/735993
midori/midori-browser.c | 41 +++++++++++++++++++++++++++++++++++++++++
midori/midori-view.c | 9 ++-------
2 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index 4399236..e74ebcf 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -1463,6 +1463,31 @@ midori_browser_tab_destroy_cb (GtkWidget* widget,
}
static void
+_midori_browser_update_notebook (MidoriBrowser* browser)
+{
+ guint i;
+ gint new_size = 0;
+ gint n = gtk_notebook_get_n_pages (GTK_NOTEBOOK(browser->notebook));
+ const gint max_size = 150;
+ const gint min_size = 32;
+ GtkAllocation notebook_size;
+
+ gtk_widget_get_allocation (browser->notebook, ¬ebook_size);
+ if (n > 0) new_size = notebook_size.width / n - 7;
+ if (new_size < min_size) new_size = min_size;
+ if (new_size > max_size) new_size = max_size;
+
+ for (i = 0; i < n; i++)
+ {
+ GtkWidget* view;
+ GtkWidget* label;
+ view = gtk_notebook_get_nth_page (GTK_NOTEBOOK(browser->notebook), i);
+ label = gtk_notebook_get_tab_label (GTK_NOTEBOOK(browser->notebook), view);
+ gtk_widget_set_size_request (label, new_size, -1);
+ }
+}
+
+static void
_midori_browser_add_tab (MidoriBrowser* browser,
GtkWidget* view)
{
@@ -1540,6 +1565,7 @@ _midori_browser_add_tab (MidoriBrowser* browser,
G_CALLBACK (midori_browser_tab_destroy_cb), browser);
_midori_browser_update_actions (browser);
+ _midori_browser_update_notebook (browser);
}
static void
@@ -1547,6 +1573,7 @@ _midori_browser_remove_tab (MidoriBrowser* browser,
GtkWidget* view)
{
gtk_widget_destroy (view);
+ _midori_browser_update_notebook (browser);
}
/**
@@ -5200,6 +5227,14 @@ midori_browser_size_allocate_cb (MidoriBrowser* browser,
}
static void
+gtk_notebook_size_allocated_cb (GtkWidget* widget,
+ GdkRectangle* allocation,
+ MidoriBrowser* browser)
+{
+ _midori_browser_update_notebook (browser);
+}
+
+static void
midori_browser_destroy_cb (MidoriBrowser* browser)
{
g_object_set_data (G_OBJECT (browser), "midori-browser-destroyed", (void*)1);
@@ -5215,6 +5250,9 @@ midori_browser_destroy_cb (MidoriBrowser* browser)
g_signal_handlers_disconnect_by_func (browser->notebook,
midori_browser_notebook_reorder_tab_cb,
NULL);
+ g_signal_handlers_disconnect_by_func (browser->notebook,
+ gtk_notebook_size_allocated_cb,
+ NULL);
gtk_container_foreach (GTK_CONTAINER (browser->notebook),
(GtkCallback) gtk_widget_destroy, NULL);
}
@@ -5934,6 +5972,9 @@ midori_browser_init (MidoriBrowser* browser)
g_signal_connect (browser->notebook, "page-reordered",
G_CALLBACK (midori_browser_notebook_page_reordered_cb),
browser);
+ g_signal_connect (browser->notebook, "size-allocate",
+ G_CALLBACK (gtk_notebook_size_allocated_cb),
+ browser);
g_signal_connect_after (browser->notebook, "button-press-event",
G_CALLBACK (midori_browser_notebook_button_press_event_after_cb),
browser);
diff --git a/midori/midori-view.c b/midori/midori-view.c
index f4e85e0..654db5f 100644
--- a/midori/midori-view.c
+++ b/midori/midori-view.c
@@ -4591,18 +4591,13 @@ midori_view_update_tab_title (GtkWidget* label,
gint size,
gdouble angle)
{
- gint width;
-
- sokoke_widget_get_text_size (label, "M", &width, NULL);
if (angle == 0.0 || angle == 360.0)
{
- gtk_widget_set_size_request (label, width * size, -1);
if (gtk_label_get_ellipsize (GTK_LABEL (label)) != PANGO_ELLIPSIZE_START)
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
}
else
{
- gtk_widget_set_size_request (label, -1, width * size);
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_NONE);
}
gtk_label_set_angle (GTK_LABEL (label), angle);
@@ -4767,13 +4762,13 @@ midori_view_get_proxy_tab_label (MidoriView* view)
if (katze_object_get_boolean (view->settings, "close-buttons-left"))
{
gtk_box_pack_end (GTK_BOX (hbox), view->tab_icon, FALSE, FALSE, 0);
- gtk_box_pack_end (GTK_BOX (hbox), view->tab_title, FALSE, TRUE, 0);
+ gtk_box_pack_end (GTK_BOX (hbox), view->tab_title, TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (hbox), align, FALSE, FALSE, 0);
}
else
{
gtk_box_pack_start (GTK_BOX (hbox), view->tab_icon, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), view->tab_title, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), view->tab_title, TRUE, TRUE, 0);
gtk_box_pack_end (GTK_BOX (hbox), align, FALSE, FALSE, 0);
}
gtk_widget_show_all (GTK_WIDGET (event_box));
More information about the Xfce4-commits
mailing list