Code

r15380@tres: ted | 2007-05-10 19:24:35 -0700
authorgouldtj <gouldtj@users.sourceforge.net>
Wed, 27 Jun 2007 06:20:42 +0000 (06:20 +0000)
committergouldtj <gouldtj@users.sourceforge.net>
Wed, 27 Jun 2007 06:20:42 +0000 (06:20 +0000)
 Can now hit the cancel key and have it mean something.

src/extension/effect.cpp
src/extension/effect.h

index 658861de795a0a5365d129eb629bdbb6acf90be7..f33ff5154d2d6230867e9952e22293b787303098 100644 (file)
@@ -247,19 +247,53 @@ Effect::effect (Inkscape::UI::View::View * doc)
                                Gtk::MESSAGE_INFO,
                                Gtk::BUTTONS_CANCEL,
                                true); // modal
+    working.signal_response().connect(sigc::mem_fun(this, &Effect::workingCanceled));
     g_free(dlgmessage);
+    _canceled = false;
     working.show();
 
     set_last_effect(this);
     imp->effect(this, doc);
 
-    sp_document_done(doc->doc(), SP_VERB_NONE, _(this->get_name()));
+    if (!_canceled) {
+        sp_document_done(doc->doc(), SP_VERB_NONE, _(this->get_name()));
+    } else {
+        sp_document_cancel(doc->doc());
+    }
 
     working.hide();
 
     return;
 }
 
+/** \internal
+    \brief  A function used by the working dialog to recieve the cancel
+            button press
+    \param  resp  The key that was pressed (should always be cancel)
+
+    This function recieves the key event and marks the effect as being
+    canceled.  It calls the function in the implementation that would
+    cancel the implementation.
+*/
+void
+Effect::workingCanceled (const int resp) {
+    if (resp == Gtk::RESPONSE_CANCEL) {
+        std::cout << "Canceling Effect" << std::endl;
+        _canceled = true;
+        imp->cancelProcessing();
+    }
+    return;
+}
+
+/** \brief  Sets which effect was called last
+    \param in_effect  The effect that has been called
+    
+    This function sets the static variable \c _last_effect and it
+    ensures that the last effect verb is sensitive.
+
+    If the \c in_effect variable is \c NULL then the last effect
+    verb is made insesitive.
+*/
 void
 Effect::set_last_effect (Effect * in_effect)
 {
index b6fc80aa5c00ff63fdcaaf53ec62c1e00a505615..53d31cf0620feffb4b7effaf367326201350ac47 100644 (file)
@@ -14,6 +14,7 @@
 #include <config.h>
 
 #include <glibmm/i18n.h>
+#include <gtkmm/dialog.h>
 #include <gtk/gtkdialog.h>
 #include "verbs.h"
 
@@ -108,6 +109,9 @@ public:
 
 private:
     static gchar *   remove_ (gchar * instr);
+
+    bool _canceled;
+    void workingCanceled (const int resp);
 };
 
 } }  /* namespace Inkscape, Extension */