#!/usr/bin/env python
#
# Expand Four Tabs - Epiphany Extension
# Copyright (C) 2006 Stefan Stuhr, 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 hbox_style_set_cb(hbox, previous_style):
hbox._expand4tabs_original_width = hbox.get_size_request()[0]
hbox.set_size_request(16, -1)
def attach_tab(window, tab):
notebook = window.get_notebook()
# if there are fewer than 4 pages, leave normal, but otherwise
# switch the new (and existing if necessary) to expand mode
if notebook.get_n_pages() == 4:
pages = map(notebook.get_nth_page, range(notebook.get_n_pages()))
elif notebook.get_n_pages() > 4:
pages = [tab]
else:
return
for page in pages:
hbox = notebook.get_tab_label(page)
if not isinstance(hbox, gtk.HBox): continue
hbox._expand4tabs_original_width = hbox.get_size_request()[0]
hbox.set_size_request(16, -1)
hbox._expand4tabs_hbox_style_set_sig = hbox.connect("style-set",
hbox_style_set_cb)
notebook.child_set(page, "tab-expand", True)
def detach_tab(window, tab):
notebook = window.get_notebook()
# always switch the detached one back, however if there are now
# fewer than 4 pages, switch all back to non-expand mode
if notebook.get_n_pages() == 3:
pages = map(notebook.get_nth_page, range(notebook.get_n_pages()))
if tab not in pages: pages.append(tab)
else:
pages = [tab]
for page in pages:
hbox = notebook.get_tab_label(page)
if page.get_parent() == notebook:
notebook.child_set(page, "tab-expand", False)
if not isinstance(hbox, gtk.HBox): continue
try:
sig = hbox._expand4tabs_hbox_style_set_sig
except AttributeError:
pass
else:
hbox.disconnect(sig)
del hbox._expand4tabs_hbox_style_set_sig
try:
width = hbox._expand4tabs_original_width
except AttributeError:
pass
else:
window.set_geometry_hints(hbox, -1)
hbox.set_size_request(width, -1)
del hbox._expand4tabs_original_width