generic-poky/meta/packages/gtk+/gtk+-2.6.4-1.osso7/gtknotebook.c.diff

832 lines
29 KiB
Diff

--- gtk+-2.6.4/gtk/gtknotebook.c 2004-09-27 06:43:55.000000000 +0300
+++ gtk+-2.6.4/gtk/gtknotebook.c 2005-04-06 16:19:37.033908352 +0300
@@ -40,10 +40,10 @@
#define TAB_OVERLAP 2
#define TAB_CURVATURE 1
-#define ARROW_SIZE 12
+#define ARROW_WIDTH 20
+#define ARROW_HEIGHT 27
#define ARROW_SPACING 0
-#define NOTEBOOK_INIT_SCROLL_DELAY (200)
-#define NOTEBOOK_SCROLL_DELAY (100)
+#define LABEL_PADDING 0
enum {
@@ -57,7 +57,9 @@
enum {
STEP_PREV,
- STEP_NEXT
+ STEP_NEXT,
+ STEP_PREV_CYCLE,
+ STEP_NEXT_CYCLE
};
typedef enum
@@ -216,7 +218,7 @@
GList *list,
gboolean destroying);
static void gtk_notebook_update_labels (GtkNotebook *notebook);
-static gint gtk_notebook_timer (GtkNotebook *notebook);
+static gint gtk_notebook_timer (GtkNotebook *notebook );
static gint gtk_notebook_page_compare (gconstpointer a,
gconstpointer b);
static GList* gtk_notebook_find_child (GtkNotebook *notebook,
@@ -458,7 +460,7 @@
g_param_spec_boolean ("scrollable",
P_("Scrollable"),
P_("If TRUE, scroll arrows are added if there are too many tabs to fit"),
- FALSE,
+ TRUE,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_ENABLE_POPUP,
@@ -584,6 +586,75 @@
G_PARAM_READABLE));
+ /* Hildon: for adding paddings to the inner borders of the visible page */
+ gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_int ("inner_left_border",
+ _("Inner left border of the visible page"),
+ _("Width of inner left border of the visible page"),
+ 0,
+ G_MAXINT,
+ 0,
+ G_PARAM_READABLE));
+ gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_int ("inner_right_border",
+ _("Inner right border of the visible page"),
+ _("Width of inner right border of the visible page"),
+ 0,
+ G_MAXINT,
+ 0,
+ G_PARAM_READABLE));
+
+ /* Hildon: previously hardcoded constants ARROW_WIDTH, ARROW_HEIGHT,
+ ARROW_SPACING, TAB_OVERLAP and TAB_CURVATURE are now style properties */
+ gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_int ("arrow-width",
+ _("Arrow width"),
+ _("Scroll arrow width"),
+ 0,
+ G_MAXINT,
+ ARROW_WIDTH,
+ G_PARAM_READABLE));
+ gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_int ("arrow-height",
+ _("Arrow height"),
+ _("Scroll arrow height"),
+ 0,
+ G_MAXINT,
+ ARROW_HEIGHT,
+ G_PARAM_READABLE));
+ gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_int ("arrow-spacing",
+ _("Arrow spacing"),
+ _("Scroll arrow spacing"),
+ 0,
+ G_MAXINT,
+ ARROW_SPACING,
+ G_PARAM_READABLE));
+ gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_int ("tab-overlap",
+ _("Tab overlap"),
+ _("Tab overlap"),
+ 0,
+ G_MAXINT,
+ TAB_OVERLAP,
+ G_PARAM_READABLE));
+ gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_int ("tab-curvature",
+ _("Tab curvature"),
+ _("Tab curvature"),
+ 0,
+ G_MAXINT,
+ TAB_CURVATURE,
+ G_PARAM_READABLE));
+ gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_int ("label-padding",
+ _("Label padding"),
+ _("Label padding"),
+ 0,
+ G_MAXINT,
+ LABEL_PADDING,
+ G_PARAM_READABLE));
+
notebook_signals[SWITCH_PAGE] =
g_signal_new ("switch_page",
G_TYPE_FROM_CLASS (gobject_class),
@@ -705,11 +776,10 @@
notebook->show_tabs = TRUE;
notebook->show_border = TRUE;
notebook->tab_pos = GTK_POS_TOP;
- notebook->scrollable = FALSE;
+ notebook->scrollable = TRUE;
notebook->in_child = 0;
notebook->click_child = 0;
notebook->button = 0;
- notebook->need_timer = 0;
notebook->child_has_focus = FALSE;
notebook->have_visible_child = FALSE;
notebook->focus_out = FALSE;
@@ -1189,9 +1259,18 @@
GtkRequisition child_requisition;
gboolean switch_page = FALSE;
gint vis_pages;
- gint focus_width;
+ gint focus_width, label_padding;
+ gint arrow_width, arrow_height, arrow_spacing, tab_overlap, tab_curvature;
- gtk_widget_style_get (widget, "focus-line-width", &focus_width, NULL);
+ gtk_widget_style_get (widget,
+ "focus-line-width", &focus_width,
+ "arrow-width", &arrow_width,
+ "arrow-height", &arrow_height,
+ "arrow-spacing", &arrow_spacing,
+ "tab-overlap", &tab_overlap,
+ "tab-curvature", &tab_curvature,
+ "label-padding", &label_padding,
+ NULL);
widget->requisition.width = 0;
widget->requisition.height = 0;
@@ -1229,6 +1308,22 @@
{
widget->requisition.width += widget->style->xthickness * 2;
widget->requisition.height += widget->style->ythickness * 2;
+
+ /* Hildon kludge: inner border paddings */
+ if (notebook->children && notebook->show_border)
+ {
+ gint inner_left_border, inner_right_border;
+
+ gtk_widget_style_get (widget,
+ "inner_left_border",
+ &inner_left_border,
+ "inner_right_border",
+ &inner_right_border,
+ NULL);
+
+ widget->requisition.width += inner_left_border + inner_right_border;
+ }
+
if (notebook->show_tabs)
{
@@ -1249,6 +1344,7 @@
gtk_widget_size_request (page->tab_label,
&child_requisition);
+ child_requisition.width += 2 * label_padding;
page->requisition.width =
child_requisition.width +
@@ -1292,10 +1388,10 @@
if (notebook->scrollable && vis_pages > 1 &&
widget->requisition.width < tab_width)
- tab_height = MAX (tab_height, ARROW_SIZE);
+ tab_height = MAX (tab_height, arrow_height);
- padding = 2 * (TAB_CURVATURE + focus_width +
- notebook->tab_hborder) - TAB_OVERLAP;
+ padding = 2 * (tab_curvature + focus_width +
+ notebook->tab_hborder) - tab_overlap;
tab_max += padding;
while (children)
{
@@ -1316,15 +1412,15 @@
if (notebook->scrollable && vis_pages > 1 &&
widget->requisition.width < tab_width)
- tab_width = tab_max + 2 * (ARROW_SIZE + ARROW_SPACING);
+ tab_width = tab_max + 2 * (arrow_width + arrow_spacing);
if (notebook->homogeneous && !notebook->scrollable)
widget->requisition.width = MAX (widget->requisition.width,
vis_pages * tab_max +
- TAB_OVERLAP);
+ tab_overlap);
else
widget->requisition.width = MAX (widget->requisition.width,
- tab_width + TAB_OVERLAP);
+ tab_width + tab_overlap);
widget->requisition.height += tab_height;
break;
@@ -1335,10 +1431,10 @@
if (notebook->scrollable && vis_pages > 1 &&
widget->requisition.height < tab_height)
- tab_width = MAX (tab_width, ARROW_SPACING + 2 * ARROW_SIZE);
+ tab_width = MAX (tab_width, arrow_spacing + 2 * arrow_width);
- padding = 2 * (TAB_CURVATURE + focus_width +
- notebook->tab_vborder) - TAB_OVERLAP;
+ padding = 2 * (tab_curvature + focus_width +
+ notebook->tab_vborder) - tab_overlap;
tab_max += padding;
while (children)
@@ -1361,24 +1457,24 @@
if (notebook->scrollable && vis_pages > 1 &&
widget->requisition.height < tab_height)
- tab_height = tab_max + ARROW_SIZE + ARROW_SPACING;
+ tab_height = tab_max + arrow_height + arrow_spacing;
widget->requisition.width += tab_width;
if (notebook->homogeneous && !notebook->scrollable)
widget->requisition.height =
MAX (widget->requisition.height,
- vis_pages * tab_max + TAB_OVERLAP);
+ vis_pages * tab_max + tab_overlap);
else
widget->requisition.height =
MAX (widget->requisition.height,
- tab_height + TAB_OVERLAP);
+ tab_height + tab_overlap);
if (!notebook->homogeneous || notebook->scrollable)
vis_pages = 1;
widget->requisition.height = MAX (widget->requisition.height,
vis_pages * tab_max +
- TAB_OVERLAP);
+ tab_overlap);
break;
}
}
@@ -1499,7 +1595,26 @@
}
}
+ /* Hildon kludge: inner border paddings */
+ if (notebook->show_border)
+ {
+ gint inner_left_border, inner_right_border;
+
+ gtk_widget_style_get (widget,
+ "inner_left_border",
+ &inner_left_border,
+ "inner_right_border",
+ &inner_right_border,
+ NULL);
+
+ child_allocation.x += inner_left_border;
+ child_allocation.width -= inner_left_border + inner_right_border;
+ if (child_allocation.width < 0)
+ child_allocation.width = 0;
+ }
+
children = notebook->children;
+
while (children)
{
page = children->data;
@@ -1580,11 +1695,18 @@
GdkRectangle event_window_pos;
gboolean before = ARROW_IS_BEFORE (arrow);
gboolean left = ARROW_IS_LEFT (arrow);
+ gint arrow_width, arrow_height, arrow_spacing;
+
+ gtk_widget_style_get (GTK_WIDGET(notebook),
+ "arrow-width", &arrow_width,
+ "arrow-height", &arrow_height,
+ "arrow-spacing", &arrow_spacing,
+ NULL);
if (gtk_notebook_get_event_window_position (notebook, &event_window_pos))
{
- rectangle->width = ARROW_SIZE;
- rectangle->height = ARROW_SIZE;
+ rectangle->width = arrow_width;
+ rectangle->height = arrow_height;
switch (notebook->tab_pos)
{
@@ -1602,6 +1724,8 @@
rectangle->y += event_window_pos.height - rectangle->height;
break;
case GTK_POS_TOP:
+ arrow_spacing = - arrow_spacing;
+ /* Fall through */
case GTK_POS_BOTTOM:
if (before)
{
@@ -1617,7 +1741,11 @@
else
rectangle->x = event_window_pos.x + event_window_pos.width - 2 * rectangle->width;
}
- rectangle->y = event_window_pos.y + (event_window_pos.height - rectangle->height) / 2;
+ rectangle->y = event_window_pos.y;
+ if (arrow_spacing > 0)
+ rectangle->y += arrow_spacing;
+ else
+ rectangle->y += (event_window_pos.height - rectangle->height) / 2;
break;
}
}
@@ -1696,6 +1824,10 @@
gboolean is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
gboolean left = (ARROW_IS_LEFT (arrow) && !is_rtl) ||
(!ARROW_IS_LEFT (arrow) && is_rtl);
+ GtkSettings *settings = gtk_settings_get_default ();
+ guint timeout;
+
+ g_object_get (settings, "gtk-initial-timeout", &timeout, NULL);
if (!GTK_WIDGET_HAS_FOCUS (widget))
gtk_widget_grab_focus (widget);
@@ -1706,14 +1838,14 @@
if (event->button == 1)
{
gtk_notebook_do_arrow (notebook, arrow);
-
+
if (!notebook->timer)
- {
- notebook->timer = g_timeout_add (NOTEBOOK_INIT_SCROLL_DELAY,
- (GSourceFunc) gtk_notebook_timer,
- (gpointer) notebook);
- notebook->need_timer = TRUE;
- }
+ {
+ notebook->timer = g_timeout_add (timeout,
+ (GSourceFunc) gtk_notebook_timer,
+ (gpointer) notebook);
+ notebook->need_timer = TRUE;
+ }
}
else if (event->button == 2)
gtk_notebook_page_select (notebook, TRUE);
@@ -1862,7 +1994,7 @@
static void
stop_scrolling (GtkNotebook *notebook)
{
- if (notebook->timer)
+ if (notebook->timer)
{
g_source_remove (notebook->timer);
notebook->timer = 0;
@@ -2343,9 +2475,9 @@
*/
return focus_child_in (notebook, GTK_DIR_TAB_FORWARD);
case GTK_DIR_LEFT:
- return focus_tabs_move (notebook, direction, STEP_PREV);
+ return focus_tabs_move (notebook, direction, STEP_PREV_CYCLE);
case GTK_DIR_RIGHT:
- return focus_tabs_move (notebook, direction, STEP_NEXT);
+ return focus_tabs_move (notebook, direction, STEP_NEXT_CYCLE);
}
}
else /* Focus was not on widget */
@@ -2481,7 +2613,6 @@
* gtk_notebook_redraw_tabs
* gtk_notebook_real_remove
* gtk_notebook_update_labels
- * gtk_notebook_timer
* gtk_notebook_page_compare
* gtk_notebook_real_page_position
* gtk_notebook_search_page
@@ -2574,22 +2705,27 @@
gtk_notebook_timer (GtkNotebook *notebook)
{
gboolean retval = FALSE;
+ guint timeout;
+ GtkSettings *settings;
GDK_THREADS_ENTER ();
+ settings = gtk_settings_get_default ();
+ g_object_get (settings, "gtk-update-timeout", &timeout, NULL);
+
if (notebook->timer)
{
gtk_notebook_do_arrow (notebook, notebook->click_child);
- if (notebook->need_timer)
- {
- notebook->need_timer = FALSE;
- notebook->timer = g_timeout_add (NOTEBOOK_SCROLL_DELAY,
- (GSourceFunc) gtk_notebook_timer,
- (gpointer) notebook);
- }
+ if (notebook->need_timer)
+ {
+ notebook->need_timer = FALSE;
+ notebook->timer = g_timeout_add (timeout,
+ (GSourceFunc) gtk_notebook_timer,
+ (gpointer) notebook);
+ }
else
- retval = TRUE;
+ retval = TRUE;
}
GDK_THREADS_LEAVE ();
@@ -2781,10 +2917,12 @@
switch (direction)
{
case STEP_PREV:
+ case STEP_PREV_CYCLE:
flag = GTK_PACK_END;
break;
case STEP_NEXT:
+ case STEP_NEXT_CYCLE:
flag = GTK_PACK_START;
break;
}
@@ -2827,6 +2965,37 @@
old_list = list;
list = list->prev;
}
+
+ /* Hildon hack: keyboard navigation should cycle around */
+ if (direction == STEP_PREV_CYCLE)
+ {
+ /* find and return the last (visible) page */
+ list = g_list_last (notebook->children);
+ if (!find_visible)
+ return list;
+ while (list)
+ {
+ page = list->data;
+ if (GTK_WIDGET_VISIBLE (page->child))
+ return list;
+ list = list->prev;
+ }
+ }
+ if (direction == STEP_NEXT_CYCLE)
+ {
+ /* find and return the first (visible) page */
+ list = g_list_first (notebook->children);
+ if (!find_visible)
+ return list;
+ while (list)
+ {
+ page = list->data;
+ if (GTK_WIDGET_VISIBLE (page->child))
+ return list;
+ list = list->next;
+ }
+ }
+
return NULL;
}
@@ -2850,6 +3019,7 @@
gint gap_x = 0, gap_width = 0, step = STEP_PREV;
gboolean is_rtl;
gint tab_pos;
+ gboolean paint_box_gap = FALSE;
g_return_if_fail (GTK_IS_NOTEBOOK (widget));
g_return_if_fail (area != NULL);
@@ -2933,15 +3103,37 @@
step = STEP_PREV;
break;
}
- gtk_paint_box_gap (widget->style, widget->window,
- GTK_STATE_NORMAL, GTK_SHADOW_OUT,
- area, widget, "notebook",
- x, y, width, height,
- tab_pos, gap_x, gap_width);
+
+ /* hildon hack to postpone painting until it
+ is known if scroll arrows will be drawn */
+ paint_box_gap = TRUE;
}
+ /* first, figure out if arrows should be drawn */
showarrow = FALSE;
children = gtk_notebook_search_page (notebook, NULL, step, TRUE);
+ while (children && !showarrow)
+ {
+ page = children->data;
+ children = gtk_notebook_search_page (notebook, children,
+ step, TRUE);
+ if (!GTK_WIDGET_MAPPED (page->tab_label))
+ showarrow = TRUE;
+ }
+
+ /* then draw content area frame */
+ if (paint_box_gap)
+ gtk_paint_box_gap (widget->style, widget->window,
+ GTK_STATE_NORMAL, GTK_SHADOW_OUT,
+ area, widget,
+ (showarrow && notebook->scrollable)
+ ? "notebook_show_arrow"
+ : "notebook",
+ x, y, width, height,
+ tab_pos, gap_x, gap_width);
+
+ /* and finally draw tabs */
+ children = gtk_notebook_search_page (notebook, NULL, step, TRUE);
while (children)
{
page = children->data;
@@ -3069,10 +3261,15 @@
GdkRectangle arrow_rect;
GtkArrowType arrow;
gboolean is_rtl, left;
+ gint arrow_width, arrow_height;
gtk_notebook_get_arrow_rect (notebook, &arrow_rect, nbarrow);
widget = GTK_WIDGET (notebook);
+ gtk_widget_style_get (widget,
+ "arrow-width", &arrow_width,
+ "arrow-height", &arrow_height,
+ NULL);
is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
left = (ARROW_IS_LEFT (nbarrow) && !is_rtl) ||
@@ -3112,7 +3309,7 @@
gtk_paint_arrow (widget->style, widget->window, state_type,
shadow_type, NULL, widget, "notebook",
arrow, TRUE, arrow_rect.x, arrow_rect.y,
- ARROW_SIZE, ARROW_SIZE);
+ arrow_width, arrow_height);
}
}
@@ -3143,13 +3340,25 @@
gboolean is_rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL &&
(tab_pos == GTK_POS_TOP || tab_pos == GTK_POS_BOTTOM));
gint memo_x;
+ gboolean truncate = FALSE;
+ gint arrow_width, arrow_height, arrow_spacing, tab_overlap;
+ gint total_width, ideal_tab_width, n_expanding_tabs;
if (!notebook->show_tabs || !notebook->children || !notebook->cur_page)
return;
+ gtk_widget_style_get (widget,
+ "arrow-width", &arrow_width,
+ "arrow-height", &arrow_height,
+ "arrow-spacing", &arrow_spacing,
+ "tab-overlap", &tab_overlap,
+ NULL);
+
child_allocation.x = widget->allocation.x + container->border_width;
child_allocation.y = widget->allocation.y + container->border_width;
+ total_width = allocation->width - 2 * container->border_width - tab_overlap;
+
switch (tab_pos)
{
case GTK_POS_BOTTOM:
@@ -3198,27 +3407,26 @@
if (GTK_WIDGET_VISIBLE (page->child))
tab_space += page->requisition.width;
}
- if (tab_space >
- allocation->width - 2 * container->border_width - TAB_OVERLAP)
+ if (tab_space > total_width)
{
showarrow = TRUE;
page = focus_tab->data;
- tab_space = allocation->width - TAB_OVERLAP -
+ tab_space = allocation->width - tab_overlap -
page->requisition.width - 2 * container->border_width;
if (notebook->has_after_previous)
- tab_space -= ARROW_SPACING + ARROW_SIZE;
+ tab_space -= arrow_spacing + arrow_width;
if (notebook->has_after_next)
- tab_space -= ARROW_SPACING + ARROW_SIZE;
+ tab_space -= arrow_spacing + arrow_width;
if (notebook->has_before_previous)
{
- tab_space -= ARROW_SPACING + ARROW_SIZE;
- child_allocation.x += ARROW_SPACING + ARROW_SIZE;
+ tab_space -= arrow_spacing + arrow_width;
+ child_allocation.x += arrow_spacing + arrow_width;
}
if (notebook->has_before_next)
{
- tab_space -= ARROW_SPACING + ARROW_SIZE;
- child_allocation.x += ARROW_SPACING + ARROW_SIZE;
+ tab_space -= arrow_spacing + arrow_width;
+ child_allocation.x += arrow_spacing + arrow_width;
}
}
break;
@@ -3233,19 +3441,19 @@
tab_space += page->requisition.height;
}
if (tab_space >
- (allocation->height - 2 * container->border_width - TAB_OVERLAP))
+ (allocation->height - 2 * container->border_width - tab_overlap))
{
showarrow = TRUE;
page = focus_tab->data;
tab_space = allocation->height
- - TAB_OVERLAP - 2 * container->border_width
+ - tab_overlap - 2 * container->border_width
- page->requisition.height;
if (notebook->has_after_previous || notebook->has_after_next)
- tab_space -= ARROW_SPACING + ARROW_SIZE;
+ tab_space -= arrow_spacing + arrow_height;
if (notebook->has_before_previous || notebook->has_before_next)
{
- tab_space -= ARROW_SPACING + ARROW_SIZE;
- child_allocation.y += ARROW_SPACING + ARROW_SIZE;
+ tab_space -= arrow_spacing + arrow_height;
+ child_allocation.y += arrow_spacing + arrow_height;
}
}
break;
@@ -3257,6 +3465,10 @@
notebook->first_tab = focus_tab;
last_child = gtk_notebook_search_page (notebook, focus_tab,
STEP_NEXT, TRUE);
+
+ /* Hildon: there is only one visible tab label
+ and it doesn't fit unless it is truncated */
+ truncate = TRUE;
}
else
{
@@ -3413,7 +3625,7 @@
}
tab_space -= allocation->height;
}
- tab_space += 2 * container->border_width + TAB_OVERLAP;
+ tab_space += 2 * container->border_width + tab_overlap;
tab_space *= -1;
notebook->first_tab = gtk_notebook_search_page (notebook, NULL,
STEP_NEXT, TRUE);
@@ -3432,12 +3644,29 @@
if (showarrow)
{
if (notebook->has_after_previous)
- child_allocation.x -= ARROW_SPACING + ARROW_SIZE;
+ child_allocation.x -= arrow_spacing + arrow_width;
if (notebook->has_after_next)
- child_allocation.x -= ARROW_SPACING + ARROW_SIZE;
+ child_allocation.x -= arrow_spacing + arrow_width;
}
}
+ ideal_tab_width = (total_width / n);
+ n_expanding_tabs = 0;
+
+ while (children)
+ {
+ if (children == last_child)
+ break;
+
+ page = children->data;
+ children = gtk_notebook_search_page (notebook, children, STEP_NEXT,TRUE);
+
+ if (page->requisition.width <= ideal_tab_width)
+ n_expanding_tabs++;
+ }
+
+ children = notebook->first_tab;
+
while (children)
{
if (children == last_child)
@@ -3452,9 +3681,11 @@
children = gtk_notebook_search_page (notebook, children, STEP_NEXT,TRUE);
delta = 0;
- if (n && (showarrow || page->expand || notebook->homogeneous))
+
+ if (n && (showarrow || page->expand || notebook->homogeneous) &&
+ (page->requisition.width <= ideal_tab_width))
{
- new_fill = (tab_space * i++) / n;
+ new_fill = (tab_space * i++) / n_expanding_tabs;
delta = new_fill - old_fill;
old_fill = new_fill;
}
@@ -3463,15 +3694,18 @@
{
case GTK_POS_TOP:
case GTK_POS_BOTTOM:
+ if (truncate)
+ delta *= -1;
+
child_allocation.width = (page->requisition.width +
- TAB_OVERLAP + delta);
+ tab_overlap + delta);
if (is_rtl)
child_allocation.x -= child_allocation.width;
break;
case GTK_POS_LEFT:
case GTK_POS_RIGHT:
child_allocation.height = (page->requisition.height +
- TAB_OVERLAP + delta);
+ tab_overlap + delta);
break;
}
@@ -3482,13 +3716,13 @@
case GTK_POS_TOP:
case GTK_POS_BOTTOM:
if (!is_rtl)
- child_allocation.x += child_allocation.width - TAB_OVERLAP;
+ child_allocation.x += child_allocation.width - tab_overlap;
else
- child_allocation.x += TAB_OVERLAP;
+ child_allocation.x += tab_overlap;
break;
case GTK_POS_LEFT:
case GTK_POS_RIGHT:
- child_allocation.y += child_allocation.height - TAB_OVERLAP;
+ child_allocation.y += child_allocation.height - tab_overlap;
break;
}
@@ -3538,14 +3772,14 @@
case GTK_POS_TOP:
case GTK_POS_BOTTOM:
child_allocation.width = (page->requisition.width +
- TAB_OVERLAP + delta);
+ tab_overlap + delta);
if (!is_rtl)
child_allocation.x -= child_allocation.width;
break;
case GTK_POS_LEFT:
case GTK_POS_RIGHT:
child_allocation.height = (page->requisition.height +
- TAB_OVERLAP + delta);
+ tab_overlap + delta);
child_allocation.y -= child_allocation.height;
break;
}
@@ -3557,13 +3791,13 @@
case GTK_POS_TOP:
case GTK_POS_BOTTOM:
if (!is_rtl)
- child_allocation.x += TAB_OVERLAP;
+ child_allocation.x += tab_overlap;
else
- child_allocation.x += child_allocation.width - TAB_OVERLAP;
+ child_allocation.x += child_allocation.width - tab_overlap;
break;
case GTK_POS_LEFT:
case GTK_POS_RIGHT:
- child_allocation.y += TAB_OVERLAP;
+ child_allocation.y += tab_overlap;
break;
}
@@ -3589,8 +3823,12 @@
gint padding;
gint focus_width;
gint tab_pos = get_effective_tab_pos (notebook);
+ gint tab_curvature;
- gtk_widget_style_get (widget, "focus-line-width", &focus_width, NULL);
+ gtk_widget_style_get (widget,
+ "focus-line-width", &focus_width,
+ "tab-curvature", &tab_curvature,
+ NULL);
xthickness = widget->style->xthickness;
ythickness = widget->style->ythickness;
@@ -3621,7 +3859,7 @@
{
case GTK_POS_TOP:
case GTK_POS_BOTTOM:
- padding = TAB_CURVATURE + focus_width + notebook->tab_hborder;
+ padding = tab_curvature + focus_width + notebook->tab_hborder;
if (page->fill)
{
child_allocation.x = (xthickness + focus_width +
@@ -3646,7 +3884,7 @@
break;
case GTK_POS_LEFT:
case GTK_POS_RIGHT:
- padding = TAB_CURVATURE + focus_width + notebook->tab_vborder;
+ padding = tab_curvature + focus_width + notebook->tab_vborder;
if (page->fill)
{
child_allocation.y = ythickness + padding;
@@ -4340,7 +4578,7 @@
}
page->tab_label = tab_label;
page->menu_label = menu_label;
- page->expand = FALSE;
+ page->expand = TRUE;
page->fill = TRUE;
page->pack = GTK_PACK_START;
@@ -5046,6 +5284,7 @@
{
page->default_tab = FALSE;
page->tab_label = tab_label;
+
gtk_widget_set_parent (page->tab_label, GTK_WIDGET (notebook));
}
else