X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fselect-context.cpp;h=010382376e9f7b8e3d50c6256eaaf075e6659da4;hb=9e973c4fb2183b877bb600a7e9c75e93b3e7d6d1;hp=48afadb2bb85635447ce2b1e156eeb65d53b08c3;hpb=32461c0cc717f51ba84908e1eea5b1ee150cf27e;p=inkscape.git diff --git a/src/select-context.cpp b/src/select-context.cpp index 48afadb2b..010382376 100644 --- a/src/select-context.cpp +++ b/src/select-context.cpp @@ -16,6 +16,8 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include +#include #include #include "macros.h" #include "rubberband.h" @@ -339,7 +341,7 @@ sp_select_context_item_handler(SPEventContext *event_context, SPItem *item, GdkE } sp_canvas_item_grab(SP_CANVAS_ITEM(desktop->drawing), GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | - GDK_POINTER_MOTION_MASK, + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK, NULL, event->button.time); sc->grabbed = SP_CANVAS_ITEM(desktop->drawing); @@ -446,7 +448,7 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event) sc->grabbed = NULL; } sp_canvas_item_grab(SP_CANVAS_ITEM(desktop->acetate), - GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK, + GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK, NULL, event->button.time); sc->grabbed = SP_CANVAS_ITEM(desktop->acetate); @@ -503,6 +505,14 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event) if (!sc->moved) { item_in_group = desktop->item_at_point(NR::Point(event->button.x, event->button.y), TRUE); group_at_point = desktop->group_at_point(NR::Point(event->button.x, event->button.y)); + + // 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 && + group_at_point->isAncestorOf(item_at_point))) + group_at_point = NULL; + // if neither a group nor an item (possibly in a group) at point are selected, set selection to the item at point if ((!item_in_group || !selection->includes(item_in_group)) && (!group_at_point || !selection->includes(group_at_point)) @@ -862,8 +872,8 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event) if (MOD__CTRL_ONLY) { if (selection->singleItem()) { SPItem *clicked_item = selection->singleItem(); - if ( SP_IS_GROUP(clicked_item) && - !SP_IS_BOX3D(clicked_item)) { // enter group if it's not a 3D box + if ( SP_IS_GROUP(clicked_item) || + SP_IS_BOX3D(clicked_item)) { // enter group or a 3D box desktop->setCurrentLayer(reinterpret_cast(clicked_item)); sp_desktop_selection(desktop)->clear(); } else {