Make title changes propagate better, albeit not perfectly yet
This commit is contained in:
parent
f10f43fa8a
commit
602c6a3b57
@ -6,6 +6,7 @@
|
|||||||
import gobject
|
import gobject
|
||||||
import gtk
|
import gtk
|
||||||
|
|
||||||
|
from factory import Factory
|
||||||
from config import Config
|
from config import Config
|
||||||
from util import dbg, err
|
from util import dbg, err
|
||||||
from translation import _
|
from translation import _
|
||||||
@ -172,4 +173,20 @@ the %s will also close all terminals within it.') % (reqtype, reqtype))
|
|||||||
dialog.show_all()
|
dialog.show_all()
|
||||||
return(dialog)
|
return(dialog)
|
||||||
|
|
||||||
|
def propagate_title_change(self, widget, title):
|
||||||
|
"""Pass a title change up the widget stack"""
|
||||||
|
maker = Factory()
|
||||||
|
parent = self.get_parent()
|
||||||
|
title = widget.get_window_title()
|
||||||
|
|
||||||
|
dbg('Container::propagate_title_change: I am %s. My parent is %s' %
|
||||||
|
(self, parent))
|
||||||
|
if maker.isinstance(self, 'Notebook'):
|
||||||
|
self.update_tab_label_text(widget, title)
|
||||||
|
elif maker.isinstance(self, 'Window'):
|
||||||
|
self.title.set_title(widget, title)
|
||||||
|
|
||||||
|
if maker.isinstance(parent, 'Container'):
|
||||||
|
parent.propagate_title_change(widget, title)
|
||||||
|
|
||||||
# vim: set expandtab ts=4 sw=4:
|
# vim: set expandtab ts=4 sw=4:
|
||||||
|
@ -26,7 +26,8 @@ class Factory(Borg):
|
|||||||
'HPaned': 'paned',
|
'HPaned': 'paned',
|
||||||
'Paned': 'paned',
|
'Paned': 'paned',
|
||||||
'Notebook': 'notebook',
|
'Notebook': 'notebook',
|
||||||
'Container': 'container'}
|
'Container': 'container',
|
||||||
|
'Window': 'window'}
|
||||||
if classtype in types.keys():
|
if classtype in types.keys():
|
||||||
module = __import__(types[classtype], None, None, [''])
|
module = __import__(types[classtype], None, None, [''])
|
||||||
return(isinstance(product, getattr(module, classtype)))
|
return(isinstance(product, getattr(module, classtype)))
|
||||||
|
@ -105,9 +105,9 @@ class Notebook(Container, gtk.Notebook):
|
|||||||
widget.spawn_child()
|
widget.spawn_child()
|
||||||
|
|
||||||
signals = {'close-term': self.wrapcloseterm,
|
signals = {'close-term': self.wrapcloseterm,
|
||||||
#'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,
|
||||||
|
'title-change': self.propagate_title_change,
|
||||||
'unzoom': self.unzoom}
|
'unzoom': self.unzoom}
|
||||||
|
|
||||||
maker = Factory()
|
maker = Factory()
|
||||||
@ -226,6 +226,18 @@ class Notebook(Container, gtk.Notebook):
|
|||||||
"""Unzoom a terminal"""
|
"""Unzoom a terminal"""
|
||||||
raise NotImplementedError('unzoom')
|
raise NotImplementedError('unzoom')
|
||||||
|
|
||||||
|
def update_tab_label_text(self, widget, text):
|
||||||
|
"""Update the text of a tab label"""
|
||||||
|
# FIXME: get_tab_label() doesn't descend the widget tree. We need
|
||||||
|
# something that does or this only works for Notebook->Terminal, not
|
||||||
|
# Notebook->Container->...->Terminal
|
||||||
|
label = self.get_tab_label(widget)
|
||||||
|
if not label:
|
||||||
|
err('Notebook::update_tab_label_text: %s not found' % widget)
|
||||||
|
return
|
||||||
|
|
||||||
|
label.set_label(text)
|
||||||
|
|
||||||
class TabLabel(gtk.HBox):
|
class TabLabel(gtk.HBox):
|
||||||
"""Class implementing a label widget for Notebook tabs"""
|
"""Class implementing a label widget for Notebook tabs"""
|
||||||
notebook = None
|
notebook = None
|
||||||
@ -257,6 +269,10 @@ class TabLabel(gtk.HBox):
|
|||||||
self.update_button()
|
self.update_button()
|
||||||
self.show_all()
|
self.show_all()
|
||||||
|
|
||||||
|
def set_label(self, text):
|
||||||
|
"""Update the text of our label"""
|
||||||
|
self.label.set_text(text)
|
||||||
|
|
||||||
def update_button(self):
|
def update_button(self):
|
||||||
"""Update the state of our close button"""
|
"""Update the state of our close button"""
|
||||||
if not self.config['close_button_on_tab']:
|
if not self.config['close_button_on_tab']:
|
||||||
|
@ -83,10 +83,10 @@ class Paned(Container):
|
|||||||
if maker.isinstance(widget, 'Terminal'):
|
if maker.isinstance(widget, 'Terminal'):
|
||||||
top_window = get_top_window(self)
|
top_window = get_top_window(self)
|
||||||
|
|
||||||
# FIXME: somehow propagate the title-change signal to the Window
|
|
||||||
signals = {'close-term': self.wrapcloseterm,
|
signals = {'close-term': self.wrapcloseterm,
|
||||||
'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,
|
||||||
'resize-term': self.resizeterm,
|
'resize-term': self.resizeterm,
|
||||||
'zoom': top_window.zoom}
|
'zoom': top_window.zoom}
|
||||||
|
|
||||||
|
@ -107,6 +107,8 @@ class Titlebar(gtk.EventBox):
|
|||||||
"""Update the terminal title"""
|
"""Update the terminal title"""
|
||||||
self.termtext = title
|
self.termtext = title
|
||||||
self.update()
|
self.update()
|
||||||
|
# Return False so we don't interrupt any chains of signal handling
|
||||||
|
return False
|
||||||
|
|
||||||
def set_group_label(self, name):
|
def set_group_label(self, name):
|
||||||
"""Set the name of the group"""
|
"""Set the name of the group"""
|
||||||
|
Loading…
Reference in New Issue
Block a user