[solang] Save the layout on exit and load it on startup
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [solang] Save the layout on exit and load it on startup
- Date: Sat, 3 Apr 2010 00:11:32 +0000 (UTC)
commit 4513d18ce0d4ccb53d5166240b3147aa24612af6
Author: Debarshi Ray <rishi gnu org>
Date: Sat Apr 3 01:21:30 2010 +0300
Save the layout on exit and load it on startup
Fixes: https://bugzilla.gnome.org/613518
src/application/main-window.cpp | 92 ++++++++++++++++++++++++++++++++++-----
src/application/main-window.h | 6 +++
2 files changed, 87 insertions(+), 11 deletions(-)
---
diff --git a/src/application/main-window.cpp b/src/application/main-window.cpp
index d2bbe6a..dfd7e76 100644
--- a/src/application/main-window.cpp
+++ b/src/application/main-window.cpp
@@ -385,23 +385,45 @@ MainWindow::init(Application & application) throw()
}
}
- const bool result = gdl_dock_layout_load_from_file(
- GDL_DOCK_LAYOUT(layout_),
- layoutFile_.c_str());
+ load_layout();
- if (true == result)
- {
- gdl_dock_layout_load_layout(GDL_DOCK_LAYOUT(layout_), 0);
- }
- else
- {
- g_warning("%s: File not found", layoutFile_.c_str());
- }
+ present_dock_object(dockObjectsCenter_.front());
}
void
MainWindow::final(Application & application) throw()
{
+ // NB: + Hide all renderers except the browser before saving the
+ // layout. Otherwise, all hell breaks loose when loading
+ // the layout because GDL tries to place the renderers in a
+ // Gtk::Notebook, which leads to spurious switch-page
+ // signals being emitted.
+ // + Do not save the layout if something other than a renderer
+ // has been docked in the centre. In other words, when all
+ // the other renderers have been hidden, the browser should
+ // not be placed inside a Gtk::Notebook. The reason for this
+ // is the same as above.
+
+ if (1 < dockObjectsCenter_.size())
+ {
+ const std::vector<DockObjectPtr>::iterator second
+ = dockObjectsCenter_.begin() + 1;
+
+ std::for_each(second, dockObjectsCenter_.end(), DockHider());
+ dockObjectsCenter_.erase(second, dockObjectsCenter_.end());
+
+ Gtk::Container * const dock_object
+ = Glib::wrap(GTK_CONTAINER(dockObjectsCenter_.front()),
+ false);
+
+ if (0 != dynamic_cast<Gtk::Notebook *>(
+ dock_object->get_parent()))
+ {
+ return;
+ }
+ }
+
+ save_layout();
}
void
@@ -429,6 +451,7 @@ MainWindow::dock_object_center(DockObjectPtr dock_object) throw()
{
gdl_dock_object_dock(dockObjectsCenter_.front(),
dock_object, GDL_DOCK_CENTER, NULL);
+ dockObjectsCenter_.push_back(dock_object);
}
void
@@ -440,7 +463,18 @@ MainWindow::undock_object_center(DockObjectPtr dock_object) throw()
return;
}
+ const std::vector<DockObjectPtr>::iterator iter
+ = std::find(dockObjectsCenter_.begin(),
+ dockObjectsCenter_.end(),
+ dock_object);
+
+ if (dockObjectsCenter_.end() == iter)
+ {
+ return;
+ }
+
gdl_dock_item_hide_item(GDL_DOCK_ITEM(dock_object));
+ dockObjectsCenter_.erase(iter);
}
void
@@ -496,6 +530,29 @@ MainWindow::get_user_layout_file() throw()
}
void
+MainWindow::load_layout() throw()
+{
+ if (false == gdl_dock_layout_load_from_file(
+ GDL_DOCK_LAYOUT(layout_),
+ get_user_layout_file().c_str()))
+ {
+ if (false == gdl_dock_layout_load_from_file(
+ GDL_DOCK_LAYOUT(layout_),
+ layoutFile_.c_str()))
+ {
+ g_warning("gdl_dock_layout_load_from_file: Failed");
+ return;
+ }
+ }
+
+ if (false == gdl_dock_layout_load_layout(GDL_DOCK_LAYOUT(layout_),
+ 0))
+ {
+ g_warning("gdl_dock_layout_load_layout: Failed");
+ }
+}
+
+void
MainWindow::on_about_activate_link_url(
Gtk::AboutDialog & about_dialog,
const Glib::ustring & link) throw()
@@ -823,6 +880,19 @@ MainWindow::on_delete_event(GdkEventAny * event)
}
void
+MainWindow::save_layout() throw()
+{
+ gdl_dock_layout_save_layout(GDL_DOCK_LAYOUT(layout_), 0);
+
+ if (false == gdl_dock_layout_save_to_file(
+ GDL_DOCK_LAYOUT(layout_),
+ get_user_layout_file().c_str()))
+ {
+ g_warning("gdl_dock_layout_save_to_file: Failed");
+ }
+}
+
+void
MainWindow::set_busy(bool busy) throw()
{
WindowPtr window = get_window();
diff --git a/src/application/main-window.h b/src/application/main-window.h
index 4bd8fef..14123ea 100644
--- a/src/application/main-window.h
+++ b/src/application/main-window.h
@@ -86,6 +86,9 @@ class MainWindow :
get_user_layout_file() throw();
void
+ load_layout() throw();
+
+ void
on_about_activate_link_url(Gtk::AboutDialog & about_dialog,
const Glib::ustring & link)
throw();
@@ -118,6 +121,9 @@ class MainWindow :
virtual bool
on_delete_event(GdkEventAny * event);
+ void
+ save_layout() throw();
+
ApplicationPtr application_;
ActionGroupPtr actionGroup_;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]