[gtk+] notebook: Convert tabs node to a gadget
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] notebook: Convert tabs node to a gadget
- Date: Mon, 11 Jan 2016 16:30:44 +0000 (UTC)
commit e1722baf57fc64f0ee7bcd519cb2e715213171c8
Author: Benjamin Otte <otte redhat com>
Date: Thu Dec 24 15:26:11 2015 +0100
notebook: Convert tabs node to a gadget
And in turn, convert the header gadget to a box gadget.
gtk/gtknotebook.c | 340 +++++++++++++++++++----------------------------------
1 files changed, 122 insertions(+), 218 deletions(-)
---
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index 727f221..5c56eb2 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -178,7 +178,7 @@ struct _GtkNotebookPrivate
GtkCssGadget *gadget;
GtkCssGadget *stack_gadget;
GtkCssGadget *header_gadget;
- GtkCssNode *tabs_node;
+ GtkCssGadget *tabs_gadget;
GtkCssNode *arrow_node[4];
GList *children;
@@ -482,7 +482,7 @@ static GtkNotebook *gtk_notebook_create_window (GtkNotebook *notebook,
gint y);
/*** Gadget Functions ***/
-static void gtk_notebook_measure_header (GtkCssGadget *gadget,
+static void gtk_notebook_measure_tabs (GtkCssGadget *gadget,
GtkOrientation orientation,
gint for_size,
gint *minimum,
@@ -490,12 +490,12 @@ static void gtk_notebook_measure_header (GtkCssGadget *gadget,
gint *minimum_baseline,
gint *natural_baseline,
gpointer data);
-static void gtk_notebook_allocate_header (GtkCssGadget *gadget,
+static void gtk_notebook_allocate_tabs (GtkCssGadget *gadget,
const GtkAllocation *allocation,
int baseline,
GtkAllocation *out_clip,
gpointer data);
-static gboolean gtk_notebook_draw_header (GtkCssGadget *gadget,
+static gboolean gtk_notebook_draw_tabs (GtkCssGadget *gadget,
cairo_t *cr,
int x,
int y,
@@ -1350,27 +1350,26 @@ gtk_notebook_init (GtkNotebook *notebook)
gtk_css_gadget_set_state (priv->stack_gadget, gtk_css_node_get_state (widget_node));
gtk_box_gadget_insert_gadget (GTK_BOX_GADGET (priv->gadget), -1, priv->stack_gadget, TRUE, TRUE);
- priv->header_gadget = gtk_css_custom_gadget_new ("header",
- GTK_WIDGET (notebook),
- priv->gadget,
- priv->stack_gadget,
- gtk_notebook_measure_header,
- gtk_notebook_allocate_header,
- gtk_notebook_draw_header,
- NULL,
- NULL);
+ priv->header_gadget = gtk_box_gadget_new ("header",
+ GTK_WIDGET (notebook),
+ priv->gadget,
+ priv->stack_gadget);
gtk_css_gadget_add_class (priv->header_gadget, GTK_STYLE_CLASS_TOP);
gtk_css_gadget_set_state (priv->header_gadget, gtk_css_node_get_state (widget_node));
gtk_css_gadget_set_visible (priv->header_gadget, FALSE);
gtk_box_gadget_insert_gadget (GTK_BOX_GADGET (priv->gadget), 0, priv->header_gadget, FALSE, FALSE);
- priv->tabs_node = gtk_css_node_new ();
- gtk_css_node_set_name (priv->tabs_node, I_("tabs"));
- gtk_css_node_set_parent (priv->tabs_node, gtk_css_gadget_get_node (priv->header_gadget));
- gtk_css_node_set_state (priv->tabs_node, gtk_css_node_get_state (widget_node));
- g_signal_connect_object (priv->tabs_node, "style-changed", G_CALLBACK (node_style_changed_cb), notebook,
0);
- g_object_unref (priv->tabs_node);
-
+ priv->tabs_gadget = gtk_css_custom_gadget_new ("tabs",
+ GTK_WIDGET (notebook),
+ priv->header_gadget,
+ NULL,
+ gtk_notebook_measure_tabs,
+ gtk_notebook_allocate_tabs,
+ gtk_notebook_draw_tabs,
+ NULL,
+ NULL);
+ gtk_css_gadget_set_state (priv->tabs_gadget, gtk_css_node_get_state (widget_node));
+ gtk_box_gadget_insert_gadget (GTK_BOX_GADGET (priv->header_gadget), 0, priv->tabs_gadget, TRUE, TRUE);
}
static void
@@ -1850,6 +1849,7 @@ gtk_notebook_destroy (GtkWidget *widget)
g_clear_object (&priv->gadget);
g_clear_object (&priv->header_gadget);
+ g_clear_object (&priv->tabs_gadget);
g_clear_object (&priv->stack_gadget);
remove_switch_tab_timer (notebook);
@@ -1863,11 +1863,12 @@ update_node_ordering (GtkNotebook *notebook)
GtkNotebookPrivate *priv = notebook->priv;
GtkPositionType tab_pos;
gboolean is_rtl;
- GtkCssNode *node, *header_node;
+ GtkCssNode *node, *header_node, *tabs_node;
tab_pos = get_effective_tab_pos (notebook);
is_rtl = gtk_widget_get_direction (GTK_WIDGET (notebook)) == GTK_TEXT_DIR_RTL;
header_node = gtk_css_gadget_get_node (priv->header_gadget);
+ tabs_node = gtk_css_gadget_get_node (priv->tabs_gadget);
switch (tab_pos)
{
@@ -1877,17 +1878,17 @@ update_node_ordering (GtkNotebook *notebook)
{
node = gtk_widget_get_css_node (priv->action_widget[ACTION_WIDGET_START]);
if (is_rtl)
- gtk_css_node_insert_after (header_node, node, priv->tabs_node);
+ gtk_css_node_insert_after (header_node, node, tabs_node);
else
- gtk_css_node_insert_before (header_node, node, priv->tabs_node);
+ gtk_css_node_insert_before (header_node, node, tabs_node);
}
if (priv->action_widget[ACTION_WIDGET_END])
{
node = gtk_widget_get_css_node (priv->action_widget[ACTION_WIDGET_END]);
if (is_rtl)
- gtk_css_node_insert_before (header_node, node, priv->tabs_node);
+ gtk_css_node_insert_before (header_node, node, tabs_node);
else
- gtk_css_node_insert_after (header_node, node, priv->tabs_node);
+ gtk_css_node_insert_after (header_node, node, tabs_node);
}
break;
case GTK_POS_LEFT:
@@ -1895,12 +1896,12 @@ update_node_ordering (GtkNotebook *notebook)
if (priv->action_widget[ACTION_WIDGET_START])
{
node = gtk_widget_get_css_node (priv->action_widget[ACTION_WIDGET_START]);
- gtk_css_node_insert_before (header_node, node, priv->tabs_node);
+ gtk_css_node_insert_before (header_node, node, tabs_node);
}
if (priv->action_widget[ACTION_WIDGET_END])
{
node = gtk_widget_get_css_node (priv->action_widget[ACTION_WIDGET_END]);
- gtk_css_node_insert_after (header_node, node, priv->tabs_node);
+ gtk_css_node_insert_after (header_node, node, tabs_node);
}
break;
}
@@ -2029,13 +2030,9 @@ gtk_notebook_get_preferred_tabs_size (GtkNotebook *notebook,
gint tab_width = 0;
gint tab_height = 0;
gint tab_max = 0;
- gint i;
- gint action_width = 0;
- gint action_height = 0;
guint vis_pages = 0;
GList *children;
GtkNotebookPage *page;
- GtkRequisition action_widget_requisition[2] = { { 0 }, { 0 } };
GtkRequisition child_requisition;
GtkStyleContext *context;
gint arrow_spacing;
@@ -2101,15 +2098,6 @@ gtk_notebook_get_preferred_tabs_size (GtkNotebook *notebook,
if (vis_pages)
{
- for (i = 0; i < N_ACTION_WIDGETS; i++)
- {
- if (priv->action_widget[i])
- {
- gtk_widget_get_preferred_size (priv->action_widget[i],
- &action_widget_requisition[i], NULL);
- }
- }
-
switch (priv->tab_pos)
{
case GTK_POS_TOP:
@@ -2120,9 +2108,6 @@ gtk_notebook_get_preferred_tabs_size (GtkNotebook *notebook,
if (priv->scrollable)
tab_height = MAX (tab_height, scroll_arrow_hlength);
- tab_height = MAX (tab_height, action_widget_requisition[ACTION_WIDGET_START].height);
- tab_height = MAX (tab_height, action_widget_requisition[ACTION_WIDGET_END].height);
-
while (children)
{
page = children->data;
@@ -2139,9 +2124,7 @@ gtk_notebook_get_preferred_tabs_size (GtkNotebook *notebook,
tab_width = MIN (tab_width,
tab_max + 2 * (scroll_arrow_hlength + arrow_spacing));
- action_width += action_widget_requisition[ACTION_WIDGET_START].width;
- action_width += action_widget_requisition[ACTION_WIDGET_END].width;
- requisition->width = tab_width + action_width;
+ requisition->width = tab_width;
requisition->height = tab_height;
break;
@@ -2153,9 +2136,6 @@ gtk_notebook_get_preferred_tabs_size (GtkNotebook *notebook,
if (priv->scrollable)
tab_width = MAX (tab_width, arrow_spacing + 2 * scroll_arrow_vlength);
- tab_width = MAX (tab_width, action_widget_requisition[ACTION_WIDGET_START].width);
- tab_width = MAX (tab_width, action_widget_requisition[ACTION_WIDGET_END].width);
-
while (children)
{
page = children->data;
@@ -2172,11 +2152,8 @@ gtk_notebook_get_preferred_tabs_size (GtkNotebook *notebook,
if (priv->scrollable)
tab_height = MIN (tab_height,
tab_max + (2 * scroll_arrow_vlength + arrow_spacing));
- action_height += action_widget_requisition[ACTION_WIDGET_START].height;
- action_height += action_widget_requisition[ACTION_WIDGET_END].height;
-
- requisition->height = tab_height + action_height;
+ requisition->height = tab_height;
requisition->height = MAX (requisition->height, tab_max);
requisition->width = tab_width;
@@ -2195,14 +2172,14 @@ gtk_notebook_get_preferred_tabs_size (GtkNotebook *notebook,
}
static void
-gtk_notebook_measure_header (GtkCssGadget *gadget,
- GtkOrientation orientation,
- gint size,
- gint *minimum,
- gint *natural,
- gint *minimum_baseline,
- gint *natural_baseline,
- gpointer unused)
+gtk_notebook_measure_tabs (GtkCssGadget *gadget,
+ GtkOrientation orientation,
+ gint size,
+ gint *minimum,
+ gint *natural,
+ gint *minimum_baseline,
+ gint *natural_baseline,
+ gpointer unused)
{
GtkWidget *widget = gtk_css_gadget_get_owner (gadget);
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
@@ -2309,57 +2286,14 @@ gtk_notebook_get_preferred_height (GtkWidget *widget,
}
static void
-gtk_notebook_allocate_header (GtkCssGadget *gadget,
- const GtkAllocation *allocation,
- int baseline,
- GtkAllocation *out_clip,
- gpointer unused)
+gtk_notebook_allocate_tabs (GtkCssGadget *gadget,
+ const GtkAllocation *allocation,
+ int baseline,
+ GtkAllocation *out_clip,
+ gpointer unused)
{
GtkWidget *widget = gtk_css_gadget_get_owner (gadget);
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
- GtkNotebookPrivate *priv = notebook->priv;
- guint i;
-
- for (i = 0; i < N_ACTION_WIDGETS; i++)
- {
- GtkAllocation widget_allocation;
- GtkRequisition requisition;
- gboolean is_rtl;
-
- if (!priv->action_widget[i])
- continue;
-
- widget_allocation.x = allocation->x;
- widget_allocation.y = allocation->y;
- is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
-
- gtk_widget_get_preferred_size (priv->action_widget[i],
- &requisition, NULL);
-
- switch (get_effective_tab_pos (notebook))
- {
- case GTK_POS_BOTTOM:
- case GTK_POS_TOP:
- widget_allocation.width = requisition.width;
- widget_allocation.height = allocation->height;
-
- if ((i == ACTION_WIDGET_START && is_rtl) ||
- (i == ACTION_WIDGET_END && !is_rtl))
- widget_allocation.x += allocation->width - requisition.width;
- break;
-
- case GTK_POS_RIGHT:
- case GTK_POS_LEFT:
- widget_allocation.width = allocation->width;
- widget_allocation.height = requisition.height;
-
- if (i == ACTION_WIDGET_END)
- widget_allocation.y += allocation->height - requisition.height;
- break;
- }
-
- gtk_widget_size_allocate (priv->action_widget[i], &widget_allocation);
- }
gtk_notebook_pages_allocate (notebook);
}
@@ -2490,58 +2424,56 @@ gtk_notebook_get_arrow_rect (GtkNotebook *notebook,
GdkRectangle event_window_pos;
gboolean before = ARROW_IS_BEFORE (arrow);
gboolean left = ARROW_IS_LEFT (arrow);
+ gint scroll_arrow_hlength;
+ gint scroll_arrow_vlength;
+
+ gtk_css_gadget_get_content_allocation (priv->tabs_gadget, &event_window_pos, NULL);
+
+ gtk_widget_style_get (GTK_WIDGET (notebook),
+ "scroll-arrow-hlength", &scroll_arrow_hlength,
+ "scroll-arrow-vlength", &scroll_arrow_vlength,
+ NULL);
- if (gtk_notebook_get_event_window_position (notebook, &event_window_pos))
+ switch (priv->tab_pos)
{
- gint scroll_arrow_hlength;
- gint scroll_arrow_vlength;
+ case GTK_POS_LEFT:
+ case GTK_POS_RIGHT:
+ rectangle->width = scroll_arrow_vlength;
+ rectangle->height = scroll_arrow_vlength;
+
+ if ((before && (priv->has_before_previous != priv->has_before_next)) ||
+ (!before && (priv->has_after_previous != priv->has_after_next)))
+ rectangle->x = event_window_pos.x + (event_window_pos.width - rectangle->width) / 2;
+ else if (left)
+ rectangle->x = event_window_pos.x + event_window_pos.width / 2 - rectangle->width;
+ else
+ rectangle->x = event_window_pos.x + event_window_pos.width / 2;
+ rectangle->y = event_window_pos.y;
+ if (!before)
+ rectangle->y += event_window_pos.height - rectangle->height;
+ break;
- gtk_widget_style_get (GTK_WIDGET (notebook),
- "scroll-arrow-hlength", &scroll_arrow_hlength,
- "scroll-arrow-vlength", &scroll_arrow_vlength,
- NULL);
+ case GTK_POS_TOP:
+ case GTK_POS_BOTTOM:
+ rectangle->width = scroll_arrow_hlength;
+ rectangle->height = scroll_arrow_hlength;
- switch (priv->tab_pos)
+ if (before)
{
- case GTK_POS_LEFT:
- case GTK_POS_RIGHT:
- rectangle->width = scroll_arrow_vlength;
- rectangle->height = scroll_arrow_vlength;
-
- if ((before && (priv->has_before_previous != priv->has_before_next)) ||
- (!before && (priv->has_after_previous != priv->has_after_next)))
- rectangle->x = event_window_pos.x + (event_window_pos.width - rectangle->width) / 2;
- else if (left)
- rectangle->x = event_window_pos.x + event_window_pos.width / 2 - rectangle->width;
+ if (left || !priv->has_before_previous)
+ rectangle->x = event_window_pos.x;
else
- rectangle->x = event_window_pos.x + event_window_pos.width / 2;
- rectangle->y = event_window_pos.y;
- if (!before)
- rectangle->y += event_window_pos.height - rectangle->height;
- break;
-
- case GTK_POS_TOP:
- case GTK_POS_BOTTOM:
- rectangle->width = scroll_arrow_hlength;
- rectangle->height = scroll_arrow_hlength;
-
- if (before)
- {
- if (left || !priv->has_before_previous)
- rectangle->x = event_window_pos.x;
- else
- rectangle->x = event_window_pos.x + rectangle->width;
- }
+ rectangle->x = event_window_pos.x + rectangle->width;
+ }
+ else
+ {
+ if (!left || !priv->has_after_next)
+ rectangle->x = event_window_pos.x + event_window_pos.width - rectangle->width;
else
- {
- if (!left || !priv->has_after_next)
- rectangle->x = event_window_pos.x + event_window_pos.width - rectangle->width;
- else
- rectangle->x = event_window_pos.x + event_window_pos.width - 2 * rectangle->width;
- }
- rectangle->y = floor ((gdouble)event_window_pos.y + (event_window_pos.height - rectangle->height)
/ 2.0 + 0.5);
- break;
+ rectangle->x = event_window_pos.x + event_window_pos.width - 2 * rectangle->width;
}
+ rectangle->y = floor ((gdouble)event_window_pos.y + (event_window_pos.height - rectangle->height) /
2.0 + 0.5);
+ break;
}
}
@@ -3392,9 +3324,7 @@ update_tab_state (GtkNotebook *notebook)
gtk_css_gadget_set_state (priv->stack_gadget, state);
gtk_css_gadget_set_state (priv->header_gadget, state);
-
- if (priv->tabs_node)
- gtk_css_node_set_state (priv->tabs_node, state);
+ gtk_css_gadget_set_state (priv->tabs_gadget, state);
for (l = priv->children; l; l = l->next)
{
@@ -3487,6 +3417,9 @@ update_arrow_nodes (GtkNotebook *notebook)
GtkNotebookPrivate *priv = notebook->priv;
gboolean arrow[4];
gint i;
+ GtkCssNode *tabs_node;
+
+ tabs_node = gtk_css_gadget_get_node (priv->tabs_gadget);
arrow[0] = priv->has_before_previous;
arrow[1] = priv->has_before_next;
@@ -3505,36 +3438,36 @@ update_arrow_nodes (GtkNotebook *notebook)
gtk_css_node_add_class (priv->arrow_node[i], g_quark_from_static_string ("down"));
else
gtk_css_node_add_class (priv->arrow_node[i], g_quark_from_static_string ("up"));
- gtk_css_node_set_state (priv->arrow_node[i], gtk_css_node_get_state (priv->tabs_node));
+ gtk_css_node_set_state (priv->arrow_node[i], gtk_css_node_get_state (tabs_node));
g_signal_connect_object (priv->arrow_node[i], "style-changed", G_CALLBACK
(node_style_changed_cb), notebook, 0);
switch (i)
{
case 0:
if (priv->arrow_node[1])
- gtk_css_node_insert_before (priv->tabs_node, priv->arrow_node[0], priv->arrow_node[1]);
+ gtk_css_node_insert_before (tabs_node, priv->arrow_node[0], priv->arrow_node[1]);
else
- gtk_css_node_insert_before (priv->tabs_node, priv->arrow_node[0],
gtk_css_node_get_first_child (priv->tabs_node));
+ gtk_css_node_insert_before (tabs_node, priv->arrow_node[0], gtk_css_node_get_first_child
(tabs_node));
break;
case 1:
if (priv->arrow_node[0])
- gtk_css_node_insert_after (priv->tabs_node, priv->arrow_node[1], priv->arrow_node[0]);
+ gtk_css_node_insert_after (tabs_node, priv->arrow_node[1], priv->arrow_node[0]);
else
- gtk_css_node_insert_before (priv->tabs_node, priv->arrow_node[1],
gtk_css_node_get_first_child (priv->tabs_node));
+ gtk_css_node_insert_before (tabs_node, priv->arrow_node[1], gtk_css_node_get_first_child
(tabs_node));
break;
case 2:
if (priv->arrow_node[3])
- gtk_css_node_insert_before (priv->tabs_node, priv->arrow_node[2], priv->arrow_node[3]);
+ gtk_css_node_insert_before (tabs_node, priv->arrow_node[2], priv->arrow_node[3]);
else
- gtk_css_node_insert_after (priv->tabs_node, priv->arrow_node[2],
gtk_css_node_get_last_child (priv->tabs_node));
+ gtk_css_node_insert_after (tabs_node, priv->arrow_node[2], gtk_css_node_get_last_child
(tabs_node));
break;
case 3:
if (priv->arrow_node[2])
- gtk_css_node_insert_after (priv->tabs_node, priv->arrow_node[3], priv->arrow_node[2]);
+ gtk_css_node_insert_after (tabs_node, priv->arrow_node[3], priv->arrow_node[2]);
else
- gtk_css_node_insert_after (priv->tabs_node, priv->arrow_node[3],
gtk_css_node_get_last_child (priv->tabs_node));
+ gtk_css_node_insert_after (tabs_node, priv->arrow_node[3], gtk_css_node_get_last_child
(tabs_node));
break;
default:
@@ -4624,7 +4557,7 @@ gtk_notebook_real_insert_page (GtkNotebook *notebook,
page->cssnode = gtk_css_node_new ();
gtk_css_node_set_name (page->cssnode, I_("tab"));
- gtk_css_node_set_state (page->cssnode, gtk_css_node_get_state (priv->tabs_node));
+ gtk_css_node_set_state (page->cssnode, gtk_css_node_get_state (gtk_css_gadget_get_node
(priv->tabs_gadget)));
g_signal_connect_object (page->cssnode, "style-changed", G_CALLBACK (node_style_changed_cb), notebook, 0);
if (position > 0)
@@ -4634,7 +4567,7 @@ gtk_notebook_real_insert_page (GtkNotebook *notebook,
else
sibling = priv->arrow_node[ARROW_LEFT_BEFORE];
- gtk_css_node_insert_after (priv->tabs_node, page->cssnode, sibling);
+ gtk_css_node_insert_after (gtk_css_gadget_get_node (priv->tabs_gadget), page->cssnode, sibling);
if (!tab_label)
page->default_tab = TRUE;
@@ -5171,13 +5104,13 @@ gtk_notebook_search_page (GtkNotebook *notebook,
* gtk_notebook_draw_arrow
*/
static gboolean
-gtk_notebook_draw_header (GtkCssGadget *gadget,
- cairo_t *cr,
- int x,
- int y,
- int width,
- int height,
- gpointer unused)
+gtk_notebook_draw_tabs (GtkCssGadget *gadget,
+ cairo_t *cr,
+ int x,
+ int y,
+ int width,
+ int height,
+ gpointer unused)
{
GtkWidget *widget = gtk_css_gadget_get_owner (gadget);
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
@@ -5188,7 +5121,6 @@ gtk_notebook_draw_header (GtkCssGadget *gadget,
gint step = STEP_PREV;
gboolean is_rtl;
GtkPositionType tab_pos;
- guint i;
is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
tab_pos = get_effective_tab_pos (notebook);
@@ -5296,13 +5228,6 @@ gtk_notebook_draw_header (GtkCssGadget *gadget,
if (priv->operation != DRAG_OPERATION_REORDER)
gtk_notebook_draw_tab (notebook, priv->cur_page, cr);
- for (i = 0; i < N_ACTION_WIDGETS; i++)
- {
- if (priv->action_widget[i])
- gtk_container_propagate_draw (GTK_CONTAINER (notebook),
- priv->action_widget[i], cr);
- }
-
return FALSE;
}
@@ -5425,19 +5350,14 @@ gtk_notebook_tab_space (GtkNotebook *notebook,
gint *tab_space)
{
GtkNotebookPrivate *priv = notebook->priv;
- GtkAllocation allocation, action_allocation;
- GtkWidget *widget;
+ GtkAllocation allocation;
GList *children;
GtkPositionType tab_pos = get_effective_tab_pos (notebook);
gint arrow_spacing;
gint scroll_arrow_hlength;
gint scroll_arrow_vlength;
- gboolean is_rtl;
- gint i;
- widget = GTK_WIDGET (notebook);
children = priv->children;
- is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
gtk_widget_style_get (GTK_WIDGET (notebook),
"arrow-spacing", &arrow_spacing,
@@ -5445,7 +5365,7 @@ gtk_notebook_tab_space (GtkNotebook *notebook,
"scroll-arrow-vlength", &scroll_arrow_vlength,
NULL);
- gtk_css_gadget_get_content_allocation (priv->header_gadget, &allocation, NULL);
+ gtk_css_gadget_get_content_allocation (priv->tabs_gadget, &allocation, NULL);
switch (tab_pos)
{
@@ -5454,20 +5374,6 @@ gtk_notebook_tab_space (GtkNotebook *notebook,
*min = allocation.x;
*max = allocation.x + allocation.width;
- for (i = 0; i < N_ACTION_WIDGETS; i++)
- {
- if (priv->action_widget[i])
- {
- gtk_widget_get_allocation (priv->action_widget[i], &action_allocation);
-
- if ((i == ACTION_WIDGET_START && !is_rtl) ||
- (i == ACTION_WIDGET_END && is_rtl))
- *min += action_allocation.width;
- else
- *max -= action_allocation.width;
- }
- }
-
while (children)
{
GtkNotebookPage *page;
@@ -5485,19 +5391,6 @@ gtk_notebook_tab_space (GtkNotebook *notebook,
*min = allocation.y;
*max = allocation.y + allocation.height;
- for (i = 0; i < N_ACTION_WIDGETS; i++)
- {
- if (priv->action_widget[i])
- {
- gtk_widget_get_allocation (priv->action_widget[i], &action_allocation);
-
- if (i == ACTION_WIDGET_START)
- *min += action_allocation.height;
- else
- *max -= action_allocation.height;
- }
- }
-
while (children)
{
GtkNotebookPage *page;
@@ -7264,24 +7157,28 @@ gtk_notebook_update_tab_pos (GtkNotebook *notebook)
if (priv->show_tabs)
gtk_box_gadget_insert_gadget (GTK_BOX_GADGET (priv->gadget), 0, priv->header_gadget, FALSE, FALSE);
gtk_box_gadget_set_orientation (GTK_BOX_GADGET (priv->gadget), GTK_ORIENTATION_VERTICAL);
+ gtk_box_gadget_set_orientation (GTK_BOX_GADGET (priv->header_gadget), GTK_ORIENTATION_HORIZONTAL);
break;
case GTK_POS_BOTTOM:
if (priv->show_tabs)
gtk_box_gadget_insert_gadget (GTK_BOX_GADGET (priv->gadget), 1, priv->header_gadget, FALSE, FALSE);
gtk_box_gadget_set_orientation (GTK_BOX_GADGET (priv->gadget), GTK_ORIENTATION_VERTICAL);
+ gtk_box_gadget_set_orientation (GTK_BOX_GADGET (priv->header_gadget), GTK_ORIENTATION_HORIZONTAL);
break;
case GTK_POS_LEFT:
if (priv->show_tabs)
gtk_box_gadget_insert_gadget (GTK_BOX_GADGET (priv->gadget), 0, priv->header_gadget, FALSE, FALSE);
gtk_box_gadget_set_orientation (GTK_BOX_GADGET (priv->gadget), GTK_ORIENTATION_HORIZONTAL);
+ gtk_box_gadget_set_orientation (GTK_BOX_GADGET (priv->header_gadget), GTK_ORIENTATION_VERTICAL);
break;
case GTK_POS_RIGHT:
if (priv->show_tabs)
gtk_box_gadget_insert_gadget (GTK_BOX_GADGET (priv->gadget), 1, priv->header_gadget, FALSE, FALSE);
gtk_box_gadget_set_orientation (GTK_BOX_GADGET (priv->gadget), GTK_ORIENTATION_HORIZONTAL);
+ gtk_box_gadget_set_orientation (GTK_BOX_GADGET (priv->header_gadget), GTK_ORIENTATION_VERTICAL);
break;
}
}
@@ -7835,7 +7732,7 @@ gtk_notebook_child_reordered (GtkNotebook *notebook,
else
sibling = priv->arrow_node[ARROW_LEFT_BEFORE];
- gtk_css_node_insert_after (priv->tabs_node, page->cssnode, sibling);
+ gtk_css_node_insert_after (gtk_css_gadget_get_node (priv->tabs_gadget), page->cssnode, sibling);
gtk_notebook_update_labels (notebook);
}
@@ -8235,7 +8132,11 @@ gtk_notebook_set_action_widget (GtkNotebook *notebook,
priv = notebook->priv;
if (priv->action_widget[pack_type])
- gtk_widget_unparent (priv->action_widget[pack_type]);
+ {
+ gtk_box_gadget_remove_widget (GTK_BOX_GADGET (priv->header_gadget),
+ priv->action_widget[pack_type]);
+ gtk_widget_unparent (priv->action_widget[pack_type]);
+ }
priv->action_widget[pack_type] = widget;
@@ -8243,6 +8144,9 @@ gtk_notebook_set_action_widget (GtkNotebook *notebook,
{
gtk_css_node_set_parent (gtk_widget_get_css_node (widget),
gtk_css_gadget_get_node (priv->header_gadget));
+ gtk_box_gadget_insert_widget (GTK_BOX_GADGET (priv->header_gadget),
+ pack_type == GTK_PACK_START ? 0 : -1,
+ widget);
gtk_widget_set_child_visible (widget, priv->show_tabs);
gtk_widget_set_parent (widget, GTK_WIDGET (notebook));
update_node_ordering (notebook);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]