Improve options for adding/removing terminals to/from groups
This commit is contained in:
commit
da3a14a55e
|
@ -107,6 +107,7 @@ class Terminal(gtk.VBox):
|
||||||
composite_support = None
|
composite_support = None
|
||||||
|
|
||||||
cnxids = None
|
cnxids = None
|
||||||
|
targets_for_new_group = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
"""Class initialiser"""
|
"""Class initialiser"""
|
||||||
|
@ -119,6 +120,7 @@ class Terminal(gtk.VBox):
|
||||||
# FIXME: Surely these should happen in Terminator::register_terminal()?
|
# FIXME: Surely these should happen in Terminator::register_terminal()?
|
||||||
self.connect('enumerate', self.terminator.do_enumerate)
|
self.connect('enumerate', self.terminator.do_enumerate)
|
||||||
self.connect('focus-in', self.terminator.focus_changed)
|
self.connect('focus-in', self.terminator.focus_changed)
|
||||||
|
self.connect('focus-out', self.terminator.focus_left)
|
||||||
|
|
||||||
self.matches = {}
|
self.matches = {}
|
||||||
self.cnxids = Signalman()
|
self.cnxids = Signalman()
|
||||||
|
@ -770,7 +772,40 @@ class Terminal(gtk.VBox):
|
||||||
def on_group_button_press(self, widget, event):
|
def on_group_button_press(self, widget, event):
|
||||||
"""Handler for the group button"""
|
"""Handler for the group button"""
|
||||||
if event.button == 1:
|
if event.button == 1:
|
||||||
self.create_popup_group_menu(widget, event)
|
if event.type == gtk.gdk._2BUTTON_PRESS or \
|
||||||
|
event.type == gtk.gdk._3BUTTON_PRESS:
|
||||||
|
# Ignore these, or they make the interaction bad
|
||||||
|
return False
|
||||||
|
# Super key applies interaction to all terms in group
|
||||||
|
include_siblings=event.state & gtk.gdk.MOD4_MASK == gtk.gdk.MOD4_MASK
|
||||||
|
if include_siblings:
|
||||||
|
targets=self.terminator.get_sibling_terms(self)
|
||||||
|
else:
|
||||||
|
targets=[self]
|
||||||
|
if event.state & gtk.gdk.CONTROL_MASK == gtk.gdk.CONTROL_MASK:
|
||||||
|
dbg('on_group_button_press: toggle terminal to focused terminals group')
|
||||||
|
focused=self.get_toplevel().get_focussed_terminal()
|
||||||
|
if focused in targets: targets.remove(focused)
|
||||||
|
if self != focused:
|
||||||
|
if self.group==focused.group:
|
||||||
|
new_group=None
|
||||||
|
else:
|
||||||
|
new_group=focused.group
|
||||||
|
[term.set_group(None, new_group) for term in targets]
|
||||||
|
[term.titlebar.update(focused) for term in targets]
|
||||||
|
return True
|
||||||
|
elif event.state & gtk.gdk.SHIFT_MASK == gtk.gdk.SHIFT_MASK:
|
||||||
|
dbg('on_group_button_press: rename of terminals group')
|
||||||
|
self.targets_for_new_group = targets
|
||||||
|
self.titlebar.create_group()
|
||||||
|
return True
|
||||||
|
elif event.type == gtk.gdk.BUTTON_PRESS:
|
||||||
|
# Single Click gives popup
|
||||||
|
dbg('on_group_button_press: group menu popup')
|
||||||
|
self.create_popup_group_menu(widget, event)
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
dbg('on_group_button_press: unknown group button interaction')
|
||||||
return(False)
|
return(False)
|
||||||
|
|
||||||
def on_keypress(self, widget, event):
|
def on_keypress(self, widget, event):
|
||||||
|
|
|
@ -349,19 +349,21 @@ class Terminator(Borg):
|
||||||
idx = terminals.index(term)
|
idx = terminals.index(term)
|
||||||
term.feed(numstr % (idx + 1))
|
term.feed(numstr % (idx + 1))
|
||||||
|
|
||||||
|
def get_sibling_terms(self, widget):
|
||||||
|
termset = []
|
||||||
|
for term in self.terminals:
|
||||||
|
if term.group == widget.group:
|
||||||
|
termset.append(term)
|
||||||
|
return(termset)
|
||||||
|
|
||||||
def get_target_terms(self, widget):
|
def get_target_terms(self, widget):
|
||||||
"""Get the terminals we should currently be broadcasting to"""
|
"""Get the terminals we should currently be broadcasting to"""
|
||||||
if self.groupsend == self.groupsend_type['all']:
|
if self.groupsend == self.groupsend_type['all']:
|
||||||
return(self.terminals)
|
return(self.terminals)
|
||||||
elif self.groupsend == self.groupsend_type['group']:
|
elif self.groupsend == self.groupsend_type['group']:
|
||||||
termset = []
|
if widget.group != None:
|
||||||
for term in self.terminals:
|
return(self.get_sibling_terms(widget))
|
||||||
if term == widget or (term.group != None and term.group ==
|
return([widget])
|
||||||
widget.group):
|
|
||||||
termset.append(term)
|
|
||||||
return(termset)
|
|
||||||
else:
|
|
||||||
return([widget])
|
|
||||||
|
|
||||||
def get_focussed_terminal(self):
|
def get_focussed_terminal(self):
|
||||||
"""iterate over all the terminals to find which, if any, has focus"""
|
"""iterate over all the terminals to find which, if any, has focus"""
|
||||||
|
@ -376,6 +378,9 @@ class Terminator(Borg):
|
||||||
terminal.titlebar.update(widget)
|
terminal.titlebar.update(widget)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def focus_left(self, widget):
|
||||||
|
self.last_focused_term=widget
|
||||||
|
|
||||||
def describe_layout(self):
|
def describe_layout(self):
|
||||||
"""Describe our current layout"""
|
"""Describe our current layout"""
|
||||||
layout = {}
|
layout = {}
|
||||||
|
|
|
@ -93,7 +93,7 @@ class Titlebar(gtk.EventBox):
|
||||||
|
|
||||||
def connect_icon(self, func):
|
def connect_icon(self, func):
|
||||||
"""Connect the supplied function to clicking on the group icon"""
|
"""Connect the supplied function to clicking on the group icon"""
|
||||||
self.ebox.connect('button-release-event', func)
|
self.ebox.connect('button-press-event', func)
|
||||||
|
|
||||||
def update(self, other=None):
|
def update(self, other=None):
|
||||||
"""Update our contents"""
|
"""Update our contents"""
|
||||||
|
@ -233,7 +233,10 @@ class Titlebar(gtk.EventBox):
|
||||||
|
|
||||||
def create_group(self):
|
def create_group(self):
|
||||||
"""Create a new group"""
|
"""Create a new group"""
|
||||||
|
if self.terminal.group:
|
||||||
|
self.groupentry.set_text(self.terminal.group)
|
||||||
self.groupentry.show()
|
self.groupentry.show()
|
||||||
|
self.grouplabel.hide()
|
||||||
self.groupentry.grab_focus()
|
self.groupentry.grab_focus()
|
||||||
self.update_visibility()
|
self.update_visibility()
|
||||||
|
|
||||||
|
@ -241,6 +244,7 @@ class Titlebar(gtk.EventBox):
|
||||||
"""Hide the group name entry"""
|
"""Hide the group name entry"""
|
||||||
self.groupentry.set_text('')
|
self.groupentry.set_text('')
|
||||||
self.groupentry.hide()
|
self.groupentry.hide()
|
||||||
|
self.grouplabel.show()
|
||||||
self.get_parent().grab_focus()
|
self.get_parent().grab_focus()
|
||||||
|
|
||||||
def groupentry_activate(self, widget):
|
def groupentry_activate(self, widget):
|
||||||
|
@ -248,7 +252,14 @@ class Titlebar(gtk.EventBox):
|
||||||
groupname = self.groupentry.get_text()
|
groupname = self.groupentry.get_text()
|
||||||
dbg('Titlebar::groupentry_activate: creating group: %s' % groupname)
|
dbg('Titlebar::groupentry_activate: creating group: %s' % groupname)
|
||||||
self.groupentry_cancel(None, None)
|
self.groupentry_cancel(None, None)
|
||||||
self.emit('create-group', groupname)
|
last_focused_term=self.terminator.last_focused_term
|
||||||
|
if self.terminal.targets_for_new_group:
|
||||||
|
[term.titlebar.emit('create-group', groupname) for term in self.terminal.targets_for_new_group]
|
||||||
|
self.terminal.targets_for_new_group = None
|
||||||
|
else:
|
||||||
|
self.emit('create-group', groupname)
|
||||||
|
last_focused_term.grab_focus()
|
||||||
|
self.terminator.focus_changed(last_focused_term)
|
||||||
|
|
||||||
def groupentry_keypress(self, widget, event):
|
def groupentry_keypress(self, widget, event):
|
||||||
"""Handle keypresses on the entry widget"""
|
"""Handle keypresses on the entry widget"""
|
||||||
|
|
Loading…
Reference in New Issue