diff options
author | Timm Bäder <mail@baedert.org> | 2017-07-15 20:43:52 +0200 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2017-07-19 21:27:16 -0400 |
commit | d836fa51346ddb6999f200c6d7cae73703de510a (patch) | |
tree | 3da246bf308205796c4046131988d3e8ad877112 /gtk/gtktreeviewcolumn.c | |
parent | bd446c48e9e7f8f45d0ce9743de229ff6c56db93 (diff) | |
download | gtk+-d836fa51346ddb6999f200c6d7cae73703de510a.tar.gz |
treeviewcolumn: Remove input window
Diffstat (limited to 'gtk/gtktreeviewcolumn.c')
-rw-r--r-- | gtk/gtktreeviewcolumn.c | 110 |
1 files changed, 35 insertions, 75 deletions
diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c index d989e4dcc4..02d44363c3 100644 --- a/gtk/gtktreeviewcolumn.c +++ b/gtk/gtktreeviewcolumn.c @@ -35,6 +35,7 @@ #include "gtkintl.h" #include "gtktypebuiltins.h" #include "a11y/gtktreeviewaccessibleprivate.h" +#include "gtkwidgetprivate.h" /** @@ -130,7 +131,6 @@ struct _GtkTreeViewColumnPrivate GtkWidget *child; GtkWidget *arrow; GtkWidget *frame; - GdkWindow *window; gulong property_changed_signal; gfloat xalign; @@ -829,6 +829,7 @@ gtk_tree_view_column_create_button (GtkTreeViewColumn *tree_column) priv->frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (priv->frame), GTK_SHADOW_NONE); + gtk_widget_set_hexpand (priv->frame, TRUE); gtk_widget_set_halign (priv->frame, GTK_ALIGN_START); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); @@ -976,25 +977,10 @@ gtk_tree_view_column_update_button (GtkTreeViewColumn *tree_column) gtk_tree_view_get_headers_visible (GTK_TREE_VIEW (priv->tree_view))) { gtk_widget_show (priv->button); - - if (priv->window) - { - if (priv->resizable) - { - gdk_window_show (priv->window); - gdk_window_raise (priv->window); - } - else - { - gdk_window_hide (priv->window); - } - } } else { gtk_widget_hide (priv->button); - if (priv->window) - gdk_window_hide (priv->window); } } @@ -1297,53 +1283,15 @@ void _gtk_tree_view_column_realize_button (GtkTreeViewColumn *column) { GtkTreeViewColumnPrivate *priv = column->priv; - GtkAllocation allocation; - GtkTreeView *tree_view; - gboolean rtl; - GdkDisplay *display; - GdkCursor *cursor; - tree_view = (GtkTreeView *)priv->tree_view; - rtl = (gtk_widget_get_direction (priv->tree_view) == GTK_TEXT_DIR_RTL); - - g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); + g_return_if_fail (GTK_IS_TREE_VIEW (priv->tree_view)); g_return_if_fail (gtk_widget_get_realized (priv->tree_view)); g_return_if_fail (priv->button != NULL); - gtk_widget_set_parent_window (priv->button, gtk_widget_get_window (priv->tree_view)); - - display = gtk_widget_get_display (priv->tree_view); - gtk_widget_get_allocation (priv->button, &allocation); - - priv->window = gdk_window_new_input (gtk_widget_get_window (priv->tree_view), - GDK_ALL_EVENTS_MASK, - &(GdkRectangle) {(allocation.x + (rtl ? 0 : allocation.width)) - TREE_VIEW_DRAG_WIDTH / 2, 0, - TREE_VIEW_DRAG_WIDTH, _gtk_tree_view_get_header_height (tree_view)}); - cursor = gdk_cursor_new_from_name (display, "col-resize"); - gdk_window_set_cursor (priv->window, cursor); - g_object_unref (cursor); - - gtk_widget_register_window (GTK_WIDGET (tree_view), priv->window); - gtk_tree_view_column_update_button (column); } void -_gtk_tree_view_column_unrealize_button (GtkTreeViewColumn *column) -{ - GtkTreeViewColumnPrivate *priv; - - g_return_if_fail (column != NULL); - - priv = column->priv; - g_return_if_fail (priv->window != NULL); - - gtk_widget_unregister_window (GTK_WIDGET (priv->tree_view), priv->window); - gdk_window_destroy (priv->window); - priv->window = NULL; -} - -void _gtk_tree_view_column_unset_model (GtkTreeViewColumn *column, GtkTreeModel *old_model) { @@ -2069,9 +2017,7 @@ _gtk_tree_view_column_allocate (GtkTreeViewColumn *tree_column, int width) { GtkTreeViewColumnPrivate *priv; - gboolean rtl; GtkAllocation allocation = { 0, 0, 0, 0 }; - GtkAllocation widget_allocation; GtkAllocation clip; g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column)); @@ -2085,27 +2031,20 @@ _gtk_tree_view_column_allocate (GtkTreeViewColumn *tree_column, priv->width = width; gtk_cell_area_context_allocate (priv->cell_area_context, priv->width - priv->padding, -1); - gtk_widget_get_allocation (priv->tree_view, &widget_allocation); if (gtk_tree_view_get_headers_visible (GTK_TREE_VIEW (priv->tree_view))) { - allocation.x = widget_allocation.x + x_offset; - allocation.y = widget_allocation.y; + /* TODO: Underallocates the button horizontally, but + * https://bugzilla.gnome.org/show_bug.cgi?id=770388 + */ + allocation.x = x_offset; + allocation.y = 0; allocation.width = width; allocation.height = _gtk_tree_view_get_header_height (GTK_TREE_VIEW (priv->tree_view)); gtk_widget_size_allocate (priv->button, &allocation, -1, &clip); } - if (priv->window) - { - rtl = (gtk_widget_get_direction (priv->tree_view) == GTK_TEXT_DIR_RTL); - gdk_window_move_resize (priv->window, - allocation.x + (rtl ? 0 : allocation.width) - TREE_VIEW_DRAG_WIDTH/2, - allocation.y, - TREE_VIEW_DRAG_WIDTH, allocation.height); - } - g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_X_OFFSET]); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_WIDTH]); } @@ -3104,12 +3043,6 @@ gtk_tree_view_column_get_button (GtkTreeViewColumn *tree_column) return tree_column->priv->button; } -GdkWindow * -_gtk_tree_view_column_get_window (GtkTreeViewColumn *column) -{ - return column->priv->window; -} - void _gtk_tree_view_column_push_padding (GtkTreeViewColumn *column, gint padding) @@ -3138,3 +3071,30 @@ _gtk_tree_view_column_get_context (GtkTreeViewColumn *column) { return column->priv->cell_area_context; } + +gboolean +_gtk_tree_view_column_coords_in_resize_rect (GtkTreeViewColumn *column, + double x, + double y) +{ + GtkTreeViewColumnPrivate *priv = column->priv; + GtkAllocation button_allocation; + + /* x and y are in treeview coordinates. */ + + if (!gtk_widget_get_realized (priv->button) || + !priv->resizable || + !priv->visible) + return FALSE; + + gtk_widget_get_outer_allocation (priv->button, &button_allocation); + + /* No translation needed */ + g_assert (gtk_widget_get_parent (priv->button) == priv->tree_view); + + if (gtk_widget_get_direction (priv->tree_view) == GTK_TEXT_DIR_LTR) + button_allocation.x += button_allocation.width - TREE_VIEW_DRAG_WIDTH; + + button_allocation.width = TREE_VIEW_DRAG_WIDTH; + return gdk_rectangle_contains_point (&button_allocation, (int)x, (int)y); +} |