iconview: Update to using GdkEvent API

This commit is contained in:
Carlos Garnacho
2017-08-25 16:48:09 +02:00
parent c337726e86
commit b5aa6b6028

View File

@@ -1808,7 +1808,7 @@ gtk_icon_view_motion (GtkWidget *widget,
int width, height;
gtk_icon_view_update_rubberband (icon_view);
abs_y = event->y - icon_view->priv->height *
abs_y = icon_view->priv->mouse_y - icon_view->priv->height *
(gtk_adjustment_get_value (icon_view->priv->vadjustment) /
(gtk_adjustment_get_upper (icon_view->priv->vadjustment) -
gtk_adjustment_get_lower (icon_view->priv->vadjustment)));
@@ -1822,8 +1822,8 @@ gtk_icon_view_motion (GtkWidget *widget,
else
icon_view->priv->scroll_value_diff = abs_y - height;
icon_view->priv->event_last_x = event->x;
icon_view->priv->event_last_y = event->y;
icon_view->priv->event_last_x = icon_view->priv->mouse_x;
icon_view->priv->event_last_y = icon_view->priv->mouse_x;
if (icon_view->priv->scroll_timeout_id == 0) {
icon_view->priv->scroll_timeout_id = gdk_threads_add_timeout (30, rubberband_scroll_timeout,
@@ -1841,7 +1841,8 @@ gtk_icon_view_motion (GtkWidget *widget,
last_prelight_item = icon_view->priv->last_prelight;
item = _gtk_icon_view_get_item_at_widget_coords (icon_view,
event->x, event->y,
icon_view->priv->mouse_x,
icon_view->priv->mouse_y,
FALSE,
&cell);
@@ -2103,13 +2104,21 @@ gtk_icon_view_button_press (GtkWidget *widget,
GtkIconViewItem *item;
gboolean dirty = FALSE;
GtkCellRenderer *cell = NULL, *cursor_cell = NULL;
guint button, state;
gdouble x, y;
icon_view = GTK_ICON_VIEW (widget);
if (!gdk_event_get_button ((GdkEvent *) event, &button) ||
!gdk_event_get_state ((GdkEvent *) event, &state) ||
!gdk_event_get_coords ((GdkEvent *) event, &x, &y))
return GDK_EVENT_PROPAGATE;
if (!gtk_widget_has_focus (widget))
gtk_widget_grab_focus (widget);
if (event->button == GDK_BUTTON_PRIMARY && event->type == GDK_BUTTON_PRESS)
if (button == GDK_BUTTON_PRIMARY &&
gdk_event_get_event_type ((GdkEvent *) event) == GDK_BUTTON_PRESS)
{
GdkModifierType extend_mod_mask;
GdkModifierType modify_mod_mask;
@@ -2121,7 +2130,7 @@ gtk_icon_view_button_press (GtkWidget *widget,
gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_MODIFY_SELECTION);
item = _gtk_icon_view_get_item_at_widget_coords (icon_view,
event->x, event->y,
x, y,
FALSE,
&cell);
@@ -2145,7 +2154,7 @@ gtk_icon_view_button_press (GtkWidget *widget,
_gtk_icon_view_set_cursor_item (icon_view, item, cursor_cell);
}
else if (icon_view->priv->selection_mode == GTK_SELECTION_MULTIPLE &&
(event->state & extend_mod_mask))
(state & extend_mod_mask))
{
gtk_icon_view_unselect_all_internal (icon_view);
@@ -2162,7 +2171,7 @@ gtk_icon_view_button_press (GtkWidget *widget,
{
if ((icon_view->priv->selection_mode == GTK_SELECTION_MULTIPLE ||
((icon_view->priv->selection_mode == GTK_SELECTION_SINGLE) && item->selected)) &&
(event->state & modify_mod_mask))
(state & modify_mod_mask))
{
item->selected = !item->selected;
gtk_icon_view_queue_draw_item (icon_view, item);
@@ -2183,9 +2192,9 @@ gtk_icon_view_button_press (GtkWidget *widget,
/* Save press to possibly begin a drag */
if (icon_view->priv->pressed_button < 0)
{
icon_view->priv->pressed_button = event->button;
icon_view->priv->press_start_x = event->x;
icon_view->priv->press_start_y = event->y;
icon_view->priv->pressed_button = button;
icon_view->priv->press_start_x = x;
icon_view->priv->press_start_y = y;
}
icon_view->priv->last_single_clicked = item;
@@ -2208,13 +2217,15 @@ gtk_icon_view_button_press (GtkWidget *widget,
else
{
if (icon_view->priv->selection_mode != GTK_SELECTION_BROWSE &&
!(event->state & modify_mod_mask))
!(state & modify_mod_mask))
{
dirty = gtk_icon_view_unselect_all_internal (icon_view);
}
if (icon_view->priv->selection_mode == GTK_SELECTION_MULTIPLE)
gtk_icon_view_start_rubberbanding (icon_view, event->device, event->x, event->y);
gtk_icon_view_start_rubberbanding (icon_view,
gdk_event_get_device ((GdkEvent *) event),
x, y);
}
/* don't draw keyboard focus around an clicked-on item */
@@ -2222,11 +2233,11 @@ gtk_icon_view_button_press (GtkWidget *widget,
}
if (!icon_view->priv->activate_on_single_click
&& event->button == GDK_BUTTON_PRIMARY
&& event->type == GDK_2BUTTON_PRESS)
&& button == GDK_BUTTON_PRIMARY
&& gdk_event_get_event_type ((GdkEvent *) event) == GDK_2BUTTON_PRESS)
{
item = _gtk_icon_view_get_item_at_widget_coords (icon_view,
event->x, event->y,
x, y,
FALSE,
NULL);
@@ -2246,13 +2257,16 @@ gtk_icon_view_button_press (GtkWidget *widget,
if (dirty)
g_signal_emit (icon_view, icon_view_signals[SELECTION_CHANGED], 0);
return event->button == GDK_BUTTON_PRIMARY;
return button == GDK_BUTTON_PRIMARY;
}
static gboolean
button_event_modifies_selection (GdkEventButton *event)
{
return (event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) != 0;
guint state;
gdk_event_get_state ((GdkEvent *) event, &state);
return (state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) != 0;
}
static gboolean
@@ -2260,17 +2274,23 @@ gtk_icon_view_button_release (GtkWidget *widget,
GdkEventButton *event)
{
GtkIconView *icon_view;
guint button;
gdouble x, y;
icon_view = GTK_ICON_VIEW (widget);
if (icon_view->priv->pressed_button == event->button)
if (!gdk_event_get_button ((GdkEvent *) event, &button) ||
!gdk_event_get_coords ((GdkEvent *) event, &x, &y))
return GDK_EVENT_PROPAGATE;
if (icon_view->priv->pressed_button == button)
icon_view->priv->pressed_button = -1;
gtk_icon_view_stop_rubberbanding (icon_view);
remove_scroll_timeout (icon_view);
if (event->button == GDK_BUTTON_PRIMARY
if (button == GDK_BUTTON_PRIMARY
&& icon_view->priv->activate_on_single_click
&& !button_event_modifies_selection (event)
&& icon_view->priv->last_single_clicked != NULL)
@@ -2278,7 +2298,7 @@ gtk_icon_view_button_release (GtkWidget *widget,
GtkIconViewItem *item;
item = _gtk_icon_view_get_item_at_widget_coords (icon_view,
event->x, event->y,
x, y,
FALSE,
NULL);
if (item == icon_view->priv->last_single_clicked)
@@ -2300,10 +2320,12 @@ gtk_icon_view_key_press (GtkWidget *widget,
GdkEventKey *event)
{
GtkIconView *icon_view = GTK_ICON_VIEW (widget);
guint keyval;
if (icon_view->priv->doing_rubberband)
{
if (event->keyval == GDK_KEY_Escape)
if (gdk_event_get_keyval ((GdkEvent *) event, &keyval) &&
keyval == GDK_KEY_Escape)
gtk_icon_view_stop_rubberbanding (icon_view);
return TRUE;
@@ -6118,17 +6140,19 @@ gtk_icon_view_maybe_begin_drag (GtkIconView *icon_view,
gint button;
GtkTreeModel *model;
gboolean retval = FALSE;
gdouble x, y;
if (!icon_view->priv->source_set)
goto out;
if (icon_view->priv->pressed_button < 0)
if (icon_view->priv->pressed_button < 0 ||
!gdk_event_get_coords ((GdkEvent *) event, &x, &y))
goto out;
if (!gtk_drag_check_threshold (GTK_WIDGET (icon_view),
icon_view->priv->press_start_x,
icon_view->priv->press_start_y,
event->x, event->y))
x, y))
goto out;
model = gtk_icon_view_get_model (icon_view);