Add general->new-instance-open-target.window=last-visible
I usually use my browser with a one-window-per-workspace flow. If I click on a URL anywhere, I personally would prefer it to go to the browser instance that's on the same workspace. To this end, the easiest way to accomplish this is to simply track when windows are made visible and register them as the last visible object. (To get finer control for when you have multiple windows on the same workspace, focus changes also update the last visible object - the implication being here that focusing something also means you're looking at it) Not all users may like this behavior, so I consider it strictly optional.
This commit is contained in:
parent
a35b6e2279
commit
6293fad2eb
@ -350,6 +350,9 @@ def on_focus_changed(_old, new):
|
|||||||
window = new.window()
|
window = new.window()
|
||||||
if isinstance(window, mainwindow.MainWindow):
|
if isinstance(window, mainwindow.MainWindow):
|
||||||
objreg.register('last-focused-main-window', window, update=True)
|
objreg.register('last-focused-main-window', window, update=True)
|
||||||
|
# A focused window must also be visible, and in this case we should
|
||||||
|
# consider it as the most recently looked-at window
|
||||||
|
objreg.register('last-visible-main-window', window, update=True)
|
||||||
|
|
||||||
|
|
||||||
def open_desktopservices_url(url):
|
def open_desktopservices_url(url):
|
||||||
|
@ -233,7 +233,9 @@ def data(readonly=False):
|
|||||||
('last-opened', "Open new tabs in the last opened "
|
('last-opened', "Open new tabs in the last opened "
|
||||||
"window."),
|
"window."),
|
||||||
('last-focused', "Open new tabs in the most recently "
|
('last-focused', "Open new tabs in the most recently "
|
||||||
"focused window.")
|
"focused window."),
|
||||||
|
('last-visible', "Open new tabs in the most recently "
|
||||||
|
"visible window.")
|
||||||
)), 'last-focused'),
|
)), 'last-focused'),
|
||||||
"Which window to choose when opening links as new tabs."),
|
"Which window to choose when opening links as new tabs."),
|
||||||
|
|
||||||
|
@ -74,6 +74,8 @@ def get_window(via_ipc, force_window=False, force_tab=False,
|
|||||||
window = objreg.last_focused_window()
|
window = objreg.last_focused_window()
|
||||||
elif win_mode == 'last-opened':
|
elif win_mode == 'last-opened':
|
||||||
window = objreg.last_window()
|
window = objreg.last_window()
|
||||||
|
elif win_mode == 'last-visible':
|
||||||
|
window = objreg.last_visible_window()
|
||||||
except objreg.NoWindow:
|
except objreg.NoWindow:
|
||||||
# There is no window left, so we open a new one
|
# There is no window left, so we open a new one
|
||||||
window = MainWindow()
|
window = MainWindow()
|
||||||
@ -458,8 +460,23 @@ class MainWindow(QWidget):
|
|||||||
self._downloadview.updateGeometry()
|
self._downloadview.updateGeometry()
|
||||||
self.tabbed_browser.tabBar().refresh()
|
self.tabbed_browser.tabBar().refresh()
|
||||||
|
|
||||||
|
def showEvent(self, e):
|
||||||
|
"""Extend showEvent to register us as the last-visible-main-window.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
e: The QShowEvent
|
||||||
|
"""
|
||||||
|
super().showEvent(e)
|
||||||
|
objreg.register('last-visible-main-window', self, update=True)
|
||||||
|
|
||||||
def _do_close(self):
|
def _do_close(self):
|
||||||
"""Helper function for closeEvent."""
|
"""Helper function for closeEvent."""
|
||||||
|
last_visible = objreg.get('last-visible-main-window')
|
||||||
|
if self is last_visible:
|
||||||
|
try:
|
||||||
|
objreg.delete('last-visible-main-window')
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
objreg.get('session-manager').save_last_window_session()
|
objreg.get('session-manager').save_last_window_session()
|
||||||
self._save_geometry()
|
self._save_geometry()
|
||||||
log.destroy.debug("Closing window {}".format(self.win_id))
|
log.destroy.debug("Closing window {}".format(self.win_id))
|
||||||
|
@ -280,6 +280,14 @@ def dump_objects():
|
|||||||
return lines
|
return lines
|
||||||
|
|
||||||
|
|
||||||
|
def last_visible_window():
|
||||||
|
"""Get the last visible window, or the last focused window if none."""
|
||||||
|
try:
|
||||||
|
return get('last-visible-main-window')
|
||||||
|
except KeyError:
|
||||||
|
return last_focused_window()
|
||||||
|
|
||||||
|
|
||||||
def last_focused_window():
|
def last_focused_window():
|
||||||
"""Get the last focused window, or the last window if none."""
|
"""Get the last focused window, or the last window if none."""
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user