diff options
| author | Patrick Storz <eduard.braun2@gmx.de> | 2019-02-17 18:33:48 +0000 |
|---|---|---|
| committer | Patrick Storz <eduard.braun2@gmx.de> | 2019-02-20 01:44:47 +0000 |
| commit | 7048d098f15eae7138b7d01c88ad6aebc1afaf26 (patch) | |
| tree | ceacf61accdeea7f64ec3c5cceb5e3a1ed9026a4 /src/object | |
| parent | Fix typo in svg-preview.h and update POTFILES.in (diff) | |
| download | inkscape-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')
| -rw-r--r-- | src/object/sp-namedview.cpp | 39 | ||||
| -rw-r--r-- | src/object/sp-namedview.h | 1 |
2 files changed, 33 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) diff --git a/src/object/sp-namedview.h b/src/object/sp-namedview.h index 0d3b6b8f2..85db55a27 100644 --- a/src/object/sp-namedview.h +++ b/src/object/sp-namedview.h @@ -121,6 +121,7 @@ SPNamedView *sp_document_namedview(SPDocument *document, char const *name); SPNamedView const *sp_document_namedview(SPDocument const *document, char const *name); void sp_namedview_window_from_document(SPDesktop *desktop); +void sp_namedview_zoom_and_view_from_document(SPDesktop *desktop); void sp_namedview_document_from_window(SPDesktop *desktop); void sp_namedview_update_layers_from_document (SPDesktop *desktop); |
