Code

Absorb all mouse clicks (and flash a warning on the status bar) when no subtool is...
authorcilix42 <cilix42@users.sourceforge.net>
Mon, 18 Aug 2008 00:43:46 +0000 (00:43 +0000)
committercilix42 <cilix42@users.sourceforge.net>
Mon, 18 Aug 2008 00:43:46 +0000 (00:43 +0000)
src/lpe-tool-context.cpp
src/widgets/toolbox.cpp

index 6902d1bd31f4154f242d283db3db28f08e79e790..dd305116b4c63bd4319798d4696af0f1227db9ae 100644 (file)
@@ -30,6 +30,7 @@
 #include "document.h"
 #include "display/curve.h"
 #include "display/canvas-bpath.h"
+#include "message-stack.h"
 
 #include "lpe-tool-context.h"
 
@@ -212,6 +213,14 @@ sp_lpetool_context_root_handler(SPEventContext *event_context, GdkEvent *event)
     switch (event->type) {
         case GDK_BUTTON_PRESS:
             g_print ("GDK_BUTTON_PRESS\n");
+            if (lc->mode == Inkscape::LivePathEffect::INVALID_LPE) {
+                // don't do anything for now if we are inactive
+                desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Choose a subtool from the toolbar to perform a geometric construction."));
+                g_print ("Flash statusbar\n");
+                ret = true;
+                break;
+            }
+
             if (event->button.button == 1 && !event_context->space_panning) {
                 g_print ("   ... (passed if construct)\n");
                 // save drag origin
index 5ed6feb2ef803df973ebefd93659ab06ca337970..2644d70a3283fcc696a47698eefd151e9bf39f69 100644 (file)
@@ -4795,30 +4795,21 @@ static void sp_lpetool_mode_changed(EgeSelectOneAction *act, GObject *tbl)
 
     SPDesktop *desktop = (SPDesktop *) g_object_get_data(tbl, "desktop");
 
-    // TODO: how can we set *all* actions inactive (such that no sutool is activated?)
-    gint lpeToolMode = ege_select_one_action_get_active(act);
-    if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
-        prefs_set_int_attribute( "tools.lpetool", "mode", lpeToolMode );
-    }
-    //EffectType type = lpesubtools[lpeToolMode];
-    //SPPenContext *pc = SP_PEN_CONTEXT(desktop->event_context);
-
     // only take action if run by the attr_changed listener
-    if (!g_object_get_data( tbl, "freeze" )) {
+    if (!g_object_get_data(tbl, "freeze")) {
         // in turn, prevent listener from responding
-        g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
+        g_object_set_data(tbl, "freeze", GINT_TO_POINTER(TRUE));
 
-        // this is now done in sp_lpetool_context_root_handler()
-        /**
-        // activate the LPE corresponding to the chosen subtool
-        if (type != INVALID_LPE) {
-            //lc->tool_state = LPETOOL_STATE_PEN;
-            sp_pen_context_wait_for_LPE_mouse_clicks(pc, type, Effect::acceptsNumClicks(type));
+        // TODO: how can we set *all* actions inactive (such that no sutool is activated?)
+        gint lpeToolMode = ege_select_one_action_get_active(act);
+        if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+            prefs_set_int_attribute( "tools.lpetool", "mode", lpeToolMode );
         }
-        // TODO: how can we take LPEs into account that don't expect any 'pre-clicks'?
-        **/
 
-        g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
+        EffectType type = lpesubtools[lpeToolMode];
+        SP_LPETOOL_CONTEXT(desktop->event_context)->mode = type;
+
+        g_object_set_data(tbl, "freeze", GINT_TO_POINTER(FALSE));
     }
 }