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:
Niklas Haas 2016-08-10 15:56:41 +02:00
parent a35b6e2279
commit 6293fad2eb
No known key found for this signature in database
GPG Key ID: 9A09076581B27402
4 changed files with 31 additions and 1 deletions

View File

@ -350,6 +350,9 @@ def on_focus_changed(_old, new):
window = new.window()
if isinstance(window, mainwindow.MainWindow):
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):

View File

@ -233,7 +233,9 @@ def data(readonly=False):
('last-opened', "Open new tabs in the last opened "
"window."),
('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'),
"Which window to choose when opening links as new tabs."),

View File

@ -74,6 +74,8 @@ def get_window(via_ipc, force_window=False, force_tab=False,
window = objreg.last_focused_window()
elif win_mode == 'last-opened':
window = objreg.last_window()
elif win_mode == 'last-visible':
window = objreg.last_visible_window()
except objreg.NoWindow:
# There is no window left, so we open a new one
window = MainWindow()
@ -458,8 +460,23 @@ class MainWindow(QWidget):
self._downloadview.updateGeometry()
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):
"""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()
self._save_geometry()
log.destroy.debug("Closing window {}".format(self.win_id))

View File

@ -280,6 +280,14 @@ def dump_objects():
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():
"""Get the last focused window, or the last window if none."""
try: