summaryrefslogtreecommitdiffstats
path: root/src/desktop.cpp
diff options
context:
space:
mode:
authorStefano Facchini <stefano.facchini@gmail.com>2017-10-20 15:10:39 +0000
committerStefano Facchini <stefano.facchini@gmail.com>2017-11-13 09:28:49 +0000
commit03018c2f56855c6c9006f7feace63febdef7bc52 (patch)
tree6bd1ec198f08b5a63cca206ad3f7de752ef08d96 /src/desktop.cpp
parentMerge branch 'master' into powerpencil (diff)
downloadinkscape-03018c2f56855c6c9006f7feace63febdef7bc52.tar.gz
inkscape-03018c2f56855c6c9006f7feace63febdef7bc52.zip
Refactor SPDesktop::setEventContext to allow for unsetting the current tool
Passing the empty string as toolName has the effect of unsetting and freeing the current tool. This will be used in a future commit.
Diffstat (limited to 'src/desktop.cpp')
-rw-r--r--src/desktop.cpp44
1 files changed, 22 insertions, 22 deletions
diff --git a/src/desktop.cpp b/src/desktop.cpp
index 1264e0184..61a64fe22 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -228,7 +228,7 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid
controls = (SPCanvasGroup *) sp_canvas_item_new (main, SP_TYPE_CANVAS_GROUP, NULL);
// Set the select tool as the active tool.
- set_event_context2("/tools/select");
+ setEventContext("/tools/select");
// display rect and zoom are now handled in sp_desktop_widget_realize()
@@ -656,34 +656,34 @@ SPDesktop::change_document (SPDocument *theDocument)
}
/**
- * Replaces the currently active tool with a new one.
+ * Replaces the currently active tool with a new one. Pass the empty string to
+ * unset and free the current tool.
*/
-void SPDesktop::set_event_context2(const std::string& toolName)
+void SPDesktop::setEventContext(const std::string& toolName)
{
- Inkscape::UI::Tools::ToolBase* old_tool = event_context;
-
- if (old_tool) {
- if (toolName.compare(old_tool->pref_observer->observed_path) != 0) {
- //g_message("Old tool: %s", old_tool->pref_observer->observed_path.c_str());
- //g_message("New tool: %s", toolName.c_str());
- old_tool->finish();
- delete old_tool;
+ if (event_context) {
+ if (toolName.compare(event_context->pref_observer->observed_path) != 0) {
+ event_context->finish();
+ delete event_context;
} else {
_event_context_changed_signal.emit(this, event_context);
return;
}
}
-
- Inkscape::UI::Tools::ToolBase* new_tool = ToolFactory::createObject(toolName);
- new_tool->desktop = this;
- new_tool->message_context = new Inkscape::MessageContext(this->messageStack());
- event_context = new_tool;
- new_tool->setup();
-
- // Make sure no delayed snapping events are carried over after switching tools
- // (this is only an additional safety measure against sloppy coding, because each
- // tool should take care of this by itself)
- sp_event_context_discard_delayed_snap_event(event_context);
+
+ if (toolName.empty()) {
+ event_context = nullptr;
+ } else {
+ event_context = ToolFactory::createObject(toolName);
+ event_context->desktop = this;
+ event_context->message_context = new Inkscape::MessageContext(this->messageStack());
+ event_context->setup();
+
+ // Make sure no delayed snapping events are carried over after switching tools
+ // (this is only an additional safety measure against sloppy coding, because each
+ // tool should take care of this by itself)
+ sp_event_context_discard_delayed_snap_event(event_context);
+ }
_event_context_changed_signal.emit(this, event_context);
}