Move object registry to its own file.

This commit is contained in:
Florian Bruhin 2014-09-24 07:06:45 +02:00
parent b121ceef21
commit 3f02451828
30 changed files with 185 additions and 160 deletions

View File

@ -44,7 +44,7 @@ from qutebrowser.browser import quickmarks, cookies, downloads, cache
from qutebrowser.widgets import mainwindow, console, crash
from qutebrowser.keyinput import modeparsers, keyparser, modeman
from qutebrowser.utils import (log, version, message, utilcmds, readline,
utils, qtutils, urlutils, debug)
utils, qtutils, urlutils, debug, objreg)
from qutebrowser.utils import usertypes as utypes
@ -83,8 +83,8 @@ class Application(QApplication):
'tabs': False,
'main': False,
}
self.meta_registry = utypes.ObjectRegistry()
self.registry = utypes.ObjectRegistry()
self.meta_registry = objreg.ObjectRegistry()
self.registry = objreg.ObjectRegistry()
self.meta_registry['global'] = self.registry
self.registry['app'] = self
self._shutting_down = False
@ -626,7 +626,7 @@ class Application(QApplication):
# exceptions occur.
if pages is None:
pages = []
for tab in utils.get_object('tabbed-browser').widgets():
for tab in objreg.get('tabbed-browser').widgets():
urlstr = tab.cur_url.toString(
QUrl.RemovePassword | QUrl.FullyEncoded)
if urlstr:

View File

@ -38,7 +38,7 @@ from qutebrowser.commands import userscripts, cmdexc, cmdutils
from qutebrowser.config import config
from qutebrowser.browser import hints, quickmarks, webelem
from qutebrowser.utils import (message, editor, usertypes, log, qtutils,
urlutils, utils)
urlutils, objreg)
class CommandDispatcher:
@ -143,7 +143,7 @@ class CommandDispatcher:
def _tab_focus_last(self):
"""Select the tab which was last focused."""
try:
tab = utils.get_object('last-focused-tab')
tab = objreg.get('last-focused-tab')
except KeyError:
raise cmdexc.CommandError("No last focused tab!")
idx = self._tabs.indexOf(tab)

View File

@ -29,7 +29,8 @@ from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply
from qutebrowser.config import config
from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.utils import message, http, usertypes, log, utils, qtutils
from qutebrowser.utils import (message, http, usertypes, log, utils, qtutils,
objreg)
class DownloadItem(QObject):
@ -409,7 +410,7 @@ class DownloadManager(QObject):
q.destroyed.connect(functools.partial(self.questions.remove, q))
self.questions.append(q)
download.cancelled.connect(q.abort)
utils.get_object('message-bridge').ask(q, blocking=False)
objreg.get('message-bridge').ask(q, blocking=False)
@pyqtSlot(DownloadItem)
def on_finished(self, download):

View File

