Author: Carlos Lopez <[email protected]>
Date:   Fri Jan 13 22:03:21 2012 +0100

When editing the brush widget don't parse the key accelerators. First step to 
fix bug 3472549

---

 synfig-studio/src/gui/toolbox.cpp                 |   21 ++++++++++++++++++++-
 synfig-studio/src/gui/toolbox.h                   |    4 ++++
 synfig-studio/src/gui/widgets/widget_defaults.cpp |    8 +++++++-
 synfig-studio/src/gui/widgets/widget_defaults.h   |    3 ++-
 synfig-studio/src/gui/widgets/widget_distance.cpp |   13 +++++++++++++
 synfig-studio/src/gui/widgets/widget_distance.h   |    3 ++-
 6 files changed, 48 insertions(+), 4 deletions(-)

diff --git a/synfig-studio/src/gui/toolbox.cpp 
b/synfig-studio/src/gui/toolbox.cpp
index 70e4180..bb33229 100644
--- a/synfig-studio/src/gui/toolbox.cpp
+++ b/synfig-studio/src/gui/toolbox.cpp
@@ -328,7 +328,7 @@ Toolbox::Toolbox():
        handle_tools->set_handle_position(Gtk::POS_TOP);
        handle_tools->set_snap_edge(Gtk::POS_TOP);
 
-       Widget_Defaults* widget_defaults(manage(new Widget_Defaults()));
+       widget_defaults=manage(new Widget_Defaults());
        widget_defaults->show();
        Gtk::HandleBox* handle_defaults(manage(new Gtk::HandleBox()));
        handle_defaults->add(*widget_defaults);
@@ -387,6 +387,8 @@ Toolbox::Toolbox():
        add_accel_group(App::ui_manager()->get_accel_group());
 
        
App::signal_present_all().connect(sigc::mem_fun0(*this,&Toolbox::present));
+       signal_key_press_event().connect(sigc::mem_fun(*this, 
&Toolbox::on_key_press_event), false);
+       signal_key_release_event().connect(sigc::mem_fun(*this, 
&Toolbox::on_key_release_event), false);
 }
 
 Toolbox::~Toolbox()
@@ -636,6 +638,23 @@ Toolbox::on_drop_drag_data_received(const 
Glib::RefPtr<Gdk::DragContext>& contex
        context->drag_finish(success, false, time);
 }
 
+bool
+Toolbox::on_key_press_event(GdkEventKey* event)
+{
+       if(widget_defaults->get_widget_bline_width()->is_focus())
+               return 
widget_defaults->get_widget_bline_width()->on_key_press_event(event);
+       return Gtk::Window::on_key_press_event(event);
+}
+
+bool
+Toolbox::on_key_release_event(GdkEventKey* event)
+{
+       if(widget_defaults->get_widget_bline_width()->is_focus())
+               return 
widget_defaults->get_widget_bline_width()->on_key_release_event(event);
+       return Gtk::Window::on_key_release_event(event);
+}
+
+
 void
 Toolbox::dockable_registered(Dockable* x)
 {
diff --git a/synfig-studio/src/gui/toolbox.h b/synfig-studio/src/gui/toolbox.h
index efc7e19..188051f 100644
--- a/synfig-studio/src/gui/toolbox.h
+++ b/synfig-studio/src/gui/toolbox.h
@@ -39,6 +39,7 @@
 #include "smach.h"
 #include <map>
 #include "dialogsettings.h"
+#include "widgets/widget_defaults.h"
 
 /* === M A C R O S ========================================================= */
 
@@ -64,6 +65,7 @@ class Toolbox : public Gtk::Window
 
        Gtk::Button *button_undo;
        Gtk::Button *button_redo;
+       Widget_Defaults *widget_defaults;
 
        Gtk::Table *tool_table;
 
@@ -77,6 +79,8 @@ class Toolbox : public Gtk::Window
 
        void on_recent_files_changed();
        void on_drop_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& 
context, int x, int y, const Gtk::SelectionData& selection_data, guint info, 
guint time);
+       bool on_key_press_event(GdkEventKey* event);
+       bool on_key_release_event(GdkEventKey* event);
 
        void change_state_(const Smach::state_base *state);
 
