Code

Fix RegisteredWidgets. Due to rev 16265, widgets were no longer initialized. This...
[inkscape.git] / src / select-context.cpp
index f6abf44f5a562c845507b7054ba7d0e5d1b7d9f5..c8186b1fd1ef4b86c15ea6ceb1390c6ba91738c1 100644 (file)
@@ -299,7 +299,7 @@ sp_select_context_item_handler(SPEventContext *event_context, SPItem *item, GdkE
 
     switch (event->type) {
         case GDK_BUTTON_PRESS:
-            if (event->button.button == 1) {
+            if (event->button.button == 1 && !event_context->space_panning) {
                 /* Left mousebutton */
 
                 // save drag origin
@@ -428,7 +428,7 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
             }
             break;
         case GDK_BUTTON_PRESS:
-            if (event->button.button == 1) {
+            if (event->button.button == 1 && !event_context->space_panning) {
 
                 // save drag origin
                 xp = (gint) event->button.x;
@@ -466,7 +466,7 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
             break;
 
         case GDK_MOTION_NOTIFY:
-            if (event->motion.state & GDK_BUTTON1_MASK) {
+            if (event->motion.state & GDK_BUTTON1_MASK && !event_context->space_panning) {
                 NR::Point const motion_pt(event->motion.x, event->motion.y);
                 NR::Point const p(desktop->w2d(motion_pt));
 
@@ -519,9 +519,8 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
                         }
                         if (!seltrans->isEmpty())
                             seltrans->moveTo(p, event->button.state);
-                        if (desktop->scroll_to_point(&p))
-                            // unfortunately in complex drawings, gobbling results in losing grab of the object, for some mysterious reason
-                            ; //gobble_motion_events(GDK_BUTTON1_MASK);
+                        desktop->scroll_to_point(&p);
+                        gobble_motion_events(GDK_BUTTON1_MASK);
                         ret = TRUE;
                     } else {
                         sc->dragging = FALSE;
@@ -543,7 +542,7 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
             break;
         case GDK_BUTTON_RELEASE:
             xp = yp = 0;
-            if ((event->button.button == 1) && (sc->grabbed)) {
+            if ((event->button.button == 1) && (sc->grabbed) && !event_context->space_panning) {
                 if (sc->dragging) {
                     if (sc->moved) {
                         // item has been moved
@@ -627,10 +626,11 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
 
                         } else if ((sc->button_press_ctrl || sc->button_press_alt) && !rb_escaped && !drag_escaped) { // ctrl+click, alt+click
 
-                            sc->button_press_ctrl = FALSE;
-
                             item = sp_event_context_find_item (desktop,
-                                         NR::Point(event->button.x, event->button.y), event->button.state & GDK_MOD1_MASK, TRUE);
+                                         NR::Point(event->button.x, event->button.y), sc->button_press_alt, sc->button_press_ctrl);
+
+                            sc->button_press_ctrl = FALSE;
+                            sc->button_press_alt = FALSE;
 
                             if (item) {
                                 if (selection->includes(item)) {
@@ -660,6 +660,9 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
                 
                 desktop->updateNow();
             }
+            if (event->button.button == 1) {
+                Inkscape::Rubberband::get()->stop(); // might have been started in another tool!
+            }
             sc->button_press_shift = false;
             sc->button_press_ctrl = false;
             sc->button_press_alt = false;
@@ -854,6 +857,15 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
                         ret = TRUE;
                     }
                     break;
+                case GDK_s:
+                case GDK_S:
+                    if (MOD__SHIFT_ONLY) {
+                        if (!selection->isEmpty()) {
+                            seltrans->increaseState();
+                        }
+                        ret = TRUE;
+                    }
+                    break;                  
                 default:
                     break;
             }