@ -31,7 +31,7 @@ from qutebrowser.config import config
from qutebrowser.keyinput import modeman
from qutebrowser.browser import webelem
from qutebrowser.commands import userscripts, cmdexc
from qutebrowser.utils import usertypes, log, qtutils, message, utils
from qutebrowser.utils import usertypes, log, qtutils, message, objreg
ElemTuple = collections.namedtuple('ElemTuple', 'elem, label')
@ -149,8 +149,8 @@ class HintManager(QObject):
"""
super().__init__(parent)
self._context = None
utils.get_object('mode-manager').left.connect(self.on_mode_left)
utils.get_object('mode-manager').entered.connect(self.on_mode_entered)
objreg.get('mode-manager').left.connect(self.on_mode_left)
objreg.get('mode-manager').entered.connect(self.on_mode_entered)
def _cleanup(self):
"""Clean up after hinting."""
@ -160,7 +160,7 @@ class HintManager(QObject):
except webelem.IsNullError:
pass
text = self.HINT_TEXTS[self._context.target]
utils.get_object('message-bridge').maybe_reset_text(text)
objreg.get('message-bridge').maybe_reset_text(text)
self._context = None
def _hint_strings(self, elems):
@ -271,7 +271,7 @@ class HintManager(QObject):
display = 'none'
rect = elem.geometry()
return self.HINT_CSS.format(
left=rect.x(), top=rect.y(), config=utils.get_object('config'),
left=rect.x(), top=rect.y(), config=objreg.get('config'),
display=display)
def _draw_label(self, elem, string):
@ -542,7 +542,7 @@ class HintManager(QObject):
self._context.frames = webelem.get_child_frames(mainframe)
self._context.args = args
self._init_elements(mainframe, group)
utils.get_object('message-bridge').set_text(self.HINT_TEXTS[target])
objreg.get('message-bridge').set_text(self.HINT_TEXTS[target])
self._connect_frame_signals()
try:
modeman.enter(usertypes.KeyMode.hint, 'HintManager.start')

View File

@ -25,7 +25,7 @@ import argparse
from PyQt5.QtCore import QUrl
from qutebrowser.commands import cmdexc
from qutebrowser.utils import utils
from qutebrowser.utils import utils, objreg
SUPPRESS = argparse.SUPPRESS
@ -54,7 +54,7 @@ class HelpAction(argparse.Action):
"""
def __call__(self, parser, _namespace, _values, _option_string=None):
utils.get_object('tabbed-browser').tabopen(
objreg.get('tabbed-browser').tabopen(
QUrl('qute://help/commands.html#{}'.format(parser.name)))
parser.exit()

View File

@ -25,7 +25,8 @@ import collections
from PyQt5.QtWebKit import QWebSettings
from qutebrowser.commands import cmdexc, argparser
from qutebrowser.utils import log, utils, message, debug, usertypes, docutils
from qutebrowser.utils import (log, utils, message, debug, usertypes, docutils,
objreg)
class Command:
@ -97,7 +98,7 @@ class Command:
Raise:
PrerequisitesError if the command can't be called currently.
"""
curmode = utils.get_object('mode-manager').mode()
curmode = objreg.get('mode-manager').mode()
if self.modes is not None and curmode not in self.modes:
mode_names = '/'.join(mode.name for mode in self.modes)
raise cmdexc.PrerequisitesError(
@ -298,7 +299,7 @@ class Command:
args: The positional argument list. Gets modified directly.
"""
assert param.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD
obj = utils.get_object(self.instance)
obj = objreg.get(self.instance)
args.append(obj)
def _get_count_arg(self, param, args, kwargs):

View File

@ -24,7 +24,7 @@ from PyQt5.QtWebKitWidgets import QWebPage
from qutebrowser.config import config
from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.utils import message, log, utils
from qutebrowser.utils import message, log, utils, objreg
def replace_variables(arglist):
@ -32,7 +32,7 @@ def replace_variables(arglist):
args = []
for arg in arglist:
if arg == '{url}':
url = utils.get_object('tabbed-browser').current_url().toString(
url = objreg.get('tabbed-browser').current_url().toString(
QUrl.FullyEncoded | QUrl.RemovePassword)
args.append(url)
else:

View File

@ -35,18 +35,18 @@ from PyQt5.QtCore import pyqtSignal, QObject
from qutebrowser.utils import log
from qutebrowser.config import configdata, iniparsers, configtypes, textwrapper
from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.utils import message, utils
from qutebrowser.utils import message, objreg
from qutebrowser.utils.usertypes import Completion
def get(*args, **kwargs):
"""Convenience method to call get(...) of the config instance."""
return utils.get_object('config').get(*args, **kwargs)
return objreg.get('config').get(*args, **kwargs)
def section(sect):
"""Get a config section from the global config."""
return utils.get_object('config')[sect]
return objreg.get('config')[sect]
class NoSectionError(configparser.NoSectionError):

View File

@ -25,7 +25,7 @@ import jinja2
from PyQt5.QtGui import QColor
from qutebrowser.config import config
from qutebrowser.utils import log, utils
from qutebrowser.utils import log, objreg
@functools.lru_cache(maxsize=16)
@ -42,7 +42,7 @@ def get_stylesheet(template_str):
fontdict = FontDict(config.section('fonts'))
template = jinja2.Template(template_str)
return template.render(color=colordict, font=fontdict,
config=utils.get_object('config'))
config=objreg.get('config'))
def set_register_stylesheet(obj):
@ -60,8 +60,8 @@ def set_register_stylesheet(obj):
log.style.vdebug("stylesheet for {}: {}".format(
obj.__class__.__name__, qss))
obj.setStyleSheet(qss)
utils.get_object('config').changed.connect(
functools.partial(_update_stylesheet, obj))
objreg.get('config').changed.connect(functools.partial(
_update_stylesheet, obj))
def _update_stylesheet(obj, _section, _option):

View File

@ -26,7 +26,7 @@ import functools
from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QObject
from qutebrowser.config import config
from qutebrowser.utils import usertypes, log, utils
from qutebrowser.utils import usertypes, log, utils, objreg
class BaseKeyParser(QObject):
@ -321,7 +321,7 @@ class BaseKeyParser(QObject):
self._modename = modename
self.bindings = {}
self.special_bindings = {}
keyconfparser = utils.get_object('key-config')
keyconfparser = objreg.get('key-config')
for (key, cmd) in keyconfparser.get_bindings_for(modename).items():
if not cmd:
continue

View File

@ -29,7 +29,7 @@ from PyQt5.QtWidgets import QApplication
from qutebrowser.config import config
from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.utils import usertypes, log, utils
from qutebrowser.utils import usertypes, log, objreg
class ModeLockedError(Exception):
@ -39,18 +39,18 @@ class ModeLockedError(Exception):
def enter(mode, reason=None):
"""Enter the mode 'mode'."""
utils.get_object('mode-manager').enter(mode, reason)
objreg.get('mode-manager').enter(mode, reason)
def leave(mode, reason=None):
"""Leave the mode 'mode'."""
utils.get_object('mode-manager').leave(mode, reason)
objreg.get('mode-manager').leave(mode, reason)
def maybe_enter(mode, reason=None):
"""Convenience method to enter 'mode' without exceptions."""
try:
utils.get_object('mode-manager').enter(mode, reason)
objreg.get('mode-manager').enter(mode, reason)
except ModeLockedError:
pass
@ -58,7 +58,7 @@ def maybe_enter(mode, reason=None):
def maybe_leave(mode, reason=None):
"""Convenience method to leave 'mode' without exceptions."""
try:
utils.get_object('mode-manager').leave(mode, reason)
objreg.get('mode-manager').leave(mode, reason)
except ValueError as e:
# This is rather likely to happen, so we only log to debug log.
log.modes.debug(e)
@ -283,7 +283,7 @@ class ModeManager(QObject):
# we're not interested in it anymore.
return False
if (QApplication.instance().activeWindow() is not
utils.get_object('main-window')):
objreg.get('main-window')):
# Some other window (print dialog, etc.) is focused so we pass
# the event through.
return False

