=?WINDOWS-1252?Q?[PATCH]_=96_double-click_doesn't_open_half-shown_items?=



Hi, I've posted a new patch for this bug, see bugzilla bug[1] for more info, thanks to jared moore for testing...

[1] http://bugzilla.gnome.org/show_bug.cgi?id=347423
Index: libnautilus-private/nautilus-icon-private.h
===================================================================
--- libnautilus-private/nautilus-icon-private.h	(revisión: 14183)
+++ libnautilus-private/nautilus-icon-private.h	(copia de trabajo)
@@ -281,6 +281,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. */
Index: libnautilus-private/nautilus-icon-container.c
===================================================================
--- libnautilus-private/nautilus-icon-container.c	(revisión: 14183)
+++ libnautilus-private/nautilus-icon-container.c	(copia de trabajo)
@@ -3808,6 +3808,31 @@ nautilus_icon_container_did_not_drag (Na
 	}
 }
 
+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)
 {
@@ -5562,8 +5587,9 @@ handle_icon_button_press (NautilusIconCo
 		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;
@@ -5580,6 +5606,7 @@ handle_icon_button_press (NautilusIconCo
 				activate_selected_items_alternate (container, icon);
 			}
 		}
+		details->icon_revealed = FALSE;
 		return TRUE;
 	}
 	if (event->button == DRAG_BUTTON
@@ -5628,6 +5655,7 @@ handle_icon_button_press (NautilusIconCo
 				       signals[SELECTION_CHANGED], 0);
 		} else {
 			select_one_unselect_others (container, icon);
+			details->icon_revealed = TRUE;
 			g_signal_emit (container,
 				       signals[SELECTION_CHANGED], 0);
 		}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]