From c653f6c17c405da29b73a6c041f413d56549bf34 Mon Sep 17 00:00:00 2001 From: Christian Neumair Date: Sun, 29 Jun 2008 10:53:37 +0000 Subject: Use customized double click detection, for supporting double clicks on MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2008-06-29 Christian Neumair * libnautilus-private/nautilus-icon-container.c (clicked_within_double_click_interval), (handle_icon_button_press): * libnautilus-private/nautilus-icon-private.h: Use customized double click detection, for supporting double clicks on half shown items, where the first click triggers a scroll event. Thanks to Nelson Benítez León. Fixes #347423. svn path=/branches/gnome-2-22/; revision=14296 --- ChangeLog | 9 ++++++++ libnautilus-private/nautilus-icon-container.c | 32 +++++++++++++++++++++++++-- libnautilus-private/nautilus-icon-private.h | 3 +++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 88a735bd9..4bda9c260 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-06-29 Christian Neumair + + * libnautilus-private/nautilus-icon-container.c + (clicked_within_double_click_interval), (handle_icon_button_press): + * libnautilus-private/nautilus-icon-private.h: + Use customized double click detection, for supporting double clicks + on half shown items, where the first click triggers a scroll event. + Thanks to Nelson Benítez León. Fixes #347423. + 2008-06-28 A. Walton * libnautilus-private/nautilus-icon-container.c diff --git a/libnautilus-private/nautilus-icon-container.c b/libnautilus-private/nautilus-icon-container.c index 390b063c4..576313524 100644 --- a/libnautilus-private/nautilus-icon-container.c +++ b/libnautilus-private/nautilus-icon-container.c @@ -3439,6 +3439,31 @@ nautilus_icon_container_did_not_drag (NautilusIconContainer *container, } } +static gboolean +clicked_within_double_click_interval (NautilusIconContainer *container) +{ + static gint64 last_click_time = 0; + static gint click_count = 0; + gint double_click_time; + gint64 current_time; + + /* Determine click count */ + g_object_get (G_OBJECT (gtk_widget_get_settings (GTK_WIDGET (container))), + "gtk-double-click-time", &double_click_time, + NULL); + current_time = eel_get_system_time (); + if (current_time - last_click_time < double_click_time * 1000) { + click_count++; + } else { + click_count = 0; + } + + /* Stash time for next compare */ + last_click_time = current_time; + + return (click_count > 0); +} + static void clear_drag_state (NautilusIconContainer *container) { @@ -5193,8 +5218,9 @@ handle_icon_button_press (NautilusIconContainer *container, details->double_click_icon[1] = details->double_click_icon[0]; details->double_click_icon[0] = icon; } - if (event->type == GDK_2BUTTON_PRESS && - (event->button == DRAG_BUTTON || event->button == MIDDLE_BUTTON)) { + + if ((event->button == DRAG_BUTTON || event->button == MIDDLE_BUTTON) + && (!details->single_click_mode && clicked_within_double_click_interval(container) && details->icon_revealed)) { /* Double clicking does not trigger a D&D action. */ details->drag_button = 0; details->drag_icon = NULL; @@ -5211,6 +5237,7 @@ handle_icon_button_press (NautilusIconContainer *container, activate_selected_items_alternate (container, icon); } } + details->icon_revealed = FALSE; return TRUE; } if (event->button == DRAG_BUTTON @@ -5259,6 +5286,7 @@ handle_icon_button_press (NautilusIconContainer *container, signals[SELECTION_CHANGED], 0); } else { select_one_unselect_others (container, icon); + details->icon_revealed = TRUE; g_signal_emit (container, signals[SELECTION_CHANGED], 0); } diff --git a/libnautilus-private/nautilus-icon-private.h b/libnautilus-private/nautilus-icon-private.h index d125a631f..cb9670513 100644 --- a/libnautilus-private/nautilus-icon-private.h +++ b/libnautilus-private/nautilus-icon-private.h @@ -274,6 +274,9 @@ struct NautilusIconContainerDetails { GtkWidget *search_entry; guint search_entry_changed_id; guint typeselect_flush_timeout; + + /* Needed for dblclicking activation of partially shown icons, see bug #347423 */ + gboolean icon_revealed; }; /* Private functions shared by mutiple files. */ -- cgit v1.2.1