View File

@ -23,7 +23,7 @@ from PyQt5.QtCore import pyqtSlot, Qt
from qutebrowser.config import config, configdata
from qutebrowser.models import basecompletion
from qutebrowser.utils import log, qtutils, utils
from qutebrowser.utils import log, qtutils, objreg
from qutebrowser.commands import cmdutils
@ -155,7 +155,7 @@ class CommandCompletionModel(basecompletion.BaseCompletionModel):
assert cmdutils.cmd_dict
cmdlist = []
for obj in set(cmdutils.cmd_dict.values()):
if obj.hide or (obj.debug and not utils.get_object('args').debug):
if obj.hide or (obj.debug and not objreg.get('args').debug):
pass
else:
cmdlist.append((obj.name, obj.desc))
@ -182,7 +182,7 @@ class HelpCompletionModel(basecompletion.BaseCompletionModel):
assert cmdutils.cmd_dict
cmdlist = []
for obj in set(cmdutils.cmd_dict.values()):
if obj.hide or (obj.debug and not utils.get_object('args').debug):
if obj.hide or (obj.debug and not objreg.get('args').debug):
pass
else:
cmdlist.append((':' + obj.name, obj.desc))

View File

@ -23,7 +23,7 @@ from PyQt5.QtCore import (pyqtSlot, Qt, QVariant, QAbstractListModel,
QModelIndex)
from qutebrowser.config import config
from qutebrowser.utils import usertypes, qtutils, utils
from qutebrowser.utils import usertypes, qtutils, objreg
Role = usertypes.enum('Role', 'item', start=Qt.UserRole, is_int=True)
@ -39,7 +39,7 @@ class DownloadModel(QAbstractListModel):
def __init__(self, parent=None):
super().__init__(parent)
download_manager = utils.get_object('download-manager')
download_manager = objreg.get('download-manager')
download_manager.download_about_to_be_added.connect(
lambda idx: self.beginInsertRows(QModelIndex(), idx, idx))
download_manager.download_added.connect(self.endInsertRows)
@ -81,7 +81,7 @@ class DownloadModel(QAbstractListModel):
if index.parent().isValid() or index.column() != 0:
return QVariant()
item = utils.get_object('download-manager').downloads[index.row()]
item = objreg.get('download-manager').downloads[index.row()]
if role == Qt.DisplayRole:
data = str(item)
elif role == Qt.ForegroundRole:
@ -105,4 +105,4 @@ class DownloadModel(QAbstractListModel):
if parent.isValid():
# We don't have children
return 0
return len(utils.get_object('download-manager').downloads)
return len(objreg.get('download-manager').downloads)

