Merge pull request #553 from Vulcalien/zoom-terminal-switch
Unzoom terminal on interaction
This commit is contained in:
commit
96aa749678
|
@ -278,7 +278,6 @@ class Notebook(Container, Gtk.Notebook):
|
||||||
'split-horiz': self.split_horiz,
|
'split-horiz': self.split_horiz,
|
||||||
'split-vert': self.split_vert,
|
'split-vert': self.split_vert,
|
||||||
'title-change': self.propagate_title_change,
|
'title-change': self.propagate_title_change,
|
||||||
'unzoom': self.unzoom,
|
|
||||||
'tab-change': top_window.tab_change,
|
'tab-change': top_window.tab_change,
|
||||||
'group-all': top_window.group_all,
|
'group-all': top_window.group_all,
|
||||||
'group-all-toggle': top_window.group_all_toggle,
|
'group-all-toggle': top_window.group_all_toggle,
|
||||||
|
|
|
@ -910,20 +910,6 @@ class Terminal(Gtk.VBox):
|
||||||
# FIXME: Does keybindings really want to live in Terminator()?
|
# FIXME: Does keybindings really want to live in Terminator()?
|
||||||
mapping = self.terminator.keybindings.lookup(event)
|
mapping = self.terminator.keybindings.lookup(event)
|
||||||
|
|
||||||
# Just propagate tab-swictch events if there is only one tab
|
|
||||||
if (
|
|
||||||
mapping and (
|
|
||||||
mapping.startswith('switch_to_tab') or
|
|
||||||
mapping in ('next_tab', 'prev_tab')
|
|
||||||
)
|
|
||||||
):
|
|
||||||
window = self.get_toplevel()
|
|
||||||
child = window.get_children()[0]
|
|
||||||
if isinstance(child, Terminal):
|
|
||||||
# not a Notebook instance => a single tab is used
|
|
||||||
# .get_n_pages() can not be used
|
|
||||||
return False
|
|
||||||
|
|
||||||
if mapping == "hide_window":
|
if mapping == "hide_window":
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -1417,15 +1403,8 @@ class Terminal(Gtk.VBox):
|
||||||
|
|
||||||
def is_zoomed(self):
|
def is_zoomed(self):
|
||||||
"""Determine if we are a zoomed terminal"""
|
"""Determine if we are a zoomed terminal"""
|
||||||
prop = None
|
|
||||||
window = self.get_toplevel()
|
window = self.get_toplevel()
|
||||||
|
return window.is_zoomed()
|
||||||
try:
|
|
||||||
prop = window.get_property('term-zoomed')
|
|
||||||
except TypeError:
|
|
||||||
prop = False
|
|
||||||
|
|
||||||
return prop
|
|
||||||
|
|
||||||
def zoom(self, widget=None):
|
def zoom(self, widget=None):
|
||||||
"""Zoom ourself to fill the window"""
|
"""Zoom ourself to fill the window"""
|
||||||
|
|
|
@ -258,13 +258,12 @@ class Window(Container, Gtk.Window):
|
||||||
|
|
||||||
def tab_new(self, widget=None, debugtab=False, _param1=None, _param2=None):
|
def tab_new(self, widget=None, debugtab=False, _param1=None, _param2=None):
|
||||||
"""Make a new tab"""
|
"""Make a new tab"""
|
||||||
|
if self.is_zoomed():
|
||||||
|
self.unzoom()
|
||||||
|
|
||||||
cwd = None
|
cwd = None
|
||||||
profile = None
|
profile = None
|
||||||
|
|
||||||
if self.get_property('term_zoomed') == True:
|
|
||||||
err("You can't create a tab while a terminal is maximised/zoomed")
|
|
||||||
return
|
|
||||||
|
|
||||||
if widget:
|
if widget:
|
||||||
cwd = widget.get_cwd()
|
cwd = widget.get_cwd()
|
||||||
profile = widget.get_profile()
|
profile = widget.get_profile()
|
||||||
|
@ -281,7 +280,7 @@ class Window(Container, Gtk.Window):
|
||||||
"""Handle a window close request"""
|
"""Handle a window close request"""
|
||||||
maker = Factory()
|
maker = Factory()
|
||||||
if maker.isinstance(self.get_child(), 'Terminal'):
|
if maker.isinstance(self.get_child(), 'Terminal'):
|
||||||
if self.get_property('term_zoomed') == True:
|
if self.is_zoomed():
|
||||||
return(self.confirm_close(window, _('window')))
|
return(self.confirm_close(window, _('window')))
|
||||||
else:
|
else:
|
||||||
dbg('Window::on_delete_event: Only one child, closing is fine')
|
dbg('Window::on_delete_event: Only one child, closing is fine')
|
||||||
|
@ -417,6 +416,7 @@ class Window(Container, Gtk.Window):
|
||||||
'title-change': self.title.set_title,
|
'title-change': self.title.set_title,
|
||||||
'split-horiz': self.split_horiz,
|
'split-horiz': self.split_horiz,
|
||||||
'split-vert': self.split_vert,
|
'split-vert': self.split_vert,
|
||||||
|
'resize-term': self.resizeterm,
|
||||||
'unzoom': self.unzoom,
|
'unzoom': self.unzoom,
|
||||||
'tab-change': self.tab_change,
|
'tab-change': self.tab_change,
|
||||||
'group-all': self.group_all,
|
'group-all': self.group_all,
|
||||||
|
@ -430,7 +430,9 @@ class Window(Container, Gtk.Window):
|
||||||
'ungroup-tab': self.ungroup_tab,
|
'ungroup-tab': self.ungroup_tab,
|
||||||
'move-tab': self.move_tab,
|
'move-tab': self.move_tab,
|
||||||
'tab-new': [self.tab_new, widget],
|
'tab-new': [self.tab_new, widget],
|
||||||
'navigate': self.navigate_terminal}
|
'navigate': self.navigate_terminal,
|
||||||
|
'rotate-cw': [self.rotate, True],
|
||||||
|
'rotate-ccw': [self.rotate, False]}
|
||||||
|
|
||||||
for signal in signals:
|
for signal in signals:
|
||||||
args = []
|
args = []
|
||||||
|
@ -466,8 +468,9 @@ class Window(Container, Gtk.Window):
|
||||||
|
|
||||||
def split_axis(self, widget, vertical=True, cwd=None, sibling=None, widgetfirst=True):
|
def split_axis(self, widget, vertical=True, cwd=None, sibling=None, widgetfirst=True):
|
||||||
"""Split the window"""
|
"""Split the window"""
|
||||||
if self.get_property('term_zoomed') == True:
|
if self.is_zoomed():
|
||||||
err("You can't split while a terminal is maximised/zoomed")
|
self.unzoom()
|
||||||
|
widget.get_parent().split_axis(widget, vertical, cwd, sibling, widgetfirst)
|
||||||
return
|
return
|
||||||
|
|
||||||
order = None
|
order = None
|
||||||
|
@ -508,6 +511,21 @@ class Window(Container, Gtk.Window):
|
||||||
sibling.grab_focus()
|
sibling.grab_focus()
|
||||||
self.set_pos_by_ratio = False
|
self.set_pos_by_ratio = False
|
||||||
|
|
||||||
|
def resizeterm(self, widget, keyname):
|
||||||
|
"""Handle a keyboard event requesting a terminal resize"""
|
||||||
|
# if not zoomed, then ignore the signal: there is only one terminal
|
||||||
|
if self.is_zoomed():
|
||||||
|
self.unzoom()
|
||||||
|
widget.get_parent().resizeterm(widget, keyname)
|
||||||
|
|
||||||
|
def is_zoomed(self):
|
||||||
|
"""Return True if the window has a zoomed terminal, False otherwise"""
|
||||||
|
try:
|
||||||
|
# 'is True' just in case we get something that is not a boolean
|
||||||
|
return self.get_property('term_zoomed') is True
|
||||||
|
except TypeError:
|
||||||
|
err('failed to get "term_zoomed" property')
|
||||||
|
return False
|
||||||
|
|
||||||
def zoom(self, widget, font_scale=True):
|
def zoom(self, widget, font_scale=True):
|
||||||
"""Zoom a terminal widget"""
|
"""Zoom a terminal widget"""
|
||||||
|
@ -534,9 +552,9 @@ class Window(Container, Gtk.Window):
|
||||||
|
|
||||||
widget.grab_focus()
|
widget.grab_focus()
|
||||||
|
|
||||||
def unzoom(self, widget):
|
def unzoom(self, widget=None):
|
||||||
"""Restore normal terminal layout"""
|
"""Restore normal terminal layout"""
|
||||||
if not self.get_property('term_zoomed'):
|
if not self.is_zoomed():
|
||||||
# We're not zoomed anyway
|
# We're not zoomed anyway
|
||||||
dbg('Window::unzoom: not zoomed, no-op')
|
dbg('Window::unzoom: not zoomed, no-op')
|
||||||
return
|
return
|
||||||
|
@ -554,6 +572,11 @@ class Window(Container, Gtk.Window):
|
||||||
|
|
||||||
def rotate(self, widget, clockwise):
|
def rotate(self, widget, clockwise):
|
||||||
"""Rotate children in this window"""
|
"""Rotate children in this window"""
|
||||||
|
if self.is_zoomed():
|
||||||
|
self.unzoom()
|
||||||
|
while Gtk.events_pending():
|
||||||
|
Gtk.main_iteration_do(False)
|
||||||
|
|
||||||
self.set_pos_by_ratio = True
|
self.set_pos_by_ratio = True
|
||||||
maker = Factory()
|
maker = Factory()
|
||||||
child = self.get_child()
|
child = self.get_child()
|
||||||
|
@ -684,6 +707,9 @@ class Window(Container, Gtk.Window):
|
||||||
|
|
||||||
def tab_change(self, widget, num=None):
|
def tab_change(self, widget, num=None):
|
||||||
"""Change to a specific tab"""
|
"""Change to a specific tab"""
|
||||||
|
if self.is_zoomed():
|
||||||
|
self.unzoom()
|
||||||
|
|
||||||
if num is None:
|
if num is None:
|
||||||
err('must specify a tab to change to')
|
err('must specify a tab to change to')
|
||||||
|
|
||||||
|
@ -796,6 +822,9 @@ class Window(Container, Gtk.Window):
|
||||||
|
|
||||||
def move_tab(self, widget, direction):
|
def move_tab(self, widget, direction):
|
||||||
"""Handle a keyboard shortcut for moving tab positions"""
|
"""Handle a keyboard shortcut for moving tab positions"""
|
||||||
|
if self.is_zoomed():
|
||||||
|
self.unzoom()
|
||||||
|
|
||||||
maker = Factory()
|
maker = Factory()
|
||||||
notebook = self.get_child()
|
notebook = self.get_child()
|
||||||
|
|
||||||
|
@ -826,6 +855,11 @@ class Window(Container, Gtk.Window):
|
||||||
|
|
||||||
def navigate_terminal(self, terminal, direction):
|
def navigate_terminal(self, terminal, direction):
|
||||||
"""Navigate around terminals"""
|
"""Navigate around terminals"""
|
||||||
|
if self.is_zoomed():
|
||||||
|
self.unzoom()
|
||||||
|
while Gtk.events_pending():
|
||||||
|
Gtk.main_iteration_do(False)
|
||||||
|
|
||||||
_containers, terminals = util.enumerate_descendants(self)
|
_containers, terminals = util.enumerate_descendants(self)
|
||||||
visibles = self.get_visible_terminals()
|
visibles = self.get_visible_terminals()
|
||||||
current = terminals.index(terminal)
|
current = terminals.index(terminal)
|
||||||
|
@ -881,9 +915,8 @@ class Window(Container, Gtk.Window):
|
||||||
|
|
||||||
if len(winners) > 1:
|
if len(winners) > 1:
|
||||||
# Break an n-way tie using the cursor position
|
# Break an n-way tie using the cursor position
|
||||||
term_alloc = terminal.get_allocation()
|
cursor_x = allocation.x + allocation.width / 2
|
||||||
cursor_x = term_alloc.x + term_alloc.width / 2
|
cursor_y = allocation.y + allocation.height / 2
|
||||||
cursor_y = term_alloc.y + term_alloc.height / 2
|
|
||||||
|
|
||||||
for term in winners:
|
for term in winners:
|
||||||
rect = layout[term]
|
rect = layout[term]
|
||||||
|
|
Loading…
Reference in New Issue