Save/restore window geometry.
This commit is contained in:
parent
96d01f8755
commit
27d354633c
@ -22,6 +22,7 @@ import sys
|
||||
import logging
|
||||
import functools
|
||||
import subprocess
|
||||
import configparser
|
||||
from signal import signal, SIGINT
|
||||
from argparse import ArgumentParser
|
||||
|
||||
@ -316,8 +317,15 @@ class QuteBrowser(QApplication):
|
||||
return
|
||||
self.shutting_down = True
|
||||
logging.debug("Shutting down... (do_quit={})".format(do_quit))
|
||||
if config.config is not None:
|
||||
try:
|
||||
config.config.save()
|
||||
except AttributeError:
|
||||
logging.exception("Could not save config.")
|
||||
try:
|
||||
self._save_geometry()
|
||||
config.state.save()
|
||||
except AttributeError:
|
||||
logging.exception("Could not save window geometry.")
|
||||
try:
|
||||
if do_quit:
|
||||
self.mainwindow.tabs.shutdown_complete.connect(self.quit)
|
||||
@ -330,6 +338,18 @@ class QuteBrowser(QApplication):
|
||||
if do_quit:
|
||||
self.quit()
|
||||
|
||||
def _save_geometry(self):
|
||||
"""Save the window geometry to the state config."""
|
||||
rect = self.mainwindow.geometry()
|
||||
try:
|
||||
config.state.add_section('mainwindow')
|
||||
except configparser.DuplicateSectionError:
|
||||
pass
|
||||
config.state['mainwindow']['x'] = str(rect.x())
|
||||
config.state['mainwindow']['y'] = str(rect.y())
|
||||
config.state['mainwindow']['w'] = str(rect.width())
|
||||
config.state['mainwindow']['h'] = str(rect.height())
|
||||
|
||||
@pyqtSlot(tuple)
|
||||
def cmd_handler(self, tpl):
|
||||
"""Handle commands and delegate the specific actions.
|
||||
|
@ -27,19 +27,23 @@ import os
|
||||
import io
|
||||
import os.path
|
||||
import logging
|
||||
import configparser
|
||||
from configparser import ConfigParser, ExtendedInterpolation
|
||||
|
||||
from qutebrowser.utils.misc import read_file
|
||||
|
||||
config = None
|
||||
state = None
|
||||
colordict = {}
|
||||
fontdict = {}
|
||||
|
||||
|
||||
def init(confdir):
|
||||
"""Initialize the global objects based on the config in configdir."""
|
||||
global config, colordict, fontdict
|
||||
config = Config(confdir)
|
||||
global config, state, colordict, fontdict
|
||||
logging.debug("Config init, confdir {}".format(confdir))
|
||||
config = Config(confdir, 'qutebrowser.conf', read_file('qutebrowser.conf'))
|
||||
state = Config(confdir, 'state', always_save=True)
|
||||
try:
|
||||
colordict = ColorDict(config['colors'])
|
||||
except KeyError:
|
||||
@ -126,31 +130,37 @@ class FontDict(dict):
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
|
||||
class Config(ConfigParser):
|
||||
|
||||
"""Our own ConfigParser subclass."""
|
||||
|
||||
configdir = None
|
||||
FNAME = 'config'
|
||||
default_cp = None
|
||||
config_loaded = False
|
||||
|
||||
def __init__(self, configdir):
|
||||
def __init__(self, configdir, fname, default_config=None,
|
||||
always_save=False):
|
||||
"""Config constructor.
|
||||
|
||||
configdir -- directory to store the config in.
|
||||
fname -- Filename of the config file.
|
||||
default_config -- Default config as string.
|
||||
always_save -- Whether to always save the config, even when it wasn't
|
||||
loaded.
|
||||
|
||||
"""
|
||||
super().__init__(interpolation=ExtendedInterpolation())
|
||||
self.always_save = always_save
|
||||
self.configdir = configdir
|
||||
self.default_cp = ConfigParser(interpolation=ExtendedInterpolation())
|
||||
self.default_cp.optionxform = lambda opt: opt # be case-insensitive
|
||||
self.default_cp.read_string(read_file('qutebrowser.conf'))
|
||||
if default_config is not None:
|
||||
self.default_cp.read_string(default_config)
|
||||
if not self.configdir:
|
||||
return
|
||||
self.optionxform = lambda opt: opt # be case-insensitive
|
||||
self.configdir = configdir
|
||||
self.configfile = os.path.join(self.configdir, self.FNAME)
|
||||
self.configfile = os.path.join(self.configdir, fname)
|
||||
if not os.path.isfile(self.configfile):
|
||||
return
|
||||
logging.debug("Reading config from {}".format(self.configfile))
|
||||
|
@ -17,12 +17,13 @@
|
||||
|
||||
"""The main window of QuteBrowser."""
|
||||
|
||||
from PyQt5.QtCore import QRect
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout
|
||||
|
||||
from qutebrowser.widgets.statusbar import StatusBar
|
||||
from qutebrowser.widgets.browser import TabbedBrowser
|
||||
from qutebrowser.widgets.completion import CompletionView
|
||||
|
||||
import qutebrowser.utils.config as config
|
||||
|
||||
class MainWindow(QWidget):
|
||||
|
||||
@ -41,8 +42,20 @@ class MainWindow(QWidget):
|
||||
super().__init__()
|
||||
|
||||
self.setWindowTitle('qutebrowser')
|
||||
# FIXME maybe store window position/size on exit
|
||||
self.resize(800, 600)
|
||||
try:
|
||||
x = int(config.state['mainwindow']['x'])
|
||||
y = int(config.state['mainwindow']['y'])
|
||||
w = int(config.state['mainwindow']['w'])
|
||||
h = int(config.state['mainwindow']['h'])
|
||||
except KeyError:
|
||||
rect = QRect()
|
||||
else:
|
||||
rect = QRect(x, y, w, h)
|
||||
if not rect.isValid():
|
||||
rect = QRect(50, 50, 800, 600)
|
||||
# FIXME there is no setFrameGeometry, but this seems to do the wrong
|
||||
# thing.
|
||||
self.setGeometry(rect)
|
||||
|
||||
self.vbox = QVBoxLayout(self)
|
||||
self.vbox.setContentsMargins(0, 0, 0, 0)
|
||||
|
Loading…
Reference in New Issue
Block a user