summaryrefslogtreecommitdiffstats
path: root/src/object/sp-namedview.cpp
diff options
context:
space:
mode:
authorMartin Owens <doctormo@gmail.com>2019-03-06 19:54:07 +0000
committerMartin Owens <doctormo@gmail.com>2019-03-06 19:54:07 +0000
commit09c89e9b6a80f4cbfe367c2870e6d9b2f57c5a8e (patch)
treedd6d6f0252411c1658355f97da64b7c445219165 /src/object/sp-namedview.cpp
parentfix ci: appimage remove gtk2 themes (diff)
parentFix query for monitor dimensions (diff)
downloadinkscape-09c89e9b6a80f4cbfe367c2870e6d9b2f57c5a8e.tar.gz
inkscape-09c89e9b6a80f4cbfe367c2870e6d9b2f57c5a8e.zip
Merge in Rescue code for restoring last used window geometry MR !534
Diffstat (limited to 'src/object/sp-namedview.cpp')
-rw-r--r--src/object/sp-namedview.cpp43
1 files changed, 32 insertions, 11 deletions
diff --git a/src/object/sp-namedview.cpp b/src/object/sp-namedview.cpp
index f3429158e..367df0876 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();
@@ -800,11 +819,7 @@ void sp_namedview_window_from_document(SPDesktop *desktop)
#endif
desktop->setWindowSize(w, h);
if (move_to_screen) {
- // Hiding window will close app if it's last window. If we really need to hide it
- // here, we need to up the reference count of the application before hiding, and lower after showing.
- // win->hide();
desktop->setWindowPosition(Geom::Point(nv->window_x, nv->window_y));
- // win->show();
}
}
}
@@ -812,7 +827,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 +845,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)