summaryrefslogtreecommitdiffstats
path: root/src/ui/tools/tool-base.cpp
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2014-03-01 20:26:55 +0000
committerMarkus Engel <markus.engel@tum.de>2014-03-01 20:26:55 +0000
commit9125e5147952cb8ce3d9f8b1fc833be98b4d0447 (patch)
tree620d858a0db85abba3aab0f96e71fe4a9e3d4ed2 /src/ui/tools/tool-base.cpp
parentHack for when blur or offset are expressed in terms of object bounding box. (diff)
downloadinkscape-9125e5147952cb8ce3d9f8b1fc833be98b4d0447.tar.gz
inkscape-9125e5147952cb8ce3d9f8b1fc833be98b4d0447.zip
Fix for crashes on fast tool toggling.
Fixed bugs: - https://launchpad.net/bugs/1265376 (bzr r13087)
Diffstat (limited to 'src/ui/tools/tool-base.cpp')
-rw-r--r--src/ui/tools/tool-base.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp
index dc10e9388..99b72c386 100644
--- a/src/ui/tools/tool-base.cpp
+++ b/src/ui/tools/tool-base.cpp
@@ -739,10 +739,12 @@ bool ToolBase::root_handler(GdkEvent* event) {
if (within_tolerance == true) {
// Space was pressed, but not panned
sp_toggle_selector(desktop);
- ret = TRUE;
+
+ // Be careful, sp_toggle_selector will delete ourselves.
+ // Thus, make sure we return immediately.
+ return true;
}
- within_tolerance = false;
break;
case GDK_KEY_Q:
@@ -975,10 +977,18 @@ gint sp_event_context_root_handler(ToolBase * event_context,
gint sp_event_context_virtual_root_handler(ToolBase * event_context, GdkEvent * event) {
gint ret = false;
+
if (event_context) {
- ret = event_context->root_handler(event);
- set_event_location(event_context->desktop, event);
+ // The root handler also handles pressing the space key.
+ // This will toggle the current tool and delete the current one.
+ // Thus, save a pointer to the desktop before calling it.
+ SPDesktop* desktop = event_context->desktop;
+
+ ret = event_context->root_handler(event);
+
+ set_event_location(desktop, event);
}
+
return ret;
}