From b668100ce6c872baee8d5c3c7bd09622d656f46f Mon Sep 17 00:00:00 2001
From: Manuel Kaufmann <humitos@gmail.com>
Date: Mon, 24 Sep 2012 13:45:48 -0300
Subject: [PATCH Browse] Undo close tab SL #3534
Browse manages a list of 10 recently closed tab to be able to re-open
them (the most recently closed is opened firstly) by pressing
Ctrl+Shift+T.
Signed-off-by: Manuel Kaufmann <humitos@gmail.com>
---
browser.py | 13 +++++++++++++
webactivity.py | 11 +++++++++--
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/browser.py b/browser.py
index de546f2..8f960cc 100644
a
|
b
|
|
19 | 19 | import os |
20 | 20 | import time |
21 | 21 | import re |
| 22 | import collections |
22 | 23 | from gettext import gettext as _ |
23 | 24 | |
24 | 25 | from gi.repository import GObject |
… |
… |
class TabbedView(BrowserNotebook): |
99 | 100 | self._update_closing_buttons() |
100 | 101 | self._update_tab_sizes() |
101 | 102 | |
| 103 | # LIFO queue of closed tabs (10 tabs max) |
| 104 | self.closed_tabs = collections.deque(maxlen=10) |
| 105 | |
| 106 | def get_last_closed_tab(self): |
| 107 | try: |
| 108 | uri = self.closed_tabs.pop() |
| 109 | except IndexError: |
| 110 | uri = None |
| 111 | return uri |
| 112 | |
102 | 113 | def normalize_or_autosearch_url(self, url): |
103 | 114 | """Normalize the url input or return a url for search. |
104 | 115 | |
… |
… |
class TabbedView(BrowserNotebook): |
164 | 175 | self._update_tab_sizes() |
165 | 176 | |
166 | 177 | def __page_removed_cb(self, notebook, child, pagenum): |
| 178 | self.closed_tabs.append(child._browser.props.uri) |
| 179 | |
167 | 180 | if self.get_n_pages(): |
168 | 181 | self._update_closing_buttons() |
169 | 182 | self._update_tab_sizes() |
diff --git a/webactivity.py b/webactivity.py
index 24f3b44..2559fa7 100644
a
|
b
|
class WebActivity(activity.Activity): |
428 | 428 | def _key_press_cb(self, widget, event): |
429 | 429 | key_name = Gdk.keyval_name(event.keyval) |
430 | 430 | browser = self._tabbed_view.props.current_browser |
431 | | |
432 | | if event.get_state() & Gdk.ModifierType.CONTROL_MASK: |
| 431 | state = event.get_state() |
| 432 | |
| 433 | if state & Gdk.ModifierType.CONTROL_MASK: |
| 434 | if state & Gdk.ModifierType.SHIFT_MASK: |
| 435 | if key_name == 'T': |
| 436 | uri = self._tabbed_view.get_last_closed_tab() |
| 437 | if uri is not None: |
| 438 | self._tabbed_view.current_browser.emit('new-tab', uri) |
| 439 | return True |
433 | 440 | |
434 | 441 | if key_name == 'd': |
435 | 442 | self._add_link() |