diff --git a/synfig-studio/src/gui/widgets/widget_defaults.cpp 
b/synfig-studio/src/gui/widgets/widget_defaults.cpp
index 9cbdbed..4de243f 100644
--- a/synfig-studio/src/gui/widgets/widget_defaults.cpp
+++ b/synfig-studio/src/gui/widgets/widget_defaults.cpp
@@ -42,7 +42,6 @@
 #include <synfig/exception.h>
 #include <synfigapp/main.h>
 #include "canvasview.h"
-#include "widgets/widget_distance.h"
 #include "widgets/widget_enum.h"
 
 #include "general.h"
@@ -475,6 +474,13 @@ Widget_Defaults::on_gradient_clicked()
        App::dialog_gradient->present();
 }
 
+Widget_Distance*
+Widget_Defaults::get_widget_bline_width()const
+{
+       return widget_bline_width;
+}
+
+
 /*
 bool
 Widget_Defaults::redraw(GdkEventExpose*bleh)
diff --git a/synfig-studio/src/gui/widgets/widget_defaults.h 
b/synfig-studio/src/gui/widgets/widget_defaults.h
index 7220cfd..bde0a40 100644
--- a/synfig-studio/src/gui/widgets/widget_defaults.h
+++ b/synfig-studio/src/gui/widgets/widget_defaults.h
@@ -31,6 +31,7 @@
 #include <gtkmm/table.h>
 #include <synfig/gradient.h>
 #include "widgets/widget_gradient.h"
+#include "widgets/widget_distance.h"
 #include <gtkmm/tooltip.h>
 
 /* === M A C R O S ========================================================= */
@@ -45,7 +46,6 @@ namespace studio {
 
 class Widget_Brush;
 class Widget_Color;
-class Widget_Distance;
 class Widget_Enum;
 
 class Widget_Defaults : public Gtk::Table
@@ -82,6 +82,7 @@ class Widget_Defaults : public Gtk::Table
 public:
 
        Widget_Defaults();
+       Widget_Distance* get_widget_bline_width()const;
 
        ~Widget_Defaults();
 
diff --git a/synfig-studio/src/gui/widgets/widget_distance.cpp 
b/synfig-studio/src/gui/widgets/widget_distance.cpp
index df53c6f..d99ace9 100644
--- a/synfig-studio/src/gui/widgets/widget_distance.cpp
+++ b/synfig-studio/src/gui/widgets/widget_distance.cpp
@@ -84,6 +84,19 @@ Widget_Distance::on_output()
        return true;
 }
 
+bool
+Widget_Distance::on_key_press_event(GdkEventKey* event)
+{
+       return SpinButton::on_key_press_event(event);
+}
+
+bool
+Widget_Distance::on_key_release_event(GdkEventKey* event)
+{
+       return SpinButton::on_key_release_event(event);
+}
+
+
 void
 Widget_Distance::set_value(const synfig::Distance &data)
 {
diff --git a/synfig-studio/src/gui/widgets/widget_distance.h 
b/synfig-studio/src/gui/widgets/widget_distance.h
index 5319a2d..182b961 100644
--- a/synfig-studio/src/gui/widgets/widget_distance.h
+++ b/synfig-studio/src/gui/widgets/widget_distance.h
@@ -58,7 +58,8 @@ protected:
 
 public:
        //sigc::signal<void> &signal_value_changed() { return 
signal_value_changed_; }
-
+       bool on_key_press_event(GdkEventKey* event);
+       bool on_key_release_event(GdkEventKey* event);
        void set_value(const synfig::Distance &data);
        synfig::Distance get_value()const;
        Widget_Distance();


------------------------------------------------------------------------------
RSA(R) Conference 2012
Mar 27 - Feb 2
Save $400 by Jan. 27
Register now!
http://p.sf.net/sfu/rsa-sfdev2dev2
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to