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

Reply via email to