View File

@ -30,7 +30,7 @@ else:
SSL_AVAILABLE = QSslSocket.supportsSsl()
from qutebrowser.config import config
from qutebrowser.utils import message, log, usertypes, utils
from qutebrowser.utils import message, log, usertypes, utils, objreg
from qutebrowser.network import qutescheme, schemehandler
@ -55,10 +55,10 @@ class NetworkManager(QNetworkAccessManager):
# We have a shared cookie jar and cache - we restore their parents so
# we don't take ownership of them.
app = QCoreApplication.instance()
cookie_jar = utils.get_object('cookie-jar')
cookie_jar = objreg.get('cookie-jar')
self.setCookieJar(cookie_jar)
cookie_jar.setParent(app)
cache = utils.get_object('cache')
cache = objreg.get('cache')
self.setCache(cache)
cache.setParent(app)

View File

@ -23,7 +23,7 @@ from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject
from qutebrowser.config import config, configdata
from qutebrowser.commands import cmdutils
from qutebrowser.utils import usertypes, log, utils
from qutebrowser.utils import usertypes, log, objreg
from qutebrowser.models import completion as models
from qutebrowser.models.completionfilter import CompletionFilterModel as CFM
@ -72,7 +72,7 @@ class Completer(QObject):
def _init_setting_completions(self):
"""Initialize setting completion models."""
config_obj = utils.get_object('config')
config_obj = objreg.get('config')
self._models[usertypes.Completion.section] = CFM(
models.SettingSectionCompletionModel(self), self)
self._models[usertypes.Completion.option] = {}

View File

@ -21,7 +21,7 @@
from PyQt5.QtCore import pyqtSignal, QObject, QTimer
from qutebrowser.utils import usertypes, log, utils
from qutebrowser.utils import usertypes, log, objreg
def error(message, immediately=False):
@ -30,7 +30,7 @@ def error(message, immediately=False):
Args:
See MessageBridge.error.
"""
utils.get_object('message-bridge').error(message, immediately)
objreg.get('message-bridge').error(message, immediately)
def info(message, immediately=True):
@ -39,12 +39,12 @@ def info(message, immediately=True):
Args:
See MessageBridge.info.
"""
utils.get_object('message-bridge').info(message, immediately)
objreg.get('message-bridge').info(message, immediately)
def set_cmd_text(txt):
"""Convienience function to Set the statusbar command line to a text."""
utils.get_object('message-bridge').set_cmd_text(txt)
objreg.get('message-bridge').set_cmd_text(txt)
def ask(message, mode, default=None):
@ -62,7 +62,7 @@ def ask(message, mode, default=None):
q.text = message
q.mode = mode
q.default = default
utils.get_object('message-bridge').ask(q, blocking=True)
objreg.get('message-bridge').ask(q, blocking=True)
q.deleteLater()
return q.answer
@ -72,7 +72,7 @@ def alert(message):
q = usertypes.Question()
q.text = message
q.mode = usertypes.PromptMode.alert
utils.get_object('message-bridge').ask(q, blocking=True)
objreg.get('message-bridge').ask(q, blocking=True)
q.deleteLater()
@ -87,7 +87,7 @@ def ask_async(message, mode, handler, default=None):
"""
if not isinstance(mode, usertypes.PromptMode):
raise TypeError("Mode {} is no PromptMode member!".format(mode))
bridge = utils.get_object('message-bridge')
bridge = objreg.get('message-bridge')
q = usertypes.Question(bridge)
q.text = message
q.mode = mode
@ -106,7 +106,7 @@ def confirm_async(message, yes_action, no_action=None, default=None):
no_action: Callable to be called when the user answered no.
default: True/False to set a default value, or None.
"""
bridge = utils.get_object('message-bridge')
bridge = objreg.get('message-bridge')
q = usertypes.Question(bridge)
q.text = message
q.mode = usertypes.PromptMode.yesno

