summaryrefslogtreecommitdiff
path: root/qutebrowser/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/app.py')
-rw-r--r--qutebrowser/app.py121
1 files changed, 62 insertions, 59 deletions
diff --git a/qutebrowser/app.py b/qutebrowser/app.py
index f74617133..db7eea608 100644
--- a/qutebrowser/app.py
+++ b/qutebrowser/app.py
@@ -46,9 +46,10 @@ import datetime
import argparse
from typing import Iterable, Optional
-from PyQt5.QtWidgets import QApplication, QWidget
-from PyQt5.QtGui import QDesktopServices, QPixmap, QIcon
-from PyQt5.QtCore import pyqtSlot, QUrl, QObject, QEvent, pyqtSignal, Qt
+from qutebrowser.qt import machinery
+from qutebrowser.qt.widgets import QApplication, QWidget
+from qutebrowser.qt.gui import QDesktopServices, QPixmap, QIcon
+from qutebrowser.qt.core import pyqtSlot, QUrl, QObject, QEvent, pyqtSignal, Qt
import qutebrowser
from qutebrowser.commands import runners
@@ -149,7 +150,6 @@ def init(*, args: argparse.Namespace) -> None:
quitter.instance.shutting_down.connect(QApplication.closeAllWindows)
_init_icon()
- _init_pulseaudio()
loader.init()
loader.load_components()
@@ -195,27 +195,12 @@ def _init_icon():
objects.qapp.setWindowIcon(icon)
-def _init_pulseaudio():
- """Set properties for PulseAudio.
-
- WORKAROUND for https://bugreports.qt.io/browse/QTBUG-85363
-
- Affected Qt versions:
- - Older than 5.11 (which is unsupported)
- - 5.14.0 to 5.15.0 (inclusive)
-
- However, we set this on all versions so that qutebrowser's icon gets picked
- up as well.
- """
- for prop in ['application.name', 'application.icon_name']:
- os.environ['PULSE_PROP_OVERRIDE_' + prop] = 'qutebrowser'
-
-
def _process_args(args):
"""Open startpage etc. and process commandline args."""
if not args.override_restore:
sessions.load_default(args.session)
+ new_window = None
if not sessions.session_manager.did_load:
log.init.debug("Initializing main window...")
private = args.target == 'private-window'
@@ -226,15 +211,17 @@ def _process_args(args):
error.handle_fatal_exc(err, 'Cannot start in private mode',
no_err_windows=args.no_err_windows)
sys.exit(usertypes.Exit.err_init)
- window = mainwindow.MainWindow(private=private)
- if not args.nowindow:
- window.show()
- objects.qapp.setActiveWindow(window)
+
+ new_window = mainwindow.MainWindow(private=private)
process_pos_args(args.command)
_open_startpage()
_open_special_pages(args)
+ if new_window is not None and not args.nowindow:
+ new_window.show()
+ objects.qapp.setActiveWindow(new_window)
+
delta = datetime.datetime.now() - earlyinit.START_TIME
log.init.debug("Init finished after {}s".format(delta.total_seconds()))
@@ -258,26 +245,30 @@ def process_pos_args(args, via_ipc=False, cwd=None, target_arg=None):
if command_target in {'window', 'private-window'}:
command_target = 'tab-silent'
- win_id: Optional[int] = None
+ window: Optional[mainwindow.MainWindow] = None
if via_ipc and (not args or args == ['']):
- win_id = mainwindow.get_window(via_ipc=via_ipc,
- target=new_window_target)
- _open_startpage(win_id)
+ window = mainwindow.get_window(via_ipc=via_ipc, target=new_window_target)
+ _open_startpage(window)
+ window.show()
+ window.maybe_raise()
return
for cmd in args:
if cmd.startswith(':'):
- if win_id is None:
- win_id = mainwindow.get_window(via_ipc=via_ipc,
- target=command_target)
+ if window is None:
+ window = mainwindow.get_window(via_ipc=via_ipc, target=command_target)
+ # FIXME preserving old behavior, but we probably shouldn't be
+ # doing this...
+ # See https://github.com/qutebrowser/qutebrowser/issues/5094
+ window.maybe_raise()
+
log.init.debug("Startup cmd {!r}".format(cmd))
- commandrunner = runners.CommandRunner(win_id)
+ commandrunner = runners.CommandRunner(window.win_id)
commandrunner.run_safely(cmd[1:])
elif not cmd:
log.init.debug("Empty argument")
- win_id = mainwindow.get_window(via_ipc=via_ipc,
- target=new_window_target)
+ window = mainwindow.get_window(via_ipc=via_ipc, target=new_window_target)
else:
if via_ipc and target_arg and target_arg != 'auto':
open_target = target_arg
@@ -291,7 +282,7 @@ def process_pos_args(args, via_ipc=False, cwd=None, target_arg=None):
message.error("Error in startup argument '{}': {}".format(
cmd, e))
else:
- win_id = open_url(url, target=open_target, via_ipc=via_ipc)
+ window = open_url(url, target=open_target, via_ipc=via_ipc)
def open_url(url, target=None, no_raise=False, via_ipc=True):
@@ -304,39 +295,37 @@ def open_url(url, target=None, no_raise=False, via_ipc=True):
via_ipc: Whether the arguments were transmitted over IPC.
Return:
- ID of a window that was used to open URL
+ The MainWindow of a window that was used to open the URL.
"""
target = target or config.val.new_instance_open_target
background = target in {'tab-bg', 'tab-bg-silent'}
- win_id = mainwindow.get_window(via_ipc=via_ipc, target=target,
- no_raise=no_raise)
- tabbed_browser = objreg.get('tabbed-browser', scope='window',
- window=win_id)
+ window = mainwindow.get_window(via_ipc=via_ipc, target=target, no_raise=no_raise)
log.init.debug("About to open URL: {}".format(url.toDisplayString()))
- tabbed_browser.tabopen(url, background=background, related=False)
- return win_id
+ window.tabbed_browser.tabopen(url, background=background, related=False)
+ window.show()
+ window.maybe_raise()
+ return window
-def _open_startpage(win_id=None):
+def _open_startpage(window: Optional[mainwindow.MainWindow] = None) -> None:
"""Open startpage.
The startpage is never opened if the given windows are not empty.
Args:
- win_id: If None, open startpage in all empty windows.
+ window: If None, open startpage in all empty windows.
If set, open the startpage in the given window.
"""
- if win_id is not None:
- window_ids: Iterable[int] = [win_id]
+ if window is not None:
+ windows: Iterable[mainwindow.MainWindow] = [window]
else:
- window_ids = objreg.window_registry
- for cur_win_id in list(window_ids): # Copying as the dict could change
- tabbed_browser = objreg.get('tabbed-browser', scope='window',
- window=cur_win_id)
- if tabbed_browser.widget.count() == 0:
+ windows = objreg.window_registry.values()
+
+ for cur_window in list(windows): # Copying as the dict could change
+ if cur_window.tabbed_browser.widget.count() == 0:
log.init.debug("Opening start pages")
for url in config.val.url.start_pages:
- tabbed_browser.tabopen(url)
+ cur_window.tabbed_browser.tabopen(url)
def _open_special_pages(args):
@@ -369,8 +358,17 @@ def _open_special_pages(args):
'qute://warning/webkit'),
('session-warning-shown',
- qtutils.version_check('5.15', compiled=False),
+ True,
'qute://warning/sessions'),
+
+ ('sandboxing-warning-shown',
+ (
+ hasattr(sys, "frozen") and
+ utils.is_mac and
+ machinery.IS_QT6 and
+ os.environ.get("QTWEBENGINE_DISABLE_SANDBOX") == "1"
+ ),
+ 'qute://warning/sandboxing'),
]
if 'quickstart-done' not in general_sect:
@@ -432,10 +430,10 @@ def on_focus_changed(_old, new):
def open_desktopservices_url(url):
"""Handler to open a URL via QDesktopServices."""
target = config.val.new_instance_open_target
- win_id = mainwindow.get_window(via_ipc=True, target=target)
- tabbed_browser = objreg.get('tabbed-browser', scope='window',
- window=win_id)
- tabbed_browser.tabopen(url)
+ window = mainwindow.get_window(via_ipc=True, target=target)
+ window.tabbed_browser.tabopen(url)
+ window.show()
+ window.maybe_raise()
# This is effectively a @config.change_filter
@@ -563,7 +561,12 @@ class Application(QApplication):
self.launch_time = datetime.datetime.now()
self.focusObjectChanged.connect(self.on_focus_object_changed)
- self.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
+
+ try:
+ self.setAttribute(Qt.ApplicationAttribute.AA_UseHighDpiPixmaps, True)
+ except AttributeError:
+ # default and removed in Qt 6
+ pass
self.new_window.connect(self._on_new_window)
@@ -582,7 +585,7 @@ class Application(QApplication):
def event(self, e):
"""Handle macOS FileOpen events."""
- if e.type() != QEvent.FileOpen:
+ if e.type() != QEvent.Type.FileOpen:
return super().event(e)
url = e.url()