Armed with a text editor

mu's views on program and recipe! design

#!/usr/bin/env python
#
#   Tab Active Close Button - Epiphany Extension
#   Copyright (C) 2006  Michael Urman
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
#

import gtk
import epiphany

def attach_window(window):
    window._tab_active_close_sig = window.connect("notify::active-tab",
            active_tab_cb)

def detach_window(window):
    try:
        sig = window._tab_active_close_sig 
    except AttributeError:
        pass
    else:
        window.disconnect(sig)
        del window._tab_active_close_sig 

def apply_close_button(unbound, notebook, tab):
    hbox = notebook.get_tab_label(tab)
    if isinstance(hbox, gtk.HBox):
        children = hbox.get_children()
        if len(children) == 2 and isinstance(children[1], gtk.Button):
            unbound(children[1])

def active_tab_cb(window, pspec):
    try:
        notebook = window.get_notebook()
        for tab in map(notebook.get_nth_page, range(notebook.get_n_pages())):
            apply_close_button(gtk.Button.hide, notebook, tab)
        apply_close_button(gtk.Button.show, notebook, window.get_active_tab())
    except Exception:
        pass

def attach_tab(window, tab):
    if tab is not window.get_active_tab():
        apply_close_button(gtk.Button.hide, window.get_notebook(), tab)

def detach_tab(window, tab):
    apply_close_button(gtk.Button.show, window.get_notebook(), tab)