From 85267e9224f8ffec7aeafb8ccbed583d60e7bf4c Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Tue, 9 Jan 2001 23:24:20 +0000 Subject: don't draw if label->layout is NULL due to a pending resize 2001-01-09 Havoc Pennington * gtk/gtklabel.c (gtk_label_expose): don't draw if label->layout is NULL due to a pending resize * gtk/gtktreeview.c (gtk_tree_view_check_dirty): don't set the column width to values less than 1 * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_width): clamp width to be between min/max width, and still set the width even if autosize is turned on, so the tree view can use this function in order to autosize. (gtk_tree_view_column_init): set initial width to 1 not 0 * gtk/gtktreeview.c (gtk_tree_view_size_request_buttons): use setter function to modify column width, so we get notification (gtk_tree_view_insert_iter_height): ditto (gtk_tree_view_calc_size): ditto (gtk_tree_view_check_dirty): ditto * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_class_init): Add properties to change all the interesting attributes of the tree view column. (gtk_tree_view_column_set_header_clickable): rename set_clickable (gtk_tree_view_column_get_clickable): add (gtk_tree_view_column_set_cell_renderer): don't unset the current attributes; assume a cell renderer with equivalent object properties has been swapped in. Do g_object_notify(). (gtk_tree_view_column_set_visible): g_object_notify (gtk_tree_view_column_get_sizing): rename from get_col_type (gtk_tree_view_column_set_sizing): g_object_notify (gtk_tree_view_column_set_width): add g_object_notify (gtk_tree_view_column_set_min_width): ditto (gtk_tree_view_column_set_max_width): ditto (gtk_tree_view_column_set_title): ditto (gtk_tree_view_column_set_clickable): ditto (gtk_tree_view_column_set_widget): ditto (gtk_tree_view_column_set_justification): ditto --- tests/testtreeview.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 8 deletions(-) (limited to 'tests/testtreeview.c') diff --git a/tests/testtreeview.c b/tests/testtreeview.c index e224c3724..3ddaf6e89 100644 --- a/tests/testtreeview.c +++ b/tests/testtreeview.c @@ -139,6 +139,28 @@ get_model_types (void) return column_types; } +static void +col_clicked_cb (GtkTreeViewColumn *col, gpointer data) +{ + GtkWindow *win; + + win = GTK_WINDOW (create_prop_editor (G_OBJECT (col))); + + gtk_window_set_title (win, gtk_tree_view_column_get_title (col)); +} + +static void +setup_column (GtkTreeViewColumn *col) +{ + g_signal_connect_data (G_OBJECT (col), + "clicked", + (GCallback) col_clicked_cb, + NULL, + NULL, + FALSE, + FALSE); +} + static void set_columns_type (GtkTreeView *tree_view, ColumnsType type) { @@ -165,6 +187,7 @@ set_columns_type (GtkTreeView *tree_view, ColumnsType type) rend, "text", 1, NULL); + setup_column (col); gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col); @@ -178,6 +201,8 @@ set_columns_type (GtkTreeView *tree_view, ColumnsType type) "text", 0, "pixbuf", 2, NULL); + + setup_column (col); gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), col); @@ -193,6 +218,8 @@ set_columns_type (GtkTreeView *tree_view, ColumnsType type) rend, "text", 0, NULL); + + setup_column (col); gtk_tree_view_insert_column (GTK_TREE_VIEW (tree_view), col, 0); @@ -941,18 +968,44 @@ get_param_specs (GObject *object, *n_specs = G_OBJECT_GET_CLASS (object)->n_property_specs; } +typedef struct +{ + gpointer instance; + guint id; +} DisconnectData; + +static void +disconnect_func (gpointer data) +{ + DisconnectData *dd = data; + + g_signal_handler_disconnect (dd->instance, dd->id); + g_free (dd); +} + static void g_object_connect_property (GObject *object, const gchar *prop_name, GtkSignalFunc func, - gpointer data) + gpointer data, + GObject *alive_object) { gchar *with_detail = g_strconcat ("notify::", prop_name, NULL); + DisconnectData *dd; + + dd = g_new (DisconnectData, 1); - g_signal_connect_data (object, with_detail, - func, data, - NULL, FALSE, FALSE); + dd->id = g_signal_connect_data (object, with_detail, + func, data, + NULL, FALSE, FALSE); + dd->instance = object; + + g_object_set_data_full (G_OBJECT (alive_object), + "alive-object", + dd, + disconnect_func); + g_free (with_detail); } @@ -1188,7 +1241,7 @@ create_prop_editor (GObject *object) g_object_connect_property (object, spec->name, GTK_SIGNAL_FUNC (int_changed), - adj); + adj, G_OBJECT (adj)); if (can_modify) connect_controller (G_OBJECT (adj), "value_changed", @@ -1208,7 +1261,7 @@ create_prop_editor (GObject *object) g_object_connect_property (object, spec->name, GTK_SIGNAL_FUNC (string_changed), - prop_edit); + prop_edit, G_OBJECT (prop_edit)); if (can_modify) connect_controller (G_OBJECT (prop_edit), "changed", @@ -1228,7 +1281,7 @@ create_prop_editor (GObject *object) g_object_connect_property (object, spec->name, GTK_SIGNAL_FUNC (bool_changed), - prop_edit); + prop_edit, G_OBJECT (prop_edit)); if (can_modify) connect_controller (G_OBJECT (prop_edit), "toggled", @@ -1275,7 +1328,7 @@ create_prop_editor (GObject *object) g_object_connect_property (object, spec->name, GTK_SIGNAL_FUNC (enum_changed), - prop_edit); + prop_edit, G_OBJECT (prop_edit)); if (can_modify) connect_controller (G_OBJECT (prop_edit), "changed", -- cgit v1.2.1