summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Neumair <cneumair@gnome.org>2008-06-29 10:53:37 +0000
committerChristian Neumair <cneumair@src.gnome.org>2008-06-29 10:53:37 +0000
commitc653f6c17c405da29b73a6c041f413d56549bf34 (patch)
treea27b1207a4d93de9468d3315d897990220f9d38d
parentb5b5bb3185dd48caded1bd428e10b39733002bde (diff)
downloadnautilus-c653f6c17c405da29b73a6c041f413d56549bf34.tar.gz
Use customized double click detection, for supporting double clicks on
2008-06-29 Christian Neumair <cneumair@gnome.org> * 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
-rw-r--r--ChangeLog9
-rw-r--r--libnautilus-private/nautilus-icon-container.c32
-rw-r--r--libnautilus-private/nautilus-icon-private.h3
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 <cneumair@gnome.org>
+
+ * 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 <awalton@gnome.org>
* 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. */