Closes LP#242816

Adds a close button to the terms.
We might need to visually inform about the number of terms in a tab
This commit is contained in:
Emmanuel Bretelle 2008-06-27 18:11:24 +01:00
parent b4ef849f2b
commit d34496416f
2 changed files with 59 additions and 7 deletions

View File

@ -28,6 +28,48 @@ from terminatorlib.config import dbg, err
#import TerminatorTerm #import TerminatorTerm
from terminatorlib.terminatorterm import TerminatorTerm from terminatorlib.terminatorterm import TerminatorTerm
class TerminatorNotebookTabLabel(gtk.HBox):
def __init__(self, title, notebook, terminator):
gtk.HBox.__init__(self)
self._notebook = notebook
self.terminator = terminator
self._label = gtk.Label(title)
icon = gtk.Image()
icon.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU)
self._button = gtk.Button()
self._button.set_relief(gtk.RELIEF_NONE)
self._button.set_image(icon)
self._button.connect('clicked', self.on_close)
self.pack_start(self._label, True, True)
self.pack_start(self._button, False, False)
self.show_all()
def on_close(self, widget):
nbpages = self._notebook.get_n_pages()
for i in range(0,nbpages):
if self._notebook.get_tab_label(self._notebook.get_nth_page(i)) == self:
#dbg("[Close from tab] Found tab at position [%d]" % i)
term = self.terminator._notebook_first_term(self._notebook.get_nth_page(i))
while term:
if term == self._notebook.get_nth_page(i):
self.terminator.closeterm(term)
break
self.terminator.closeterm(term)
term = self.terminator._notebook_first_term(self._notebook.get_nth_page(i))
break
def set_title(self, title):
self._label.set_text(title)
def get_title(self):
return self._label.get_text()
class Terminator: class Terminator:
def __init__ (self, profile = None, command = None, fullscreen = False, maximise = False, borderless = False): def __init__ (self, profile = None, command = None, fullscreen = False, maximise = False, borderless = False):
self.profile = profile self.profile = profile
@ -254,7 +296,8 @@ class Terminator:
#parent.remove_page(page) #parent.remove_page(page)
pane.show() pane.show()
parent.insert_page(pane, None, page) parent.insert_page(pane, None, page)
parent.set_tab_label_text(pane, widget._vte.get_window_title()) notebooktablabel = TerminatorNotebookTabLabel(widget._vte.get_window_title(), parent, self)
parent.set_tab_label(pane,notebooktablabel)
parent.set_tab_label_packing(pane, True, True, gtk.PACK_START) parent.set_tab_label_packing(pane, True, True, gtk.PACK_START)
parent.set_tab_reorderable(pane, True) parent.set_tab_reorderable(pane, True)
parent.set_current_page(page) parent.set_current_page(page)
@ -394,7 +437,7 @@ class Terminator:
((self.conf.extreme_tabs and not toplevel) or not isinstance(child, gtk.Notebook))): ((self.conf.extreme_tabs and not toplevel) or not isinstance(child, gtk.Notebook))):
#no notebook yet. #no notebook yet.
notebook = gtk.Notebook() notebook = gtk.Notebook()
notebook.set_tab_pos(gtk.POS_TOP) #notebook.set_tab_pos(gtk.POS_TOP)
notebook.connect('page-reordered',self.on_page_reordered) notebook.connect('page-reordered',self.on_page_reordered)
notebook.set_property('homogeneous', True) notebook.set_property('homogeneous', True)
notebook.set_tab_reorderable(widget, True) notebook.set_tab_reorderable(widget, True)
@ -415,7 +458,8 @@ class Terminator:
child._titlebox.hide() child._titlebox.hide()
if widget._vte.get_window_title() is not None: if widget._vte.get_window_title() is not None:
notebooklabel = widget._vte.get_window_title() notebooklabel = widget._vte.get_window_title()
notebook.set_tab_label_text(child, notebooklabel) notebooktablabel = TerminatorNotebookTabLabel(notebooklabel, notebook, self)
notebook.set_tab_label(child, notebooktablabel)
notebook.set_tab_label_packing(child, True, True, gtk.PACK_START) notebook.set_tab_label_packing(child, True, True, gtk.PACK_START)
notebook.show() notebook.show()
elif isinstance(parent, gtk.Notebook): elif isinstance(parent, gtk.Notebook):
@ -439,7 +483,8 @@ class Terminator:
notebooklabel = "" notebooklabel = ""
if terminal._vte.get_window_title() is not None: if terminal._vte.get_window_title() is not None:
notebooklabel = terminal._vte.get_window_title() notebooklabel = terminal._vte.get_window_title()
notebook.set_tab_label_text(terminal, notebooklabel) notebooktablabel = TerminatorNotebookTabLabel(notebooklabel, notebook, self)
notebook.set_tab_label(terminal, notebooktablabel)
notebook.set_tab_label_packing(terminal, True, True, gtk.PACK_START) notebook.set_tab_label_packing(terminal, True, True, gtk.PACK_START)
notebook.set_tab_reorderable(terminal,True) notebook.set_tab_reorderable(terminal,True)
## Now, we set focus on the new term ## Now, we set focus on the new term
@ -516,6 +561,7 @@ class Terminator:
parent.remove(sibling) parent.remove(sibling)
grandparent.remove_page(page) grandparent.remove_page(page)
grandparent.insert_page(sibling, None,page) grandparent.insert_page(sibling, None,page)
grandparent.set_tab_label(sibling, TerminatorNotebookTabLabel("",grandparent, self))
grandparent.set_tab_label_packing(sibling, True, True, gtk.PACK_START) grandparent.set_tab_label_packing(sibling, True, True, gtk.PACK_START)
grandparent.set_tab_reorderable(sibling, True) grandparent.set_tab_reorderable(sibling, True)
grandparent.set_current_page(page) grandparent.set_current_page(page)

