summaryrefslogtreecommitdiffstats
path: root/src/object/sp-namedview.cpp
diff options
context:
space:
mode:
authorPatrick Storz <eduard.braun2@gmx.de>2019-02-17 18:33:48 +0000
committerPatrick Storz <eduard.braun2@gmx.de>2019-02-20 01:44:47 +0000
commit7048d098f15eae7138b7d01c88ad6aebc1afaf26 (patch)
treeceacf61accdeea7f64ec3c5cceb5e3a1ed9026a4 /src/object/sp-namedview.cpp
parentFix typo in svg-preview.h and update POTFILES.in (diff)
downloadinkscape-7048d098f15eae7138b7d01c88ad6aebc1afaf26.tar.gz
inkscape-7048d098f15eae7138b7d01c88ad6aebc1afaf26.zip
Rescue code for restoring last used window geometry
It was accidentally dropped in 8b1840f9507f10911f63fc00b9885354ead99d53 Also show window *after* setting position/size. This gives the window manager the chance to move an off-screen window back into the visible desktop bounds (e.g. after a monitor was disconnected).
Diffstat (limited to 'src/object/sp-namedview.cpp')
-rw-r--r--src/object/sp-namedview.cpp39
1 files changed, 32 insertions, 7 deletions
diff --git a/src/object/sp-namedview.cpp b/src/object/sp-namedview.cpp
index cc1e185a8..e4ab351d1 100644
--- a/src/object/sp-namedview.cpp
+++ b/src/object/sp-namedview.cpp
@@ -750,9 +750,28 @@ void sp_namedview_window_from_document(SPDesktop *desktop)
// restore window size and position stored with the document
Gtk::Window *win = desktop->getToplevel();
g_assert(win);
+
if (window_geometry == PREFS_WINDOW_GEOMETRY_LAST) {
- // do nothing, as we already have code for that in interface.cpp
- // TODO: Probably should not do similar things in two places
+ gint pw = prefs->getInt("/desktop/geometry/width", -1);
+ gint ph = prefs->getInt("/desktop/geometry/height", -1);
+ gint px = prefs->getInt("/desktop/geometry/x", -1);
+ gint py = prefs->getInt("/desktop/geometry/y", -1);
+ gint full = prefs->getBool("/desktop/geometry/fullscreen");
+ gint maxed = prefs->getBool("/desktop/geometry/maximized");
+ if (pw>0 && ph>0) {
+
+ Gdk::Rectangle monitor_geometry = Inkscape::UI::get_monitor_geometry_at_point(px, py);
+ pw = std::min(pw, monitor_geometry.get_width());
+ ph = std::min(ph, monitor_geometry.get_height());
+ desktop->setWindowSize(pw, ph);
+ desktop->setWindowPosition(Geom::Point(px, py));
+ }
+ if (maxed) {
+ win->maximize();
+ }
+ if (full) {
+ win->fullscreen();
+ }
} else if ((window_geometry == PREFS_WINDOW_GEOMETRY_FILE && nv->window_maximized) ||
(new_document && (default_size == PREFS_WINDOW_SIZE_MAXIMIZED))) {
win->maximize();
@@ -812,7 +831,17 @@ void sp_namedview_window_from_document(SPDesktop *desktop)
// Cancel any history of transforms up to this point (must be before call to zoom).
desktop->clear_transform_history();
- // restore zoom and view
+ if (show_dialogs) {
+ desktop->show_dialogs();
+ }
+}
+
+/*
+ * Restores zoom and view from the document settings
+ */
+void sp_namedview_zoom_and_view_from_document(SPDesktop *desktop)
+{
+ SPNamedView *nv = desktop->namedview;
if (nv->zoom != 0 && nv->zoom != HUGE_VAL && !IS_NAN(nv->zoom)
&& nv->cx != HUGE_VAL && !IS_NAN(nv->cx)
&& nv->cy != HUGE_VAL && !IS_NAN(nv->cy)) {
@@ -820,10 +849,6 @@ void sp_namedview_window_from_document(SPDesktop *desktop)
} else if (desktop->getDocument()) { // document without saved zoom, zoom to its page
desktop->zoom_page();
}
-
- if (show_dialogs) {
- desktop->show_dialogs();
- }
}
void SPNamedView::writeNewGrid(SPDocument *document,int gridtype)