[gtk+/wip/otte/gadget: 8/30] treeviewcolumn: Create button on init
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/otte/gadget: 8/30] treeviewcolumn: Create button on init
- Date: Sun, 11 Oct 2015 18:19:06 +0000 (UTC)
commit 93c7ead33d88532bc0e8dc513832f5911684b378
Author: Benjamin Otte <otte redhat com>
Date: Sun Sep 6 01:46:24 2015 +0200
treeviewcolumn: Create button on init
This way, the button is always available and the code doesn't have to
special case this condition.
gtk/gtktreeviewcolumn.c | 57 +++++++++++++++++++---------------------------
1 files changed, 24 insertions(+), 33 deletions(-)
---
diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c
index 7b154bd..b56819d 100644
--- a/gtk/gtktreeviewcolumn.c
+++ b/gtk/gtktreeviewcolumn.c
@@ -459,6 +459,8 @@ gtk_tree_view_column_init (GtkTreeViewColumn *tree_column)
priv->maybe_reordered = FALSE;
priv->fixed_width = -1;
priv->title = g_strdup ("");
+
+ gtk_tree_view_column_create_button (tree_column);
}
static void
@@ -513,6 +515,8 @@ gtk_tree_view_column_dispose (GObject *object)
priv->child = NULL;
}
+ g_clear_object (&priv->button);
+
G_OBJECT_CLASS (gtk_tree_view_column_parent_class)->dispose (object);
}
@@ -809,25 +813,16 @@ static void
gtk_tree_view_column_create_button (GtkTreeViewColumn *tree_column)
{
GtkTreeViewColumnPrivate *priv = tree_column->priv;
- GtkTreeView *tree_view;
GtkWidget *child;
GtkWidget *hbox;
- tree_view = (GtkTreeView *) priv->tree_view;
-
- g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
g_return_if_fail (priv->button == NULL);
priv->button = gtk_button_new ();
- if (priv->visible)
- gtk_widget_show (priv->button);
- gtk_widget_add_events (priv->button, GDK_POINTER_MOTION_MASK);
-
- /* make sure we own a reference to it as well. */
- if (_gtk_tree_view_get_header_window (tree_view))
- gtk_widget_set_parent_window (priv->button, _gtk_tree_view_get_header_window (tree_view));
+ g_object_ref_sink (priv->button);
- gtk_widget_set_parent (priv->button, GTK_WIDGET (tree_view));
+ gtk_widget_show (priv->button);
+ gtk_widget_add_events (priv->button, GDK_POINTER_MOTION_MASK);
g_signal_connect (priv->button, "event",
G_CALLBACK (gtk_tree_view_column_button_event),
@@ -871,7 +866,6 @@ G_GNUC_END_IGNORE_DEPRECATIONS
gtk_widget_show (hbox);
gtk_widget_show (priv->alignment);
- gtk_tree_view_column_update_button (tree_column);
}
static void
@@ -891,16 +885,6 @@ gtk_tree_view_column_update_button (GtkTreeViewColumn *tree_column)
else
model = NULL;
- /* Create a button if necessary */
- if (priv->visible &&
- priv->button == NULL &&
- priv->tree_view &&
- gtk_widget_get_realized (priv->tree_view))
- gtk_tree_view_column_create_button (tree_column);
-
- if (! priv->button)
- return;
-
hbox = gtk_bin_get_child (GTK_BIN (priv->button));
alignment = priv->alignment;
arrow = priv->arrow;
@@ -950,9 +934,12 @@ G_GNUC_END_IGNORE_DEPRECATIONS
{
gboolean alternative;
- g_object_get (gtk_widget_get_settings (priv->tree_view),
- "gtk-alternative-sort-arrows", &alternative,
- NULL);
+ if (priv->tree_view)
+ g_object_get (gtk_widget_get_settings (priv->tree_view),
+ "gtk-alternative-sort-arrows", &alternative,
+ NULL);
+ else
+ alternative = FALSE;
switch (priv->sort_order)
{
@@ -994,8 +981,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
/* It's always safe to hide the button. It isn't always safe to show it, as
* if you show it before it's realized, it'll get the wrong window. */
- if (priv->button &&
- priv->tree_view != NULL &&
+ if (priv->tree_view != NULL &&
gtk_widget_get_realized (priv->tree_view))
{
if (priv->visible &&
@@ -1043,9 +1029,8 @@ G_GNUC_END_IGNORE_DEPRECATIONS
/* Queue a resize on the assumption that we always want to catch all changes
* and columns don't change all that often.
*/
- if (gtk_widget_get_realized (priv->tree_view))
+ if (priv->tree_view && gtk_widget_get_realized (priv->tree_view))
gtk_widget_queue_resize (priv->tree_view);
-
}
/* Button signal handlers
@@ -1406,7 +1391,12 @@ _gtk_tree_view_column_set_tree_view (GtkTreeViewColumn *column,
g_assert (priv->tree_view == NULL);
priv->tree_view = GTK_WIDGET (tree_view);
- gtk_tree_view_column_create_button (column);
+
+ /* make sure we own a reference to it as well. */
+ if (_gtk_tree_view_get_header_window (tree_view))
+ gtk_widget_set_parent_window (priv->button, _gtk_tree_view_get_header_window (tree_view));
+
+ gtk_widget_set_parent (priv->button, GTK_WIDGET (tree_view));
priv->property_changed_signal =
g_signal_connect_swapped (tree_view,
@@ -1422,7 +1412,7 @@ _gtk_tree_view_column_unset_tree_view (GtkTreeViewColumn *column)
{
GtkTreeViewColumnPrivate *priv = column->priv;
- if (priv->tree_view && priv->button)
+ if (priv->tree_view)
{
gtk_container_remove (GTK_CONTAINER (priv->tree_view), priv->button);
}
@@ -1893,6 +1883,8 @@ gtk_tree_view_column_set_visible (GtkTreeViewColumn *tree_column,
priv->visible = visible;
+ gtk_widget_set_visible (priv->button, visible);
+
if (priv->visible)
_gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
@@ -2343,7 +2335,6 @@ gtk_tree_view_column_clicked (GtkTreeViewColumn *tree_column)
priv = tree_column->priv;
if (priv->visible &&
- priv->button &&
priv->clickable)
gtk_button_clicked (GTK_BUTTON (priv->button));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]