mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Implement preference to restore window geometry
This commit is contained in:
parent
95dc6a06ad
commit
d9c1eb14d7
@ -25,7 +25,9 @@ from calibre.gui2.viewer.annotations import (
|
|||||||
from calibre.gui2.viewer.bookmarks import BookmarkManager
|
from calibre.gui2.viewer.bookmarks import BookmarkManager
|
||||||
from calibre.gui2.viewer.convert_book import prepare_book, update_book
|
from calibre.gui2.viewer.convert_book import prepare_book, update_book
|
||||||
from calibre.gui2.viewer.toc import TOC, TOCSearch, TOCView
|
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.date import utcnow
|
||||||
from calibre.utils.ipc.simple_worker import WorkerError
|
from calibre.utils.ipc.simple_worker import WorkerError
|
||||||
from calibre.utils.serialize import json_loads
|
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.update_current_toc_nodes.connect(self.toc.update_current_toc_nodes)
|
||||||
self.web_view.toggle_full_screen.connect(self.toggle_full_screen)
|
self.web_view.toggle_full_screen.connect(self.toggle_full_screen)
|
||||||
self.setCentralWidget(self.web_view)
|
self.setCentralWidget(self.web_view)
|
||||||
state = vprefs['main_window_state']
|
self.restore_state()
|
||||||
if state:
|
|
||||||
self.restoreState(state, self.MAIN_WINDOW_STATE_VERSION)
|
|
||||||
|
|
||||||
# IPC {{{
|
# IPC {{{
|
||||||
def handle_commandline_arg(self, arg):
|
def handle_commandline_arg(self, arg):
|
||||||
@ -252,10 +252,24 @@ class EbookViewer(MainWindow):
|
|||||||
update_book(path, before_stat, {'calibre-book-annotations.json': annots})
|
update_book(path, before_stat, {'calibre-book-annotations.json': annots})
|
||||||
|
|
||||||
def save_state(self):
|
def save_state(self):
|
||||||
vprefs['main_window_state'] = bytearray(self.saveState(self.MAIN_WINDOW_STATE_VERSION))
|
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):
|
def closeEvent(self, ev):
|
||||||
self.save_annotations()
|
try:
|
||||||
self.save_state()
|
self.save_annotations()
|
||||||
|
self.save_state()
|
||||||
|
except Exception:
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
return MainWindow.closeEvent(self, ev)
|
return MainWindow.closeEvent(self, ev)
|
||||||
# }}}
|
# }}}
|
||||||
|
@ -39,6 +39,7 @@ except ImportError:
|
|||||||
vprefs = JSONConfig('viewer-webengine')
|
vprefs = JSONConfig('viewer-webengine')
|
||||||
vprefs.defaults['session_data'] = {}
|
vprefs.defaults['session_data'] = {}
|
||||||
vprefs.defaults['main_window_state'] = None
|
vprefs.defaults['main_window_state'] = None
|
||||||
|
vprefs.defaults['main_window_geometry'] = None
|
||||||
|
|
||||||
|
|
||||||
# Override network access to load data from the book {{{
|
# 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():
|
def create_profile():
|
||||||
ans = getattr(create_profile, 'ans', None)
|
ans = getattr(create_profile, 'ans', None)
|
||||||
if ans is None:
|
if ans is None:
|
||||||
@ -340,6 +347,7 @@ class WebView(RestartingWebEngineView):
|
|||||||
return ans
|
return ans
|
||||||
|
|
||||||
def change_zoom_by(self, steps=1):
|
def change_zoom_by(self, steps=1):
|
||||||
|
# TODO: Add UI for this
|
||||||
ss = vprefs['session_data'].get('zoom_step_size') or 20
|
ss = vprefs['session_data'].get('zoom_step_size') or 20
|
||||||
amt = (ss / 100) * steps
|
amt = (ss / 100) * steps
|
||||||
self._page.setZoomFactor(self._page.zoomFactor() + amt)
|
self._page.setZoomFactor(self._page.zoomFactor() + amt)
|
||||||
|
@ -32,19 +32,15 @@ def create_misc_panel(container):
|
|||||||
container = container.lastChild
|
container = container.lastChild
|
||||||
sd = get_session_data()
|
sd = get_session_data()
|
||||||
settings = sd.get('standalone_misc_settings')
|
settings = sd.get('standalone_misc_settings')
|
||||||
settings
|
|
||||||
|
|
||||||
def cb(name, text):
|
def cb(name, text):
|
||||||
ans = E.input(type='checkbox', name=name)
|
ans = E.input(type='checkbox', name=name)
|
||||||
if jstype(settings[name]) is 'boolean':
|
ans.checked = settings[name] if jstype(settings[name]) is 'boolean' else DEFAULTS[name]
|
||||||
ans.checked = v'!!settings[name]'
|
|
||||||
else:
|
|
||||||
ans.checked = DEFAULTS[name]
|
|
||||||
return E.div(style='margin-top:1ex', E.label(ans, '\xa0' + text))
|
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_window_geometry', _('Remember last used window size and position')))
|
||||||
container.append(cb('remember_last_read', _('Remember current page when quitting')))
|
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(
|
container.appendChild(E.div(
|
||||||
style='margin-top: 1rem', create_button(_('Restore defaults'), action=restore_defaults)
|
style='margin-top: 1rem', create_button(_('Restore defaults'), action=restore_defaults)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user