← easystroke

Make expander behave nicely

2d2aabe4c89bf45cd90329b99c42a4c774c00aac · Thomas Jaeger · Sep 11, 2012 03:14

+19 −1 · 3 files changed

  • actions.cc +15 −0
  • actions.h +3 −0
  • gui.glade +1 −1
diff --git a/actions.cc b/actions.cc
index 2c9cf1b..b73623c 100644
--- a/actions.cc
+++ b/actions.cc
@@ -185,6 +185,7 @@ const char *type_info_to_name(const std::type_info *info) {
 
 Actions::Actions() :
 	apps_view(0),
+	vpaned_position(-1),
 	editing_new(false),
 	editing(false),
 	action_list(actions.get_root())
@@ -205,6 +206,7 @@ Actions::Actions() :
 	widgets->get_widget("button_reset_actions", button_reset_actions);
 	widgets->get_widget("check_show_deleted", check_show_deleted);
 	widgets->get_widget("expander_apps", expander_apps);
+	widgets->get_widget("vpaned_apps", vpaned_apps);
 	button_record->signal_clicked().connect(sigc::mem_fun(*this, &Actions::on_button_record));
 	button_delete->signal_clicked().connect(sigc::mem_fun(*this, &Actions::on_button_delete));
 	button_add->signal_clicked().connect(sigc::mem_fun(*this, &Actions::on_button_new));
@@ -276,6 +278,7 @@ Actions::Actions() :
 
 	check_show_deleted->signal_toggled().connect(sigc::mem_fun(*this, &Actions::update_action_list));
 	expander_apps->property_expanded().signal_changed().connect(sigc::mem_fun(*this, &Actions::on_apps_selection_changed));
+	expander_apps->property_expanded().signal_changed().connect(sigc::mem_fun(*this, &Actions::on_expanded));
 	apps_view->get_selection()->signal_changed().connect(sigc::mem_fun(*this, &Actions::on_apps_selection_changed));
 	apps_model = AppsStore::create(ca, this);
 
@@ -678,6 +681,18 @@ void Actions::on_group_name_edited(const Glib::ustring& path, const Glib::ustrin
 	update_actions();
 }
 
+void Actions::on_expanded() {
+	if (expander_apps->get_expanded()) {
+		vpaned_apps->set_position(vpaned_position);
+	} else {
+		if(vpaned_apps->property_position_set().get_value())
+			vpaned_position = vpaned_apps->get_position();
+		else
+			vpaned_position = -1;
+		vpaned_apps->property_position_set().set_value(false);
+	}
+}
+
 void Actions::on_apps_selection_changed() {
 	ActionListDiff *new_action_list = actions.get_root();
 	if (expander_apps->property_expanded().get_value()) {
diff --git a/actions.h b/actions.h
index e164c11..0d15c35 100644
--- a/actions.h
+++ b/actions.h
@@ -65,6 +65,7 @@ private:
 	void on_add_group();
 	void on_group_name_edited(const Glib::ustring& path, const Glib::ustring& new_text);
 	void on_apps_selection_changed();
+	void on_expanded();
 	void load_app_list(const Gtk::TreeNodeChildren &ch, ActionListDiff *actions);
 	void on_cell_data_apps(Gtk::CellRenderer* cell, const Gtk::TreeModel::iterator& iter);
 	void update_action_list();
@@ -139,7 +140,9 @@ private:
 	Gtk::Button *button_record, *button_delete, *button_remove_app, *button_reset_actions;
 	Gtk::CheckButton *check_show_deleted;
 	Gtk::Expander *expander_apps;
+	Gtk::VPaned *vpaned_apps;
 
+	int vpaned_position;
 	bool editing_new;
 	bool editing;
 
diff --git a/gui.glade b/gui.glade
index f908b5a..5f09cca 100644
--- a/gui.glade
+++ b/gui.glade
@@ -570,7 +570,7 @@ Van Diep Duong (Vietnamese)</property>
             <property name="border_width">6</property>
             <property name="spacing">6</property>
             <child>
-              <object class="GtkVPaned" id="vpaned1">
+              <object class="GtkVPaned" id="vpaned_apps">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <child>