summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nautilus-canvas-container.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/nautilus-canvas-container.c b/src/nautilus-canvas-container.c
index 321c2218d..b85a2adc2 100644
--- a/src/nautilus-canvas-container.c
+++ b/src/nautilus-canvas-container.c
@@ -2741,6 +2741,10 @@ get_rubber_color (NautilusCanvasContainer *container,
}
static void
+stop_rubberbanding (NautilusCanvasContainer *container,
+ GdkEventButton *event);
+
+static void
start_rubberbanding (NautilusCanvasContainer *container,
GdkEventButton *event)
{
@@ -2754,6 +2758,12 @@ start_rubberbanding (NautilusCanvasContainer *container,
details = container->details;
band_info = &details->rubberband_info;
+ if (band_info->active)
+ {
+ g_debug ("Canceling active rubberband by device %s", gdk_device_get_name (band_info->device));
+ stop_rubberbanding (container, NULL);
+ }
+
g_signal_emit (container,
signals[BAND_SELECT_STARTED], 0);
@@ -2811,7 +2821,8 @@ start_rubberbanding (NautilusCanvasContainer *container,
}
static void
-stop_rubberbanding (NautilusCanvasContainer *container)
+stop_rubberbanding (NautilusCanvasContainer *container,
+ GdkEventButton *event)
{
NautilusCanvasRubberbandInfo *band_info;
GList *icons;
@@ -2819,6 +2830,11 @@ stop_rubberbanding (NautilusCanvasContainer *container)
band_info = &container->details->rubberband_info;
+ if (event != NULL && event->device != band_info->device)
+ {
+ return;
+ }
+
g_assert (band_info->timer_id != 0);
g_source_remove (band_info->timer_id);
band_info->timer_id = 0;
@@ -4960,7 +4976,7 @@ button_release_event (GtkWidget *widget,
if (event->button == RUBBERBAND_BUTTON && details->rubberband_info.active)
{
- stop_rubberbanding (container);
+ stop_rubberbanding (container, event);
return TRUE;
}
@@ -5288,7 +5304,7 @@ grab_notify_cb (GtkWidget *widget,
* up (e.g. authentication or an error). Stop
* the rubberbanding so that we can handle the
* dialog. */
- stop_rubberbanding (container);
+ stop_rubberbanding (container, NULL);
}
}