diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c index c7ae2a3f4e..21f49af6e9 100644 --- a/gtk/gtkiconview.c +++ b/gtk/gtkiconview.c @@ -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);