View File

@ -900,7 +900,10 @@ text/plain
self.terminator.set_window_title("%s: %s" %(APP_NAME.capitalize(), vte.get_window_title ())) self.terminator.set_window_title("%s: %s" %(APP_NAME.capitalize(), vte.get_window_title ()))
notebookpage = self.terminator.get_first_notebook_page(vte) notebookpage = self.terminator.get_first_notebook_page(vte)
while notebookpage != None: while notebookpage != None:
notebookpage[0].set_tab_label_text(notebookpage[1], vte.get_window_title ()) if notebookpage[0].get_tab_label(notebookpage[1]):
label = notebookpage[0].get_tab_label(notebookpage[1])
label.set_title(vte.get_window_title ())
notebookpage[0].set_tab_label(notebookpage[1], label)
notebookpage = self.terminator.get_first_notebook_page(notebookpage[0]) notebookpage = self.terminator.get_first_notebook_page(notebookpage[0])
def on_vte_focus_in(self, vte, event): def on_vte_focus_in(self, vte, event):
@ -918,7 +921,10 @@ text/plain
self.terminator.set_window_title("%s: %s" %(APP_NAME.capitalize(), vte.get_window_title ())) self.terminator.set_window_title("%s: %s" %(APP_NAME.capitalize(), vte.get_window_title ()))
notebookpage = self.terminator.get_first_notebook_page(vte) notebookpage = self.terminator.get_first_notebook_page(vte)
while notebookpage != None: while notebookpage != None:
notebookpage[0].set_tab_label_text(notebookpage[1], vte.get_window_title ()) if notebookpage[0].get_tab_label(notebookpage[1]):
label = notebookpage[0].get_tab_label(notebookpage[1])
label.set_title(vte.get_window_title ())
notebookpage[0].set_tab_label(notebookpage[1], label)
notebookpage = self.terminator.get_first_notebook_page(notebookpage[0]) notebookpage = self.terminator.get_first_notebook_page(notebookpage[0])
def destroy(self): def destroy(self):