summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2007-01-28 03:16:30 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2007-01-28 03:16:30 +0000
commitd465fbeda745525485098815a5a702d7d6b031d7 (patch)
tree143f19f67ca1ff1ecf768e8ebd031168d584481a
parent0030448e265e50dea73a772e61f558183519fbf7 (diff)
downloadgtk+-d465fbeda745525485098815a5a702d7d6b031d7.tar.gz
Rearrange things so that setting multiple properties causes not more than
2007-01-27 Matthias Clasen <mclasen@redhat.com> * gtk/gtktoolbar.c: * gtk/gtktoolitem.c: * gtk/gtktoolbutton.c: Rearrange things so that setting multiple properties causes not more than a single reconstruction of the contents. * gtk/gtkaction.c (connect_proxy): Set all tool button properties in one go. svn path=/trunk/; revision=17227
-rw-r--r--ChangeLog11
-rw-r--r--gtk/gtkaction.c37
-rw-r--r--gtk/gtktoolbar.c55
-rw-r--r--gtk/gtktoolbutton.c65
-rw-r--r--gtk/gtktoolitem.c7
5 files changed, 92 insertions, 83 deletions
diff --git a/ChangeLog b/ChangeLog
index 81b1aa64d5..088383000a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
2007-01-27 Matthias Clasen <mclasen@redhat.com>
+ * gtk/gtktoolbar.c:
+ * gtk/gtktoolitem.c:
+ * gtk/gtktoolbutton.c: Rearrange things so that setting
+ multiple properties causes not more than a single
+ reconstruction of the contents.
+
+ * gtk/gtkaction.c (connect_proxy): Set all tool button
+ properties in one go.
+
+2007-01-27 Matthias Clasen <mclasen@redhat.com>
+
* gtk/gtkstatusicon.c:
* gtk/gtktrayicon-x11.c: Fix GtkStatusIcon to not
take up space on the panel if it is invisible. (340110, Christian
diff --git a/gtk/gtkaction.c b/gtk/gtkaction.c
index 5307363db2..5962828406 100644
--- a/gtk/gtkaction.c
+++ b/gtk/gtkaction.c
@@ -739,26 +739,13 @@ connect_proxy (GtkAction *action,
}
else if (GTK_IS_TOOL_ITEM (proxy))
{
- /* toolbar item specific synchronisers ... */
-
- g_object_set (proxy,
- "visible-horizontal", action->private_data->visible_horizontal,
- "visible-vertical", action->private_data->visible_vertical,
- "is-important", action->private_data->is_important,
- NULL);
-
- gtk_action_sync_tooltip (action, proxy);
-
- g_signal_connect_object (proxy, "create_menu_proxy",
- G_CALLBACK (gtk_action_create_menu_proxy),
- action, 0);
-
- gtk_tool_item_rebuild_menu (GTK_TOOL_ITEM (proxy));
-
/* toolbar button specific synchronisers ... */
if (GTK_IS_TOOL_BUTTON (proxy))
{
g_object_set (proxy,
+ "visible-horizontal", action->private_data->visible_horizontal,
+ "visible-vertical", action->private_data->visible_vertical,
+ "is-important", action->private_data->is_important,
"label", action->private_data->short_label,
"use-underline", TRUE,
"stock-id", action->private_data->stock_id,
@@ -768,7 +755,23 @@ connect_proxy (GtkAction *action,
g_signal_connect_object (proxy, "clicked",
G_CALLBACK (gtk_action_activate), action,
G_CONNECT_SWAPPED);
- }
+ }
+ else
+ {
+ g_object_set (proxy,
+ "visible-horizontal", action->private_data->visible_horizontal,
+ "visible-vertical", action->private_data->visible_vertical,
+ "is-important", action->private_data->is_important,
+ NULL);
+ }
+
+ gtk_action_sync_tooltip (action, proxy);
+
+ g_signal_connect_object (proxy, "create_menu_proxy",
+ G_CALLBACK (gtk_action_create_menu_proxy),
+ action, 0);
+
+ gtk_tool_item_rebuild_menu (GTK_TOOL_ITEM (proxy));
}
else if (GTK_IS_BUTTON (proxy))
{
diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c
index c2032e9fb2..8a37dc8500 100644
--- a/gtk/gtktoolbar.c
+++ b/gtk/gtktoolbar.c
@@ -1445,6 +1445,7 @@ gtk_toolbar_size_allocate (GtkWidget *widget,
gboolean overflowing;
gboolean size_changed;
GtkAllocation item_area;
+ GtkShadowType shadow_type;
size_changed = FALSE;
if (widget->allocation.x != allocation->x ||
@@ -1476,13 +1477,15 @@ gtk_toolbar_size_allocate (GtkWidget *widget,
gtk_widget_get_child_requisition (GTK_WIDGET (priv->arrow_button),
&arrow_requisition);
+ shadow_type = get_shadow_type (toolbar);
+
if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
{
available_size = size = allocation->width - 2 * border_width;
short_size = allocation->height - 2 * border_width;
arrow_size = arrow_requisition.width;
- if (get_shadow_type (toolbar) != GTK_SHADOW_NONE)
+ if (shadow_type != GTK_SHADOW_NONE)
{
available_size -= 2 * widget->style->xthickness;
short_size -= 2 * widget->style->ythickness;
@@ -1494,7 +1497,7 @@ gtk_toolbar_size_allocate (GtkWidget *widget,
short_size = allocation->width - 2 * border_width;
arrow_size = arrow_requisition.height;
- if (get_shadow_type (toolbar) != GTK_SHADOW_NONE)
+ if (shadow_type != GTK_SHADOW_NONE)
{
available_size -= 2 * widget->style->ythickness;
short_size -= 2 * widget->style->xthickness;
@@ -1672,7 +1675,7 @@ gtk_toolbar_size_allocate (GtkWidget *widget,
allocations[i].x += allocation->x;
allocations[i].y += allocation->y;
- if (get_shadow_type (toolbar) != GTK_SHADOW_NONE)
+ if (shadow_type != GTK_SHADOW_NONE)
{
allocations[i].x += widget->style->xthickness;
allocations[i].y += widget->style->ythickness;
@@ -1684,7 +1687,7 @@ gtk_toolbar_size_allocate (GtkWidget *widget,
arrow_allocation.x += allocation->x;
arrow_allocation.y += allocation->y;
- if (get_shadow_type (toolbar) != GTK_SHADOW_NONE)
+ if (shadow_type != GTK_SHADOW_NONE)
{
arrow_allocation.x += widget->style->xthickness;
arrow_allocation.y += widget->style->ythickness;
@@ -1693,7 +1696,7 @@ gtk_toolbar_size_allocate (GtkWidget *widget,
item_area.x += allocation->x;
item_area.y += allocation->y;
- if (get_shadow_type (toolbar) != GTK_SHADOW_NONE)
+ if (shadow_type != GTK_SHADOW_NONE)
{
item_area.x += widget->style->xthickness;
item_area.y += widget->style->ythickness;
@@ -1803,10 +1806,16 @@ static void
gtk_toolbar_update_button_relief (GtkToolbar *toolbar)
{
GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (toolbar);
+ GtkReliefStyle relief;
+
+ relief = get_button_relief (toolbar);
+
+ if (relief != gtk_button_get_relief (GTK_BUTTON (priv->arrow_button)))
+ {
+ gtk_toolbar_reconfigured (toolbar);
- gtk_toolbar_reconfigured (toolbar);
-
- gtk_button_set_relief (GTK_BUTTON (priv->arrow_button), get_button_relief (toolbar));
+ gtk_button_set_relief (GTK_BUTTON (priv->arrow_button), relief);
+ }
}
static void
@@ -1816,7 +1825,7 @@ gtk_toolbar_style_set (GtkWidget *widget,
GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (widget);
priv->max_homogeneous_pixels = -1;
-
+
if (GTK_WIDGET_REALIZED (widget))
gtk_style_set_background (widget->style, widget->window, widget->state);
@@ -2064,13 +2073,13 @@ gtk_toolbar_screen_changed (GtkWidget *widget,
toolbar);
priv->settings = g_object_ref (settings);
+
+ style_change_notify (toolbar);
+ icon_size_change_notify (toolbar);
+ animation_change_notify (toolbar);
}
else
priv->settings = NULL;
-
- style_change_notify (toolbar);
- icon_size_change_notify (toolbar);
- animation_change_notify (toolbar);
}
static int
@@ -3994,13 +4003,11 @@ toolbar_content_expose (ToolbarContent *content,
if (child->type == GTK_TOOLBAR_CHILD_SPACE)
{
- if (get_space_style (toolbar) == GTK_TOOLBAR_SPACE_LINE &&
- content->u.compatibility.space_visible)
- {
- _gtk_toolbar_paint_space_line (GTK_WIDGET (toolbar), toolbar,
- &expose->area,
- &content->u.compatibility.space_allocation);
- }
+ if (content->u.compatibility.space_visible &&
+ get_space_style (toolbar) == GTK_TOOLBAR_SPACE_LINE)
+ _gtk_toolbar_paint_space_line (GTK_WIDGET (toolbar), toolbar,
+ &expose->area,
+ &content->u.compatibility.space_allocation);
return;
}
@@ -4028,15 +4035,11 @@ toolbar_content_visible (ToolbarContent *content,
if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL &&
gtk_tool_item_get_visible_horizontal (item))
- {
- return TRUE;
- }
+ return TRUE;
if ((toolbar->orientation == GTK_ORIENTATION_VERTICAL &&
gtk_tool_item_get_visible_vertical (item)))
- {
- return TRUE;
- }
+ return TRUE;
return FALSE;
break;
diff --git a/gtk/gtktoolbutton.c b/gtk/gtktoolbutton.c
index c7b2f573cf..7c126931dd 100644
--- a/gtk/gtktoolbutton.c
+++ b/gtk/gtktoolbutton.c
@@ -94,6 +94,7 @@ struct _GtkToolButtonPrivate
GtkWidget *icon_widget;
guint use_underline : 1;
+ guint contents_invalid : 1;
};
GType
@@ -269,6 +270,8 @@ gtk_tool_button_init (GtkToolButton *button,
button->priv = GTK_TOOL_BUTTON_GET_PRIVATE (button);
+ button->priv->contents_invalid = TRUE;
+
gtk_tool_item_set_homogeneous (toolitem, TRUE);
/* create button */
@@ -294,6 +297,8 @@ gtk_tool_button_construct_contents (GtkToolItem *tool_item)
GtkWidget *box = NULL;
guint icon_spacing;
+ button->priv->contents_invalid = FALSE;
+
gtk_widget_style_get (GTK_WIDGET (tool_item),
"icon-spacing", &icon_spacing,
NULL);
@@ -494,7 +499,9 @@ static void
gtk_tool_button_property_notify (GObject *object,
GParamSpec *pspec)
{
- if (strcmp (pspec->name, "is-important") == 0)
+ GtkToolButton *button = GTK_TOOL_BUTTON (object);
+
+ if (button->priv->contents_invalid)
gtk_tool_button_construct_contents (GTK_TOOL_ITEM (object));
if (parent_class->notify)
@@ -735,13 +742,9 @@ gtk_tool_button_new (GtkWidget *icon_widget,
GtkToolButton *button;
button = g_object_new (GTK_TYPE_TOOL_BUTTON,
+ "label", label,
+ "icon-widget", icon_widget,
NULL);
-
- if (label)
- gtk_tool_button_set_label (button, label);
-
- if (icon_widget)
- gtk_tool_button_set_icon_widget (button, icon_widget);
return GTK_TOOL_ITEM (button);
}
@@ -770,12 +773,11 @@ gtk_tool_button_set_label (GtkToolButton *button,
old_label = button->priv->label_text;
button->priv->label_text = g_strdup (label);
- gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button));
-
- g_object_notify (G_OBJECT (button), "label");
+ button->priv->contents_invalid = TRUE;
- if (old_label)
- g_free (old_label);
+ g_free (old_label);
+
+ g_object_notify (G_OBJECT (button), "label");
}
/**
@@ -825,8 +827,7 @@ gtk_tool_button_set_use_underline (GtkToolButton *button,
if (use_underline != button->priv->use_underline)
{
button->priv->use_underline = use_underline;
-
- gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button));
+ button->priv->contents_invalid = TRUE;
g_object_notify (G_OBJECT (button), "use-underline");
}
@@ -874,11 +875,11 @@ gtk_tool_button_set_stock_id (GtkToolButton *button,
old_stock_id = button->priv->stock_id;
button->priv->stock_id = g_strdup (stock_id);
- gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button));
-
- g_object_notify (G_OBJECT (button), "stock-id");
+ button->priv->contents_invalid = TRUE;
g_free (old_stock_id);
+
+ g_object_notify (G_OBJECT (button), "stock-id");
}
/**
@@ -924,11 +925,11 @@ gtk_tool_button_set_icon_name (GtkToolButton *button,
old_icon_name = button->priv->icon_name;
button->priv->icon_name = g_strdup (icon_name);
- gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button));
-
- g_object_notify (G_OBJECT (button), "icon-name");
+ button->priv->contents_invalid = TRUE;
g_free (old_icon_name);
+
+ g_object_notify (G_OBJECT (button), "icon-name");
}
/**
@@ -974,22 +975,17 @@ gtk_tool_button_set_icon_widget (GtkToolButton *button,
if (button->priv->icon_widget)
{
if (button->priv->icon_widget->parent)
- {
- gtk_container_remove (GTK_CONTAINER (button->priv->icon_widget->parent),
+ gtk_container_remove (GTK_CONTAINER (button->priv->icon_widget->parent),
button->priv->icon_widget);
- }
g_object_unref (button->priv->icon_widget);
}
if (icon_widget)
- {
- g_object_ref_sink (icon_widget);
- }
+ g_object_ref_sink (icon_widget);
button->priv->icon_widget = icon_widget;
-
- gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button));
+ button->priv->contents_invalid = TRUE;
g_object_notify (G_OBJECT (button), "icon-widget");
}
@@ -1020,22 +1016,17 @@ gtk_tool_button_set_label_widget (GtkToolButton *button,
if (button->priv->label_widget)
{
if (button->priv->label_widget->parent)
- {
- gtk_container_remove (GTK_CONTAINER (button->priv->label_widget->parent),
- button->priv->label_widget);
- }
+ gtk_container_remove (GTK_CONTAINER (button->priv->label_widget->parent),
+ button->priv->label_widget);
g_object_unref (button->priv->label_widget);
}
if (label_widget)
- {
- g_object_ref_sink (label_widget);
- }
+ g_object_ref_sink (label_widget);
button->priv->label_widget = label_widget;
-
- gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button));
+ button->priv->contents_invalid = TRUE;
g_object_notify (G_OBJECT (button), "label-widget");
}
diff --git a/gtk/gtktoolitem.c b/gtk/gtktoolitem.c
index c48b7dfe0f..2bd8370ce8 100644
--- a/gtk/gtktoolitem.c
+++ b/gtk/gtktoolitem.c
@@ -265,10 +265,11 @@ gtk_tool_item_finalize (GObject *object)
}
static void
-gtk_tool_item_parent_set (GtkWidget *toolitem,
- GtkWidget *prev_parent)
+gtk_tool_item_parent_set (GtkWidget *toolitem,
+ GtkWidget *prev_parent)
{
- _gtk_tool_item_toolbar_reconfigured (GTK_TOOL_ITEM (toolitem));
+ if (GTK_WIDGET (toolitem)->parent != NULL)
+ _gtk_tool_item_toolbar_reconfigured (GTK_TOOL_ITEM (toolitem));
}
static void