forked from AuroraMiddleware/gtk
merges from gtk-1-2
Fri Apr 30 13:38:16 1999 Lars Hamann <lars@gtk.org> * gtk/gtkclist.c: * gtk/gtkctree.c: merges from gtk-1-2
This commit is contained in:
parent
1c84483f3e
commit
a313506013
@ -1,3 +1,8 @@
|
||||
Fri Apr 30 13:38:16 1999 Lars Hamann <lars@gtk.org>
|
||||
|
||||
* gtk/gtkclist.c:
|
||||
* gtk/gtkctree.c: merges from gtk-1-2
|
||||
|
||||
1999-04-25 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Support added for building using a GNU toolchain on Win32,
|
||||
|
@ -1,3 +1,8 @@
|
||||
Fri Apr 30 13:38:16 1999 Lars Hamann <lars@gtk.org>
|
||||
|
||||
* gtk/gtkclist.c:
|
||||
* gtk/gtkctree.c: merges from gtk-1-2
|
||||
|
||||
1999-04-25 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Support added for building using a GNU toolchain on Win32,
|
||||
|
@ -1,3 +1,8 @@
|
||||
Fri Apr 30 13:38:16 1999 Lars Hamann <lars@gtk.org>
|
||||
|
||||
* gtk/gtkclist.c:
|
||||
* gtk/gtkctree.c: merges from gtk-1-2
|
||||
|
||||
1999-04-25 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Support added for building using a GNU toolchain on Win32,
|
||||
|
@ -1,3 +1,8 @@
|
||||
Fri Apr 30 13:38:16 1999 Lars Hamann <lars@gtk.org>
|
||||
|
||||
* gtk/gtkclist.c:
|
||||
* gtk/gtkctree.c: merges from gtk-1-2
|
||||
|
||||
1999-04-25 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Support added for building using a GNU toolchain on Win32,
|
||||
|
@ -1,3 +1,8 @@
|
||||
Fri Apr 30 13:38:16 1999 Lars Hamann <lars@gtk.org>
|
||||
|
||||
* gtk/gtkclist.c:
|
||||
* gtk/gtkctree.c: merges from gtk-1-2
|
||||
|
||||
1999-04-25 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Support added for building using a GNU toolchain on Win32,
|
||||
|
@ -1,3 +1,8 @@
|
||||
Fri Apr 30 13:38:16 1999 Lars Hamann <lars@gtk.org>
|
||||
|
||||
* gtk/gtkclist.c:
|
||||
* gtk/gtkctree.c: merges from gtk-1-2
|
||||
|
||||
1999-04-25 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Support added for building using a GNU toolchain on Win32,
|
||||
|
@ -1,3 +1,8 @@
|
||||
Fri Apr 30 13:38:16 1999 Lars Hamann <lars@gtk.org>
|
||||
|
||||
* gtk/gtkclist.c:
|
||||
* gtk/gtkctree.c: merges from gtk-1-2
|
||||
|
||||
1999-04-25 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
Support added for building using a GNU toolchain on Win32,
|
||||
|
311
gtk/gtkclist.c
311
gtk/gtkclist.c
@ -446,7 +446,10 @@ static void real_row_move (GtkCList *clist,
|
||||
static gint column_title_passive_func (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
gpointer data);
|
||||
|
||||
static void drag_dest_cell (GtkCList *clist,
|
||||
gint x,
|
||||
gint y,
|
||||
GtkCListDestInfo *dest_info);
|
||||
|
||||
|
||||
static GtkContainerClass *parent_class = NULL;
|
||||
@ -1304,35 +1307,11 @@ gtk_clist_column_title_active (GtkCList *clist,
|
||||
if (!clist->column[column].button || !clist->column[column].button_passive)
|
||||
return;
|
||||
|
||||
object = GTK_OBJECT (clist->column[column].button);
|
||||
|
||||
clist->column[column].button_passive = FALSE;
|
||||
|
||||
gtk_signal_disconnect_by_func (object,
|
||||
gtk_signal_disconnect_by_func (GTK_OBJECT (clist->column[column].button),
|
||||
(GtkSignalFunc) column_title_passive_func,
|
||||
GINT_TO_POINTER (gtk_signal_lookup
|
||||
("button_press_event",
|
||||
GTK_TYPE_WIDGET)));
|
||||
gtk_signal_disconnect_by_func (object,
|
||||
(GtkSignalFunc) column_title_passive_func,
|
||||
GINT_TO_POINTER (gtk_signal_lookup
|
||||
("button_release_event",
|
||||
GTK_TYPE_WIDGET)));
|
||||
gtk_signal_disconnect_by_func (object,
|
||||
(GtkSignalFunc) column_title_passive_func,
|
||||
GINT_TO_POINTER (gtk_signal_lookup
|
||||
("motion_notify_event",
|
||||
GTK_TYPE_WIDGET)));
|
||||
gtk_signal_disconnect_by_func (object,
|
||||
(GtkSignalFunc) column_title_passive_func,
|
||||
GINT_TO_POINTER (gtk_signal_lookup
|
||||
("enter_notify_event",
|
||||
GTK_TYPE_WIDGET)));
|
||||
gtk_signal_disconnect_by_func (object,
|
||||
(GtkSignalFunc) column_title_passive_func,
|
||||
GINT_TO_POINTER (gtk_signal_lookup
|
||||
("leave_notify_event",
|
||||
GTK_TYPE_WIDGET)));
|
||||
NULL);
|
||||
|
||||
GTK_WIDGET_SET_FLAGS (clist->column[column].button, GTK_CAN_FOCUS);
|
||||
if (GTK_WIDGET_VISIBLE (clist))
|
||||
@ -1343,7 +1322,6 @@ void
|
||||
gtk_clist_column_title_passive (GtkCList *clist,
|
||||
gint column)
|
||||
{
|
||||
GtkObject *object;
|
||||
GtkButton *button;
|
||||
|
||||
g_return_if_fail (clist != NULL);
|
||||
@ -1354,46 +1332,17 @@ gtk_clist_column_title_passive (GtkCList *clist,
|
||||
if (!clist->column[column].button || clist->column[column].button_passive)
|
||||
return;
|
||||
|
||||
object = GTK_OBJECT (clist->column[column].button);
|
||||
button = GTK_BUTTON (clist->column[column].button);
|
||||
|
||||
clist->column[column].button_passive = TRUE;
|
||||
|
||||
|
||||
|
||||
gtk_signal_connect (object, "button_press_event",
|
||||
(GtkSignalFunc) column_title_passive_func,
|
||||
GINT_TO_POINTER (gtk_signal_lookup
|
||||
("button_press_event",
|
||||
GTK_TYPE_WIDGET)));
|
||||
|
||||
if (button->button_down)
|
||||
gtk_button_released (button);
|
||||
|
||||
gtk_signal_connect (object, "button_release_event",
|
||||
(GtkSignalFunc) column_title_passive_func,
|
||||
GINT_TO_POINTER (gtk_signal_lookup
|
||||
("button_release_event",
|
||||
GTK_TYPE_WIDGET)));
|
||||
gtk_signal_connect (object, "motion_notify_event",
|
||||
(GtkSignalFunc) column_title_passive_func,
|
||||
GINT_TO_POINTER (gtk_signal_lookup
|
||||
("motion_notify_event",
|
||||
GTK_TYPE_WIDGET)));
|
||||
gtk_signal_connect (object, "enter_notify_event",
|
||||
(GtkSignalFunc) column_title_passive_func,
|
||||
GINT_TO_POINTER (gtk_signal_lookup
|
||||
("enter_notify_event",
|
||||
GTK_TYPE_WIDGET)));
|
||||
|
||||
if (button->in_button)
|
||||
gtk_button_leave (button);
|
||||
|
||||
gtk_signal_connect (object, "leave_notify_event",
|
||||
(GtkSignalFunc) column_title_passive_func,
|
||||
GINT_TO_POINTER (gtk_signal_lookup
|
||||
("leave_notify_event",
|
||||
GTK_TYPE_WIDGET)));
|
||||
gtk_signal_connect (GTK_OBJECT (clist->column[column].button), "event",
|
||||
(GtkSignalFunc) column_title_passive_func, NULL);
|
||||
|
||||
GTK_WIDGET_UNSET_FLAGS (clist->column[column].button, GTK_CAN_FOCUS);
|
||||
if (GTK_WIDGET_VISIBLE (clist))
|
||||
@ -2149,7 +2098,6 @@ column_button_create (GtkCList *clist,
|
||||
gtk_signal_connect (GTK_OBJECT (button), "clicked",
|
||||
(GtkSignalFunc) column_button_clicked,
|
||||
(gpointer) clist);
|
||||
|
||||
gtk_widget_show (button);
|
||||
}
|
||||
|
||||
@ -2178,7 +2126,21 @@ column_title_passive_func (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
gpointer data)
|
||||
{
|
||||
gtk_signal_emit_stop (GTK_OBJECT (widget), GPOINTER_TO_INT (data));
|
||||
g_return_val_if_fail (event != NULL, FALSE);
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_MOTION_NOTIFY:
|
||||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
case GDK_3BUTTON_PRESS:
|
||||
case GDK_BUTTON_RELEASE:
|
||||
case GDK_ENTER_NOTIFY:
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -2414,7 +2376,7 @@ gtk_clist_set_shift (GtkCList *clist,
|
||||
gint vertical,
|
||||
gint horizontal)
|
||||
{
|
||||
GtkRequisition requisition;
|
||||
GtkRequisition requisition = { 0 };
|
||||
GtkCListRow *clist_row;
|
||||
|
||||
g_return_if_fail (clist != NULL);
|
||||
@ -3234,7 +3196,7 @@ gtk_clist_set_cell_style (GtkCList *clist,
|
||||
gint column,
|
||||
GtkStyle *style)
|
||||
{
|
||||
GtkRequisition requisition;
|
||||
GtkRequisition requisition = { 0 };
|
||||
GtkCListRow *clist_row;
|
||||
|
||||
g_return_if_fail (clist != NULL);
|
||||
@ -3909,8 +3871,11 @@ real_undo_selection (GtkCList *clist)
|
||||
GPOINTER_TO_INT (work->data), -1, NULL);
|
||||
|
||||
for (work = clist->undo_unselection; work; work = work->next)
|
||||
gtk_signal_emit (GTK_OBJECT (clist), clist_signals[UNSELECT_ROW],
|
||||
GPOINTER_TO_INT (work->data), -1, NULL);
|
||||
{
|
||||
g_print ("unselect %d\n",GPOINTER_TO_INT (work->data));
|
||||
gtk_signal_emit (GTK_OBJECT (clist), clist_signals[UNSELECT_ROW],
|
||||
GPOINTER_TO_INT (work->data), -1, NULL);
|
||||
}
|
||||
|
||||
if (GTK_WIDGET_HAS_FOCUS(clist) && clist->focus_row != clist->undo_anchor)
|
||||
{
|
||||
@ -4066,9 +4031,9 @@ resync_selection (GtkCList *clist,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (list = g_list_reverse (clist->undo_unselection); list;
|
||||
list = list->next)
|
||||
|
||||
clist->undo_unselection = g_list_reverse (clist->undo_unselection);
|
||||
for (list = clist->undo_unselection; list; list = list->next)
|
||||
gtk_signal_emit (GTK_OBJECT (clist), clist_signals[SELECT_ROW],
|
||||
GPOINTER_TO_INT (list->data), -1, event);
|
||||
|
||||
@ -4599,8 +4564,12 @@ gtk_clist_unrealize (GtkWidget *widget)
|
||||
/* freeze the list */
|
||||
clist->freeze_count++;
|
||||
|
||||
/* detach optional row/cell styles */
|
||||
if (GTK_WIDGET_MAPPED (widget))
|
||||
gtk_clist_unmap (widget);
|
||||
|
||||
GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
|
||||
|
||||
/* detach optional row/cell styles */
|
||||
if (GTK_WIDGET_REALIZED (widget))
|
||||
{
|
||||
GtkCListRow *clist_row;
|
||||
@ -4627,12 +4596,16 @@ gtk_clist_unrealize (GtkWidget *widget)
|
||||
gdk_gc_destroy (clist->bg_gc);
|
||||
|
||||
for (i = 0; i < clist->columns; i++)
|
||||
if (clist->column[i].window)
|
||||
{
|
||||
gdk_window_set_user_data (clist->column[i].window, NULL);
|
||||
gdk_window_destroy (clist->column[i].window);
|
||||
clist->column[i].window = NULL;
|
||||
}
|
||||
{
|
||||
if (clist->column[i].button)
|
||||
gtk_widget_unrealize (clist->column[i].button);
|
||||
if (clist->column[i].window)
|
||||
{
|
||||
gdk_window_set_user_data (clist->column[i].window, NULL);
|
||||
gdk_window_destroy (clist->column[i].window);
|
||||
clist->column[i].window = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
gdk_window_set_user_data (clist->clist_window, NULL);
|
||||
gdk_window_destroy (clist->clist_window);
|
||||
@ -4668,10 +4641,12 @@ gtk_clist_map (GtkWidget *widget)
|
||||
|
||||
/* map column buttons */
|
||||
for (i = 0; i < clist->columns; i++)
|
||||
if (clist->column[i].button &&
|
||||
GTK_WIDGET_VISIBLE (clist->column[i].button) &&
|
||||
!GTK_WIDGET_MAPPED (clist->column[i].button))
|
||||
gtk_widget_map (clist->column[i].button);
|
||||
{
|
||||
if (clist->column[i].button &&
|
||||
GTK_WIDGET_VISIBLE (clist->column[i].button) &&
|
||||
!GTK_WIDGET_MAPPED (clist->column[i].button))
|
||||
gtk_widget_map (clist->column[i].button);
|
||||
}
|
||||
|
||||
for (i = 0; i < clist->columns; i++)
|
||||
if (clist->column[i].window && clist->column[i].button)
|
||||
@ -5189,6 +5164,7 @@ gtk_clist_button_release (GtkWidget *widget,
|
||||
{
|
||||
case GTK_SELECTION_EXTENDED:
|
||||
if (!(event->state & GDK_SHIFT_MASK) ||
|
||||
!GTK_WIDGET_CAN_FOCUS (widget) ||
|
||||
event->x < 0 || event->x >= clist->clist_window_width ||
|
||||
event->y < 0 || event->y >= clist->clist_window_height)
|
||||
GTK_CLIST_CLASS_FW (clist)->resync_selection
|
||||
@ -7121,19 +7097,14 @@ move_vertical (GtkCList *clist,
|
||||
static gint
|
||||
horizontal_timeout (GtkCList *clist)
|
||||
{
|
||||
gint x, y;
|
||||
GdkEventMotion event;
|
||||
GdkModifierType mask;
|
||||
GdkEventMotion event = { 0 };
|
||||
|
||||
GDK_THREADS_ENTER ();
|
||||
|
||||
clist->htimer = 0;
|
||||
gdk_window_get_pointer (clist->clist_window, &x, &y, &mask);
|
||||
|
||||
event.is_hint = 0;
|
||||
event.x = x;
|
||||
event.y = y;
|
||||
event.state = mask;
|
||||
event.type = GDK_MOTION_NOTIFY;
|
||||
event.send_event = TRUE;
|
||||
|
||||
gtk_clist_motion (GTK_WIDGET (clist), &event);
|
||||
|
||||
@ -7145,19 +7116,14 @@ horizontal_timeout (GtkCList *clist)
|
||||
static gint
|
||||
vertical_timeout (GtkCList *clist)
|
||||
{
|
||||
gint x, y;
|
||||
GdkEventMotion event;
|
||||
GdkModifierType mask;
|
||||
GdkEventMotion event = { 0 };
|
||||
|
||||
GDK_THREADS_ENTER ();
|
||||
|
||||
clist->vtimer = 0;
|
||||
gdk_window_get_pointer (clist->clist_window, &x, &y, &mask);
|
||||
|
||||
event.is_hint = 0;
|
||||
event.x = x;
|
||||
event.y = y;
|
||||
event.state = mask;
|
||||
event.type = GDK_MOTION_NOTIFY;
|
||||
event.send_event = TRUE;
|
||||
|
||||
gtk_clist_motion (GTK_WIDGET (clist), &event);
|
||||
|
||||
@ -7452,6 +7418,62 @@ drag_dest_info_destroy (gpointer data)
|
||||
g_free (info);
|
||||
}
|
||||
|
||||
static void
|
||||
drag_dest_cell (GtkCList *clist,
|
||||
gint x,
|
||||
gint y,
|
||||
GtkCListDestInfo *dest_info)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
|
||||
widget = GTK_WIDGET (clist);
|
||||
|
||||
dest_info->insert_pos = GTK_CLIST_DRAG_NONE;
|
||||
|
||||
y -= (GTK_CONTAINER (clist)->border_width +
|
||||
widget->style->klass->ythickness +
|
||||
clist->column_title_area.height);
|
||||
|
||||
dest_info->cell.row = ROW_FROM_YPIXEL (clist, y);
|
||||
if (dest_info->cell.row >= clist->rows)
|
||||
{
|
||||
dest_info->cell.row = clist->rows - 1;
|
||||
y = ROW_TOP_YPIXEL (clist, dest_info->cell.row) + clist->row_height;
|
||||
}
|
||||
if (dest_info->cell.row < -1)
|
||||
dest_info->cell.row = -1;
|
||||
|
||||
x -= GTK_CONTAINER (widget)->border_width + widget->style->klass->xthickness;
|
||||
dest_info->cell.column = COLUMN_FROM_XPIXEL (clist, x);
|
||||
|
||||
if (dest_info->cell.row >= 0)
|
||||
{
|
||||
gint y_delta;
|
||||
gint h = 0;
|
||||
|
||||
y_delta = y - ROW_TOP_YPIXEL (clist, dest_info->cell.row);
|
||||
|
||||
if (GTK_CLIST_DRAW_DRAG_RECT(clist))
|
||||
{
|
||||
dest_info->insert_pos = GTK_CLIST_DRAG_INTO;
|
||||
h = clist->row_height / 4;
|
||||
}
|
||||
else if (GTK_CLIST_DRAW_DRAG_LINE(clist))
|
||||
{
|
||||
dest_info->insert_pos = GTK_CLIST_DRAG_BEFORE;
|
||||
h = clist->row_height / 2;
|
||||
}
|
||||
|
||||
if (GTK_CLIST_DRAW_DRAG_LINE(clist))
|
||||
{
|
||||
if (y_delta < h)
|
||||
dest_info->insert_pos = GTK_CLIST_DRAG_BEFORE;
|
||||
else if (clist->row_height - y_delta < h)
|
||||
dest_info->insert_pos = GTK_CLIST_DRAG_AFTER;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_clist_drag_begin (GtkWidget *widget,
|
||||
GdkDragContext *context)
|
||||
@ -7569,56 +7591,14 @@ gtk_clist_drag_motion (GtkWidget *widget,
|
||||
guint time)
|
||||
{
|
||||
GtkCList *clist;
|
||||
gint row, column;
|
||||
GtkCListDestInfo new_info;
|
||||
GtkCListDestInfo *dest_info;
|
||||
gint h = 0;
|
||||
gint insert_pos = GTK_CLIST_DRAG_NONE;
|
||||
gint y_delta;
|
||||
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_CLIST (widget), FALSE);
|
||||
|
||||
clist = GTK_CLIST (widget);
|
||||
|
||||
y -= (GTK_CONTAINER (widget)->border_width +
|
||||
widget->style->klass->ythickness + clist->column_title_area.height);
|
||||
row = ROW_FROM_YPIXEL (clist, y);
|
||||
|
||||
if (row >= clist->rows)
|
||||
{
|
||||
row = clist->rows - 1;
|
||||
y = ROW_TOP_YPIXEL (clist, row) + clist->row_height;
|
||||
}
|
||||
if (row < -1)
|
||||
row = -1;
|
||||
|
||||
x -= GTK_CONTAINER (widget)->border_width + widget->style->klass->xthickness;
|
||||
column = COLUMN_FROM_XPIXEL (clist, x);
|
||||
|
||||
if (row >= 0)
|
||||
{
|
||||
y_delta = y - ROW_TOP_YPIXEL (clist, row);
|
||||
|
||||
if (GTK_CLIST_DRAW_DRAG_RECT(clist))
|
||||
{
|
||||
insert_pos = GTK_CLIST_DRAG_INTO;
|
||||
h = clist->row_height / 4;
|
||||
}
|
||||
else if (GTK_CLIST_DRAW_DRAG_LINE(clist))
|
||||
{
|
||||
insert_pos = GTK_CLIST_DRAG_BEFORE;
|
||||
h = clist->row_height / 2;
|
||||
}
|
||||
|
||||
if (GTK_CLIST_DRAW_DRAG_LINE(clist))
|
||||
{
|
||||
if (y_delta < h)
|
||||
insert_pos = GTK_CLIST_DRAG_BEFORE;
|
||||
else if (clist->row_height - y_delta < h)
|
||||
insert_pos = GTK_CLIST_DRAG_AFTER;
|
||||
}
|
||||
}
|
||||
|
||||
dest_info = g_dataset_get_data (context, "gtk-clist-drag-dest");
|
||||
|
||||
if (!dest_info)
|
||||
@ -7633,6 +7613,8 @@ gtk_clist_drag_motion (GtkWidget *widget,
|
||||
drag_dest_info_destroy);
|
||||
}
|
||||
|
||||
drag_dest_cell (clist, x, y, &new_info);
|
||||
|
||||
if (GTK_CLIST_REORDERABLE (clist))
|
||||
{
|
||||
GList *list;
|
||||
@ -7649,12 +7631,12 @@ gtk_clist_drag_motion (GtkWidget *widget,
|
||||
if (list)
|
||||
{
|
||||
if (gtk_drag_get_source_widget (context) != widget ||
|
||||
insert_pos == GTK_CLIST_DRAG_NONE ||
|
||||
row == clist->click_cell.row ||
|
||||
(row == clist->click_cell.row - 1 &&
|
||||
insert_pos == GTK_CLIST_DRAG_AFTER) ||
|
||||
(row == clist->click_cell.row + 1 &&
|
||||
insert_pos == GTK_CLIST_DRAG_BEFORE))
|
||||
new_info.insert_pos == GTK_CLIST_DRAG_NONE ||
|
||||
new_info.cell.row == clist->click_cell.row ||
|
||||
(new_info.cell.row == clist->click_cell.row - 1 &&
|
||||
new_info.insert_pos == GTK_CLIST_DRAG_AFTER) ||
|
||||
(new_info.cell.row == clist->click_cell.row + 1 &&
|
||||
new_info.insert_pos == GTK_CLIST_DRAG_BEFORE))
|
||||
{
|
||||
if (dest_info->cell.row < 0)
|
||||
{
|
||||
@ -7664,9 +7646,9 @@ gtk_clist_drag_motion (GtkWidget *widget,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (row != dest_info->cell.row ||
|
||||
(row == dest_info->cell.row &&
|
||||
dest_info->insert_pos != insert_pos))
|
||||
if (new_info.cell.row != dest_info->cell.row ||
|
||||
(new_info.cell.row == dest_info->cell.row &&
|
||||
dest_info->insert_pos != new_info.insert_pos))
|
||||
{
|
||||
if (dest_info->cell.row >= 0)
|
||||
GTK_CLIST_CLASS_FW (clist)->draw_drag_highlight
|
||||
@ -7674,9 +7656,9 @@ gtk_clist_drag_motion (GtkWidget *widget,
|
||||
dest_info->cell.row)->data,
|
||||
dest_info->cell.row, dest_info->insert_pos);
|
||||
|
||||
dest_info->insert_pos = insert_pos;
|
||||
dest_info->cell.row = row;
|
||||
dest_info->cell.column = column;
|
||||
dest_info->insert_pos = new_info.insert_pos;
|
||||
dest_info->cell.row = new_info.cell.row;
|
||||
dest_info->cell.column = new_info.cell.column;
|
||||
|
||||
GTK_CLIST_CLASS_FW (clist)->draw_drag_highlight
|
||||
(clist, g_list_nth (clist->row_list,
|
||||
@ -7689,9 +7671,9 @@ gtk_clist_drag_motion (GtkWidget *widget,
|
||||
}
|
||||
}
|
||||
|
||||
dest_info->insert_pos = insert_pos;
|
||||
dest_info->cell.row = row;
|
||||
dest_info->cell.column = column;
|
||||
dest_info->insert_pos = new_info.insert_pos;
|
||||
dest_info->cell.row = new_info.cell.row;
|
||||
dest_info->cell.column = new_info.cell.column;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -7749,22 +7731,21 @@ gtk_clist_drag_data_received (GtkWidget *widget,
|
||||
selection_data->length == sizeof (GtkCListCellInfo))
|
||||
{
|
||||
GtkCListCellInfo *source_info;
|
||||
GtkCListDestInfo *dest_info;
|
||||
|
||||
source_info = (GtkCListCellInfo *)(selection_data->data);
|
||||
dest_info = g_dataset_get_data (context, "gtk-clist-drag-dest");
|
||||
|
||||
if (dest_info && source_info)
|
||||
if (source_info)
|
||||
{
|
||||
if (dest_info->insert_pos == GTK_CLIST_DRAG_AFTER)
|
||||
dest_info->cell.row++;
|
||||
if (source_info->row < dest_info->cell.row)
|
||||
dest_info->cell.row--;
|
||||
GtkCListDestInfo dest_info;
|
||||
|
||||
drag_dest_cell (clist, x, y, &dest_info);
|
||||
|
||||
if (dest_info.insert_pos == GTK_CLIST_DRAG_AFTER)
|
||||
dest_info.cell.row++;
|
||||
if (source_info->row < dest_info.cell.row)
|
||||
dest_info.cell.row--;
|
||||
if (dest_info.cell.row != source_info->row)
|
||||
gtk_clist_row_move (clist, source_info->row, dest_info.cell.row);
|
||||
|
||||
if (dest_info->cell.row != source_info->row)
|
||||
gtk_clist_row_move (GTK_CLIST (widget),
|
||||
source_info->row,
|
||||
dest_info->cell.row);
|
||||
g_dataset_remove_data (context, "gtk-clist-drag-dest");
|
||||
}
|
||||
}
|
||||
|
158
gtk/gtkctree.c
158
gtk/gtkctree.c
@ -294,6 +294,10 @@ static void gtk_ctree_drag_data_received (GtkWidget *widget,
|
||||
guint info,
|
||||
guint32 time);
|
||||
static void remove_grab (GtkCList *clist);
|
||||
static void drag_dest_cell (GtkCList *clist,
|
||||
gint x,
|
||||
gint y,
|
||||
GtkCListDestInfo *dest_info);
|
||||
|
||||
|
||||
enum
|
||||
@ -5712,8 +5716,8 @@ resync_selection (GtkCList *clist, GdkEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
for (list = g_list_reverse (clist->undo_unselection); list;
|
||||
list = list->next)
|
||||
clist->undo_unselection = g_list_reverse (clist->undo_unselection);
|
||||
for (list = clist->undo_unselection; list; list = list->next)
|
||||
gtk_ctree_select (ctree, list->data);
|
||||
|
||||
clist->anchor = -1;
|
||||
@ -5843,6 +5847,63 @@ drag_dest_info_destroy (gpointer data)
|
||||
g_free (info);
|
||||
}
|
||||
|
||||
static void
|
||||
drag_dest_cell (GtkCList *clist,
|
||||
gint x,
|
||||
gint y,
|
||||
GtkCListDestInfo *dest_info)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
|
||||
widget = GTK_WIDGET (clist);
|
||||
|
||||
dest_info->insert_pos = GTK_CLIST_DRAG_NONE;
|
||||
|
||||
y -= (GTK_CONTAINER (widget)->border_width +
|
||||
widget->style->klass->ythickness + clist->column_title_area.height);
|
||||
dest_info->cell.row = ROW_FROM_YPIXEL (clist, y);
|
||||
|
||||
if (dest_info->cell.row >= clist->rows)
|
||||
{
|
||||
dest_info->cell.row = clist->rows - 1;
|
||||
y = ROW_TOP_YPIXEL (clist, dest_info->cell.row) + clist->row_height;
|
||||
}
|
||||
if (dest_info->cell.row < -1)
|
||||
dest_info->cell.row = -1;
|
||||
|
||||
x -= GTK_CONTAINER (widget)->border_width + widget->style->klass->xthickness;
|
||||
dest_info->cell.column = COLUMN_FROM_XPIXEL (clist, x);
|
||||
|
||||
if (dest_info->cell.row >= 0)
|
||||
{
|
||||
gint y_delta;
|
||||
gint h = 0;
|
||||
|
||||
y_delta = y - ROW_TOP_YPIXEL (clist, dest_info->cell.row);
|
||||
|
||||
if (GTK_CLIST_DRAW_DRAG_RECT(clist) &&
|
||||
!GTK_CTREE_ROW (g_list_nth (clist->row_list,
|
||||
dest_info->cell.row))->is_leaf)
|
||||
{
|
||||
dest_info->insert_pos = GTK_CLIST_DRAG_INTO;
|
||||
h = clist->row_height / 4;
|
||||
}
|
||||
else if (GTK_CLIST_DRAW_DRAG_LINE(clist))
|
||||
{
|
||||
dest_info->insert_pos = GTK_CLIST_DRAG_BEFORE;
|
||||
h = clist->row_height / 2;
|
||||
}
|
||||
|
||||
if (GTK_CLIST_DRAW_DRAG_LINE(clist))
|
||||
{
|
||||
if (y_delta < h)
|
||||
dest_info->insert_pos = GTK_CLIST_DRAG_BEFORE;
|
||||
else if (clist->row_height - y_delta < h)
|
||||
dest_info->insert_pos = GTK_CLIST_DRAG_AFTER;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_ctree_drag_begin (GtkWidget *widget,
|
||||
GdkDragContext *context)
|
||||
@ -5898,11 +5959,8 @@ gtk_ctree_drag_motion (GtkWidget *widget,
|
||||
{
|
||||
GtkCList *clist;
|
||||
GtkCTree *ctree;
|
||||
gint row, column;
|
||||
GtkCListDestInfo new_info;
|
||||
GtkCListDestInfo *dest_info;
|
||||
gint h = 0;
|
||||
gint insert_pos = GTK_CLIST_DRAG_NONE;
|
||||
gint y_delta;
|
||||
|
||||
g_return_val_if_fail (widget != NULL, FALSE);
|
||||
g_return_val_if_fail (GTK_IS_CTREE (widget), FALSE);
|
||||
@ -5910,45 +5968,6 @@ gtk_ctree_drag_motion (GtkWidget *widget,
|
||||
clist = GTK_CLIST (widget);
|
||||
ctree = GTK_CTREE (widget);
|
||||
|
||||
y -= (GTK_CONTAINER (widget)->border_width +
|
||||
widget->style->klass->ythickness + clist->column_title_area.height);
|
||||
row = ROW_FROM_YPIXEL (clist, y);
|
||||
|
||||
if (row >= clist->rows)
|
||||
{
|
||||
row = clist->rows - 1;
|
||||
y = ROW_TOP_YPIXEL (clist, row) + clist->row_height;
|
||||
}
|
||||
if (row < -1)
|
||||
row = -1;
|
||||
|
||||
x -= GTK_CONTAINER (widget)->border_width + widget->style->klass->xthickness;
|
||||
column = COLUMN_FROM_XPIXEL (clist, x);
|
||||
|
||||
if (row >= 0)
|
||||
{
|
||||
y_delta = y - ROW_TOP_YPIXEL (clist, row);
|
||||
|
||||
if (GTK_CLIST_DRAW_DRAG_RECT(clist))
|
||||
{
|
||||
insert_pos = GTK_CLIST_DRAG_INTO;
|
||||
h = clist->row_height / 4;
|
||||
}
|
||||
else if (GTK_CLIST_DRAW_DRAG_LINE(clist))
|
||||
{
|
||||
insert_pos = GTK_CLIST_DRAG_BEFORE;
|
||||
h = clist->row_height / 2;
|
||||
}
|
||||
|
||||
if (GTK_CLIST_DRAW_DRAG_LINE(clist))
|
||||
{
|
||||
if (y_delta < h)
|
||||
insert_pos = GTK_CLIST_DRAG_BEFORE;
|
||||
else if (clist->row_height - y_delta < h)
|
||||
insert_pos = GTK_CLIST_DRAG_AFTER;
|
||||
}
|
||||
}
|
||||
|
||||
dest_info = g_dataset_get_data (context, "gtk-clist-drag-dest");
|
||||
|
||||
if (!dest_info)
|
||||
@ -5963,6 +5982,8 @@ gtk_ctree_drag_motion (GtkWidget *widget,
|
||||
drag_dest_info_destroy);
|
||||
}
|
||||
|
||||
drag_dest_cell (clist, x, y, &new_info);
|
||||
|
||||
if (GTK_CLIST_REORDERABLE (clist))
|
||||
{
|
||||
GList *list;
|
||||
@ -5983,10 +6004,12 @@ gtk_ctree_drag_motion (GtkWidget *widget,
|
||||
|
||||
drag_source = GTK_CTREE_NODE (g_list_nth (clist->row_list,
|
||||
clist->click_cell.row));
|
||||
drag_target = GTK_CTREE_NODE (g_list_nth (clist->row_list, row));
|
||||
drag_target = GTK_CTREE_NODE (g_list_nth (clist->row_list,
|
||||
new_info.cell.row));
|
||||
|
||||
if (gtk_drag_get_source_widget (context) != widget ||
|
||||
!check_drag (ctree, drag_source, drag_target, insert_pos))
|
||||
!check_drag (ctree, drag_source, drag_target,
|
||||
new_info.insert_pos))
|
||||
{
|
||||
if (dest_info->cell.row < 0)
|
||||
{
|
||||
@ -5996,9 +6019,9 @@ gtk_ctree_drag_motion (GtkWidget *widget,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (row != dest_info->cell.row ||
|
||||
(row == dest_info->cell.row &&
|
||||
dest_info->insert_pos != insert_pos))
|
||||
if (new_info.cell.row != dest_info->cell.row ||
|
||||
(new_info.cell.row == dest_info->cell.row &&
|
||||
dest_info->insert_pos != new_info.insert_pos))
|
||||
{
|
||||
if (dest_info->cell.row >= 0)
|
||||
GTK_CLIST_CLASS_FW (clist)->draw_drag_highlight
|
||||
@ -6006,9 +6029,9 @@ gtk_ctree_drag_motion (GtkWidget *widget,
|
||||
g_list_nth (clist->row_list, dest_info->cell.row)->data,
|
||||
dest_info->cell.row, dest_info->insert_pos);
|
||||
|
||||
dest_info->insert_pos = insert_pos;
|
||||
dest_info->cell.row = row;
|
||||
dest_info->cell.column = column;
|
||||
dest_info->insert_pos = new_info.insert_pos;
|
||||
dest_info->cell.row = new_info.cell.row;
|
||||
dest_info->cell.column = new_info.cell.column;
|
||||
|
||||
GTK_CLIST_CLASS_FW (clist)->draw_drag_highlight
|
||||
(clist,
|
||||
@ -6021,9 +6044,9 @@ gtk_ctree_drag_motion (GtkWidget *widget,
|
||||
}
|
||||
}
|
||||
|
||||
dest_info->insert_pos = insert_pos;
|
||||
dest_info->cell.row = row;
|
||||
dest_info->cell.column = column;
|
||||
dest_info->insert_pos = new_info.insert_pos;
|
||||
dest_info->cell.row = new_info.cell.row;
|
||||
dest_info->cell.column = new_info.cell.column;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -6055,45 +6078,48 @@ gtk_ctree_drag_data_received (GtkWidget *widget,
|
||||
selection_data->length == sizeof (GtkCListCellInfo))
|
||||
{
|
||||
GtkCListCellInfo *source_info;
|
||||
GtkCListDestInfo *dest_info;
|
||||
|
||||
source_info = (GtkCListCellInfo *)(selection_data->data);
|
||||
dest_info = g_dataset_get_data (context, "gtk-clist-drag-dest");
|
||||
|
||||
if (dest_info && source_info)
|
||||
if (source_info)
|
||||
{
|
||||
GtkCListDestInfo dest_info;
|
||||
GtkCTreeNode *source_node;
|
||||
GtkCTreeNode *dest_node;
|
||||
|
||||
drag_dest_cell (clist, x, y, &dest_info);
|
||||
|
||||
source_node = GTK_CTREE_NODE (g_list_nth (clist->row_list,
|
||||
source_info->row));
|
||||
dest_node = GTK_CTREE_NODE (g_list_nth (clist->row_list,
|
||||
dest_info->cell.row));
|
||||
dest_info.cell.row));
|
||||
|
||||
if (!source_info || !dest_info)
|
||||
if (!source_node || !dest_node)
|
||||
return;
|
||||
|
||||
switch (dest_info->insert_pos)
|
||||
switch (dest_info.insert_pos)
|
||||
{
|
||||
case GTK_CLIST_DRAG_NONE:
|
||||
break;
|
||||
case GTK_CLIST_DRAG_INTO:
|
||||
g_print ("drag into\n");
|
||||
if (check_drag (ctree, source_node, dest_node,
|
||||
dest_info->insert_pos))
|
||||
dest_info.insert_pos))
|
||||
gtk_ctree_move (ctree, source_node, dest_node,
|
||||
GTK_CTREE_ROW (dest_node)->children);
|
||||
g_dataset_remove_data (context, "gtk-clist-drag-dest");
|
||||
break;
|
||||
case GTK_CLIST_DRAG_BEFORE:
|
||||
g_print ("drag before\n");
|
||||
if (check_drag (ctree, source_node, dest_node,
|
||||
dest_info->insert_pos))
|
||||
dest_info.insert_pos))
|
||||
gtk_ctree_move (ctree, source_node,
|
||||
GTK_CTREE_ROW (dest_node)->parent, dest_node);
|
||||
g_dataset_remove_data (context, "gtk-clist-drag-dest");
|
||||
break;
|
||||
case GTK_CLIST_DRAG_AFTER:
|
||||
g_print ("drag after\n");
|
||||
if (check_drag (ctree, source_node, dest_node,
|
||||
dest_info->insert_pos))
|
||||
dest_info.insert_pos))
|
||||
gtk_ctree_move (ctree, source_node,
|
||||
GTK_CTREE_ROW (dest_node)->parent,
|
||||
GTK_CTREE_ROW (dest_node)->sibling);
|
||||
|
Loading…
Reference in New Issue
Block a user