diff --git a/src/select-context.cpp b/src/select-context.cpp
index 1daf6b0e56967be6363dfba5b2c67f47feb2b4df..0e35c6546fedb1accef8f3cd36ffdfc1125efd8b 100644 (file)
--- a/src/select-context.cpp
+++ b/src/select-context.cpp
@@ -326,7 +326,7 @@ sp_select_context_item_handler(SPEventContext *event_context, SPItem *item, GdkE
sc->moved = FALSE;
sp_canvas_force_full_redraw_after_interruptions(desktop->canvas, 5);
-
+
// remember the clicked item in sc->item:
if (sc->item) {
sp_object_unref(sc->item, NULL);
@@ -360,14 +360,17 @@ sp_select_context_item_handler(SPEventContext *event_context, SPItem *item, GdkE
case GDK_ENTER_NOTIFY:
{
- GdkCursor *cursor = gdk_cursor_new(GDK_FLEUR);
- gdk_window_set_cursor(GTK_WIDGET(sp_desktop_canvas(desktop))->window, cursor);
- gdk_cursor_destroy(cursor);
+ if (!desktop->isWaitingCursor()) {
+ GdkCursor *cursor = gdk_cursor_new(GDK_FLEUR);
+ gdk_window_set_cursor(GTK_WIDGET(sp_desktop_canvas(desktop))->window, cursor);
+ gdk_cursor_destroy(cursor);
+ }
break;
}
case GDK_LEAVE_NOTIFY:
- gdk_window_set_cursor(GTK_WIDGET(sp_desktop_canvas(desktop))->window, event_context->cursor);
+ if (!desktop->isWaitingCursor())
+ gdk_window_set_cursor(GTK_WIDGET(sp_desktop_canvas(desktop))->window, event_context->cursor);
break;
case GDK_KEY_PRESS:
sp_canvas_end_forced_full_redraws(desktop->canvas);
} else { // switch tool
- tools_switch_by_item (desktop, clicked_item);
+ Geom::Point const button_pt(event->button.x, event->button.y);
+ Geom::Point const p(desktop->w2d(button_pt));
+ tools_switch_by_item (desktop, clicked_item, p);
}
} else {
sp_select_context_up_one_layer(desktop);
@@ -511,10 +516,10 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
item_in_group = desktop->item_at_point(Geom::Point(event->button.x, event->button.y), TRUE);
group_at_point = desktop->group_at_point(Geom::Point(event->button.x, event->button.y));
- // group-at-point is meant to be topmost item if it's a group,
+ // group-at-point is meant to be topmost item if it's a group,
// not topmost group of all items at point
- if (group_at_point != item_in_group &&
- !(group_at_point && item_at_point &&
+ if (group_at_point != item_in_group &&
+ !(group_at_point && item_at_point &&
group_at_point->isAncestorOf(item_at_point)))
group_at_point = NULL;
sp_canvas_item_ungrab(sc->grabbed, event->button.time);
sc->grabbed = NULL;
}
-
+
desktop->updateNow();
}
if (event->button.button == 1) {
_("<b>Shift</b>: click to toggle select; drag for rubberband selection"),
_("<b>Alt</b>: click to select under; drag to move selected or select by touch"));
// if Alt and nonempty selection, show moving cursor ("move selected"):
- if (alt && !selection->isEmpty()) {
+ if (alt && !selection->isEmpty() && !desktop->isWaitingCursor()) {
GdkCursor *cursor = gdk_cursor_new(GDK_FLEUR);
gdk_window_set_cursor(GTK_WIDGET(sp_desktop_canvas(desktop))->window, cursor);
gdk_cursor_destroy(cursor);
}
ret = TRUE;
}
- break;
+ break;
case GDK_g:
case GDK_G:
if (MOD__SHIFT_ONLY) {
}
}
// set cursor to default.
- gdk_window_set_cursor(GTK_WIDGET(sp_desktop_canvas(desktop))->window, event_context->cursor);
+ if (!desktop->isWaitingCursor())
+ gdk_window_set_cursor(GTK_WIDGET(sp_desktop_canvas(desktop))->window, event_context->cursor);
break;
default:
break;