aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/tools/console/window.py45
-rw-r--r--setup.py2
2 files changed, 31 insertions, 16 deletions
diff --git a/mitmproxy/tools/console/window.py b/mitmproxy/tools/console/window.py
index 87680f6e..c7bce7d3 100644
--- a/mitmproxy/tools/console/window.py
+++ b/mitmproxy/tools/console/window.py
@@ -16,7 +16,10 @@ from mitmproxy.tools.console import eventlog
class StackWidget(urwid.Frame):
- def __init__(self, widget, title, focus):
+ def __init__(self, window, widget, title, focus):
+ self.is_focused = focus
+ self.window = window
+
if title:
header = urwid.AttrWrap(
urwid.Text(title),
@@ -29,6 +32,11 @@ class StackWidget(urwid.Frame):
header=header
)
+ def mouse_event(self, size, event, button, col, row, focus):
+ if event == "mouse press" and button == 1 and not self.is_focused:
+ self.window.switch()
+ return super().mouse_event(size, event, button, col, row, focus)
+
def keypress(self, size, key):
# Make sure that we don't propagate cursor events outside of the widget.
# Otherwise, in a horizontal layout, urwid's Pile would change the focused widget
@@ -162,6 +170,7 @@ class Window(urwid.Frame):
else:
title = None
return StackWidget(
+ self,
widget,
title,
self.pane == idx
@@ -234,28 +243,34 @@ class Window(urwid.Frame):
self.view_changed()
self.focus_changed()
- def current(self, keyctx):
+ def stacks_sorted_by_focus(self):
"""
- Returns the active widget, but only the current focus or overlay has
- a matching key context.
+ Returns:
+ self.stacks, with the focused stack first.
"""
- t = self.focus_stack().top_widget()
- if t.keyctx == keyctx:
- return t
+ stacks = self.stacks.copy()
+ stacks.insert(0, stacks.pop(self.pane))
+ return stacks
- def current_window(self, keyctx):
+ def current(self, keyctx):
"""
- Returns the active window, ignoring overlays.
+ Returns the active widget with a matching key context, including overlays.
+ If multiple stacks have an active widget with a matching key context,
+ the currently focused stack is preferred.
"""
- t = self.focus_stack().top_window()
- if t.keyctx == keyctx:
- return t
+ for s in self.stacks_sorted_by_focus():
+ t = s.top_widget()
+ if t.keyctx == keyctx:
+ return t
- def any(self, keyctx):
+ def current_window(self, keyctx):
"""
- Returns the top window of either stack if they match the context.
+ Returns the active window with a matching key context, ignoring overlays.
+ If multiple stacks have an active widget with a matching key context,
+ the currently focused stack is preferred.
"""
- for t in [x.top_window() for x in self.stacks]:
+ for s in self.stacks_sorted_by_focus():
+ t = s.top_window()
if t.keyctx == keyctx:
return t
diff --git a/setup.py b/setup.py
index c66d1382..06961ca2 100644
--- a/setup.py
+++ b/setup.py
@@ -105,7 +105,7 @@ setup(
],
'examples': [
"beautifulsoup4>=4.4.1, <4.7",
- "Pillow>=4.3,<4.4",
+ "Pillow>=4.3,<5.1",
]
}
)