Implement preference to restore window geometry

This commit is contained in:
Kovid Goyal 2019-08-13 19:51:22 +05:30
parent 95dc6a06ad
commit d9c1eb14d7
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 31 additions and 13 deletions

View File

@ -25,7 +25,9 @@ from calibre.gui2.viewer.annotations import (
from calibre.gui2.viewer.bookmarks import BookmarkManager
from calibre.gui2.viewer.convert_book import prepare_book, update_book
from calibre.gui2.viewer.toc import TOC, TOCSearch, TOCView
from calibre.gui2.viewer.web_view import WebView, set_book_path, vprefs
from calibre.gui2.viewer.web_view import (
WebView, get_session_pref, set_book_path, vprefs
)
from calibre.utils.date import utcnow
from calibre.utils.ipc.simple_worker import WorkerError
from calibre.utils.serialize import json_loads
@ -89,9 +91,7 @@ class EbookViewer(MainWindow):
self.web_view.update_current_toc_nodes.connect(self.toc.update_current_toc_nodes)
self.web_view.toggle_full_screen.connect(self.toggle_full_screen)
self.setCentralWidget(self.web_view)
state = vprefs['main_window_state']
if state:
self.restoreState(state, self.MAIN_WINDOW_STATE_VERSION)
self.restore_state()
# IPC {{{
def handle_commandline_arg(self, arg):
@ -252,10 +252,24 @@ class EbookViewer(MainWindow):
update_book(path, before_stat, {'calibre-book-annotations.json': annots})
def save_state(self):
with vprefs:
vprefs['main_window_state'] = bytearray(self.saveState(self.MAIN_WINDOW_STATE_VERSION))
vprefs['main_window_geometry'] = bytearray(self.saveGeometry())
def restore_state(self):
state = vprefs['main_window_state']
geom = vprefs['main_window_geometry']
if geom and get_session_pref('remember_window_geometry'):
self.restoreGeometry(geom)
if state:
self.restoreState(state, self.MAIN_WINDOW_STATE_VERSION)
def closeEvent(self, ev):
try:
self.save_annotations()
self.save_state()
except Exception:
import traceback
traceback.print_exc()
return MainWindow.closeEvent(self, ev)
# }}}

View File

@ -39,6 +39,7 @@ except ImportError:
vprefs = JSONConfig('viewer-webengine')
vprefs.defaults['session_data'] = {}
vprefs.defaults['main_window_state'] = None
vprefs.defaults['main_window_geometry'] = None
# Override network access to load data from the book {{{
@ -147,6 +148,12 @@ class UrlSchemeHandler(QWebEngineUrlSchemeHandler):
# }}}
def get_session_pref(name, default=None, group='standalone_misc_settings'):
sd = vprefs['session_data']
g = sd.get(group, {})
return g.get(name, default)
def create_profile():
ans = getattr(create_profile, 'ans', None)
if ans is None:
@ -340,6 +347,7 @@ class WebView(RestartingWebEngineView):
return ans
def change_zoom_by(self, steps=1):
# TODO: Add UI for this
ss = vprefs['session_data'].get('zoom_step_size') or 20
amt = (ss / 100) * steps
self._page.setZoomFactor(self._page.zoomFactor() + amt)

View File

@ -32,19 +32,15 @@ def create_misc_panel(container):
container = container.lastChild
sd = get_session_data()
settings = sd.get('standalone_misc_settings')
settings
def cb(name, text):
ans = E.input(type='checkbox', name=name)
if jstype(settings[name]) is 'boolean':
ans.checked = v'!!settings[name]'
else:
ans.checked = DEFAULTS[name]
ans.checked = settings[name] if jstype(settings[name]) is 'boolean' else DEFAULTS[name]
return E.div(style='margin-top:1ex', E.label(ans, '\xa0' + text))
container.append(cb('remember_window_geometry', _('Remember last used window size and position')))
container.append(cb('remember_last_read', _('Remember current page when quitting')))
container.append(cb('save_annotations_in_ebook', _('Keep a copy of annotations/bookmarks inside the e-book file, for easy sharing')))
container.append(cb('save_annotations_in_ebook', _('Keep a copy of annotations/bookmarks in the e-book file, for easy sharing')))
container.appendChild(E.div(
style='margin-top: 1rem', create_button(_('Restore defaults'), action=restore_defaults)