View File

@ -0,0 +1,95 @@
# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
# Copyright 2014 Florian Bruhin (The Compiler) <mail@qutebrowser.org>
#
# This file is part of qutebrowser.
#
# qutebrowser is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# qutebrowser is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>.
"""The global object registry and related utility functions."""
import collections
import functools
from PyQt5.QtCore import QCoreApplication, QObject
_UNSET = object()
class ObjectRegistry(collections.UserDict):
"""A registry of long-living objects in qutebrowser.
Inspired by the eric IDE code (E5Gui/E5Application.py).
"""
def __setitem__(self, name, obj):
"""Register an object in the object registry.
Sets a slot to remove QObjects when they are destroyed.
"""
if isinstance(obj, QObject):
obj.destroyed.connect(functools.partial(self.on_destroyed, name))
super().__setitem__(name, obj)
def on_destroyed(self, name):
"""Remove a destroyed QObject."""
try:
del self[name]
except KeyError:
pass
def dump_objects(self):
"""Dump all objects as a list of strings."""
lines = []
for name, obj in self.data.items():
lines.append("{}: {}".format(name, repr(obj)))
return lines
def get(name, default=_UNSET):
"""Helper function to get an object.
Args:
default: A default to return if the object does not exist.
"""
try:
return QCoreApplication.instance().registry[name]
except KeyError:
if default is not _UNSET:
return default
else:
raise
def register(name, obj, update=False):
"""Helper function to register an object.
Args:
name: The name the object will be registered as.
obj: The object to register.
update: If True, allows to update an already registered object.
"""
registry = QCoreApplication.instance().registry
if not update and name in registry:
raise KeyError("Object '{}' is already registered ({})!".format(
name, repr(registry[name])))
registry[name] = obj
def delete(name):
"""Helper function to unregister an object."""
del QCoreApplication.instance().registry[name]

View File

