[gtk+] GtkListBox: Clean up DnD code
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkListBox: Clean up DnD code
- Date: Thu, 13 Jun 2013 10:17:54 +0000 (UTC)
commit 932535d4445be09faa919b0f85d7b35aca225430
Author: Alexander Larsson <alexl redhat com>
Date: Mon Jun 10 15:15:22 2013 +0200
GtkListBox: Clean up DnD code
Unhighlight rows if they are removed.
Drop the automatic drag motion based auto-scrolling. This is not really
right, as it e.g. hardcodes auto-scroll regions and assumes we're the only
widget inside the scrolled container. Its also imho in the wrong place,
autoscrolling if any should be done on the scrolled-window or viewport.
All the removed code is implementable outside Gtk+ though.
gtk/gtklistbox.c | 91 ++----------------------------------------------------
1 files changed, 3 insertions(+), 88 deletions(-)
---
diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c
index 42987a5..55402c3 100644
--- a/gtk/gtklistbox.c
+++ b/gtk/gtklistbox.c
@@ -63,7 +63,6 @@ struct _GtkListBoxPrivate
/* DnD */
GtkListBoxRow *drag_highlighted_row;
- guint auto_scroll_timeout_id;
};
struct _GtkListBoxRowPrivate
@@ -154,11 +153,6 @@ static void gtk_list_box_real_size_allocate (GtkWidget
static void gtk_list_box_real_drag_leave (GtkWidget *widget,
GdkDragContext *context,
guint time_);
-static gboolean gtk_list_box_real_drag_motion (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time_);
static void gtk_list_box_real_activate_cursor_row (GtkListBox *list_box);
static void gtk_list_box_real_toggle_cursor_row (GtkListBox *list_box);
static void gtk_list_box_real_move_cursor (GtkListBox *list_box,
@@ -259,9 +253,6 @@ gtk_list_box_finalize (GObject *obj)
GtkListBox *list_box = GTK_LIST_BOX (obj);
GtkListBoxPrivate *priv = list_box->priv;
- if (priv->auto_scroll_timeout_id != ((guint) 0))
- g_source_remove (priv->auto_scroll_timeout_id);
-
if (priv->sort_func_target_destroy_notify != NULL)
priv->sort_func_target_destroy_notify (priv->sort_func_target);
if (priv->filter_func_target_destroy_notify != NULL)
@@ -310,7 +301,6 @@ gtk_list_box_class_init (GtkListBoxClass *klass)
widget_class->get_preferred_width_for_height = gtk_list_box_real_get_preferred_width_for_height;
widget_class->size_allocate = gtk_list_box_real_size_allocate;
widget_class->drag_leave = gtk_list_box_real_drag_leave;
- widget_class->drag_motion = gtk_list_box_real_drag_motion;
container_class->add = gtk_list_box_real_add;
container_class->remove = gtk_list_box_real_remove;
container_class->forall = gtk_list_box_real_forall_internal;
@@ -1416,6 +1406,9 @@ gtk_list_box_real_remove (GtkContainer* container, GtkWidget* child)
priv->active_row = NULL;
}
+ if (row == priv->drag_highlighted_row)
+ gtk_list_box_drag_unhighlight_row (list_box);
+
next = gtk_list_box_get_next_visible (list_box, row->priv->iter);
gtk_widget_unparent (child);
g_sequence_remove (row->priv->iter);
@@ -1693,86 +1686,8 @@ static void
gtk_list_box_real_drag_leave (GtkWidget *widget, GdkDragContext *context, guint time_)
{
GtkListBox *list_box = GTK_LIST_BOX (widget);
- GtkListBoxPrivate *priv = list_box->priv;
gtk_list_box_drag_unhighlight_row (list_box);
- if (priv->auto_scroll_timeout_id != 0) {
- g_source_remove (priv->auto_scroll_timeout_id);
- priv->auto_scroll_timeout_id = 0;
- }
-}
-
-typedef struct
-{
- GtkListBox *list_box;
- gint move;
-} MoveData;
-
-static void
-move_data_free (MoveData *data)
-{
- g_slice_free (MoveData, data);
-}
-
-static gboolean
-drag_motion_timeout (MoveData *data)
-{
- GtkListBox *list_box = data->list_box;
- GtkListBoxPrivate *priv = list_box->priv;
-
- gtk_adjustment_set_value (priv->adjustment,
- gtk_adjustment_get_value (priv->adjustment) +
- gtk_adjustment_get_step_increment (priv->adjustment) * data->move);
- return TRUE;
-}
-
-static gboolean
-gtk_list_box_real_drag_motion (GtkWidget *widget, GdkDragContext *context,
- gint x, gint y, guint time_)
-{
- GtkListBox *list_box = GTK_LIST_BOX (widget);
- GtkListBoxPrivate *priv = list_box->priv;
- int move;
- MoveData *data;
- gdouble size;
-
- /* Auto-scroll during Dnd if cursor is moving into the top/bottom portion of the
- * box. */
- if (priv->auto_scroll_timeout_id != 0)
- {
- g_source_remove (priv->auto_scroll_timeout_id);
- priv->auto_scroll_timeout_id = 0;
- }
-
- if (priv->adjustment == NULL)
- return FALSE;
-
- /* Part of the view triggering auto-scroll */
- size = 30;
- move = 0;
-
- if (y < (gtk_adjustment_get_value (priv->adjustment) + size))
- {
- /* Scroll up */
- move = -1;
- }
- else if (y > ((gtk_adjustment_get_value (priv->adjustment) + gtk_adjustment_get_page_size
(priv->adjustment)) - size))
- {
- /* Scroll down */
- move = 1;
- }
-
- if (move == 0)
- return FALSE;
-
- data = g_slice_new0 (MoveData);
- data->list_box = list_box;
-
- priv->auto_scroll_timeout_id =
- g_timeout_add_full (G_PRIORITY_DEFAULT, 150, (GSourceFunc)drag_motion_timeout,
- data, (GDestroyNotify) move_data_free);
-
- return FALSE;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]