Author: Carlos Lopez <genet...@gmail.com> Date: Fri Apr 15 19:31:36 2011 +0200
Fix bug that hangs synfigstudio when press ATL-5 during usage of Draw tool or Width tool due to lack of sync of the signals and the masks. --- synfig-studio/src/gui/canvasview.h | 4 +--- synfig-studio/src/gui/states/state_draw.cpp | 6 +++++- synfig-studio/src/gui/states/state_width.cpp | 15 ++++++++++++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/synfig-studio/src/gui/canvasview.h b/synfig-studio/src/gui/canvasview.h index 6600d0a..4a0927f 100644 --- a/synfig-studio/src/gui/canvasview.h +++ b/synfig-studio/src/gui/canvasview.h @@ -425,8 +425,6 @@ private: void refresh_rend_desc(); - void toggle_duck_mask(Duckmatic::Type type); - Gtk::Widget *create_work_area(); Gtk::Widget *create_time_bar(); @@ -632,7 +630,7 @@ public: void update_quality(); - + void toggle_duck_mask(Duckmatic::Type type); /* -- ** -- S I G N A L T E R M I N A L S ------------------------------------- diff --git a/synfig-studio/src/gui/states/state_draw.cpp b/synfig-studio/src/gui/states/state_draw.cpp index 1a793f2..d76df4d 100644 --- a/synfig-studio/src/gui/states/state_draw.cpp +++ b/synfig-studio/src/gui/states/state_draw.cpp @@ -480,7 +480,10 @@ StateDraw_Context::StateDraw_Context(CanvasView* canvas_view): old_duckmask=get_work_area()->get_type_mask(); - get_work_area()->set_type_mask(Duck::TYPE_ALL-Duck::TYPE_TANGENT-Duck::TYPE_WIDTH); + if(old_duckmask & Duck::TYPE_TANGENT) + get_canvas_view()->toggle_duck_mask(Duck::TYPE_TANGENT); + if(old_duckmask & Duck::TYPE_WIDTH) + get_canvas_view()->toggle_duck_mask(Duck::TYPE_WIDTH); // Turn off layer clicking get_work_area()->set_allow_layer_clicks(false); @@ -560,6 +563,7 @@ StateDraw_Context::~StateDraw_Context() App::dialog_tool_options->clear(); get_work_area()->set_type_mask(old_duckmask); + get_canvas_view()->toggle_duck_mask(Duck::TYPE_NONE); get_work_area()->reset_cursor(); diff --git a/synfig-studio/src/gui/states/state_width.cpp b/synfig-studio/src/gui/states/state_width.cpp index 29cb2cc..c8c4fc8 100644 --- a/synfig-studio/src/gui/states/state_width.cpp +++ b/synfig-studio/src/gui/states/state_width.cpp @@ -301,7 +301,19 @@ StateWidth_Context::StateWidth_Context(CanvasView* canvas_view): get_work_area()->set_allow_duck_clicks(false); // Hide all tangent, vertex and angle ducks and show the width and // radius ducks - get_work_area()->set_type_mask((old_duckmask-Duck::TYPE_TANGENT-Duck::TYPE_VERTEX-Duck::TYPE_ANGLE) | Duck::TYPE_WIDTH | Duck::TYPE_RADIUS); + if(old_duckmask & Duck::TYPE_TANGENT) + get_canvas_view()->toggle_duck_mask(Duck::TYPE_TANGENT); + if(old_duckmask & Duck::TYPE_VERTEX) + get_canvas_view()->toggle_duck_mask(Duck::TYPE_VERTEX); + if(old_duckmask & Duck::TYPE_ANGLE) + get_canvas_view()->toggle_duck_mask(Duck::TYPE_ANGLE); + if(!(old_duckmask & Duck::TYPE_WIDTH)) + get_canvas_view()->toggle_duck_mask(Duck::TYPE_WIDTH); + if(!(old_duckmask & Duck::TYPE_WIDTHPOINT_POSITION)) + get_canvas_view()->toggle_duck_mask(Duck::TYPE_WIDTHPOINT_POSITION); + if(!(old_duckmask & Duck::TYPE_RADIUS)) + get_canvas_view()->toggle_duck_mask(Duck::TYPE_RADIUS); + //get_work_area()->set_type_mask((old_duckmask-Duck::TYPE_TANGENT-Duck::TYPE_VERTEX-Duck::TYPE_ANGLE) | Duck::TYPE_WIDTH | Duck::TYPE_RADIUS); // Turn the mouse pointer to crosshairs get_work_area()->set_cursor(Gdk::CROSSHAIR); @@ -359,6 +371,7 @@ StateWidth_Context::~StateWidth_Context() // Restore duck masking get_work_area()->set_type_mask(old_duckmask); + get_canvas_view()->toggle_duck_mask(Duck::TYPE_NONE); // Tool options be rid of ye!! App::dialog_tool_options->clear(); ------------------------------------------------------------------------------ Benefiting from Server Virtualization: Beyond Initial Workload Consolidation -- Increasing the use of server virtualization is a top priority.Virtualization can reduce costs, simplify management, and improve application availability and disaster protection. Learn more about boosting the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev _______________________________________________ Synfig-devl mailing list Synfig-devl@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/synfig-devl