From afb80368d6bf4dc2a55b011c9a14fa4288d2fe84 Mon Sep 17 00:00:00 2001 From: John Smith Date: Fri, 17 Feb 2012 17:05:08 +0900 Subject: Fix for 171579 : Make inkscape remember dialogs window status (bzr r10992) --- src/ui/dialog/dock-behavior.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'src/ui/dialog/dock-behavior.cpp') diff --git a/src/ui/dialog/dock-behavior.cpp b/src/ui/dialog/dock-behavior.cpp index cf4d36cff..9b216e841 100644 --- a/src/ui/dialog/dock-behavior.cpp +++ b/src/ui/dialog/dock-behavior.cpp @@ -46,16 +46,22 @@ DockBehavior::DockBehavior(Dialog &dialog) : Inkscape::Verb::get(dialog._verb_num)->get_image() : ""), static_cast( Inkscape::Preferences::get()->getInt(_dialog._prefs_path + "/state", - UI::Widget::DockItem::DOCKED_STATE))) + UI::Widget::DockItem::DOCKED_STATE)), + static_cast( + Inkscape::Preferences::get()->getInt(_dialog._prefs_path + "/placement", + UI::Widget::DockItem::TOP))) + { // Connect signals _signal_hide_connection = signal_hide().connect(sigc::mem_fun(*this, &Inkscape::UI::Dialog::Behavior::DockBehavior::_onHide)); + signal_show().connect(sigc::mem_fun(*this, &Inkscape::UI::Dialog::Behavior::DockBehavior::_onShow)); _dock_item.signal_state_changed().connect(sigc::mem_fun(*this, &Inkscape::UI::Dialog::Behavior::DockBehavior::_onStateChanged)); if (_dock_item.getState() == Widget::DockItem::FLOATING_STATE) { if (Gtk::Window *floating_win = _dock_item.getWindow()) sp_transientize(GTK_WIDGET(floating_win->gobj())); } + } DockBehavior::~DockBehavior() @@ -178,8 +184,12 @@ DockBehavior::_onHide() { _dialog.save_geometry(); _dialog._user_hidden = true; - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setInt(_dialog._prefs_path + "/state", _dock_item.getPrevState()); +} + +void +DockBehavior::_onShow() +{ + _dialog._user_hidden = false; } void @@ -187,8 +197,6 @@ DockBehavior::_onStateChanged(Widget::DockItem::State /*prev_state*/, Widget::DockItem::State new_state) { // TODO probably need to avoid window calls unless the state is different. Check. - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setInt(_dialog._prefs_path + "/state", new_state); if (new_state == Widget::DockItem::FLOATING_STATE) { if (Gtk::Window *floating_win = _dock_item.getWindow()) @@ -212,8 +220,9 @@ DockBehavior::onShowF12() void DockBehavior::onShutdown() { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setInt(_dialog._prefs_path + "/state", _dock_item.getPrevState()); + int visible = _dock_item.isIconified() || !_dialog._user_hidden; + int status = (_dock_item.getState() == Inkscape::UI::Widget::DockItem::UNATTACHED) ? _dock_item.getPrevState() : _dock_item.getState(); + _dialog.save_status( visible, status, _dock_item.getPlacement() ); } void -- cgit v1.2.3