Code

New file. use for building with gtk28
[inkscape.git] / src / event-context.cpp
index d91a064bad17a234ac6822825927317fe1b63129..e63df0d2f5eedff819df23361987fe696f2d5c99 100644 (file)
@@ -369,7 +369,7 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
                     } else {
                         panning = 2;
                         sp_canvas_item_grab(SP_CANVAS_ITEM(desktop->acetate),
-                            GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK,
+                            GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK,
                             NULL, event->button.time-1);
                     }
                     ret = TRUE;
@@ -381,7 +381,7 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
                                              event->button.y);
                         panning = 3;
                         sp_canvas_item_grab(SP_CANVAS_ITEM(desktop->acetate),
-                                GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK,
+                                GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK,
                                 NULL, event->button.time);
                         ret = TRUE;
                     } else {
@@ -452,6 +452,7 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
         case GDK_BUTTON_RELEASE:
             if (within_tolerance && (panning || zoom_rb)) {
                 dontgrab ++;
+                zoom_rb = 0;
                 NR::Point const event_w(event->button.x, event->button.y);
                 NR::Point const event_dt(desktop->w2d(event_w));
                 double const zoom_power = ( (event->button.state & GDK_SHIFT_MASK)
@@ -459,11 +460,13 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
                 desktop->zoom_relative_keep_point(event_dt,
                                                   pow(zoom_inc, zoom_power));
                 gtk_timeout_add(250, (GtkFunction) grab_allow_again, NULL);
+                desktop->updateNow();
             }
             if (panning == event->button.button) {
                 panning = 0;
                 sp_canvas_item_ungrab(SP_CANVAS_ITEM(desktop->acetate),
                                       event->button.time);
+                desktop->updateNow();
                 ret = TRUE;
             } else if (zoom_rb == event->button.button) {
                 zoom_rb = 0;
@@ -477,9 +480,13 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
             break;
         case GDK_KEY_PRESS:
             switch (get_group0_keyval(&event->key)) {
+                // GDK insists on stealing these keys (F1 for no idea what, tab for cycling widgets
+                // in the editing window). So we resteal them back and run our regular shortcut
+                // invoker on them.
                 unsigned int shortcut;
+                case GDK_Tab: 
+                case GDK_ISO_Left_Tab: 
                 case GDK_F1:
-                    /* Grab it away from Gtk */
                     shortcut = get_group0_keyval(&event->key);
                     if (event->key.state & GDK_SHIFT_MASK)
                         shortcut |= SP_SHORTCUT_SHIFT_MASK;
@@ -490,22 +497,6 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
                     ret = sp_shortcut_invoke(shortcut, desktop);
                     break;
 
-                case GDK_Tab: // disable tab/shift-tab which cycle widget focus
-                case GDK_ISO_Left_Tab: // they will get different functions
-                    if (!(MOD__CTRL_ONLY || (MOD__CTRL && MOD__SHIFT))) {
-                        ret = TRUE;
-                    } else {
-                        /* Grab it away from Gtk */
-                        shortcut = get_group0_keyval(&event->key);
-                        if (event->key.state & GDK_SHIFT_MASK)
-                            shortcut |= SP_SHORTCUT_SHIFT_MASK;
-                        if (event->key.state & GDK_CONTROL_MASK)
-                            shortcut |= SP_SHORTCUT_CONTROL_MASK;
-                        if (event->key.state & GDK_MOD1_MASK)
-                            shortcut |= SP_SHORTCUT_ALT_MASK;
-                        ret = sp_shortcut_invoke(shortcut, desktop);
-                    }
-                    break;
                 case GDK_W:
                 case GDK_w:
                 case GDK_F4:
@@ -804,8 +795,8 @@ sp_event_context_deactivate(SPEventContext *ec)
     g_return_if_fail(ec != NULL);
     g_return_if_fail(SP_IS_EVENT_CONTEXT(ec));
 
-    if (((SPEventContextClass *) G_OBJECT_GET_CLASS(ec))->activate)
-        ((SPEventContextClass *) G_OBJECT_GET_CLASS(ec))->activate(ec);
+    if (((SPEventContextClass *) G_OBJECT_GET_CLASS(ec))->deactivate)
+        ((SPEventContextClass *) G_OBJECT_GET_CLASS(ec))->deactivate(ec);
 }
 
 /**