Hi again :-), this is a patch to fix a regression while keeping the
behavior implemented on the bug that caused it. Please see
http://bugs.gnome.org/574506 for more info.  Patch attached.

Thanks.
From 2169c0845a28b6207e4bcc7c69c8d7d6f3eb5f37 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Nelson=20Ben=C3=ADtez=20Le=C3=B3n?= <nbenitezl+gn...@gmail.com>
Date: Thu, 30 Apr 2009 17:11:55 +0200
Subject: [PATCH] Make middle-click behaviour honour single/double-click preferences

In spatial mode, fix regression about middle-click behaviour not honouring
single/double-click preferences, fixes bgo#574506.
---
 libnautilus-private/nautilus-icon-container.c |   40 ++++++++++++++++++++----
 1 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/libnautilus-private/nautilus-icon-container.c b/libnautilus-private/nautilus-icon-container.c
index 7bf4c12..0ab2a59 100644
--- a/libnautilus-private/nautilus-icon-container.c
+++ b/libnautilus-private/nautilus-icon-container.c
@@ -4221,12 +4221,17 @@ button_press_event (GtkWidget *widget,
 		    GdkEventButton *event)
 {
 	NautilusIconContainer *container;
+	NautilusWindowInfo *winfo;
 	gboolean selection_changed;
 	gboolean return_value;
 	gboolean clicked_on_icon;
+	gboolean is_spatial;
 
 	container = NAUTILUS_ICON_CONTAINER (widget);
         container->details->button_down_time = event->time;
+
+	winfo = NAUTILUS_WINDOW_INFO (gtk_widget_get_toplevel(GTK_WIDGET (container)));
+	is_spatial = nautilus_window_info_get_window_type (winfo) == NAUTILUS_WINDOW_SPATIAL;
 	
         /* Forget about the old keyboard selection now that we've started mousing. */
         clear_keyboard_focus (container);
@@ -4251,7 +4256,7 @@ button_press_event (GtkWidget *widget,
 		return TRUE;
 	}
 
-	if (event->button == DRAG_BUTTON &&
+	if ((event->button == DRAG_BUTTON || (event->button == MIDDLE_BUTTON && is_spatial)) &&
 	    event->type == GDK_BUTTON_PRESS) {
 		/* Clear the last click icon for double click */
 		container->details->double_click_icon[1] = container->details->double_click_icon[0];
@@ -4310,6 +4315,8 @@ nautilus_icon_container_did_not_drag (NautilusIconContainer *container,
 				      GdkEventButton *event)
 {
 	NautilusIconContainerDetails *details;
+	NautilusWindowInfo *winfo;
+	gboolean is_spatial;
 	gboolean selection_changed;
 	static gint64 last_click_time = 0;
 	static gint click_count = 0;
@@ -4318,6 +4325,9 @@ nautilus_icon_container_did_not_drag (NautilusIconContainer *container,
 		
 	details = container->details;
 
+	winfo = NAUTILUS_WINDOW_INFO (gtk_widget_get_toplevel(GTK_WIDGET (container)));
+	is_spatial = nautilus_window_info_get_window_type (winfo) == NAUTILUS_WINDOW_SPATIAL;
+
 	if (details->icon_selected_on_button_down &&
 	    ((event->state & GDK_CONTROL_MASK) != 0 ||
 	     (event->state & GDK_SHIFT_MASK) == 0)) {
@@ -4340,7 +4350,7 @@ nautilus_icon_container_did_not_drag (NautilusIconContainer *container,
 	
 	if (details->drag_icon != NULL &&
 	    (details->single_click_mode ||
-	     event->button == MIDDLE_BUTTON)) {
+	     (event->button == MIDDLE_BUTTON && !is_spatial))) {
 		/* Determine click count */
 		g_object_get (G_OBJECT (gtk_widget_get_settings (GTK_WIDGET (container))), 
 			      "gtk-double-click-time", &double_click_time,
@@ -6311,8 +6321,13 @@ handle_icon_double_click (NautilusIconContainer *container,
 			  GdkEventButton *event)
 {
 	NautilusIconContainerDetails *details;
+	NautilusWindowInfo *winfo;
+	gboolean is_spatial;
+
+	winfo = NAUTILUS_WINDOW_INFO (gtk_widget_get_toplevel(GTK_WIDGET (container)));
+	is_spatial = nautilus_window_info_get_window_type (winfo) == NAUTILUS_WINDOW_SPATIAL;
 
-	if (event->button != DRAG_BUTTON) {
+	if ((event->button != DRAG_BUTTON) && !is_spatial) {
 		return FALSE;
 	}
 
@@ -6323,9 +6338,15 @@ handle_icon_double_click (NautilusIconContainer *container,
 	    details->double_click_icon[0] == details->double_click_icon[1] &&
 	    details->double_click_button[0] == details->double_click_button[1]) {
 		if (!button_event_modifies_selection (event)) {
-			activate_selected_items (container);
-			return TRUE;
-		} else if ((event->state & GDK_CONTROL_MASK) == 0 &&
+			if (event->button == MIDDLE_BUTTON) {
+				activate_selected_items_alternate (container, NULL);
+				return TRUE;
+			} else if (event->button == DRAG_BUTTON) {
+				activate_selected_items (container);
+				return TRUE;
+			}
+		} else if (event->button == DRAG_BUTTON &&
+			   (event->state & GDK_CONTROL_MASK) == 0 &&
 			   (event->state & GDK_SHIFT_MASK) != 0) {
 			activate_selected_items_alternate (container, icon);
 			return TRUE;
@@ -6352,6 +6373,11 @@ handle_icon_button_press (NautilusIconContainer *container,
 			  GdkEventButton *event)
 {
 	NautilusIconContainerDetails *details;
+	NautilusWindowInfo *winfo;
+	gboolean is_spatial;
+
+	winfo = NAUTILUS_WINDOW_INFO (gtk_widget_get_toplevel(GTK_WIDGET (container)));
+	is_spatial = nautilus_window_info_get_window_type (winfo) == NAUTILUS_WINDOW_SPATIAL;
 
 	details = container->details;
 
@@ -6365,7 +6391,7 @@ handle_icon_button_press (NautilusIconContainer *container,
 		return TRUE;
 	}
 
-	if ((event->button == DRAG_BUTTON) &&
+	if ((event->button == DRAG_BUTTON || (event->button == MIDDLE_BUTTON && is_spatial)) &&
 	    event->type == GDK_BUTTON_PRESS) {
 		/* The next double click has to be on this icon */
 		details->double_click_icon[1] = details->double_click_icon[0];
-- 
1.6.0.4

--
nautilus-list mailing list
nautilus-list@gnome.org
http://mail.gnome.org/mailman/listinfo/nautilus-list

Reply via email to