@ -24,8 +24,6 @@ Module attributes:
"""
import operator
import functools
import collections
import collections.abc
import enum as pyenum
@ -383,34 +381,3 @@ class Timer(QTimer):
super().start(msec)
else:
super().start()
class ObjectRegistry(collections.UserDict):
"""A registry of long-living objects in qutebrowser.
Inspired by the eric IDE code (E5Gui/E5Application.py).
"""
def __setitem__(self, name, obj):
"""Register an object in the object registry.
Sets a slot to remove QObjects when they are destroyed.
"""
if isinstance(obj, QObject):
obj.destroyed.connect(functools.partial(self.on_destroyed, name))
super().__setitem__(name, obj)
def on_destroyed(self, name):
"""Remove a destroyed QObject."""
try:
del self[name]
except KeyError:
pass
def dump_objects(self):
"""Dump all objects as a list of strings."""
lines = []
for name, obj in self.data.items():
lines.append("{}: {}".format(name, repr(obj)))
return lines

View File

@ -25,7 +25,7 @@ import functools
from PyQt5.QtCore import QCoreApplication
from qutebrowser.utils import usertypes, log, utils
from qutebrowser.utils import usertypes, log, objreg
from qutebrowser.commands import runners, cmdexc, cmdutils
from qutebrowser.config import style
@ -96,7 +96,7 @@ def debug_all_objects():
@cmdutils.register(debug=True)
def debug_cache_stats():
"""Print LRU cache stats."""
config_info = utils.get_object('config').get.cache_info()
config_info = objreg.get('config').get.cache_info()
style_info = style.get_stylesheet.cache_info()
log.misc.debug('config: {}'.format(config_info))
log.misc.debug('style: {}'.format(style_info))
@ -105,4 +105,4 @@ def debug_cache_stats():
@cmdutils.register(debug=True)
def debug_console():
"""Show the debugging console."""
utils.get_object('debug-console').show()
objreg.get('debug-console').show()

View File

@ -39,9 +39,6 @@ import qutebrowser
from qutebrowser.utils import qtutils, log
_UNSET = object()
def elide(text, length):
"""Elide text so it uses a maximum of length chars."""
if length < 1:
@ -581,38 +578,3 @@ def is_enum(obj):
return issubclass(obj, enum.Enum)
except TypeError:
return False
def get_object(name, default=_UNSET):
"""Helper function to get an object.
Args:
default: A default to return if the object does not exist.
"""
try:
return QCoreApplication.instance().registry[name]
except KeyError:
if default is not _UNSET:
return default
else:
raise
def register_object(name, obj, update=False):
"""Helper function to register an object.
Args:
name: The name the object will be registered as.
obj: The object to register.
update: If True, allows to update an already registered object.
"""
registry = QCoreApplication.instance().registry
if not update and name in registry:
raise KeyError("Object '{}' is already registered ({})!".format(
name, repr(registry[name])))
registry[name] = obj
def delete_object(name):
"""Helper function to unregister an object."""
del QCoreApplication.instance().registry[name]

View File

@ -29,7 +29,7 @@ from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QItemSelectionModel
from qutebrowser.commands import cmdutils
from qutebrowser.config import config, style
from qutebrowser.widgets import completiondelegate
from qutebrowser.utils import completer, usertypes, qtutils, utils
from qutebrowser.utils import completer, usertypes, qtutils, objreg
class CompletionView(QTreeView):
@ -92,7 +92,7 @@ class CompletionView(QTreeView):
def __init__(self, parent=None):
super().__init__(parent)
completer_obj = completer.Completer(self)
utils.register_object('completer', completer_obj)
objreg.register('completer', completer_obj)
self.enabled = config.get('completion', 'show')
self._delegate = completiondelegate.CompletionItemDelegate(self)
@ -225,7 +225,7 @@ class CompletionView(QTreeView):
def selectionChanged(self, selected, deselected):
"""Extend selectionChanged to call completers selection_changed."""
super().selectionChanged(selected, deselected)
utils.get_object('completer').selection_changed(selected, deselected)
objreg.get('completer').selection_changed(selected, deselected)
def resizeEvent(self, e):
"""Extend resizeEvent to adjust column size."""

View File

@ -29,7 +29,7 @@ from PyQt5.QtCore import Qt, QSize
from PyQt5.QtWidgets import (QDialog, QLabel, QTextEdit, QPushButton,
QVBoxLayout, QHBoxLayout)
from qutebrowser.utils import version, log, utils
from qutebrowser.utils import version, log, utils, objreg
class _CrashDialog(QDialog):
@ -130,7 +130,7 @@ class _CrashDialog(QDialog):
except Exception:
self._crash_info.append(("Version info", traceback.format_exc()))
try:
conf = utils.get_object('config')
conf = objreg.get('config')
self._crash_info.append(("Config", conf.dump_userconfig()))
except Exception:
self._crash_info.append(("Config", traceback.format_exc()))

View File

@ -27,7 +27,7 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout
from qutebrowser.commands import cmdutils
from qutebrowser.config import config
from qutebrowser.utils import message, log, usertypes, qtutils, utils
from qutebrowser.utils import message, log, usertypes, qtutils, objreg
from qutebrowser.widgets import tabbedbrowser, completion, downloads
from qutebrowser.widgets.statusbar import bar
@ -50,7 +50,7 @@ class MainWindow(QWidget):
super().__init__(parent)
self.setWindowTitle('qutebrowser')
state_config = utils.get_object('state-config')
state_config = objreg.get('state-config')
try:
data = state_config['geometry']['mainwindow']
log.init.debug("Restoring mainwindow from {}".format(data))
@ -83,11 +83,11 @@ class MainWindow(QWidget):
self._tabbed_browser = tabbedbrowser.TabbedBrowser()
self._tabbed_browser.title_changed.connect(self.setWindowTitle)
utils.register_object('tabbed-browser', self._tabbed_browser)
objreg.register('tabbed-browser', self._tabbed_browser)
self._vbox.addWidget(self._tabbed_browser)
self._completion = completion.CompletionView(self)
utils.register_object('completion', self._completion)
objreg.register('completion', self._completion)
self.status = bar.StatusBar()
self._vbox.addWidget(self.status)

View File

@ -26,7 +26,7 @@ from PyQt5.QtCore import pyqtSignal, pyqtSlot, pyqtProperty, Qt
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QStackedLayout, QSizePolicy
from qutebrowser.config import config, style
from qutebrowser.utils import usertypes, log, utils
from qutebrowser.utils import usertypes, log, objreg
from qutebrowser.widgets.statusbar import (command, progress, keystring,
percentage, url, prompt)
from qutebrowser.widgets.statusbar import text as textwidget
@ -132,7 +132,7 @@ class StatusBar(QWidget):
self._stack.setContentsMargins(0, 0, 0, 0)
self._cmd = command.Command()
utils.register_object('status-command', self._cmd)
objreg.register('status-command', self._cmd)
self._stack.addWidget(self._cmd)
self.txt = textwidget.Text()
@ -376,7 +376,7 @@ class StatusBar(QWidget):
@pyqtSlot(usertypes.KeyMode)
def on_mode_entered(self, mode):
"""Mark certain modes in the commandline."""
if mode in utils.get_object('mode-manager').passthrough:
if mode in objreg.get('mode-manager').passthrough:
text = "-- {} MODE --".format(mode.name.upper())
self.txt.set_text(self.txt.Text.normal, text)
if mode == usertypes.KeyMode.insert:
@ -385,7 +385,7 @@ class StatusBar(QWidget):
@pyqtSlot(usertypes.KeyMode)
def on_mode_left(self, mode):
"""Clear marked mode."""
if mode in utils.get_object('mode-manager').passthrough:
if mode in objreg.get('mode-manager').passthrough:
self.txt.set_text(self.txt.Text.normal, '')
if mode == usertypes.KeyMode.insert:
self._set_insert_active(False)

View File

@ -26,7 +26,7 @@ from qutebrowser.keyinput import modeman, modeparsers
from qutebrowser.commands import runners, cmdexc, cmdutils
from qutebrowser.widgets import misc
from qutebrowser.models import cmdhistory
from qutebrowser.utils import usertypes, log, utils
from qutebrowser.utils import usertypes, log, objreg
class Command(misc.MinimalLineEditMixin, misc.CommandLineEdit):
@ -74,7 +74,7 @@ class Command(misc.MinimalLineEditMixin, misc.CommandLineEdit):
misc.CommandLineEdit.__init__(self, parent)
misc.MinimalLineEditMixin.__init__(self)
self.cursor_part = 0
self.history.history = utils.get_object('command-history').data
self.history.history = objreg.get('command-history').data
self._empty_item_idx = None
self.textEdited.connect(self.on_text_edited)
self.cursorPositionChanged.connect(self._update_cursor_part)
@ -172,7 +172,7 @@ class Command(misc.MinimalLineEditMixin, misc.CommandLineEdit):
Args:
text: The commandline to set.
"""
url = utils.get_object('tabbed-browser').current_url().toString(
url = objreg.get('tabbed-browser').current_url().toString(
QUrl.FullyEncoded | QUrl.RemovePassword)
# FIXME we currently replace the URL in any place in the arguments,
# rather than just replacing it if it is a dedicated argument. We could

View File

@ -24,7 +24,7 @@ from PyQt5.QtWidgets import QHBoxLayout, QWidget, QLineEdit
from qutebrowser.widgets import misc
from qutebrowser.widgets.statusbar import textbase, prompter
from qutebrowser.utils import utils
from qutebrowser.utils import objreg
class PromptLineEdit(misc.MinimalLineEditMixin, QLineEdit):
@ -66,7 +66,7 @@ class Prompt(QWidget):
self._hbox.addWidget(self.lineedit)
prompter_obj = prompter.Prompter(self)
utils.register_object('prompter', prompter_obj)
objreg.register('prompter', prompter_obj)
def __repr__(self):
return '<{}>'.format(self.__class__.__name__)

View File

@ -26,7 +26,7 @@ from PyQt5.QtWidgets import QLineEdit
from qutebrowser.keyinput import modeman
from qutebrowser.commands import cmdutils
from qutebrowser.utils import usertypes, log, qtutils, utils
from qutebrowser.utils import usertypes, log, qtutils, objreg
PromptContext = collections.namedtuple('PromptContext',
@ -280,7 +280,7 @@ class Prompter:
self.question = question
mode = self._display_question()
question.aborted.connect(lambda: modeman.maybe_leave(mode, 'aborted'))
mode_manager = utils.get_object('mode-manager')
mode_manager = objreg.get('mode-manager')
try:
modeman.enter(mode, 'question asked')
except modeman.ModeLockedError:

View File

@ -31,7 +31,7 @@ from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.keyinput import modeman
from qutebrowser.widgets import tabwidget, webview
from qutebrowser.browser import signalfilter, commands
from qutebrowser.utils import log, message, usertypes, utils, qtutils
from qutebrowser.utils import log, message, usertypes, utils, qtutils, objreg
class TabbedBrowser(tabwidget.TabWidget):
@ -109,7 +109,7 @@ class TabbedBrowser(tabwidget.TabWidget):
self.url_stack = []
self._filter = signalfilter.SignalFilter(self)
dispatcher = commands.CommandDispatcher(self)
utils.register_object('command-dispatcher', dispatcher)
objreg.register('command-dispatcher', dispatcher)
self._now_focused = None
# FIXME adjust this to font size
self.setIconSize(QSize(12, 12))
@ -261,8 +261,8 @@ class TabbedBrowser(tabwidget.TabWidget):
tab))
if tab is self._now_focused:
self._now_focused = None
if tab is utils.get_object('last-focused-tab', None):
utils.delete_object('last-focused-tab')
if tab is objreg.get('last-focused-tab', None):
objreg.delete('last-focused-tab')
if not tab.cur_url.isEmpty():
qtutils.ensure_valid(tab.cur_url)
self.url_stack.append(tab.cur_url)
@ -525,8 +525,7 @@ class TabbedBrowser(tabwidget.TabWidget):
tab.setFocus()
modeman.maybe_leave(usertypes.KeyMode.hint, 'tab changed')
if self._now_focused is not None:
utils.register_object('last-focused-tab', self._now_focused,
update=True)
objreg.register('last-focused-tab', self._now_focused, update=True)
self._now_focused = tab
self.current_tab_changed.emit(tab)
self.title_changed.emit('{} - qutebrowser'.format(self.tabText(idx)))

