diff options
| author | Markus Engel <markus.engel@tum.de> | 2014-03-01 20:26:55 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2014-03-01 20:26:55 +0000 |
| commit | 9125e5147952cb8ce3d9f8b1fc833be98b4d0447 (patch) | |
| tree | 620d858a0db85abba3aab0f96e71fe4a9e3d4ed2 /src/ui/tools/tool-base.cpp | |
| parent | Hack for when blur or offset are expressed in terms of object bounding box. (diff) | |
| download | inkscape-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.cpp | 18 |
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; } |