View File

@ -31,7 +31,7 @@ from PyQt5.QtWidgets import (QTabWidget, QTabBar, QSizePolicy, QCommonStyle,
QStyle, QStylePainter, QStyleOptionTab)
from PyQt5.QtGui import QIcon, QPalette, QColor
from qutebrowser.utils import qtutils, utils
from qutebrowser.utils import qtutils, objreg
from qutebrowser.config import config
@ -209,7 +209,7 @@ class TabBar(QTabBar):
confwidth = str(config.get('tabs', 'width'))
if confwidth.endswith('%'):
perc = int(confwidth.rstrip('%'))
width = utils.get_object('main-window').width() * perc / 100
width = objreg.get('main-window').width() * perc / 100
else:
width = int(confwidth)
size = QSize(max(minimum_size.width(), width), height)

View File

@ -26,7 +26,7 @@ from PyQt5.QtWebKitWidgets import QWebView, QWebPage
from qutebrowser.config import config
from qutebrowser.keyinput import modeman
from qutebrowser.utils import message, log, usertypes, utils, qtutils
from qutebrowser.utils import message, log, usertypes, utils, qtutils, objreg
from qutebrowser.browser import webpage, hints, webelem
from qutebrowser.commands import cmdexc
@ -358,7 +358,7 @@ class WebView(QWebView):
self._set_load_status(LoadStatus.error)
if not config.get('input', 'auto-insert-mode'):
return
cur_mode = utils.get_object('mode-manager').mode()
cur_mode = objreg.get('mode-manager').mode()
if cur_mode == usertypes.KeyMode.insert or not ok:
return
frame = self.page().currentFrame()