r18214 - in /packages/experimental/epiphany-extensions-more: ./ debian/ docs/ misc/ tabs/ ui/

joss at users.alioth.debian.org joss at users.alioth.debian.org
Thu Jan 8 19:56:46 UTC 2009


Author: joss
Date: Thu Jan  8 19:56:45 2009
New Revision: 18214

URL: http://svn.debian.org/wsvn/pkg-gnome/?sc=1&rev=18214
Log:
Initial release. Closes: #510981.

Added:
    packages/experimental/epiphany-extensions-more/
    packages/experimental/epiphany-extensions-more/debian/
    packages/experimental/epiphany-extensions-more/debian/README.Debian
    packages/experimental/epiphany-extensions-more/debian/changelog
    packages/experimental/epiphany-extensions-more/debian/compat
    packages/experimental/epiphany-extensions-more/debian/control
    packages/experimental/epiphany-extensions-more/debian/control.in
    packages/experimental/epiphany-extensions-more/debian/copyright
    packages/experimental/epiphany-extensions-more/debian/docs
    packages/experimental/epiphany-extensions-more/debian/rules   (with props)
    packages/experimental/epiphany-extensions-more/docs/
    packages/experimental/epiphany-extensions-more/docs/README.bookmarkshortcuts
    packages/experimental/epiphany-extensions-more/docs/README.close_other_tabs
    packages/experimental/epiphany-extensions-more/docs/README.tablinks
    packages/experimental/epiphany-extensions-more/docs/README.video-downloader
    packages/experimental/epiphany-extensions-more/misc/
    packages/experimental/epiphany-extensions-more/misc/autofindasyoutype.ephy-extension
    packages/experimental/epiphany-extensions-more/misc/autofindasyoutype.py
    packages/experimental/epiphany-extensions-more/misc/autofindlinksasyoutype.ephy-extension
    packages/experimental/epiphany-extensions-more/misc/autofindlinksasyoutype.py
    packages/experimental/epiphany-extensions-more/misc/bookmark-shortcuts.ephy-extension
    packages/experimental/epiphany-extensions-more/misc/bookmark-shortcuts.py
    packages/experimental/epiphany-extensions-more/misc/session-manager.ephy-extension
    packages/experimental/epiphany-extensions-more/misc/session-manager.py
    packages/experimental/epiphany-extensions-more/misc/tablinks.ephy-extension
    packages/experimental/epiphany-extensions-more/misc/tablinks.py
    packages/experimental/epiphany-extensions-more/misc/video-downloader.ephy-extension
    packages/experimental/epiphany-extensions-more/misc/video-downloader.py
    packages/experimental/epiphany-extensions-more/misc/view-source.ephy-extension
    packages/experimental/epiphany-extensions-more/misc/view-source.py
    packages/experimental/epiphany-extensions-more/tabs/
    packages/experimental/epiphany-extensions-more/tabs/close_other_tabs.ephy-extension
    packages/experimental/epiphany-extensions-more/tabs/close_other_tabs.py
    packages/experimental/epiphany-extensions-more/tabs/colour-tabs.ephy-extension
    packages/experimental/epiphany-extensions-more/tabs/colour-tabs.py
    packages/experimental/epiphany-extensions-more/tabs/middle-click-closes-tab.ephy-extension
    packages/experimental/epiphany-extensions-more/tabs/middle-click-closes-tab.py
    packages/experimental/epiphany-extensions-more/tabs/onlyoneclosebutton.ephy-extension
    packages/experimental/epiphany-extensions-more/tabs/onlyoneclosebutton.py
    packages/experimental/epiphany-extensions-more/tabs/restore-tab.ephy-extension
    packages/experimental/epiphany-extensions-more/tabs/restore-tab.py
    packages/experimental/epiphany-extensions-more/tabs/tabforeground.ephy-extension
    packages/experimental/epiphany-extensions-more/tabs/tabforeground.py
    packages/experimental/epiphany-extensions-more/tabs/tabkeytabnavigate.ephy-extension
    packages/experimental/epiphany-extensions-more/tabs/tabkeytabnavigate.py
    packages/experimental/epiphany-extensions-more/tabs/tablabelborder.ephy-extension
    packages/experimental/epiphany-extensions-more/tabs/tablabelborder.py
    packages/experimental/epiphany-extensions-more/tabs/widetabs.ephy-extension
    packages/experimental/epiphany-extensions-more/tabs/widetabs.py
    packages/experimental/epiphany-extensions-more/ui/
    packages/experimental/epiphany-extensions-more/ui/confirmwindowclose.ephy-extension
    packages/experimental/epiphany-extensions-more/ui/confirmwindowclose.py
    packages/experimental/epiphany-extensions-more/ui/hidden-menu.ephy-extension
    packages/experimental/epiphany-extensions-more/ui/hidden-menu.py
    packages/experimental/epiphany-extensions-more/ui/menuandtoolbar.ephy-extension
    packages/experimental/epiphany-extensions-more/ui/menuandtoolbar.py
    packages/experimental/epiphany-extensions-more/ui/quitmenuitem.ephy-extension
    packages/experimental/epiphany-extensions-more/ui/quitmenuitem.py
    packages/experimental/epiphany-extensions-more/ui/singlemenu.ephy-extension
    packages/experimental/epiphany-extensions-more/ui/singlemenu.py
    packages/experimental/epiphany-extensions-more/ui/tabs_on_treeview.ephy-extension
    packages/experimental/epiphany-extensions-more/ui/tabs_on_treeview.py
    packages/experimental/epiphany-extensions-more/ui/throbber-remover.ephy-extension   (with props)
    packages/experimental/epiphany-extensions-more/ui/throbber-remover.py   (with props)
    packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.ephy-extension   (with props)
    packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.py   (with props)

Added: packages/experimental/epiphany-extensions-more/debian/README.Debian
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/debian/README.Debian?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/debian/README.Debian (added)
+++ packages/experimental/epiphany-extensions-more/debian/README.Debian Thu Jan  8 19:56:45 2009
@@ -1,0 +1,47 @@
+epiphany-extension-more
+=======================
+
+This is a collection of extensions from various sources. The quality and
+stability of the extensions are just as various.
+
+Here are the modifications that were made in the Debian package:
+
+ colour-tabs
+ -----------
+Minor porting work to 2.24.
+
+ confirmwindowclose
+ ------------------
+A title was added to the confirmation dialog.
+confirmwindowclose => ajout d’un titre
+
+ quitmenuitem
+ ------------
+The stock item is used instead of an untranslated one.
+We close cleanly the window, avoiding the session recovery message.
+
+ restore-tab
+ -----------
+Minor porting work to 2.24.
+
+ sessionmanager
+ --------------
+Minor porting work to 2.24.
+Stock icons were added.
+
+ tabs_on_treeview
+ ----------------
+Major modifications to port the extension to epiphany 2.24.
+An important bug remains: the epiphany process will not exit if the
+extension has been loaded.
+
+ video-downloader
+ ----------------
+Middle-click on the icon is now supported, it opens the video inline in
+a new tab.
+
+ view-source
+ -----------
+The specific menu entry was removed, instead we override the existing
+menu entry with an identical-looking one.
+

Added: packages/experimental/epiphany-extensions-more/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/debian/changelog?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/debian/changelog (added)
+++ packages/experimental/epiphany-extensions-more/debian/changelog Thu Jan  8 19:56:45 2009
@@ -1,0 +1,5 @@
+epiphany-extensions-more (2.24.0) experimental; urgency=low
+
+  * Initial release. Closes: #510981.
+
+ -- Josselin Mouette <joss at debian.org>  Thu, 08 Jan 2009 20:29:26 +0100

Added: packages/experimental/epiphany-extensions-more/debian/compat
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/debian/compat?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/debian/compat (added)
+++ packages/experimental/epiphany-extensions-more/debian/compat Thu Jan  8 19:56:45 2009
@@ -1,0 +1,1 @@
+5

Added: packages/experimental/epiphany-extensions-more/debian/control
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/debian/control?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/debian/control (added)
+++ packages/experimental/epiphany-extensions-more/debian/control Thu Jan  8 19:56:45 2009
@@ -1,0 +1,59 @@
+Source: epiphany-extensions-more
+Section: gnome
+Priority: optional
+Maintainer: Josselin Mouette <joss at debian.org>
+Uploaders: Debian GNOME Maintainers <pkg-gnome-maintainers at lists.alioth.debian.org>
+Build-Depends: debhelper (>= 5),
+               cdbs,
+               gnome-pkg-tools (>= 0.6),
+               python-support (>= 0.7)
+Standards-Version: 3.8.0
+Homepage: http://live.gnome.org/Epiphany/ThirdPartyExtensions
+
+Package: epiphany-extensions-more
+Architecture: all
+Depends: epiphany-extensions (>= ${gnome:Version}),
+         epiphany-extensions (<< ${gnome:NextVersion}),
+         ${python:Depends},
+         ${misc:Depends},
+         python-gtk2,
+         python-gobject,
+         python-gnome2,
+         python-notify,
+         clive (>= 1)
+Description: Collection of third-party extensions for the Epiphany web browser
+ This package contains various user-contributed extensions for 
+ Epiphany, an intuitive web browser for the GNOME desktop.
+ .
+ Extensions bringing new features:
+  * Automatic Find As You Type - Start typing, and you will find text
+  * Automatic Find Links As You Type - The same, restricted to links
+  * Bookmark shortcuts - Use deskbar applet shortcuts in the URL bar
+  * Session Manager - Save session to a file and restore it later
+  * Tab Links - Copy the opened URIs to the clipboard
+  * Video Downloader - Automatically download or open Flash videos from 
+    popular sites, without Flash support
+  * View Source - View page source inside the browser
+ .
+ Modifications of the user interface:
+  * Confirm Window Close - Confirm closing when several tabs are open
+  * Hidden Menu - Hide and show the menu with a toolbar button
+  * Menubar and Toolbar beside each other
+  * Quit menu item
+  * Single Menu - All the menus merged in a single one
+  * Tabs on treeview - Replace tabs by a treeview in a sidebar
+  * Throbber remover - Removes the throbber from the toolbar
+  * Urgent Content Notify - Warn the Window Manager when a page 
+    changes in the background
+ .
+ Modifications of the tabs behaviour:
+  * Close Other Tabs - Close all tabs but the current one
+  * Colour tabs - Colorize tabs depending on the website
+  * Close tabs with middle-click
+  * Only One Close Button - Replace close buttons on the tabs by a 
+    single one in the toolbar
+  * Restore Closed Tab
+  * Tab Foreground - Open new tabs in the foreground
+  * Tab Key Tab Navigate - Use control-tab to navigate between tabs
+  * Less Tab Label Border - Reduce the border around tab labels
+  * Wide tabs - Expand tabs to use all available space

Added: packages/experimental/epiphany-extensions-more/debian/control.in
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/debian/control.in?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/debian/control.in (added)
+++ packages/experimental/epiphany-extensions-more/debian/control.in Thu Jan  8 19:56:45 2009
@@ -1,0 +1,59 @@
+Source: epiphany-extensions-more
+Section: gnome
+Priority: optional
+Maintainer: Josselin Mouette <joss at debian.org>
+Uploaders: @GNOME_TEAM@
+Build-Depends: debhelper (>= 5),
+               cdbs,
+               gnome-pkg-tools (>= 0.6),
+               python-support (>= 0.7)
+Standards-Version: 3.8.0
+Homepage: http://live.gnome.org/Epiphany/ThirdPartyExtensions
+
+Package: epiphany-extensions-more
+Architecture: all
+Depends: epiphany-extensions (>= ${gnome:Version}),
+         epiphany-extensions (<< ${gnome:NextVersion}),
+         ${python:Depends},
+         ${misc:Depends},
+         python-gtk2,
+         python-gobject,
+         python-gnome2,
+         python-notify,
+         clive (>= 1)
+Description: Collection of third-party extensions for the Epiphany web browser
+ This package contains various user-contributed extensions for 
+ Epiphany, an intuitive web browser for the GNOME desktop.
+ .
+ Extensions bringing new features:
+  * Automatic Find As You Type - Start typing, and you will find text
+  * Automatic Find Links As You Type - The same, restricted to links
+  * Bookmark shortcuts - Use deskbar applet shortcuts in the URL bar
+  * Session Manager - Save session to a file and restore it later
+  * Tab Links - Copy the opened URIs to the clipboard
+  * Video Downloader - Automatically download or open Flash videos from 
+    popular sites, without Flash support
+  * View Source - View page source inside the browser
+ .
+ Modifications of the user interface:
+  * Confirm Window Close - Confirm closing when several tabs are open
+  * Hidden Menu - Hide and show the menu with a toolbar button
+  * Menubar and Toolbar beside each other
+  * Quit menu item
+  * Single Menu - All the menus merged in a single one
+  * Tabs on treeview - Replace tabs by a treeview in a sidebar
+  * Throbber remover - Removes the throbber from the toolbar
+  * Urgent Content Notify - Warn the Window Manager when a page 
+    changes in the background
+ .
+ Modifications of the tabs behaviour:
+  * Close Other Tabs - Close all tabs but the current one
+  * Colour tabs - Colorize tabs depending on the website
+  * Close tabs with middle-click
+  * Only One Close Button - Replace close buttons on the tabs by a 
+    single one in the toolbar
+  * Restore Closed Tab
+  * Tab Foreground - Open new tabs in the foreground
+  * Tab Key Tab Navigate - Use control-tab to navigate between tabs
+  * Less Tab Label Border - Reduce the border around tab labels
+  * Wide tabs - Expand tabs to use all available space

Added: packages/experimental/epiphany-extensions-more/debian/copyright
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/debian/copyright?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/debian/copyright (added)
+++ packages/experimental/epiphany-extensions-more/debian/copyright Thu Jan  8 19:56:45 2009
@@ -1,0 +1,80 @@
+This package was debianized by Josselin Mouette <joss at debian.org> on
+Thu, 08 Jan 2009 19:23:55 +0100.
+
+It was downloaded from http://live.gnome.org/Epiphany/ThirdPartyExtensions
+
+Authors:
+    Stefan Stuhr <webmaster at sstuhr.dk> - autofindasyoutype, 
+        autofindlinksasyoutype, urgentcontentnotify, 
+        onlyoneclosebutton, tabkeytabnavigate, tablabelborder, 
+        confirmwindowclose, menuandtoolbar, singlemenu
+    Nigel Tao <nigeltao at gnome.org> - bookmarkshortcuts
+    Simon Ward <simon at bleah.co.uk> - session-manager
+    George Notaras <gnotar at gmail.com> - tablinks
+    Diego Escalante Urrelo <diegoe at gnome.org> - throbber-remover, 
+        view-source, widetabs, hidden-menu
+    Adam Schmalhofer <schmalho at users.berlios.de> - video-downloader
+    Sean Fulmer <wsfulmer at gmail.com> - close_other_tabs
+    Siegfried Gevatter <rainct at ubuntu.com> - middle-click-closes-tab
+    Michael Opitz <opitz.michael at gmail.com> - restore-tab
+    Charles-Henri d’Adhémar <cdadhemar at free.fr> - tabforeground
+    Reinout van Schouwen <reinouts at gnome.org> - quitmenuitem
+    Michel Kevin <kmichel.info at gmail.com> - tabs_on_treeview
+    Thomas Thurman <tthurman at gnome.org> - colour-tabs
+
+Copyright:
+    Copyright © 2006-2007 Stefan Stuhr
+    Copyright © 2006 Nigel Tao
+    Copyright © 2007 Simon E. Ward
+    Copyright © 2007 George Notaras
+    Copyright © 2006, 2008 Diego Escalante Urrelo
+    Copyright © 2006 Jaime Frutos Morales
+    Copyright © 2008 Adam Schmalhofer
+    Copyright © 2008 Wouter Bolsterlee
+    Copyright © 2008 Sean Fulmer
+    Copyright © 2007 Thomas Thurman
+    Copyright © 2008 Siegfried Gevatter
+    Copyright © 2007 Michael Opitz
+    Copyright © 2007 Charles-Henri d’Adhémar
+    Copyright © 2008 Reinout van Schouwen
+    Copyright © Michel Kevin
+    Copyright © 2009 Josselin Mouette
+
+
+License for the session-manager and tabforeground extensions:
+
+   This package is free software; you can redistribute it and/or modify
+   it under the terms of version 2 of the GNU General Public License
+   as published by the Free Software Foundation.
+
+   This package is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this package; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL-2'.
+
+
+License for the other extensions and the Debian changes:
+
+   This package 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.
+
+   This package is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this package; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.

Added: packages/experimental/epiphany-extensions-more/debian/docs
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/debian/docs?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/debian/docs (added)
+++ packages/experimental/epiphany-extensions-more/debian/docs Thu Jan  8 19:56:45 2009
@@ -1,0 +1,1 @@
+docs/*

Added: packages/experimental/epiphany-extensions-more/debian/rules
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/debian/rules?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/debian/rules (added)
+++ packages/experimental/epiphany-extensions-more/debian/rules Thu Jan  8 19:56:45 2009
@@ -1,0 +1,24 @@
+#! /usr/bin/make -f
+
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/gnome-pkg-tools/1/rules/gnome-version.mk
+include /usr/share/gnome-pkg-tools/1/rules/uploaders.mk
+
+webkit_exts = \
+ bookmark-shortcuts session-manager tablinks close_other_tabs \
+ middle-click-closes-tab restore-tab tabkeytabnavigate tablabelborder \
+ widetabs confirmwindowclose hidden-menu quitmenuitem singlemenu \
+ tabs_on_treeview throbber-remover
+
+binary-post-install/epiphany-extensions-more::
+	dh_pysupport -p$(cdbs_curpkg) /usr/lib/epiphany-gecko/$(DEB_GNOME_VERSION)/extensions
+
+binary-install/epiphany-extensions-more::
+	mkdir -p debian/$(cdbs_curpkg)/usr/lib/epiphany-gecko/$(DEB_GNOME_VERSION)/extensions
+	install -m 644 misc/*.py tabs/*.py ui/*.py debian/$(cdbs_curpkg)/usr/lib/epiphany-gecko/$(DEB_GNOME_VERSION)/extensions/
+	install -m 644 misc/*.ephy-extension tabs/*.ephy-extension ui/*.ephy-extension debian/$(cdbs_curpkg)/usr/lib/epiphany-gecko/$(DEB_GNOME_VERSION)/extensions/
+	mkdir -p debian/$(cdbs_curpkg)/usr/lib/epiphany-webkit/$(DEB_GNOME_VERSION)/extensions
+	cd debian/$(cdbs_curpkg)/usr/lib/epiphany-webkit/$(DEB_GNOME_VERSION)/extensions && \
+		for i in $(webkit_exts); do \
+			ln -s ../../../epiphany-gecko/$(DEB_GNOME_VERSION)/extensions/$$i.* . ; \
+		done

Propchange: packages/experimental/epiphany-extensions-more/debian/rules
------------------------------------------------------------------------------
    svn:executable = *

Added: packages/experimental/epiphany-extensions-more/docs/README.bookmarkshortcuts
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/docs/README.bookmarkshortcuts?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/docs/README.bookmarkshortcuts (added)
+++ packages/experimental/epiphany-extensions-more/docs/README.bookmarkshortcuts Thu Jan  8 19:56:45 2009
@@ -1,0 +1,19 @@
+This Epiphany extension uses the Deskbar's shortcuts for the browser's "smart
+bookmarks", or searches, so that, if you have the Wikipedia search bookmarked,
+and you have configured Deskbar properly, you can type "wp foo" in Epiphany's
+location bar to go to http://en.wikipedia.org/wiki/Special:Search?search=%foo
+
+To configure the Deskbar's shortcuts, right-click on its icon, choose
+Preferences and from the "Web Searches" extension, click the "More..." button.
+Alternatively, just edit Deskbar's list of search shortcuts (it's a text file):
+~/.gnome2/deskbar-applet/search-bookmarks-shortcuts.txt
+
+To install, move the .py and .xml files into ~/.gnome2/epiphany/extensions/
+and then, from Epiphany's menu, go to Tools -> Extensions to enable it.
+
+Note that this is an Epiphany extension, not a Deskbar extension.  Deskbar
+comes out-of-the-box with this behavior.
+
+This has been tested with Deskbar 2.14 and Epiphany 2.14.
+Nigel Tao, 2006-10-17.
+

Added: packages/experimental/epiphany-extensions-more/docs/README.close_other_tabs
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/docs/README.close_other_tabs?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/docs/README.close_other_tabs (added)
+++ packages/experimental/epiphany-extensions-more/docs/README.close_other_tabs Thu Jan  8 19:56:45 2009
@@ -1,0 +1,38 @@
+Close Other Tabs
+===
+
+Legal Nonsense
+==
+
+Copyright (C) 2008 Sean Fulmer <wsfulmer at gmail.com>
+
+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.  For more information, see COPYING.
+
+What Is It?
+==
+
+Close Other Tabs is a small extension for Epiphany that adds items to the main 
+and tab context menus to allow you to close tabs other than the active tab. You
+can close all other tabs, or tabs to the left/right of the current tab. This 
+was inspired by similar functionality in the Tab Mix Plus extension for Firefox. 
+
+Installation
+==
+
+For now, simply copy the following files to ~/.gnome2/epiphany/extensions:
+
+* close_other_tabs.ephy-extension
+* close_other_tabs.py
+
+Typing make install will do this for you.
+
+Then go to Tools->Extensions... and enable Close Other Tabs.
+
+Thanks To
+==
+Ross Burton, from whose EphyDeli extension I borrowed the Makefile and the
+general project layout
+http://www.burtonini.com/blog//computers/ephydeli-2006-08-29-21-40

Added: packages/experimental/epiphany-extensions-more/docs/README.tablinks
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/docs/README.tablinks?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/docs/README.tablinks (added)
+++ packages/experimental/epiphany-extensions-more/docs/README.tablinks Thu Jan  8 19:56:45 2009
@@ -1,0 +1,23 @@
+Tab Links extension for Epiphany written in Python
+
+Please read the info at the plugin's home:
+
+http://www.g-loaded.eu/2007/02/28/tab-links-extension-for-the-epiphany-browser/
+
+LICENSE INFO:
+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.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the:
+
+Free Software Foundation, Inc.,
+59 Temple Place, Suite 330, Boston,
+MA 02111-1307  USA

Added: packages/experimental/epiphany-extensions-more/docs/README.video-downloader
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/docs/README.video-downloader?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/docs/README.video-downloader (added)
+++ packages/experimental/epiphany-extensions-more/docs/README.video-downloader Thu Jan  8 19:56:45 2009
@@ -1,0 +1,77 @@
+About
+=====
+
+This in an extension for the Epiphany Webbrowser. It searches the viewed web 
+page for videos from youtube as well as the address bar for known video hosting
+sites. Once found it displays a small icon on the status bar. If you click on 
+it the video(s) are downloaded.
+
+A longer description of this extension is available at:
+
+  http://blauebirke.wordpress.com/2008/09/09/epiphany-video-download-extension/
+
+More news will be posted at:
+
+  http://blauebirke.wordpress.com/tag/epiphany/
+
+clive can be found at:
+
+  http://clive.sourceforge.net/  (or in your favourite distribution)
+
+
+Licence
+=======
+
+Like all Epiphany extensions, it is Free Software licenced under the GNU 
+General Public Licence either version 2, or (at your option) any later version.
+Unless otherwise written this includes all files here. As of writing the only
+exception is the file README.it which is under the Creative Commons by-sa 3.0.
+
+Install
+=======
+
+To install just copy the files "video-downloader.ephy-extension" and 
+"video-downloader.py" into one of epiphany's extensions folder: 
+"~/.gnome2/epiphany/extensions/" or "/usr/lib/epiphany-gecko/2.22/extensions/". 
+Don’t forget to install clive (both 1.x and 2.x are fine). Then you can 
+activate it in the "Tools/Extensions" menu.
+
+
+Pre-requirements
+----------------
+
+In addition to epiphany and clive there are a few dependancies. However these 
+should already be installed on any resonable GNOME desktop. Here is a list of 
+them:
+
+* epiphany
+* clive
+* python
+* python-gconf
+* python-gtk2
+* python-libnotify
+
+Bugs, issues and questions
+==========================
+
+Please don't hesitate to drop a line at:
+
+  http://blauebirke.wordpress.com/2008/09/09/epiphany-video-download-extension/
+
+If you prefer writing an email: Adam.Schmalhofer at gmx.de
+
+New versions and development
+============================
+
+New versions are published at:
+
+  http://wwwpub.zih.tu-dresden.de/~s5827060/epiphany-video/
+
+and can easily be downloaded there. It is a bazaar tree, so if you want to 
+help develop or an easy way to keep up with the newest version you can:
+
+  bzr co http://wwwpub.zih.tu-dresden.de/~s5827060/epiphany-video/
+
+to initially get the copy and then update it in the created directory with:
+
+  bzr pull

Added: packages/experimental/epiphany-extensions-more/misc/autofindasyoutype.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/autofindasyoutype.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/autofindasyoutype.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/misc/autofindasyoutype.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,11 @@
+[Epiphany Extension]
+Name=Automatic Find As You Type
+Description=Start typing, and you will find
+Authors=Stefan Stuhr
+Version=1
+URL=http://www.sstuhr.dk/epiphany-extensions/
+
+
+[Loader]
+Type=python
+Module=autofindasyoutype

Added: packages/experimental/epiphany-extensions-more/misc/autofindasyoutype.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/autofindasyoutype.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/autofindasyoutype.py (added)
+++ packages/experimental/epiphany-extensions-more/misc/autofindasyoutype.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,97 @@
+#   Automatic Find As You Type - Epiphany Extension
+#   Copyright (C) 2006  Stefan Stuhr
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import gtk
+import gobject
+import epiphany
+
+def afayt_get_entry(widget):
+	for child in widget.get_children():
+		if isinstance(child, gtk.Entry):
+			return child
+		elif hasattr(child, "get_children"):
+			result = afayt_get_entry(child)
+			if result != None and isinstance(result, gtk.Entry):
+				return result
+
+	return None
+
+def afayt_idle_cb(window, entry):
+	entry.emit("changed")
+
+	delattr(window, "_afayt_idle_id")
+
+def afayt_search_key_press_cb(embed, event, window, toolbar):
+	if hasattr(window, "_afayt_idle_id"):
+		gobject.source_remove(window._afayt_idle_id)
+		delattr(window, "_afayt_idle_id")
+
+	if window.get_is_print_preview():
+		return
+
+	unival = gtk.gdk.keyval_to_unicode(event.keyval)
+	if unival == 0:
+		unistr = u""
+	else:
+		unistr = unichr(unival)
+
+	if unistr in (u"", u"'", u"/", u" "):
+		return
+
+	entry = afayt_get_entry(toolbar)
+	entry.set_text("")
+
+	if hasattr(toolbar, "open"):
+		toolbar.open(False, True)
+	else:
+		toolbar.show()
+
+	entry.insert_text(unistr, 0)
+	entry.grab_focus()
+	entry.set_position(-1)
+
+	window._afayt_idle_id = gobject.idle_add(afayt_idle_cb, window, entry)
+
+	return True
+
+def detach_window(window):
+	if hasattr(window, "_afayt_idle_id"):
+		gobject.source_remove(window._afayt_idle_id)
+		delattr(window, "_afayt_idle_id")
+
+def attach_tab(window, tab):
+	if hasattr(tab, "get_embed"):
+		embed = tab.get_embed()
+	else:
+		embed = tab
+	signal = embed.connect("ge-search-key-press", afayt_search_key_press_cb, window, window.get_find_toolbar())
+
+	tab._afayt_search_key_press_sig = signal
+
+def detach_tab(window, tab):
+	if not hasattr(tab, "_afayt_search_key_press_sig"):
+		return
+
+	if hasattr(tab, "get_embed"):
+		embed = tab.get_embed()
+	else:
+		embed = tab
+	embed.disconnect(tab._afayt_search_key_press_sig)
+
+	delattr(tab, "_afayt_search_key_press_sig")
+

Added: packages/experimental/epiphany-extensions-more/misc/autofindlinksasyoutype.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/autofindlinksasyoutype.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/autofindlinksasyoutype.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/misc/autofindlinksasyoutype.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,11 @@
+[Epiphany Extension]
+Name=Automatic Find Links As You Type
+Description=Start typing, and you will find links
+Authors=Stefan Stuhr
+Version=1
+URL=http://www.sstuhr.dk/epiphany-extensions/
+
+
+[Loader]
+Type=python
+Module=autofindlinksasyoutype

Added: packages/experimental/epiphany-extensions-more/misc/autofindlinksasyoutype.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/autofindlinksasyoutype.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/autofindlinksasyoutype.py (added)
+++ packages/experimental/epiphany-extensions-more/misc/autofindlinksasyoutype.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,97 @@
+#   Automatic Find Links As You Type - Epiphany Extension
+#   Copyright (C) 2006-2007  Stefan Stuhr
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import gtk
+import gobject
+import epiphany
+
+def aflayt_get_entry(widget):
+	for child in widget.get_children():
+		if isinstance(child, gtk.Entry):
+			return child
+		elif hasattr(child, "get_children"):
+			result = aflayt_get_entry(child)
+			if result != None and isinstance(result, gtk.Entry):
+				return result
+
+	return None
+
+def aflayt_idle_cb(window, entry):
+	entry.emit("changed")
+
+	delattr(window, "_aflayt_idle_id")
+
+def aflayt_search_key_press_cb(embed, event, window, toolbar):
+	if hasattr(window, "_aflayt_idle_id"):
+		gobject.source_remove(window._aflayt_idle_id)
+		delattr(window, "_aflayt_idle_id")
+
+	if window.get_is_print_preview():
+		return
+
+	unival = gtk.gdk.keyval_to_unicode(event.keyval)
+	if unival == 0:
+		unistr = u""
+	else:
+		unistr = unichr(unival)
+
+	if unistr in (u"", u"'", u"/", u" "):
+		return
+
+	entry = aflayt_get_entry(toolbar)
+	entry.set_text("")
+
+	if hasattr(toolbar, "open"):
+		toolbar.open(True, True)
+	else:
+		toolbar.show()
+
+	entry.insert_text(unistr, 0)
+	entry.grab_focus()
+	entry.set_position(-1)
+
+	window._aflayt_idle_id = gobject.idle_add(aflayt_idle_cb, window, entry)
+
+	return True
+
+def detach_window(window):
+	if hasattr(window, "_aflayt_idle_id"):
+		gobject.source_remove(window._aflayt_idle_id)
+		delattr(window, "_aflayt_idle_id")
+
+def attach_tab(window, tab):
+	if hasattr(tab, "get_embed"):
+		embed = tab.get_embed()
+	else:
+		embed = tab
+	signal = embed.connect("ge-search-key-press", aflayt_search_key_press_cb, window, window.get_find_toolbar())
+
+	tab._aflayt_search_key_press_sig = signal
+
+def detach_tab(window, tab):
+	if not hasattr(tab, "_aflayt_search_key_press_sig"):
+		return
+
+	if hasattr(tab, "get_embed"):
+		embed = tab.get_embed()
+	else:
+		embed = tab
+	embed.disconnect(tab._aflayt_search_key_press_sig)
+
+	delattr(tab, "_aflayt_search_key_press_sig")
+

Added: packages/experimental/epiphany-extensions-more/misc/bookmark-shortcuts.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/bookmark-shortcuts.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/bookmark-shortcuts.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/misc/bookmark-shortcuts.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,11 @@
+[Epiphany Extension]
+Name=Bookmark shortcuts
+Description=Use deskbar applet shortcuts in the URL bar
+Authors=Nigel Tao
+Version=1
+URL=http://www.gnome.org/~nigeltao/epiphany_extensions/bookmark-shortcuts/
+
+
+[Loader]
+Type=python
+Module=bookmark-shortcuts

Added: packages/experimental/epiphany-extensions-more/misc/bookmark-shortcuts.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/bookmark-shortcuts.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/bookmark-shortcuts.py (added)
+++ packages/experimental/epiphany-extensions-more/misc/bookmark-shortcuts.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,88 @@
+# (c) 2006-10-17 by Nigel Tao <nigeltao at gnome.org>, GPL licensed.
+#
+# Shortcuts for Epiphany's searches, shared with the deskbar applet.
+
+
+import epiphany, gnomevfs, os
+
+
+def load_map():
+	global sc_bm_map, shortcuts_file
+	sc_bm_map.clear()
+	try:
+		for line in file(shortcuts_file):
+			line = line.strip()
+			if len(line) > 0:
+				try:
+					url, shortcut = line.split()
+					sc_bm_map[shortcut] = url
+				except ValueError:
+					# Ignore badly formatted lines.
+					pass
+	except IOError:
+		# The file probably does not exist.  Ignore the error.
+		pass
+
+
+def on_vfs_monitor(monitored_uri, altered_uri, event_type):
+	load_map()
+
+
+def resolve_address_cb(bookmarks, address, smart_bookmark_content):
+	global sc_bm_map
+	address = address.strip()
+	n = address.find(' ')
+	if n == -1:
+		shortcut, args = address, ''
+	else:
+		shortcut, args = address[:n], address[n+1:]
+	try:
+		return sc_bm_map[shortcut].replace('%s', args)
+	except KeyError:
+		return None
+
+
+def extension_initialize():
+	global gnomevfs_id, shortcuts_file
+	bookmarks = epiphany.ephy_shell_get_default().get_bookmarks()
+	# bmsc stands for BookMark ShortCut.
+	bookmarks._bmsc_signal = bookmarks.connect('resolve-address',
+	                                           resolve_address_cb)
+	load_map()
+	gnomevfs_id = gnomevfs.monitor_add('file://' + shortcuts_file,
+	                                   gnomevfs.MONITOR_FILE,
+	                                   on_vfs_monitor)
+
+
+def extension_finalize():
+	global gnomevfs_id
+	bookmarks = epiphany.ephy_shell_get_default().get_bookmarks()
+	signal = bookmarks._bmsc_signal
+	del bookmarks._bmsc_signal
+	bookmarks.disconnect(signal)
+	if gnomevfs_id != None:
+		gnomevfs.monitor_cancel(gnomevfs_id)
+		gnomevfs_id = None
+
+
+def attach_window(window):
+	# I don't think that there is a race condition with this a_w_c variable,
+	# since this code all happens in the GUI thread...
+	global attached_window_count
+	if attached_window_count == 0:
+		extension_initialize()
+	attached_window_count = attached_window_count + 1
+
+
+def detach_window(window):
+	global attached_window_count
+	attached_window_count = attached_window_count - 1
+	if attached_window_count == 0:
+		extension_finalize()
+
+
+shortcuts_file = os.path.expanduser(
+                 "~/.gnome2/deskbar-applet/search-bookmarks-shortcuts.txt")
+attached_window_count = 0
+gnomevfs_id = None
+sc_bm_map = {}  # map from ShortCuts to (smart) BookMarks

Added: packages/experimental/epiphany-extensions-more/misc/session-manager.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/session-manager.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/session-manager.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/misc/session-manager.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=Session Manager
+Description=Adds the ability to save the current session to a file, and restore saved sessions.
+Authors=Simon Ward <simon at bleah.co.uk>
+URL=http://bleah.co.uk/miscbits/epiphany-session-manager
+Version=0.1
+
+[Loader]
+Type=python
+Module=session-manager

Added: packages/experimental/epiphany-extensions-more/misc/session-manager.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/session-manager.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/session-manager.py (added)
+++ packages/experimental/epiphany-extensions-more/misc/session-manager.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,127 @@
+# -*- coding: utf-8 -*-
+
+# Session save/restore facility for Epiphany
+#
+# Copyright © 2007 Simon E. Ward <simon at bleah.co.uk>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of version 2 of the GNU General Public
+# License as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA
+
+import epiphany
+import gtk
+import os.path
+
+_ui_str = """
+<ui>
+	<menubar name="menubar">
+		<menu name="ToolsMenu" action="Tools">
+			<separator/>
+			<menuitem name="LoadSession" action="LoadSession"/>
+			<menuitem name="SaveSession" action="SaveSession"/>
+			<separator/>
+		</menu>
+	</menubar>
+</ui>
+"""
+
+def _warn_on_overwrite(parent, filename):
+	dirname, basename = os.path.split(filename)
+	msg = 'A file named "%s" already exists in the directory "%s".'\
+	      'Do you want to overwrite it?' % (basename, dirname)
+	dialog = gtk.MessageDialog(
+			parent=parent,
+			flags=gtk.DIALOG_MODAL
+			     |gtk.DIALOG_DESTROY_WITH_PARENT,
+			type=gtk.MESSAGE_WARNING,
+			buttons=gtk.BUTTONS_YES_NO,
+			message_format=msg)
+	overwrite = dialog.run()
+	dialog.destroy()
+	return overwrite
+
+def _show_dialog(title, action):
+	if action == gtk.FILE_CHOOSER_ACTION_SAVE:
+		ok_button = gtk.STOCK_SAVE
+	else:
+		ok_button = gtk.STOCK_OPEN
+
+	dialog = gtk.FileChooserDialog(
+			title=title,
+			action=action,
+			buttons=(
+				gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+				ok_button, gtk.RESPONSE_OK
+				)
+			)
+	dialog.set_default_response(gtk.RESPONSE_OK)
+
+	response = dialog.run()
+	if response == gtk.RESPONSE_OK:
+		filename = dialog.get_filename()
+
+		if action == gtk.FILE_CHOOSER_ACTION_SAVE:
+			while os.path.exists(filename):
+				if _warn_on_overwrite(dialog, filename) \
+					== gtk.RESPONSE_YES:
+					break
+				response = dialog.run()
+				if response != gtk.RESPONSE_OK:
+					filename = None
+					break
+				filename = dialog.get_filename()
+	else:
+		filename = None
+
+	dialog.destroy()
+	return filename
+
+def _get_session():
+	shell = epiphany.ephy_embed_shell_get_default()
+	return shell.get_session()
+
+def _save_session(action, session):
+	filename = _show_dialog('Save Session',
+				gtk.FILE_CHOOSER_ACTION_SAVE)
+	if filename:
+		session.save(filename)
+
+def _load_session(action, session):
+	filename = _show_dialog('Load Session',
+				gtk.FILE_CHOOSER_ACTION_OPEN)
+	if filename:
+		session.load(filename, 0)
+
+_actions = [
+	('LoadSession', "gtk-open", 'Load Session…', None, None, _load_session),
+	('SaveSession', "gtk-save-as", 'Save Session…', None, None, _save_session),
+	]
+
+def attach_window(window):
+	session = _get_session()
+	ui_manager = window.get_ui_manager()
+	group = gtk.ActionGroup('SessionManager')
+	group.add_actions(_actions, user_data=session)
+	ui_manager.insert_action_group(group, -1)
+	ui_id = ui_manager.add_ui_from_string(_ui_str)
+
+	window._session_manager_data = (group, ui_id)
+
+def detach_window(window):
+	group, ui_id = window._session_manager_data
+	del window._session_manager_data
+
+	ui_manager = window.get_ui_manager()
+	ui_manager.remove_ui(ui_id)
+	ui_manager.remove_action_group(group)
+	ui_manager.ensure_update()

Added: packages/experimental/epiphany-extensions-more/misc/tablinks.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/tablinks.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/tablinks.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/misc/tablinks.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=Tab Links
+Description=Allows the user to copy all the tabs' URIs to clipboard in a variety of formats.
+Authors=George Notaras <gnotar at gmail.com>
+URL=http://www.g-loaded.eu/2007/02/28/tab-links-extension-for-the-epiphany-browser/
+Version=0.1
+
+[Loader]
+Type=python
+Module=tablinks

Added: packages/experimental/epiphany-extensions-more/misc/tablinks.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/tablinks.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/tablinks.py (added)
+++ packages/experimental/epiphany-extensions-more/misc/tablinks.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,128 @@
+# -*- coding: utf-8 -*-
+#
+# Tab Links extension for Epiphany written in Python
+#
+# Version: 0.1
+#
+# Copyright (c) 2007 George Notaras <gnotar at gmail.com>
+#
+# This plugin is UNOFFICIAL and completely UNSUPPORTED.
+# It is released without any warranties of any kind.
+#
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the:
+#
+# Free Software Foundation, Inc.,
+# 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307  USA
+#
+
+
+import gtk
+
+# Menu Items
+_ui_str = """
+<ui>
+	<menubar name="menubar">
+		<menu name="ToolsMenu" action="Tools">
+			<separator />
+			<menu name="Tab Links Menu" action="TabLinksMenu">
+				<menuitem name="Default" action="CopyTabLinksDefault" />
+				<menuitem name="Mediawiki" action="CopyTabLinksMediaWiki" />
+				<menuitem name="MoinMoin" action="CopyTabLinksMoinMoin" />
+				<menuitem name="DokuWiki" action="CopyTabLinksDokuwiki" />
+				<menuitem name="HTML" action="CopyTabLinksHTML" />
+			</menu>
+			<separator />
+		</menu>
+	</menubar>
+</ui>
+"""
+
+def _get_tab_links_list(window):
+	LinkList = []
+	for aTab in window.get_notebook():
+		LinkList.append( (aTab.get_address(), aTab.get_title() ) )
+	return LinkList
+
+def _copy_links_text_to_clipboard(LinksText):
+	clipboard = gtk.Clipboard(gtk.gdk.display_get_default(), 'CLIPBOARD')
+	clipboard.set_text(LinksText, -1)
+
+def _get_formatted_links_text(window, format = ""):
+	LinkList = _get_tab_links_list(window)
+	outfmt = {
+		# Format: "format_name" : (leading_text, format_template, trailing_text)
+		# contains all except the default bare naked link list
+		"mediawiki"	: ("", "* [%s %s]", ""),
+		"moinmoin"	: ("", " * [%s %s]", ""),
+		"dokuwiki"	: ("", "  * [[%s|%s]]", ""),
+		"html"		: ("<ul>\n", "<li><a href=\"%s\">%s</a></li>", "\n</ul>"),
+		}
+	if LinkList:
+		if outfmt.has_key(format):
+			LinksText = "\n".join( [ outfmt[format][1] % (tablink[0], tablink[1]) for tablink in LinkList if tablink] )
+			LinksText = "%s%s%s" % ( outfmt[format][0], LinksText, outfmt[format][2] )
+		else:
+			# just return the links
+			LinksText = "\n".join( [tablink[0] for tablink in LinkList if tablink] )
+		_copy_links_text_to_clipboard(LinksText)
+
+
+def _copy_tab_links_default(action, window):
+	_get_formatted_links_text(window, "default")
+
+def _copy_tab_links_mediawiki(action, window):
+	_get_formatted_links_text(window, "mediawiki")
+
+def _copy_tab_links_moinmoin(action, window):
+	_get_formatted_links_text(window, "moinmoin")
+
+def _copy_tab_links_dokuwiki(action, window):
+	_get_formatted_links_text(window, "dokuwiki")
+
+def _copy_tab_links_html(action, window):
+	_get_formatted_links_text(window, "html")
+
+
+# This is to pass to gtk.ActionGroup.add_actions()
+_actions = [
+		('TabLinksMenu', None, 'Tab Links', None, None, None),
+		('CopyTabLinksDefault', None, 'Default', None, None, _copy_tab_links_default),
+		('CopyTabLinksMediaWiki', None, 'Mediawiki', None, None, _copy_tab_links_mediawiki),
+		('CopyTabLinksMoinMoin', None, 'MoinMoin', None, None, _copy_tab_links_moinmoin),
+		('CopyTabLinksDokuwiki', None, 'DokuWiki', None, None, _copy_tab_links_dokuwiki),
+		('CopyTabLinksHTML', None, 'HTML', None, None, _copy_tab_links_html),
+		]
+
+# These implement the EphyExtension interface.
+
+def attach_window(window):
+	ui_manager = window.get_ui_manager()
+	group = gtk.ActionGroup('TabLinks')
+	group.add_actions(_actions, window)
+	ui_manager.insert_action_group(group, -1)
+	ui_id = ui_manager.add_ui_from_string(_ui_str)
+
+	window._TabLinks_data = (group, ui_id)
+
+
+def detach_window(window):
+	group, ui_id = window._TabLinks_data
+	del window._TabLinks_data
+
+	ui_manager = window.get_ui_manager()
+	ui_manager.remove_ui(ui_id)
+	ui_manager.remove_action_group(group)
+	ui_manager.ensure_update()
+

Added: packages/experimental/epiphany-extensions-more/misc/video-downloader.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/video-downloader.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/video-downloader.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/misc/video-downloader.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=Video Downloader
+Description=Downloads embeded Youtube videos (and other video hosting sites) via clive.
+Authors=Adam Schmalhofer <schmalho at users.berlios.de>
+Version=1
+URL=http://blauebirke.wordpress.com/2008/09/09/epiphany-video-download-extension/
+
+[Loader]
+Type=python
+Module=video-downloader

Added: packages/experimental/epiphany-extensions-more/misc/video-downloader.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/video-downloader.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/video-downloader.py (added)
+++ packages/experimental/epiphany-extensions-more/misc/video-downloader.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,346 @@
+# -*- coding: utf-8 -*-
+#
+# Epiphany extension: Video downloader; 
+# Based on Creative Commons license viewer [Version 0.2 (27/07/2006)]
+#    Copyright (C) 2006 Jaime Frutos Morales <acidborg at gmail.com>
+# Copyright (C) 2008 Adam Schmalhofer <schmalho at users.berlios.de>
+#
+# 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, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+"""
+An extension for the GNOME Web Browser 'Epiphany'. It searches the page as well
+as the URL in the address bar for known video hosting sites. These embeded 
+videos then can be via clive.
+"""
+
+CLIVE_VERSION = 1
+
+import re
+import gconf
+from subprocess import Popen, PIPE
+from os import path
+
+import epiphany
+import gobject
+import pygtk
+pygtk.require('2.0')
+import gtk
+import pynotify
+from pynotify import Notification
+from gettext import gettext as _, ngettext as N_
+
+GCONF_KEY_DOWNLOAD_FOLDER = '/apps/epiphany/directories/downloads_folder'
+GCONF_KEY_USE_PROXY = '/system/http_proxy/use_http_proxy'
+GCONF_KEY_PROXY_PORT = '/system/http_proxy/port'
+GCONF_KEY_PROXY_HOST = '/system/http_proxy/host'
+GCONF_KEY_USE_PROXY_AUTH = '/system/http_proxy/use_authentication'
+GCONF_KEY_PROXY_USER = '/system/http_proxy/authentication_user'
+GCONF_KEY_PROXY_PASSWORD = '/system/http_proxy/authentication_password'
+
+# Each element in EMBEDED_VIDEO_RE_LIST must contain exactly one set of braces.
+EMBEDED_VIDEO_RE_LIST = [
+    r'(?:[a-z]{2,3}\.)?youtube\.[a-z]{2,3}/[^\'"#&]*v[=/]([\w-]{11})',
+    r'video\.google\.com/googleplayer\.swf\?docid=(\d{19})',
+    r'www\.dailymotion\.com/swf/(\w{18})',
+    r'www\.guba\.com/f/root\.swf\?video_url=http://free\.guba\.com/uploaditem/(\d{10})/flash\.flv',
+    r'www\.metacafe\.com/fplayer/(\d{7}/\w+)\.swf',
+    r'(?:[a-z]{2,3}\.)?sevenload\.[a-z]{2,3}/pl/(\w{7})']
+# One element in VIDEO_PAGE_BASE for each in EMBEDED_VIDEO_RE_LIST. 
+# %s is replaced with the string matching the braces in EMBEDED_VIDEO_RE_LIST.
+VIDEO_PAGE_BASE = [
+    r'http://youtube.com/watch?v=%s',
+    r'http://video.google.com/videoplay?docid=%s',
+    r'http://www.dailymotion.com/video/%s',
+    r'http://www.guba.com/watch/%s',
+    r'http://www.metacafe.com/watch/%s',
+    r'http://sevenload.com/videos/%s' ]
+URL_VIDEO_RE_BASE_LIST = [ 
+    r'[a-z]{2,3}\.youtube\.com/watch\?v=[\w-]{11}',
+    r'video\.google\.com/videoplay\?docid=\d{19}',
+    r'www\.dailymotion\.com(/.*)?/video/',
+    r'www\.guba\.com/watch/',
+    r'www\.metacafe\.com/watch/',
+    r'[a-z]{2,3}\.sevenload\.com/(videos|sendungen/[a-z-]+/folgen|shows/[a-z-]+/episodes)/\w' ]
+CLIVE2X_ONLY_URL_VIDEO_RE_BASE_LIST = [ 
+    r'break\.com/[a-z-]+/[a-z-]+\.html',
+    r'www\.evisor\.tv/tv/[a-z0-9_-]+/[a-z0-9_-]+\d{4}\.htm',
+    r'www\.liveleak\.com/view\?i=\d{3}_\d{10}' ]
+if CLIVE_VERSION == 2:
+    URL_VIDEO_RE_BASE_LIST.extend(CLIVE2X_ONLY_URL_VIDEO_RE_BASE_LIST)
+URL_VIDEO_RE = re.compile('^http://(%s)' % 
+        '|'.join(URL_VIDEO_RE_BASE_LIST), re.I)
+EMBEDED_VIDEO_RE = re.compile('http://(%s)' % 
+        '|'.join(EMBEDED_VIDEO_RE_LIST), re.I)
+
+def _switch_page_cb(notebook, page, page_num, window):
+    ui_show(window, window.get_active_child())
+
+def _load_status_cb(embed, data, window):
+    detect_videos_in_address(window, embed)
+    if not embed.get_property('load-status') and not embed._has_video:
+        # page is loaded and url isn't a video hosting page
+        detect_videos_in_page(window, embed)
+    ui_show(window, embed)
+        
+def _video_button_pressed(widget, event, window):
+    if event.button not in [1,2]:
+        return
+    embed = window.get_active_child()
+    if pynotify.init('Basics') and event.button == 1:
+        n = Notification(_('Started downloading.'), 
+                N_('Started to download %s video.', 
+                'Started to download %s videos.', len(embed._video_urls)) % \
+                         len(embed._video_urls) )
+        n.set_urgency(pynotify.URGENCY_LOW)
+        x, y = embed.get_pointer()
+        forget, x, y, forget = gtk.gdk.\
+                screen_get_default().get_display().get_pointer()
+        n.set_hint('x', x)
+        n.set_hint('y', y)
+        n.show()
+    download_videos(window, embed, embed._video_urls, event.button == 2)
+
+def ui_init(window):
+    cc_image = gtk.Image()
+    icon_theme = gtk.icon_theme_get_default()
+    pixbuf = icon_theme.load_icon('video', 
+            gtk.icon_size_lookup(gtk.ICON_SIZE_MENU)[0], 0)
+    cc_image.set_from_pixbuf(pixbuf)
+    cc_image.show()
+
+    eventbox = gtk.EventBox()    
+    eventbox.set_visible_window(True)
+    eventbox.connect ("button-press-event", _video_button_pressed, window);
+    # Pack the widgets
+    eventbox.add(cc_image)
+    eventbox.show()    
+
+    statusbar = window.get_statusbar()
+    statusbar.add_widget(eventbox)
+    statusbar._video_eventbox = eventbox
+
+def ui_show(window, embed):
+    if embed != window.get_active_child(): return
+
+    statusbar = window.get_statusbar()
+    eventbox = statusbar._video_eventbox
+    
+    try:
+        if embed._has_video:
+            n = len(embed._video_urls)
+            eventbox.set_tooltip_text(
+                    N_("%s embeded video", "%s embeded videos", n) % n)
+            eventbox.show()
+        else:
+            eventbox.hide()
+    except: 
+        eventbox.hide()
+
+def ui_destroy(window):
+    statusbar = window.get_statusbar()
+    eventbox = statusbar._video_eventbox
+    del statusbar._video_eventbox
+    statusbar.remove_widget(eventbox)
+
+def on_gconf_new_downloads_folder(client, gconf_id, gconf_entry, **kwargs):
+    update_downloads_folder()
+
+def on_gconf_proxy_changed(client, gconf_id, gconf_entry, **kwargs):
+    update_proxy_settings()
+
+def update_proxy_settings():
+    global proxy
+    g = gconf_client
+    if g.get_bool(GCONF_KEY_USE_PROXY):
+        # XXX: Should check if string is a valid proxy.
+        proxy = '%s:%s' % (g.get_string(GCONF_KEY_PROXY_HOST), \
+                g.get_int(GCONF_KEY_PROXY_PORT))
+        if g.get_bool(GCONF_KEY_USE_PROXY_AUTH):
+            proxy = 'http://%s:%s@%s' % (g.get_string(GCONF_KEY_PROXY_USER), \
+                    g.get_string(GCONF_KEY_PROXY_PASSWORD), proxy)
+    else:
+        proxy = None
+
+def update_downloads_folder():
+    global downloads_folder
+    new_folder = path.join(path.expanduser('~'), path.expanduser(
+            gconf_client.get_string(GCONF_KEY_DOWNLOAD_FOLDER)))
+    if path.isdir(new_folder):
+        downloads_folder = new_folder
+        return True
+    return False
+
+def download_videos(window, embed, video_urls, open_inside):
+    clive_cmd_base = [ 'clive', '--quiet', '--emit-csv' ]
+    if proxy != None:
+        clive_cmd_base.append('--proxy=%s' % proxy)
+
+    for video_url in video_urls:
+        clive_cmd = clive_cmd_base + [ video_url ] 
+        try:
+            new_download_ps = Popen(clive_cmd, stdout=PIPE, stderr=PIPE)
+        except OSError, e:
+            print 'OSError executing clive', e
+            if e.args[0] == 2:
+                error_text = _("Video-downloader extension could not execute \
+                               'clive'. Please make sure clive is installed \
+                               in a directory listed in the $PATH variable.")
+            else:
+                error_text = str(e)
+            message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, 
+                    buttons=gtk.BUTTONS_CLOSE, message_format=error_text)
+            message.run()
+            message.destroy()
+        else:
+            gobject.child_watch_add(new_download_ps.pid, on_clive_finished, 
+                    data=(window, embed, new_download_ps.stdout, 
+                          new_download_ps.stderr, video_url, open_inside))
+
+def debug_video_urls(window, embed, video_urls, open_inside):
+    """
+    A drop-in replacement for the function download_videos. It displays a 
+    dialog with the URLs which otherwise would be downloaded. 
+    
+    Used for debugging only.
+    """
+    message_text = "\n".join(video_urls)
+    message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, 
+            buttons=gtk.BUTTONS_CLOSE, message_format=message_text)
+    message.run()
+    message.destroy()
+
+def detect_videos_in_address(window, embed):
+    url = embed.get_address()
+    if URL_VIDEO_RE.findall(url) != []:
+        embed._video_urls = [url]
+        embed._has_video = True
+    else:
+        embed._has_video = False
+
+def start_video_download(window, embed, url, file_name):
+    """
+    Lets Epiphany download a video via EmbedPersist given the output
+    of clive (as a string array). Doesn't work with Webkit-backend.
+    """
+    persist = epiphany.ephy_embed_factory_new_object(epiphany.EmbedPersist)
+    persist.set_source(url)
+    persist.set_fc_parent(window)
+    persist.set_fc_title(_('Save Video As'))
+    persist.set_dest(path.join(downloads_folder, file_name[1:-1]))
+    persist.set_embed(embed)
+    persist.set_flags(epiphany.EMBED_PERSIST_ASK_DESTINATION)
+    if not persist.save():
+        # Failed to start downloading the video
+        error_text = _("Failed to start the download. Please report this \
+                       problem as a comment at http://blauebirke.wordpress.com/2008/10/04/new-improvements-in-epiphany-video-downloader-extension/ \
+                       or send an email backend to schmalho at users.berlios.de.")
+        message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, 
+                buttons=gtk.BUTTONS_CLOSE, message_format=error_text)
+        message.run()
+        message.destroy()
+
+def open_videos_inside(window, embed, url):
+    tab = epiphany.ephy_shell_get_default().new_tab(window, window.get_active_child(), "about:blank", epiphany.NEW_TAB_IN_EXISTING_WINDOW)
+    window.set_active_child(tab)
+    window.load_url(url)
+
+def on_clive_finished(pid, condition, data):
+    """
+    Processes the results from the clive process. If succeded starts the
+    download. Otherwise displays an error message to the user.
+    """
+    window, embed, clive_stdout, clive_stderr, video_url, open_inside = data
+    if condition == 0:
+        url, file_name = clive_stdout.readlines()[-1].split(',')[1:3]
+        url = url[1:-1] # to remove the quotes
+        
+        if open_inside:
+            open_videos_inside(window, embed, url)
+        else:
+            start_video_download(window, embed, url, file_name)
+    else:
+        title_text = _('Video Downloader extension: Extracting video information via clive failed:')
+        error_text = ''.join(['Exited with status %s.\n' % condition] +
+                               clive_stderr.readlines() + '==========\n' +
+                               clive_stdout.readlines())
+        message = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, 
+                buttons=gtk.BUTTONS_CLOSE, message_format=title_text)
+        message.format_secondary_text(error_text)
+        message.run()
+        message.destroy()
+
+def detect_videos_in_page(window, embed):
+    # Get the HTML code
+    persist = epiphany.ephy_embed_factory_new_object(epiphany.EmbedPersist)
+    persist.set_flags(
+            epiphany.EMBED_PERSIST_NO_VIEW | epiphany.EMBED_PERSIST_COPY_PAGE)
+    persist.set_embed(embed)
+    page_string = persist.to_string()
+    video_urls = get_video_urls(page_string)
+    if video_urls:
+        embed._video_urls = video_urls
+        embed._has_video = True
+    else :
+        embed._has_video = False
+
+def get_video_urls(page_string):
+    """
+    Finds all unique videos represented by a plain text link from the 
+    page (something starting with a "http://"). 
+    
+    Returns a set of url-strings.
+    """
+    video_urls = set()
+    for packed_url in EMBEDED_VIDEO_RE.findall(page_string):
+        for video_id, page_base in zip(packed_url[1:], VIDEO_PAGE_BASE):
+            if video_id != '':
+                video_urls.add(page_base % video_id)
+    return video_urls
+
+def attach_window(window):
+    notebook = window.get_notebook()
+    ui_init(window)
+    signal_tab_switch = notebook.connect_after(
+            "switch_page", _switch_page_cb, window);
+    notebook._video_signal_tab_switch = signal_tab_switch
+
+def detach_window(window):
+    notebook = window.get_notebook()
+    notebook.disconnect(notebook._video_signal_tab_switch)
+    del notebook._video_signal_tab_switch
+    ui_destroy(window)
+
+def attach_tab(window, embed):
+    signal_load_status = embed.connect_after(
+            "notify::load-status", _load_status_cb, window)
+    embed._video_signal_load_status = signal_load_status
+
+def detach_tab(window, embed):
+    embed.disconnect(embed._video_signal_load_status)
+    del embed._video_signal_load_status
+
+gconf_client = gconf.client_get_default()
+gconf_client.notify_add(GCONF_KEY_DOWNLOAD_FOLDER, 
+        on_gconf_new_downloads_folder)
+for key in [ GCONF_KEY_USE_PROXY, GCONF_KEY_PROXY_HOST, GCONF_KEY_PROXY_PORT, 
+            GCONF_KEY_USE_PROXY_AUTH, GCONF_KEY_PROXY_USER, 
+            GCONF_KEY_PROXY_PASSWORD ]:
+    gconf_client.notify_add(key, on_gconf_proxy_changed)
+downloads_folder = path.expanduser('~')
+update_downloads_folder()
+update_proxy_settings()
+
+# DEBUG
+#download_videos = debug_video_urls

Added: packages/experimental/epiphany-extensions-more/misc/view-source.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/view-source.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/view-source.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/misc/view-source.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=View Source (the fast way)
+Description=View page source using gecko's view-source:, it overrides the default view-source action.
+Authors=Diego Escalante Urrelo <diegoe at gnome.org>\nWouter Bolsterlee <wbolster at gnome.org>
+Version=20080422
+URL=http://www.gnome.org/~diegoe/epiphany/
+
+[Loader]
+Type=python
+Module=view-source

Added: packages/experimental/epiphany-extensions-more/misc/view-source.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/misc/view-source.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/misc/view-source.py (added)
+++ packages/experimental/epiphany-extensions-more/misc/view-source.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,66 @@
+# -*- encoding: utf-8 -*-
+#
+#   View Source - Epiphany Extension
+#   Copyright © 2006, 2008  Diego Escalante Urrelo <diegoe at gnome.org>
+#   Copyright © 2008  Wouter Bolsterlee <wbolster at gnome.org>
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+import epiphany
+import gtk
+import gettext
+
+try:
+    t = gettext.translation("epiphany")
+    _ = t.ugettext
+except Exception, e:
+    _ = lambda x : x
+
+_ui_str = """
+<ui>
+  <menubar>
+    <menu name="ViewMenu" action="View">
+      <menuitem name="ViewPageSourceMenu" action="ViewPageSource"/>
+    </menu>
+  </menubar>
+</ui>
+"""
+
+def _view_source_cb(action, window):
+    source_url = 'view-source:%s' % window.get_active_child().get_address()
+    tab = epiphany.ephy_shell_get_default().new_tab(window, window.get_active_child(), 'about:blank', epiphany.NEW_TAB_IN_EXISTING_WINDOW)
+    window.set_active_child(tab)
+    window.load_url(source_url)    
+    
+_actions = [('ViewPageSource', 'stock_view-html-source', _('_Page Source'),
+         '<control>U', None, _view_source_cb)]
+
+def attach_window(window):
+    ui_manager = window.get_ui_manager()
+    group = gtk.ActionGroup('ViewPageSource')
+    group.add_actions(_actions, window)
+    ui_manager.insert_action_group(group, 0)
+    ui_id = ui_manager.add_ui_from_string(_ui_str)
+
+    window._sample_menu_entry_data = (group, ui_id)
+
+def detach_window(window):
+    group, ui_id = window._sample_menu_entry_data
+    del window._sample_menu_entry_data
+
+    ui_manager = window.get_ui_manager()
+    ui_manager.remove_ui(ui_id)
+    ui_manager.remove_action_group(group)
+    ui_manager.ensure_update()

Added: packages/experimental/epiphany-extensions-more/tabs/close_other_tabs.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/close_other_tabs.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/close_other_tabs.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/tabs/close_other_tabs.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=Close Other Tabs
+Description=Closes all but the active tab
+Authors=Sean Fulmer <wsfulmer at gmail.com
+Version=1
+URL=http://noandwhere.com
+
+[Loader]
+Type=python
+Module=close_other_tabs

Added: packages/experimental/epiphany-extensions-more/tabs/close_other_tabs.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/close_other_tabs.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/close_other_tabs.py (added)
+++ packages/experimental/epiphany-extensions-more/tabs/close_other_tabs.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,167 @@
+##
+## close_other_tabs.py
+##
+## Provides menu command and keyboard shortcuts to close tabs
+## other than the active tab
+##
+## Copyright (C) 2008 Sean Fulmer
+## 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.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+
+import epiphany
+
+import gtk
+
+def _close_other_tabs_cb (action, window, close_left=True, close_right=True):
+    atab = window.get_active_child()
+    right=False
+    for tab in window.get_notebook():
+        if tab == atab:
+            right=True
+        elif (right and close_right) or (not right and close_left):
+            tab.close()
+
+def _close_left_tabs_cb(action, window):
+    _close_other_tabs_cb (action, window, True, False)
+def _close_right_tabs_cb(action, window):
+    _close_other_tabs_cb (action, window, False, True)
+
+
+# signal callbacks
+def _switch_page_cb(notebook, page, page_num, window):
+    """
+    enables/disables menus when tab is changed
+    """
+    
+    _set_menu_states(notebook, page_num, window)
+
+def _page_added_removed_reordered_cb(notebook, child, page_num, window):
+    """
+    enables/disables menus when tab is added, removed, or re-ordered
+    """
+    
+    page_num = window.get_notebook().get_current_page()
+    _set_menu_states(notebook, page_num, window)
+
+def _set_menu_states(notebook, page_num, window):
+    """
+    sets menu state based on presence of other tabs
+    """
+
+    page = page_num
+    pages = notebook.get_n_pages()
+    not_only = pages > 1
+    not_first = page > 0
+    not_last = page + 1 < pages
+
+    action_group = window._close_other_tabs[0]
+
+    action = action_group.get_action('CloseOtherTabs')
+    action.set_sensitive(not_only)
+
+    action = action_group.get_action('CloseLeftTabs')
+    action.set_sensitive(not_first)
+
+    action = action_group.get_action('CloseRightTabs')
+    action.set_sensitive(not_last)
+
+
+
+_ui_str = """
+<ui>
+<menubar name="menubar">
+<menu name="TabsMenu" action="Tabs">
+    <separator />
+    <menuitem name="TabsCloseOtherTabsMenu" action="CloseOtherTabs"/>
+    <menuitem name="TabsCloseLeftTabsMenu" action="CloseLeftTabs"/>
+    <menuitem name="TabsCloseRightTabsMenu" action="CloseRightTabs"/>
+</menu>
+</menubar>
+<popup name="EphyNotebookPopup" action="NotebookPopupAction">
+    <separator />
+    <menuitem name="TabsCloseOtherTabsMenuENP" action="CloseOtherTabs"/>
+    <menuitem name="TabsCloseLeftTabsMenuENP" action="CloseLeftTabs"/>
+    <menuitem name="TabsCloseRightTabsMenuENP" action="CloseRightTabs"/>
+</popup>
+</ui>
+"""
+
+_actions = [
+            ('CloseOtherTabs', 'close_other_tabs', 'Close _Other Tabs',
+                '<control><shift>W', None, _close_other_tabs_cb),
+            ('CloseLeftTabs', 'close_left_tabs', 'Close _Left Tabs',
+                None, None, _close_left_tabs_cb),
+            ('CloseRightTabs', 'close_right_tabs', 'Close _Right Tabs',
+                None, None, _close_right_tabs_cb),
+           ]
+
+def attach_window(window):
+
+    # add ui stuff
+    ui_manager = window.get_ui_manager()
+    group = gtk.ActionGroup('CloseOtherTabs')
+    group.add_actions(_actions, window)
+    ui_manager.insert_action_group(group, 0)
+    ui_id = ui_manager.add_ui_from_string(_ui_str)
+    window._close_other_tabs = (group, ui_id)
+
+    # connect switch_page signal
+    notebook = window.get_notebook()
+    signal_id = notebook.connect('switch_page', _switch_page_cb, window)
+    notebook._switch_page_signal = signal_id
+
+    # connect page_added signal
+    signal_id = notebook.connect('page_added', _page_added_removed_reordered_cb, window)
+    notebook._page_added_signal = signal_id
+
+    # connect page_removed signal
+    signal_id = notebook.connect('page_removed', _page_added_removed_reordered_cb, window)
+    notebook._page_removed_signal = signal_id
+
+    # connect page_added signal
+    signal_id = notebook.connect('page_reordered', _page_added_removed_reordered_cb, window)
+    notebook._page_reordered_signal = signal_id
+
+
+def detach_window(window):
+
+    # remove ui stuff
+    group, ui_id = window._close_other_tabs
+    del window._close_other_tabs
+    ui_manager = window.get_ui_manager()
+    ui_manager.remove_ui(ui_id)
+    ui_manager.remove_action_group(group)
+    ui_manager.ensure_update()
+
+    # disconnect switch_page signal
+    notebook = window.get_notebook()
+    signal_id = notebook._switch_page_signal
+    notebook.disconnect(signal_id)
+    del notebook._switch_page_signal
+
+    # disconnect page_added signal
+    signal_id = notebook._page_added_signal
+    notebook.disconnect(signal_id)
+    del notebook._page_added_signal
+
+    # disconnect page_removed signal
+    signal_id = notebook._page_removed_signal
+    notebook.disconnect(signal_id)
+    del notebook._page_removed_signal
+
+    # disconnect page_reordered signal
+    signal_id = notebook._page_reordered_signal
+    notebook.disconnect(signal_id)
+    del notebook._page_reordered_signal

Added: packages/experimental/epiphany-extensions-more/tabs/colour-tabs.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/colour-tabs.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/colour-tabs.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/tabs/colour-tabs.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,9 @@
+[Epiphany Extension]
+Name=Colour tabs
+Description=I like colour tabs
+Version=0
+URL=http://www.gnome.org/projects/epiphany/extensions.html
+
+[Loader]
+Type=python
+Module=colour-tabs

Added: packages/experimental/epiphany-extensions-more/tabs/colour-tabs.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/colour-tabs.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/colour-tabs.py (added)
+++ packages/experimental/epiphany-extensions-more/tabs/colour-tabs.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,84 @@
+# -*- coding: utf-8 -*-
+#
+#  Epiphany extension: coloured tabs
+#  Version 0.1 (written in an evening, can be hugely improved)
+#  Copyright (C) 2007 Thomas Thurman <tthurman at gnome.org>
+#
+#  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, or (at your option)
+#  any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+import epiphany
+import gnomevfs
+import gtk
+import gtk.gdk
+import md5
+
+def _colour_the_tab(tab, data=None):
+    url = tab.get_address()
+    try:
+        host = gnomevfs.URI(url).host_name.split('.')
+    except:
+        return # ah, forget it. probably about:mozilla or something
+
+    if len(host)==0:
+        return # weird
+    elif len(host)==1:
+        # one element; assume a machine on the local net; use that
+        domain = host[0]
+    else:
+        # use the penultimate one in *most* cases, but there are
+        # some top-level domains where the third level is the
+        # most important.
+
+        if host[-1] in ['uk', 'in', 'au']:
+            domain = host[-3]
+        else:
+            domain = host[-2]
+
+    # So we have the name to use. Turn it into a colour.
+    # Save ourselves some complexity by using MD5.
+    colour = md5.md5(domain).hexdigest()[:6]
+
+    notebook = tab.get_parent()
+
+    hbox = notebook.get_tab_label(tab)
+    eb = gtk.EventBox()
+    newhbox = gtk.HBox()
+
+    colour = hbox.get_colormap().alloc_color("#"+colour)
+
+    for state in (gtk.STATE_NORMAL, gtk.STATE_ACTIVE, gtk.STATE_SELECTED,
+                  gtk.STATE_INSENSITIVE, gtk.STATE_PRELIGHT):
+        eb.modify_bg(state, colour)
+
+    for child in hbox.get_children():
+        packing = hbox.query_child_packing(child)
+        child.reparent(newhbox)
+        newhbox.set_child_packing(child, *packing)
+
+    hbox.add(eb)
+    eb.add(newhbox)
+    hbox.show_all()
+
+def attach_tab(window, tab):
+    _colour_the_tab (tab)
+    tab._colour_tab_handler = tab.connect("dom-content-loaded", _colour_the_tab)
+    # we don't call through like this when things are loaded
+    # and we should
+
+def detach_tab(window, tab):
+    if '_colour_tab_handler' in tab:
+        tab.disconnect(tab._colour_tab_handler)
+        del tab._colour_tab_handler

Added: packages/experimental/epiphany-extensions-more/tabs/middle-click-closes-tab.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/middle-click-closes-tab.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/middle-click-closes-tab.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/tabs/middle-click-closes-tab.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=Close tabs with middle-click
+Description=Close tabs by clicking on them with the middle mouse button
+Authors=Siegfried Gevatter
+Version=1
+URL=https://launchpad.net/epiphany-extensions-extra
+
+[Loader]
+Type=python
+Module=middle-click-closes-tab

Added: packages/experimental/epiphany-extensions-more/tabs/middle-click-closes-tab.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/middle-click-closes-tab.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/middle-click-closes-tab.py (added)
+++ packages/experimental/epiphany-extensions-more/tabs/middle-click-closes-tab.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,49 @@
+# -*- coding: utf-8 -*-
+#
+# Unofficial Epiphany Extension
+# Close tabs with middle-click
+#
+# Copyright (C) 2008 Siegfried Gevatter <rainct at ubuntu.com>
+#
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+import gtk
+
+def attach_window(window):
+	notebook = window.get_notebook()
+	signal = notebook.connect('button-release-event', _button_release_cb,
+		notebook)
+	notebook._mcct_extension_signal = signal
+
+def detach_window(window):
+	notebook = window.get_notebook()
+	notebook.disconnect(notebook._mcct_extension_signal)
+	del notebook._mcct_extension_signal
+
+def _button_release_cb(widget, event, notebook):
+	# If it isn't the middle mouse button, ignore it.
+	if event.button != 2:
+		return None
+	
+	# Let's find which tab was pressed, iterating over all tabs.
+	pointer = event.window.get_pointer()
+	tab_count = widget.get_n_pages()
+	for tab, num in ((widget.get_nth_page(i), i) for i in xrange(0, tab_count)):
+		label = notebook.get_tab_label(tab)
+		if label.allocation.x < pointer[0] and (label.allocation.x + 
+		label.allocation.width) > pointer[0]:
+			# Found it, let's remove it.
+			tab.get_parent().remove_page(num)
+			break

Added: packages/experimental/epiphany-extensions-more/tabs/onlyoneclosebutton.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/onlyoneclosebutton.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/onlyoneclosebutton.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/tabs/onlyoneclosebutton.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,11 @@
+[Epiphany Extension]
+Name=Only One Close Button
+Description=One on each tab is a waste of space and increases the risk of accidental closing
+Authors=Stefan Stuhr
+Version=1
+URL=http://www.sstuhr.dk/epiphany-extensions/
+
+
+[Loader]
+Type=python
+Module=onlyoneclosebutton

Added: packages/experimental/epiphany-extensions-more/tabs/onlyoneclosebutton.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/onlyoneclosebutton.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/onlyoneclosebutton.py (added)
+++ packages/experimental/epiphany-extensions-more/tabs/onlyoneclosebutton.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,134 @@
+#   Only One Close Button - Epiphany Extension
+#   Copyright (C) 2006  Stefan Stuhr
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import gtk
+import epiphany
+
+EGG_TB_MODEL_NAME_KNOWN = 1 << 2
+
+class OnlyOneCloseButton:
+	tab_popup_xml = '''
+		<ui>
+		  <popup name="EphyNotebookPopup" action="NotebookPopupAction">
+		    <separator/>
+		    <menuitem name="TabCloseENP" action="FileCloseTab"/>
+		    <separator/>
+		  </popup>
+		</ui>'''
+
+	def __init__(self):
+		self.win_data = {}
+
+		# Make the toolbar button available in the editor
+		shell = epiphany.ephy_shell_get_default()
+		model = shell.get_toolbars_model(False)
+		name_flags = model.get_name_flags("FileCloseTab")
+		model.set_name_flags("FileCloseTab", name_flags | EGG_TB_MODEL_NAME_KNOWN)
+
+	# Not supported by Epiphany - but may be supported in the future
+	def finalize_extension(self):
+		# Remove the toolbar button from the available buttons in the editor
+		shell = epiphany.ephy_shell_get_default()
+		model = shell.get_toolbars_model(False)
+		name_flags = model.get_name_flags("FileCloseTab")
+		model.set_name_flags("FileCloseTab", name_flags & ~EGG_TB_MODEL_NAME_KNOWN)
+
+	def attach_window(self, window):
+		data = self.win_data[window] = {"tab_data": {}}
+
+		ui_manager = window.get_ui_manager()
+		merge_id = ui_manager.add_ui_from_string(self.tab_popup_xml)
+		data["ui_merge_id"] = merge_id
+
+		notebook = window.get_notebook()
+
+		initially_homogeneous = notebook.get_property("homogeneous")
+		data["initially_homogeneous"] = initially_homogeneous
+		notebook.set_property("homogeneous", True)
+
+	def detach_window(self, window):
+		data = self.win_data.pop(window)
+
+		ui_manager = window.get_ui_manager()
+
+		merge_id = data["ui_merge_id"]
+		ui_manager.remove_ui(merge_id)
+		ui_manager.ensure_update()
+
+		notebook = window.get_notebook()
+
+		initially_homogeneous = data["initially_homogeneous"]
+		notebook.set_property("homogeneous", initially_homogeneous)
+
+	def hbox_style_set_cb(self, hbox, previous_style, window, tab):
+		data = self.win_data[window]
+		tab_data = data["tab_data"][tab]
+
+		tab_data["tab_initial_width"] = hbox.get_size_request()[0]
+		hbox.set_size_request(16, -1)
+
+	def attach_tab(self, window, tab):
+		data = self.win_data[window]
+		tab_data = data["tab_data"][tab] = {}
+
+		notebook = window.get_notebook()
+		widget = notebook.get_tab_label(tab)
+
+		if isinstance(widget, gtk.HBox):
+			children = widget.get_children()
+
+			tab_data["tab_initial_width"] = widget.get_size_request()[0]
+			widget.set_size_request(16, -1)
+
+			handler_id = widget.connect("style-set", self.hbox_style_set_cb, window, tab)
+			tab_data["hbox_style_set_hid"] = handler_id
+
+			if isinstance(children[-1], gtk.Button):
+				children[-1].hide()
+
+			notebook.child_set(tab, "tab-expand", True)
+
+	def detach_tab(self, window, tab):
+		data = self.win_data[window]
+		tab_data = data["tab_data"].pop(tab)
+
+		notebook = window.get_notebook()
+		widget = notebook.get_tab_label(tab)
+
+		if tab.parent == notebook:
+			notebook.child_set(tab, "tab-expand", False)
+
+		if isinstance(widget, gtk.HBox):
+			children = widget.get_children()
+
+			handler_id = tab_data["hbox_style_set_hid"]
+			widget.disconnect(handler_id)
+
+			widget.set_size_request(tab_data["tab_initial_width"], -1)
+
+			if isinstance(children[-1], gtk.Button):
+				children[-1].show()
+
+
+oocb_extension = OnlyOneCloseButton()
+
+attach_window = oocb_extension.attach_window
+detach_window = oocb_extension.detach_window
+
+attach_tab = oocb_extension.attach_tab
+detach_tab = oocb_extension.detach_tab

Added: packages/experimental/epiphany-extensions-more/tabs/restore-tab.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/restore-tab.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/restore-tab.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/tabs/restore-tab.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=Restore Closed Tab
+Description=Restore a previously closed tab
+Authors=Michael Opitz <opitz.michael at gmail.com>
+URL=http://code.google.com/p/epiphany-tab-restore/
+Version=0.0.1
+
+[Loader]
+Type=python
+Module=restore-tab

Added: packages/experimental/epiphany-extensions-more/tabs/restore-tab.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/restore-tab.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/restore-tab.py (added)
+++ packages/experimental/epiphany-extensions-more/tabs/restore-tab.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,70 @@
+# Copyright (C) 2007 - Michael Opitz
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+import gtk
+import epiphany
+
+_ui_str = """
+<ui>
+	<menubar name="menubar">
+		<menu name="ToolsMenu" action="Tools">
+			<separator/>
+			<menuitem name="PyTabRestore" action="PyTabRestore"/>
+		</menu>
+	</menubar>
+</ui>
+"""
+
+def _restore_tab_cb(action, window):
+	# restore the last closed tab
+	if(len(window._py_restore_urls) > 0):
+		notebook = window.get_notebook()
+		position = notebook.get_n_pages() - 1
+		prev_tab = notebook.get_nth_page(position)
+		shell = epiphany.ephy_shell_get_default()
+		shell.new_tab(window, prev_tab, window._py_restore_urls.pop(),
+				epiphany.NEW_TAB_IN_EXISTING_WINDOW | 
+				epiphany.NEW_TAB_OPEN_PAGE | 
+				epiphany.NEW_TAB_JUMP)
+
+_actions = [('PyTabRestore', None, '_Restore Tab', "<control><shift>T", 
+		"Restore a previosly closed tab", _restore_tab_cb),]
+def attach_window(window):
+	window._py_restore_urls = []
+	# create the menu entry
+	ui_manager = window.get_ui_manager()
+	group = gtk.ActionGroup('PyTabRestore')
+	group.add_actions(_actions, window)
+	ui_manager.insert_action_group(group, -1)
+	ui_id = ui_manager.add_ui_from_string(_ui_str)
+
+	window._python_tab_restore_window_data = (group, ui_id)
+
+def detach_window(window):
+	# delete our list...
+	del window._py_restore_urls 
+	# delete the epiphany stuff
+	group, ui_id = window._python_tab_restore_window_data
+	del window._python_tab_restore_window_data
+
+	ui_manager = window.get_ui_manager()
+	ui_manager.remove_ui(ui_id)
+	ui_manager.remove_action_group(group)
+	ui_manager.ensure_update()
+
+def detach_tab(window, tab):
+	# when a tab is closed we are appening the url of the closed tab to our
+	# list
+	window._py_restore_urls.append(tab.get_location(True))
+

Added: packages/experimental/epiphany-extensions-more/tabs/tabforeground.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/tabforeground.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/tabforeground.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/tabs/tabforeground.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,11 @@
+[Epiphany Extension]
+Name=Tab Foreground
+Description=Open new tab in the foreground when clicking on a link with the middle mouse button or CTRL + middle mouse button
+Authors=Charles-Henri d'Adhemar
+Version=2
+URL=cdadhemar.free.fr/epiphany/
+
+
+[Loader]
+Type=python
+Module=tabforeground

Added: packages/experimental/epiphany-extensions-more/tabs/tabforeground.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/tabforeground.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/tabforeground.py (added)
+++ packages/experimental/epiphany-extensions-more/tabs/tabforeground.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,23 @@
+# -*- coding: utf-8 -*-
+#
+#   Tab Foreground - Epiphany Extension
+#   Copyright (C) 2007 Charles-Henri d'Adhemar
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License, version 2
+#   as published by the Free Software Foundation.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import epiphany
+
+def attach_tab(window, tab):    
+    window.set_active_child(tab)

Added: packages/experimental/epiphany-extensions-more/tabs/tabkeytabnavigate.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/tabkeytabnavigate.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/tabkeytabnavigate.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/tabs/tabkeytabnavigate.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,11 @@
+[Epiphany Extension]
+Name=Tab Key Tab Navigate
+Description=Use the tab key to navigate between tabs
+Authors=Stefan Stuhr
+Version=1
+URL=http://www.sstuhr.dk/epiphany-extensions/
+
+
+[Loader]
+Type=python
+Module=tabkeytabnavigate

Added: packages/experimental/epiphany-extensions-more/tabs/tabkeytabnavigate.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/tabkeytabnavigate.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/tabkeytabnavigate.py (added)
+++ packages/experimental/epiphany-extensions-more/tabs/tabkeytabnavigate.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,50 @@
+#   Tab Key Tab Navigate - Epiphany Extension
+#   Copyright (C) 2006  Stefan Stuhr
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import gtk
+import epiphany
+
+def tktn_set_tab_offset(window, offset):
+	notebook = window.get_notebook()
+
+	index = notebook.get_current_page()
+	count = notebook.get_n_pages()
+
+	new_index = (index + offset) % count
+	notebook.set_current_page(new_index)
+
+def tktn_key_press_cb(window, event):
+	if event.state & gtk.gdk.CONTROL_MASK:
+		keyvalname = gtk.gdk.keyval_name(event.keyval)
+		if keyvalname == "Tab":
+			tktn_set_tab_offset(window, 1)
+		elif keyvalname == "ISO_Left_Tab":
+			tktn_set_tab_offset(window, -1)
+		else:
+			return False
+
+		return True
+
+def attach_window(window):
+	signal = window.connect("key-press-event", tktn_key_press_cb)
+	window._tktn_key_press_sig = signal
+
+def detach_window(window):
+	if hasattr(window, "_tktn_key_press_sig"):
+		window.disconnect(window._tktn_key_press_sig)
+		delattr(window, "_tktn_key_press_sig")

Added: packages/experimental/epiphany-extensions-more/tabs/tablabelborder.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/tablabelborder.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/tablabelborder.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/tabs/tablabelborder.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,11 @@
+[Epiphany Extension]
+Name=Less Tab Label Border
+Description=Less border around tab labels
+Authors=Stefan Stuhr
+Version=1
+URL=http://www.sstuhr.dk/epiphany-extensions/
+
+
+[Loader]
+Type=python
+Module=tablabelborder

Added: packages/experimental/epiphany-extensions-more/tabs/tablabelborder.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/tablabelborder.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/tablabelborder.py (added)
+++ packages/experimental/epiphany-extensions-more/tabs/tablabelborder.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,44 @@
+#   Less Tab Label Border - Epiphany Extension
+#   Copyright (C) 2006  Stefan Stuhr
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import gtk
+import epiphany
+
+tab_label_hborder = 1
+tab_label_vborder = 1
+
+def attach_window(window):
+	notebook = window.get_notebook()
+
+	borders = (notebook.get_property("tab-hborder"), notebook.get_property("tab-vborder"))
+	window._tlb_tab_label_borders = borders
+
+	notebook.set_property("tab-hborder", tab_label_hborder)
+	notebook.set_property("tab-vborder", tab_label_vborder)
+
+def detach_window(window):
+	if not hasattr(window, "_tlb_tab_label_borders"):
+		return
+
+	notebook = window.get_notebook()
+	hborder, vborder = window._tlb_tab_label_borders
+
+	notebook.set_property("tab-hborder", hborder)
+	notebook.set_property("tab-vborder", vborder)
+
+	delattr(window, "_tlb_tab_label_borders")

Added: packages/experimental/epiphany-extensions-more/tabs/widetabs.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/widetabs.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/widetabs.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/tabs/widetabs.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=Wide tabs
+Description=Make tabs wide while keeping the close button.
+Authors=Diego Escalante Urrelo <diegoe at gnome.org>
+Version=20080422
+URL=http://www.gnome.org/~diegoe/epiphany/
+
+[Loader]
+Type=python
+Module=widetabs

Added: packages/experimental/epiphany-extensions-more/tabs/widetabs.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/tabs/widetabs.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/tabs/widetabs.py (added)
+++ packages/experimental/epiphany-extensions-more/tabs/widetabs.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,97 @@
+# -*- encoding: utf-8 -*-
+#
+#   Widetabs - Epiphany Extension
+#   Copyright © 2008  Diego Escalante Urrelo <diegoe at gnome.org>
+#   Based on:
+#      Only One Close Button - Epiphany Extension
+#      Copyright © 2006  Stefan Stuhr
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import gtk
+import epiphany
+
+
+class WideTab:
+	def __init__(self):
+		self.win_data = {}
+	def attach_window(self, window):
+		data = self.win_data[window] = {"tab_data": {}}
+
+		notebook = window.get_notebook()
+
+		initially_homogeneous = notebook.get_property("homogeneous")
+		data["initially_homogeneous"] = initially_homogeneous
+		notebook.set_property("homogeneous", True)
+		
+		initially_scrollable = notebook.get_property("scrollable")
+		data["initially_scrollable"] = initially_scrollable
+		notebook.set_property("scrollable", False)
+
+	def detach_window(self, window):
+		data = self.win_data.pop(window)
+
+		notebook = window.get_notebook()
+
+		initially_homogeneous = data["initially_homogeneous"]
+		notebook.set_property("homogeneous", initially_homogeneous)
+
+	def hbox_style_set_cb(self, hbox, previous_style, window, tab):
+		data = self.win_data[window]
+		tab_data = data["tab_data"][tab]
+
+		tab_data["tab_initial_width"] = hbox.get_size_request()[0]
+		hbox.set_size_request(16, -1)
+
+	def attach_tab(self, window, tab):
+		data = self.win_data[window]
+		tab_data = data["tab_data"][tab] = {}
+
+		notebook = window.get_notebook()
+		widget = notebook.get_tab_label(tab)
+
+		if isinstance(widget, gtk.HBox):
+			tab_data["tab_initial_width"] = widget.get_size_request()[0]
+			widget.set_size_request(16, -1)
+
+			handler_id = widget.connect("style-set", self.hbox_style_set_cb, window, tab)
+			tab_data["hbox_style_set_hid"] = handler_id
+
+			notebook.child_set(tab, "tab-expand", True)
+
+	def detach_tab(self, window, tab):
+		data = self.win_data[window]
+		tab_data = data["tab_data"].pop(tab)
+
+		notebook = window.get_notebook()
+		widget = notebook.get_tab_label(tab)
+
+		if tab.parent == notebook:
+			notebook.child_set(tab, "tab-expand", False)
+
+		if isinstance(widget, gtk.HBox):
+			handler_id = tab_data["hbox_style_set_hid"]
+			widget.disconnect(handler_id)
+
+			widget.set_size_request(tab_data["tab_initial_width"], -1)
+
+wt_extension = WideTab()
+
+attach_window = wt_extension.attach_window
+detach_window = wt_extension.detach_window
+
+attach_tab = wt_extension.attach_tab
+detach_tab = wt_extension.detach_tab

Added: packages/experimental/epiphany-extensions-more/ui/confirmwindowclose.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/confirmwindowclose.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/confirmwindowclose.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/ui/confirmwindowclose.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,11 @@
+[Epiphany Extension]
+Name=Confirm Window Close
+Description=Confirm closing of windows with multiple tabs
+Authors=Stefan Stuhr
+Version=1
+URL=http://www.sstuhr.dk/epiphany-extensions/
+
+
+[Loader]
+Type=python
+Module=confirmwindowclose

Added: packages/experimental/epiphany-extensions-more/ui/confirmwindowclose.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/confirmwindowclose.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/confirmwindowclose.py (added)
+++ packages/experimental/epiphany-extensions-more/ui/confirmwindowclose.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,52 @@
+#   Confirm Window Close - Epiphany Extension
+#   Copyright (C) 2006  Stefan Stuhr
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import gtk
+import epiphany
+
+def _cwc_window_delete_event_cb(window, event):
+	notebook = window.get_notebook()
+	tab_count = notebook.get_n_pages()
+
+	if tab_count <= 1:
+		return False
+
+	dialog = gtk.MessageDialog(window,
+	                           gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+	                           gtk.MESSAGE_WARNING, gtk.BUTTONS_NONE,
+	                           "You are about to close a window with %i open tabs" % tab_count)
+	dialog.set_title("Confirm window close")
+	window.group.add_window(dialog)
+	dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL).grab_focus()
+	dialog.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_OK)
+	dialog.set_default_response(gtk.RESPONSE_CANCEL)
+
+	result = dialog.run()
+	dialog.hide()
+	dialog.destroy()
+
+	return result not in (gtk.RESPONSE_OK,)
+
+def attach_window(window):
+	signal = window.connect("delete-event", _cwc_window_delete_event_cb)
+	window._cwc_window_delete_sig = signal
+
+def detach_window(window):
+	if hasattr(window, "_cwc_window_delete_sig"):
+		window.disconnect(window._cwc_window_delete_sig)
+		delattr(window, "_cwc_window_delete_sig")

Added: packages/experimental/epiphany-extensions-more/ui/hidden-menu.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/hidden-menu.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/hidden-menu.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/ui/hidden-menu.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=Hidden menu
+Description=Hides and shows the Menubar with a button
+Authors=Diego Escalante Urrelo <diegoe at gnome.org>
+Version=20080422
+URL=http://www.gnome.org/~diegoe/epiphany/
+
+[Loader]
+Type=python
+Module=hidden-menu

Added: packages/experimental/epiphany-extensions-more/ui/hidden-menu.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/hidden-menu.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/hidden-menu.py (added)
+++ packages/experimental/epiphany-extensions-more/ui/hidden-menu.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,92 @@
+# -*- encoding: utf-8 -*-
+#
+#   Hidden Menu - Epiphany Extension
+#   Copyright © 2006, 2008  Diego Escalante Urrelo <diegoe at gnome.org>
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+import epiphany
+import gtk, gconf
+
+# Now with ross-style (check http://www.burtonini.com for ephydeli)
+HIDDENMENU_KEY = '/apps/epiphany-extensions/hiddenmenu/hidden'
+EGG_TB_MODEL_NAME_KNOWN = 1 << 2
+
+class HiddenMenuExtension(object):
+	def __init__(self):		
+		shell = epiphany.ephy_shell_get_default()
+		model = shell.get_toolbars_model(False)
+		flags = model.get_name_flags('HideMenu')
+		model.set_name_flags('HideMenu', flags | EGG_TB_MODEL_NAME_KNOWN)
+		
+		self.client = gconf.client_get_default ();
+		self.mb_hidden = self.client.get_bool(HIDDENMENU_KEY)
+
+		if self.client.key_is_writable(HIDDENMENU_KEY):
+			self.gconf = True
+		else:
+			self.gconf = False
+			del self.client
+
+	def attach(self, window):
+		actions = [('HideMenu', gtk.STOCK_GO_DOWN, 'Hi_de menubar',
+					 None, 'Toggle menubar visibility', self._hmb_activate_cb)]
+		group = self._find_group(window)
+		group.add_actions(actions, window)
+		window._mb_visible = self.mb_hidden
+
+	def detach(self, window):
+		if self.gconf:
+			self.client.set_bool(HIDDENMENU_KEY, window._mb_visible)
+	
+	# Not supported yet in Epiphany
+	def finalize(self):
+		shell = epiphany.ephy_shell_get_default()
+		model = shell.get_toolbars_model(False)
+		name_flags = model.get_name_flags('HideMenu')
+		model.set_name_flags('HideMenu', name_flags & ~EGG_TB_MODEL_NAME_KNOWN)
+		
+	def _find_group(self, window):
+		for group in window.get_ui_manager().get_action_groups():
+			if group.get_name() == 'SpecialToolbarActions':
+				return group
+		else:
+			raise AssertionError('Cannot find SpecialToolbarActions group')
+	
+	def _toggle_visible(self, menubar):
+		if menubar.parent.parent.parent._mb_visible:
+			menubar.hide()
+		else:
+			menubar.show()
+	
+	def _hmb_activate_cb(self, action, window):
+		menubar = window.get_child().get_children()[0].get_children()[0]
+		window._mb_visible = self.mb_hidden = not window._mb_visible
+		self._toggle_visible(menubar)
+
+hm = HiddenMenuExtension()
+
+def attach_window(window):
+	hm.attach(window)
+	window.hm_started = False
+
+def attach_tab(window, tab):
+	if not window.hm_started:
+		menubar = window.get_child().get_children()[0].get_children()[0]
+		hm._toggle_visible(menubar)
+		window.hm_started = True
+
+def detach_window(window):
+	hm.detach(window)

Added: packages/experimental/epiphany-extensions-more/ui/menuandtoolbar.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/menuandtoolbar.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/menuandtoolbar.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/ui/menuandtoolbar.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,11 @@
+[Epiphany Extension]
+Name=Menubar and Toolbar beside each other
+Description=Put the menubar and toolbar beside each other
+Authors=Stefan Stuhr
+Version=1
+URL=http://www.sstuhr.dk/epiphany-extensions/
+
+
+[Loader]
+Type=python
+Module=menuandtoolbar

Added: packages/experimental/epiphany-extensions-more/ui/menuandtoolbar.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/menuandtoolbar.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/menuandtoolbar.py (added)
+++ packages/experimental/epiphany-extensions-more/ui/menuandtoolbar.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,77 @@
+#   Menubar and Toolbar beside each other - Epiphany Extension
+#   Copyright (C) 2006  Stefan Stuhr
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import gtk
+import epiphany
+
+def attach_window(window):
+	toolbar = window.get_toolbar()
+	vbox = toolbar.parent
+	if not isinstance(vbox, gtk.VBox):
+		return
+
+	children = vbox.get_children()
+	if len(children) != 2 or (not isinstance(children[0], gtk.MenuBar)) or children[1] != toolbar:
+		return
+
+	hbox = gtk.HBox()
+	vbox.pack_start(hbox, False, True, 0)
+
+	window._mbatb_top_packings = []
+
+	for index, widget in enumerate(children):
+		is_visible = widget.get_property("visible")
+		gtk.Widget.hide(widget)
+
+		window._mbatb_top_packings.append(vbox.query_child_packing(widget))
+		vbox.remove(widget)
+
+		hbox.pack_start(widget, index, True, 0)
+
+		if is_visible:
+			gtk.Widget.show(widget)
+
+	hbox.show()
+
+	window._mbatb_top_hbox = hbox
+
+def detach_window(window):
+	if not (hasattr(window, "_mbatb_top_hbox") and hasattr(window, "_mbatb_top_packings")):
+		return
+
+	hbox = window._mbatb_top_hbox
+	vbox = hbox.parent
+
+	for widget, packing in zip(hbox.get_children(), window._mbatb_top_packings):
+		is_visible = widget.get_property("visible")
+		gtk.Widget.hide(widget)
+
+		hbox.remove(widget)
+
+		vbox.pack_start(widget)
+		vbox.set_child_packing(widget, *packing)
+
+		if is_visible:
+			gtk.Widget.show(widget)
+
+	hbox.hide()
+	vbox.remove(hbox)
+	hbox.destroy()
+
+	delattr(window, "_mbatb_top_hbox")
+	delattr(window, "_mbatb_top_packings")

Added: packages/experimental/epiphany-extensions-more/ui/quitmenuitem.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/quitmenuitem.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/quitmenuitem.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/ui/quitmenuitem.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=Quit menu item
+Description=Adds a Quit menu item to the File menu
+Authors=Reinout van Schouwen <reinouts at gnome.org>
+Version=1
+URL=http://projects.gnome.org/epiphany
+
+[Loader]
+Type=python
+Module=quitmenuitem

Added: packages/experimental/epiphany-extensions-more/ui/quitmenuitem.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/quitmenuitem.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/quitmenuitem.py (added)
+++ packages/experimental/epiphany-extensions-more/ui/quitmenuitem.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,55 @@
+# -*- coding: utf-8 -*-
+
+#  Copyright © 2008 Reinout van Schouwen <reinouts at gnome.org>
+#
+#  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, or (at your option)
+#  any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+import epiphany;
+import gtk;
+
+_ui_str = """
+<ui>
+	<menubar name="menubar">
+		<menu name="FileMenu" action="File">
+			<separator/>
+			<menuitem name="Quit" action="Quit"/>
+			<separator/>
+		</menu>
+	</menubar>
+</ui>
+"""
+
+def quit_cb(action, window):
+	for tab in window.get_notebook():
+		tab.close()
+	
+_actions = [
+	('Quit', "gtk-quit", None, None, None, quit_cb)]
+	
+def attach_window(window):
+	ui_manager = window.get_ui_manager()
+	group = gtk.ActionGroup('Quit')
+	group.add_actions(_actions, window)
+	window._quit_group = group
+	ui_manager.insert_action_group(group, 0)
+	window._quit_ui = ui_manager.add_ui_from_string(_ui_str)
+
+def detach_window(window):
+	ui_manager = window.get_ui_manager()
+	ui_manager.remove_ui (window._quit_ui)
+	del window._quit_ui
+	ui_manager.remove_action_group (window._quit_group)
+	del window._quit_group

Added: packages/experimental/epiphany-extensions-more/ui/singlemenu.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/singlemenu.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/singlemenu.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/ui/singlemenu.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,11 @@
+[Epiphany Extension]
+Name=Single Menu
+Description=Put the content of the menubar into a single compact menu
+Authors=Stefan Stuhr
+Version=1
+URL=http://www.sstuhr.dk/epiphany-extensions/
+
+
+[Loader]
+Type=python
+Module=singlemenu

Added: packages/experimental/epiphany-extensions-more/ui/singlemenu.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/singlemenu.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/singlemenu.py (added)
+++ packages/experimental/epiphany-extensions-more/ui/singlemenu.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,692 @@
+#   Single Menu - Epiphany Extension
+#   Copyright (C) 2006, 2007  Stefan Stuhr
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+import gobject
+import gtk
+import epiphany
+import gconf
+
+from xml.parsers import expat
+
+def get_child_in_widget(widget, child_path):
+	if not hasattr(widget, "get_children"):
+		return None
+
+	current = child_path.pop(0)
+
+	if current[0] == None:
+		child = None
+
+		for child_widget in widget.get_children():
+			if isinstance(child_widget, current[1]):
+				child = child_widget
+				break
+
+		if child == None:
+			return None
+	else:
+		try:
+			child = widget.get_children()[current[0]]
+		except IndexError:
+			return None
+
+		if not isinstance(child, current[1]):
+			return None
+
+	if len(child_path) > 0:
+		return get_child_in_widget(child, child_path)
+	else:
+		return child
+
+class SingleMenuMenu(gtk.Menu):
+	def __init__(self, ui_manager):
+		gtk.Menu.__init__(self)
+
+		self._ui_manager = ui_manager
+
+		self._menu_tree = ([], [])
+
+	def _parser_StartElement(self, name, attrs):
+		self._tags.append(name)
+
+		if self._tags == ["ui", "menubar"] and not attrs.get("name", "") != "menubar":
+			self._inside_menubar = True
+			return
+		elif len(self._tags) <= 2:
+			self._inside_menubar = False
+			return
+
+		if not self._inside_menubar:
+			return
+
+		if self._current_branch == None:
+			return
+
+		if name == "placeholder":
+			ui_name = attrs.get("name", name)
+			self._current_placeholder_path.append(ui_name)
+			
+
+		if not name in ("menuitem", "separator", "menu"):
+			return
+
+		if name == "separator":
+			ui_name = ""
+		else:
+			ui_name = attrs.get("name", attrs.get("action", name))
+
+		ui_name = "/".join(self._current_placeholder_path + [ui_name])
+
+		self._current_branch[0].append(ui_name)
+
+
+		if name == "separator":
+			data = [name, None]
+		elif name == "menuitem":
+			data = [name, attrs, None]
+		elif name == "menu":
+			data = [name, attrs, ([], []), None, None]
+
+		self._current_branch[1].append(data)
+
+		if name == "menu":
+			self._branch_parents.append((self._current_branch, self._current_placeholder_path))
+			
+			self._current_branch = data[2]
+			self._current_placeholder_path = []
+
+
+	def _parser_EndElement(self, name):
+		while self._tags and self._tags[-1] != name:
+			self._tags.pop()
+
+		tags = tuple(self._tags)
+
+		if self._tags:
+			self._tags.pop()
+
+		if self._inside_menubar and tags == ("ui", "menubar"):
+			self._current_branch = None
+			self._inside_menubar = False
+
+		if not self._inside_menubar:
+			return
+
+		if name == "menu" and self._current_branch != None:
+			if len(self._branch_parents) <= 0:
+				self._current_branch = None
+			else:
+				parent = self._branch_parents.pop()
+				
+				self._current_branch = parent[0]
+				self._current_placeholder_path = parent[1]
+
+		if self._current_branch == None:
+			return
+
+		if name == "placeholder" and len(self._current_placeholder_path) > 0:
+			self._current_placeholder_path.pop()
+
+	def update_ui_xml(self, end_cb):
+		self._tags = []
+		self._inside_menubar = False
+		self._new_menu_tree = ([], [])
+		self._current_branch = self._new_menu_tree
+		self._current_placeholder_path = []
+		self._branch_parents = []
+
+		parser = expat.ParserCreate()
+
+		parser.StartElementHandler = self._parser_StartElement
+		parser.EndElementHandler = self._parser_EndElement
+
+		parser.Parse(self._ui_manager.get_ui(), True)
+
+		self._update_menu(self._new_menu_tree, self._menu_tree, self)
+
+		del self._menu_tree
+		self._menu_tree = self._new_menu_tree
+
+		if end_cb:
+			end_cb()
+
+		return False
+
+	def _delete_menu_recursive(self, menu, start_index=0):
+		items = menu.get_children()[start_index:]
+
+		for item in items:
+			if isinstance(item, gtk.MenuItem):
+				submenu = item.get_submenu()
+				if submenu:
+					self._delete_menu_recursive(submenu)
+					item.remove_submenu()
+					submenu.destroy()
+
+			if hasattr(item, "_smb_ext_action"):
+				if item._smb_ext_action.get_property("action-group"):
+					item._smb_ext_action.disconnect_proxy(item)
+				del item._smb_ext_action
+
+			item.parent.remove(item)
+			item.destroy()
+
+	def delete_single_button_menu(self):
+		self._delete_menu_recursive(self)
+
+	def _add_menuitem(self, name, data, old_branch, menu, menu_index, ui_path):
+		new_item = False
+
+		try:
+			old_index = old_branch[0].index(name)
+			old_data = old_branch[1][old_index]
+		except ValueError:
+			old_index = None
+
+		is_separator = (data[0] == "separator")
+
+		if old_index == None or old_data[0] != data[0]:
+			new_item = True
+
+		if not is_separator and not new_item:
+			if old_data[1] != data[1]:
+				new_item = True
+
+		if not is_separator and not new_item:
+			old_action = getattr(old_data[-1], "_smb_ext_action", None)
+
+			if isinstance(old_action, gtk.Action):
+				new_item = (old_action.get_property("action-group") == None)
+			else:
+				new_item = True
+
+		if new_item and is_separator:
+			menuitem = gtk.SeparatorMenuItem()
+			menu.insert(menuitem, menu_index)
+			menuitem.show()
+		elif new_item:
+			new_action = self._ui_manager.get_action(ui_path)
+			if not new_action:
+				return False
+
+			menuitem = new_action.create_menu_item()
+
+			if not menuitem:
+				return False
+
+			menuitem._smb_ext_action = new_action
+
+			menu.insert(menuitem, menu_index)
+		elif not new_item:
+			menuitem = old_data[-1]
+			menu.reorder_child(menuitem, menu_index)
+
+		data[-1] = menuitem
+
+		if data[0] != "menu":
+			return True
+
+		if new_item:
+			submenu = gtk.Menu()
+			menuitem.set_submenu(submenu)
+
+			old_subbranch = ([], [])			
+		else:
+			submenu = old_data[-2]
+
+			old_subbranch = old_data[2]
+
+		data[-2] = submenu
+
+		self._update_menu(data[2], old_subbranch, submenu, ui_path)
+
+		return True
+
+	def _update_menu(self, new_branch, old_branch, menu, ui_path="/ui/menubar"):
+		index = menu_index = -1
+
+		separators_start = True
+		separator_last = None
+		separator_count = 0
+
+		items_to_remove = []
+
+		for name, data in zip(new_branch[0], new_branch[1]):
+			index += 1
+
+			if data[0] == "separator":
+				if separator_last != None:
+					items_to_remove.insert(0, separator_last[0])
+
+				separator_last = (index, data)
+
+				continue
+			elif separators_start:
+				separators_start = False
+
+				if separator_last != None:
+					items_to_remove.insert(0, separator_last[0])
+
+					separator_last = None
+			elif separator_last != None:
+				separator_count += 1
+
+				sep_name = "-*- Separator #%d -*-" % separator_count
+				sep_data = separator_last[1]
+
+				path = "%s/%s" % (ui_path, sep_name)
+				menu_index += 1
+
+				if not self._add_menuitem(sep_name, sep_data, old_branch, menu, menu_index, path):
+					items_to_remove.insert(0, separator_last[0])
+
+					menu_index -= 1
+					separator_count -= 1
+
+				separator_last = None
+
+			path = "%s/%s" % (ui_path, name)
+			menu_index += 1
+
+			if not self._add_menuitem(name, data, old_branch, menu, menu_index, path):
+				items_to_remove.insert(0, index)
+
+				menu_index -= 1
+
+		if separator_last != None:
+			items_to_remove.insert(0, separator_last[0])
+
+		for index in items_to_remove:
+			new_branch[0].pop(index)
+			new_branch[1].pop(index)
+
+		menu_index += 1
+
+		self._delete_menu_recursive(menu, menu_index)
+
+
+GCONF_KEY_PATH = "/apps/epiphany-extensions/singlemenu/"
+
+class SingleMenu:
+	name = "Single Menu"
+
+	ui_name_prefix = "SingleMenuExt"
+	pref_action_name = "%sPrefAction" % ui_name_prefix
+
+	menu_type_labels = [
+		"Text",
+		"Arrow",
+		"Spinner",
+	]
+
+	ui_xml = '''
+<ui>
+  <menubar name="menubar">
+    <menu name="EditMenu" action="Edit">
+      <separator name="ExtensionsSettingsSep1" />
+      <placeholder name="ExtensionsSettings">
+        <menuitem name="%sPref" action="%s" />
+      </placeholder>
+      <separator name="ExtensionsSettingsSep2" />
+    </menu>
+  </menubar>
+</ui>
+''' % (ui_name_prefix, pref_action_name)
+
+	def __init__(self):
+		self.win_data = {}
+
+		self.pref_dialog = None
+
+		client = self.client = gconf.client_get_default();
+		value = client.get(GCONF_KEY_PATH + "menutype")
+		if value and value.type == gconf.VALUE_INT:
+			self.menu_type = value.get_int()
+		else:
+			self.menu_type = 0
+
+		self.use_gconf = client.key_is_writable(GCONF_KEY_PATH + "menutype")
+
+		if not self.use_gconf:
+			del self.client
+
+	def show_pref_dialog(self, *args):
+		if self.pref_dialog:
+			self.pref_dialog.reshow_with_initial_size()
+			self.pref_dialog.present()
+
+			return
+
+		self.pref_dialog = gtk.Dialog("%s Preferences" % self.name, flags=gtk.DIALOG_NO_SEPARATOR, buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))
+		if hasattr(self.pref_dialog, "set_icon_name"):
+			self.pref_dialog.set_icon_name(gtk.STOCK_PREFERENCES)
+		self.pref_dialog.connect("response", self.pref_dialog_response)
+
+		hbox = gtk.HBox(False, 12)
+		hbox.set_border_width(8)
+		self.pref_dialog.vbox.pack_start(hbox, False, False, 0)
+		hbox.show()
+
+		label = gtk.Label("Menu item type:")
+		hbox.pack_start(label, False, False, 0)
+		label.show()
+
+		combobox = gtk.combo_box_new_text()
+		for text in self.menu_type_labels:
+			combobox.append_text(text)
+		combobox.set_active(self.menu_type)
+		combobox.connect("changed", self.pref_combobox_changed)
+		hbox.pack_start(combobox, True, True, 0)
+		combobox.show()
+
+		self.pref_dialog.present()
+
+	def pref_dialog_response(self, dialog, response_id):
+		dialog.hide()
+		dialog.destroy()
+
+		self.pref_dialog = None
+
+	def pref_combobox_changed(self, combobox):
+		active = combobox.get_active()
+
+		if self.menu_type == active:
+			return
+
+		self.menu_type = active
+
+		if self.use_gconf:
+			self.client.set_int(GCONF_KEY_PATH + "menutype", active)
+
+		for window, data in self.win_data.iteritems():
+			if not data.has_key("menuitem"):
+				continue
+
+			self.delete_menuitem(data)
+
+			menuitem = self.new_menuitem(self.menu_type, window)
+			data["menuitem"] = menuitem
+
+			menubar = data["menubar"]
+			menubar.append(menuitem)
+			menuitem.show()
+
+			menuitem.set_submenu(data["menu"])
+
+	def new_menuitem(self, menu_type, window):
+		data = self.win_data[window]
+
+		if menu_type == 1:
+			menuitem = gtk.MenuItem()
+
+			arrow = gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_NONE)
+			menuitem.add(arrow)
+			arrow.show()
+
+			return menuitem
+		elif menu_type == 2 and data.has_key("spinner"):
+			spinner = data["spinner"]
+			toolitem = data["spinner_toolitem"]
+
+			toolitem.hide()
+			spinner.hide()
+			spinner.parent.remove(spinner)
+
+			spinner.set_size(gtk.ICON_SIZE_MENU)
+
+			menuitem = gtk.MenuItem()
+
+			menuitem.add(spinner)
+			spinner.show()
+
+			handler_id = spinner.connect("size-request", self.spinner_size_request, window)
+			data["spinner_size_req_hid"] = handler_id
+
+			return menuitem
+		else:
+			return gtk.MenuItem("_Menu")
+
+	def delete_menuitem(self, data):
+		menuitem = data.pop("menuitem")
+
+		if data.has_key("spinner_size_req_hid"):
+			data["spinner"].disconnect(data.pop("spinner_size_req_hid"))
+
+		if data.has_key("spinner") and data["spinner"].parent == menuitem:
+			spinner = data["spinner"]
+			toolitem = data["spinner_toolitem"]
+
+			spinner.hide()
+			spinner.parent.remove(spinner)
+
+			spinner_toolbar = data["spinner_toolbar"]
+			icon_size = spinner_toolbar.get_icon_size()
+
+			spinner.set_size(icon_size)
+
+			toolitem.add(spinner)
+			spinner.show()
+			toolitem.show()
+
+		menuitem.remove_submenu()
+		menuitem.parent.remove(menuitem)
+		menuitem.destroy()
+
+	def attach_window(self, window):
+		data = self.win_data[window] = {}
+
+		toolbar = window.get_toolbar()
+
+		vbox = toolbar.parent
+		if not isinstance(vbox, gtk.VBox):
+			return
+
+		ui_manager = window.get_ui_manager()
+
+		menubar = ui_manager.get_widget("/ui/menubar")
+
+		if menubar:
+			data["default_menubar"] = menubar
+
+			handler_id = menubar.connect("show", self.menubar_show, window)
+			data["menubar_show_hid"] = handler_id
+
+			menubar.hide()
+
+		packing = vbox.query_child_packing(toolbar)
+		data["toolbar_packing"] = packing
+
+		data["top_vbox"] = vbox
+
+		hbox = gtk.HBox(False, 0)
+		data["menubar_hbox"] = hbox
+
+		vbox.pack_start(hbox, False, False, 0)
+
+		menubar = gtk.MenuBar()
+		data["menubar"] = menubar
+
+		hbox.pack_start(menubar, False, False, 0)
+		menubar.show()
+
+		eventbox = gtk.EventBox()
+		data["eventbox"] = eventbox
+
+		hbox.pack_start(eventbox, True, True, 0)
+		eventbox.show()
+
+		toolbar.parent.remove(toolbar)
+		eventbox.add(toolbar)
+
+		hbox.show()
+
+		menu = SingleMenuMenu(ui_manager)
+		data["menu"] = menu
+
+	def detach_window(self, window):
+		data = self.win_data.pop(window)
+
+		if not data.has_key("menu"):
+			return
+
+		toolbar = window.get_toolbar()
+
+		vbox = data["top_vbox"]
+		hbox = data["menubar_hbox"]
+
+		hbox.hide()
+
+		toolbar.parent.remove(toolbar)
+		vbox.pack_start(toolbar)
+
+		packing = data["toolbar_packing"]
+		vbox.set_child_packing(toolbar, *packing)
+
+		hbox.parent.remove(hbox)
+
+		ui_manager = window.get_ui_manager()
+
+		if data.has_key("ui_updated_hid"):
+			ui_manager.disconnect(data["ui_updated_hid"])
+
+		if data.has_key("idle_updater"):
+			gobject.source_remove(data.pop("idle_updater"))
+
+		if data.has_key("ui_merge_id"):
+			ui_manager.remove_ui(data["ui_merge_id"])
+
+		if data.has_key("action_group"):
+			ui_manager.remove_action_group(data["action_group"])
+
+		ui_manager.ensure_update()
+
+		self.delete_menuitem(data)
+
+		menu = data["menu"]
+		menu.delete_single_button_menu()
+		menu.destroy()
+
+		if data.has_key("default_menubar"):
+			menubar = data["default_menubar"]
+
+			menubar.disconnect(data["menubar_show_hid"])
+
+			if not "fullscreen" in window.window.get_state().value_nicks:
+				menubar.show()
+
+	def attach_tab(self, window, tab):
+		data = self.win_data[window]
+
+		if data.has_key("first_tab_attached"):
+			return
+
+		if not data.has_key("menu"):
+			return
+
+		data["first_tab_attached"] = True
+
+		toolbar = window.get_toolbar()
+
+		spinner_toolbar = get_child_in_widget(toolbar, [(0, gtk.HBox), (-1, gtk.Toolbar)])
+		if spinner_toolbar:
+			data["spinner_toolbar"] = spinner_toolbar
+
+			toolitem = get_child_in_widget(spinner_toolbar, [(0, gtk.ToolItem)])
+			if toolitem:
+				data["spinner_toolitem"] = toolitem
+
+				spinner = get_child_in_widget(toolitem, [(0, epiphany.Spinner)])
+				if spinner:
+					data["spinner"] = spinner
+
+		menuitem = self.new_menuitem(self.menu_type, window)
+		data["menuitem"] = menuitem
+
+		menubar = data["menubar"]
+		menubar.append(menuitem)
+		menuitem.show()
+
+		menuitem.set_submenu(data["menu"])
+
+		ui_manager = window.get_ui_manager()
+
+		action_group = gtk.ActionGroup(self.ui_name_prefix + "AG")
+		data["action_group"] = action_group
+
+		actions = [(self.pref_action_name, None, "_%s Preferences" % self.name,
+		            None, "Configure Single Menu extension", self.show_pref_dialog)]
+		action_group.add_actions(actions, window)
+
+		ui_manager.insert_action_group(action_group, 0)
+
+		merge_id = ui_manager.add_ui_from_string(self.ui_xml)
+		data["ui_merge_id"] = merge_id
+
+		handler_id = ui_manager.connect("notify::ui", self.ui_updated, window)
+		data["ui_updated_hid"] = handler_id
+
+		self.ui_updated(ui_manager, None, window)
+
+	def spinner_size_request(self, spinner, requisition, window):
+		data = self.win_data[window]
+
+		menuitem = data["menuitem"]
+		toolitem = data["spinner_toolitem"]
+
+		if spinner.parent == menuitem:
+			handler_id = data["spinner_size_req_hid"]
+
+			spinner.handler_block(handler_id)
+			spinner.set_size(gtk.ICON_SIZE_MENU)
+			spinner.handler_unblock(handler_id)
+		elif spinner.parent == toolitem:
+			spinner_toolbar = data["spinner_toolbar"]
+			icon_size = spinner_toolbar.get_icon_size()
+
+			handler_id = data["spinner_size_req_hid"]
+
+			spinner.handler_block(handler_id)
+			spinner.set_size(icon_size)
+			spinner.handler_unblock(handler_id)
+
+	def menubar_show(self, menubar, window):
+		menubar.hide()
+
+	def ui_updated_idle_end(self, window):
+		data = self.win_data[window]
+
+		if data.has_key("idle_updater"):
+			data.pop("idle_updater")
+
+	def ui_updated(self, ui_manager, prop_spec, window):
+		data = self.win_data[window]
+
+		if data.has_key("idle_updater"):
+			return
+
+		menu = data["menu"]
+
+		source_id = gobject.idle_add(menu.update_ui_xml, lambda: self.ui_updated_idle_end(window))
+		data["idle_updater"] = source_id
+
+
+smb_extension = SingleMenu()
+
+attach_window = smb_extension.attach_window
+detach_window = smb_extension.detach_window
+
+attach_tab = smb_extension.attach_tab

Added: packages/experimental/epiphany-extensions-more/ui/tabs_on_treeview.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/tabs_on_treeview.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/tabs_on_treeview.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/ui/tabs_on_treeview.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=Tabs on treeview
+Description=Replace tabs with a treeview in a sidebar
+Authors=Michel Kevin <kmichel.info at gmail.com>
+Version=0.5
+URL=http://kmichel.info/projects/epiphany
+
+[Loader]
+Type=python
+Module=tabs_on_treeview

Added: packages/experimental/epiphany-extensions-more/ui/tabs_on_treeview.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/tabs_on_treeview.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/tabs_on_treeview.py (added)
+++ packages/experimental/epiphany-extensions-more/ui/tabs_on_treeview.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,434 @@
+import gtk
+import pango
+import epiphany
+import gconf
+
+base_gconf_path="/apps/epiphany/general/"
+
+class TreeviewTabs:
+	treeview_popup_xml = """
+	<ui>
+		<popup name="TabsOnTreeviewPopup">
+			<menuitem action="TabsOnTreeviewLeft"/>
+			<menuitem action="TabsOnTreeviewRight" />
+		</popup>
+	</ui>
+	"""
+	actiongroupdef = [
+			('TabsOnTreeviewLeft', None, 'Left Sidebar', None, 'Move sidebar to the left', False),
+			('TabsOnTreeviewRight', None, 'Right Sidebar', None, 'Move sidebar to the right', True)
+		]
+	def __init__(self, window, gconf, always_show_tabs_bar, sidebar_on_right):
+		self.window = window
+		self.notebook = window.get_notebook()
+		self.no_update = False
+		self.no_update_left = False
+		self.no_update_right = False
+		self.gconf = gconf
+		self.always_show_tabs_bar  = always_show_tabs_bar
+		self.sidebar_on_right = sidebar_on_right
+		self.sidebar_width = self.gconf.get_int(base_gconf_path+"sidebar_width")
+		
+	def toggle_sidebar_side_cb(self, first, second):
+		self.gconf.set_bool(base_gconf_path+"sidebar_on_right", first.get_current_value())
+	
+	def on_selection_change(self, treeselection):
+		treemodel, iter = treeselection.get_selected()
+		if iter and not self.no_update:
+			path = treemodel.get_path(iter)
+			self.notebook.set_current_page(self.get_pos(path))
+			
+	def move_tab(self, treemodel, path, iter):
+		tab = self.get_pos(treemodel.get_path(iter))
+		self.notebook.reorder_child(self.notebook.get_nth_page(tab), self.get_pos(path))
+		
+	def setup_drag(self):
+		self.TARGETS = [
+			('TVEXT_TREE_MODEL_ROW_INTERNAL', gtk.TARGET_SAME_WIDGET, 0),
+			('TVEXT_TREE_MODEL_ROW_EXTERNAL', 0, 1),
+			('text/plain', 0, 2),
+			('TEXT', 0, 3),
+			('STRING', 0, 4)
+		]
+		self.treeview.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, self.TARGETS,
+			gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
+		self.treeview.enable_model_drag_dest(self.TARGETS, gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_MOVE)
+		self.treeview.connect("drag_data_get", self.drag_data_get_data)
+		self.treeview.connect("drag_data_received", self.drag_data_received_data)
+		
+	def drag_data_get_data(self, treeview, context, selection, info, etime):
+		treeselection = treeview.get_selection()
+		model, iter = treeselection.get_selected()
+		if info == 0:
+			data = model.get_string_from_iter(iter)
+			selection.set(selection.target, 8, data)
+		else:
+			data = str(self.notebook.get_nth_page(self.get_pos(model.get_path(iter))).get_address())
+			selection.set_text(data)
+		
+	def get_pos(self, path):
+		return list(path)[0]
+		
+	def drag_data_received_data(self, treeview, context, x, y, selection, info, etime):
+		data = selection.data
+		drop_info = treeview.get_dest_row_at_pos(x, y)
+		model = treeview.get_model()
+		if info == 0:
+			# Internal move
+			iter = model.get_iter_from_string(data)
+			if drop_info:
+				path, position = drop_info
+				if (position == gtk.TREE_VIEW_DROP_AFTER or
+					position == gtk.TREE_VIEW_DROP_INTO_OR_AFTER):
+					old_pos = self.get_pos(model.get_path(iter))
+					if old_pos >= self.get_pos(path):
+						path = model.get_path(model.iter_next(model.get_iter(path)))
+				self.move_tab(model, path, iter)
+			else:
+				dest = model.iter_nth_child(None, model.iter_n_children(None)-1)
+				self.move_tab(model, model.get_path(dest), iter)
+#		else:
+#			if drop_info:
+#				path, position = drop_info
+#				iter = model.get_iter(path)
+#				source_tab = model.get_value(iter, 0)
+#				new_tab = self.window.open(data, source_tab, 2)
+#				tabrow = self.find_tab_row(new_tab)
+#				if (position == gtk.TREE_VIEW_DROP_AFTER or
+#					position == gtk.TREE_VIEW_DROP_INTO_OR_AFTER):
+#					iter = model.iter_next(iter)
+#				path = model.get_path(iter)
+#				self.move_tab(model, path, tabrow)
+#				self.notebook.set_current_page( self.get_pos(path))
+#			else:
+#				iter = model.iter_nth_child(None, model.iter_n_children(None)-1)
+#				source_tab = model.get_value(iter, 0)
+#				self.window.open(data, source_tab, 2)
+#				path = model.get_path(iter)
+#				self.notebook.set_current_page(self.get_pos(path)+1)
+#			if info == 1:
+#				context.finish(True, True, etime)
+				
+	def treeview_click_cb(self, treeview, event):
+		if event.button == 3:
+			pos_info = treeview.get_dest_row_at_pos(int(event.x), int(event.y))
+			if pos_info:
+				path, position = pos_info
+				self.notebook.set_current_page(self.get_pos(path))
+				self.show_tab_popup(event.get_time())
+				return True
+			else:
+				self.show_sidebar_popup(event.get_time())
+
+	def build_custom(self):
+		self.custom_part = gtk.HPaned()
+		self.custom_part.pack2(gtk.HPaned(), True)
+		self.treemodel = gtk.ListStore(int, str, gtk.gdk.Pixbuf)
+		self.treeview = gtk.TreeView(self.treemodel)
+		self.treeview.set_headers_visible(False)
+		self.treeview.get_selection().set_mode(gtk.SELECTION_BROWSE)
+		self.setup_drag()
+		# self.treeview.set_reorderable(True)
+		title_cell = gtk.CellRendererText()
+		title_cell.set_property("ellipsize", pango.ELLIPSIZE_END)
+		icon_cell = gtk.CellRendererPixbuf()
+		self.column = gtk.TreeViewColumn('Tab icon')
+		self.column.pack_start(icon_cell, False)
+		self.column.set_attributes(icon_cell, pixbuf=2)
+		self.column.pack_start(title_cell)
+		self.column.set_attributes(title_cell, text=1)
+		self.treeview.append_column(self.column)
+		self.treeview.connect('button-press-event', self.treeview_click_cb)
+		self.treeview.get_selection().connect('changed', self.on_selection_change)
+		self.treemodel.connect('row-changed', self.move_tab)
+		scrolled = gtk.ScrolledWindow()
+		scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
+		scrolled.set_shadow_type(gtk.SHADOW_IN)
+		scrolled.add(self.treeview)
+		label = gtk.Label("Opened Pages")
+		label.set_justify(gtk.JUSTIFY_LEFT)
+		label.set_ellipsize(pango.ELLIPSIZE_END)
+		label.set_alignment(0.0, 0.5)
+		label.set_padding(3, 0)
+		close_button = gtk.Button()
+		close_button.set_relief(gtk.RELIEF_NONE)
+		close_image = gtk.image_new_from_stock(gtk.STOCK_CLOSE,
+			gtk.ICON_SIZE_MENU)
+		close_button.set_image(close_image)
+		close_button.connect("clicked", self.close_clicked)
+		title_hbox = gtk.HBox()
+		title_hbox.pack_start(label, True)
+		title_hbox.pack_end(close_button, False)
+		self.vbox = gtk.VBox()
+		self.vbox.pack_start(title_hbox, False)
+		self.vbox.pack_start(scrolled, True)
+		self.spacer = gtk.Alignment(xscale=1.0, yscale=1.0)
+		self.spacer.add(self.vbox)
+		self.spacer_update()
+		self.secondary_pack(self.spacer)
+		self.main_pack(self.notebook)
+		self.custom_part.show()
+		self.custom_part.get_child2().show()
+		self.custom_part.connect("notify::position", self.sidebar_width_changed1_cb)
+		self.custom_part.get_child2().connect("notify::position", self.sidebar_width_changed2_cb)
+		# Best way I found to be informed when the window has finalized its size
+		self.rs_hack = self.custom_part.get_child2().connect("notify::max-position",
+			self.right_sidebar_hack_cb)
+		
+	def right_sidebar_hack_cb(self, paned, position):
+		self.sidebar_width_update()
+		self.custom_part.get_child2().disconnect(self.rs_hack)
+		
+	def window_focus_cb(self, window, value):
+		# The saved width is the width of the last focused window
+		if window.is_active():
+			self.sidebar_width_save()
+		
+	def sidebar_width_changed1_cb(self, paned, position):
+		if not self.no_update:
+			self.sidebar_width = paned.get_position()
+			self.sidebar_width_save()
+	
+	def sidebar_width_changed2_cb(self, paned, position):
+		if not self.no_update:
+			paned = self.custom_part.get_child2()
+			self.sidebar_width = paned.get_allocation().width-paned.get_position()-6
+			self.sidebar_width_save()
+			
+	def sidebar_width_save(self):
+		self.gconf.set_int(base_gconf_path+"sidebar_width", self.sidebar_width)
+	
+	def sidebar_width_update(self):
+		self.no_update = True
+		if self.sidebar_on_right:
+			paned = self.custom_part.get_child2()
+			paned.set_position(self.window.get_allocation().width-self.sidebar_width-6)
+		else:
+			self.custom_part.set_position(self.sidebar_width)
+		self.no_update = False
+
+	def spacer_update(self):
+		if self.sidebar_on_right:
+			self.spacer.set_padding(0, 4, 0, 4)
+		else:
+			self.spacer.set_padding(0, 4, 4, 0)
+			
+	def separator_update(self):
+		hbchilds = self.custom_part.get_child2().get_child1().get_children()
+		if self.sidebar_on_right:
+			hbchilds[0].hide()
+			hbchilds[2].show()
+		else:
+			hbchilds[0].show()
+			hbchilds[2].hide()
+		
+	def main_pack(self, widget):
+		hbox = gtk.HBox()
+		sep1 = gtk.VSeparator()
+		sep2 = gtk.VSeparator()
+		hbox.pack_start(sep1, False)
+		hbox.pack_start(widget, True)
+		hbox.pack_start(sep2, False)
+		self.custom_part.get_child2().pack1(hbox, True, True)
+		hbox.show_all()
+		self.separator_update()
+				
+	def secondary_pack(self, widget):
+		if self.sidebar_on_right:
+			self.custom_part.get_child2().pack2(widget, False, False)
+		else:
+			self.custom_part.pack1(widget, False, False)
+		widget.show_all()
+		
+	def secondary_unpack(self):
+		widget = self.get_secondary()
+		widget.get_parent().remove(widget)
+		return widget
+			
+	def get_main(self):
+		return self.custom_part.get_child2().get_child1().get_children()[1]
+	
+	def get_secondary(self):
+		if self.sidebar_on_right:
+			return self.custom_part.get_child2().get_child2()
+		else:
+			return self.custom_part.get_child1()
+			
+	def get_separator(self):
+		if self.sidebar_on_right:
+			return self.custom_part.get_child2().get_child1().get_children()[2]
+		else:
+			return self.custom_part.get_child2().get_child1().get_children()[0]
+			
+	def show_tab_popup(self,etime):
+		popupmenu = self.uimanager.get_widget("/EphyNotebookPopup")
+		popupmenu.popup(None, None, None, 2, etime)
+		
+	def show_sidebar_popup(self, etime):
+		popupmenu = self.uimanager.get_widget("/TabsOnTreeviewPopup")
+		popupmenu.popup(None, None, None, 2, etime)
+		
+	def close_clicked(self, button):
+		self.window.get_active_child().close()
+		
+	def show_sidebar(self):
+		self.get_secondary().show()
+		self.get_separator().show()
+		self.force_hidden_tabs(self.notebook, True)
+		
+	def hide_sidebar(self):
+		self.get_secondary().hide()
+		self.get_separator().hide()
+	
+	def update_tab_order(self, notebook, child, page_num):
+		tabrow = self.find_tab_row(child)
+		if tabrow:
+			dest = self.treemodel.iter_nth_child(None, page_num)
+			old_num = self.get_pos(self.treemodel.get_path(tabrow))
+			if old_num > page_num:
+				self.treemodel.move_before(tabrow, dest)
+			else:
+				self.treemodel.move_after(tabrow, dest)
+			
+	# Workaround for bug: #169116 
+	def workaround_embed(self):
+		active = self.window.get_active_child()
+		if active:
+			active.hide()
+			active.show()
+
+	def attach_window(self):
+		winvbox = self.window.get_children()[0]
+		self.notebook.get_parent().remove(self.notebook)
+		self.build_custom()
+		winvbox.pack_start(self.custom_part, True)
+		winvbox.reorder_child(self.custom_part, 1)
+		self.notebook.connect('switch_page', self.update_current_tab)
+		self.notebook.connect('page_reordered', self.update_tab_order)
+		self.fhidden_cb_handle = self.notebook.connect('notify::show-tabs', self.force_hidden_tabs)
+		self.workaround_embed()
+		self.uimanager = self.window.get_ui_manager()
+		self.ui_id = self.uimanager.add_ui_from_string(self.treeview_popup_xml)
+		self.actiongroup = gtk.ActionGroup('TabsOnTreeview')
+		self.actiongroup.add_radio_actions(self.actiongroupdef, self.sidebar_on_right, self.toggle_sidebar_side_cb)
+		self.uimanager.insert_action_group(self.actiongroup, 0)
+		self.sidebar_width_update()
+		self.window.connect("notify::is-active", self.window_focus_cb)
+	
+	def force_hidden_tabs(self, notebook, visible):
+		if visible:
+			notebook.set_show_tabs(False)
+
+	def detach_window(self):
+		winvbox = self.window.get_children()[0]
+		self.notebook.get_parent().remove(self.notebook)
+		self.custom_part.get_parent().remove(self.custom_part)
+		winvbox.pack_start(self.notebook, True)
+		winvbox.reorder_child(self.notebook, 1)
+		self.notebook.disconnect(self.fhidden_cb_handle)
+		self.notebook.set_show_tabs(True)
+		self.notebook.show()
+		self.workaround_embed()
+		self.uimanager.remove_ui(self.ui_id)
+		self.uimanager.remove_action_group(self.actiongroup)
+		self.uimanager.ensure_update()
+	
+	def update_current_tab(self, notebook, page, page_num):
+		self.no_update = True
+		self.treeview.set_cursor(int(page_num))
+		self.no_update = False
+
+	def find_tab_row(self, tab):
+		iter = self.treemodel.get_iter_first()
+		h = hash(tab)
+		while (iter):
+			if self.treemodel.get_value (iter, 0) == h:
+				return iter
+			iter = self.treemodel.iter_next(iter)
+		return None
+
+	def update_tab_title_and_icon(self, tab, data):
+		tabrow = self.find_tab_row(tab)
+		if tabrow:
+			self.treemodel.set_value(tabrow, 1, tab.get_title())
+			self.treemodel.set_value(tabrow, 2, tab.get_icon())
+
+	def attach_tab(self, tab):
+		page_num = self.notebook.page_num(tab)
+		self.treemodel.insert(page_num, [hash(tab), tab.get_title(), tab.get_icon()])
+		tab.connect('dom-content-loaded', self.update_tab_title_and_icon)
+		if self.notebook.get_n_pages() == 1 and not self.always_show_tabs_bar:
+			self.hide_sidebar()
+		else:
+			self.show_sidebar()
+
+	def detach_tab(self, tab):
+		if self.find_tab_row(tab):
+			self.treemodel.remove(self.find_tab_row(tab))
+		if self.notebook.get_n_pages() < 2 and not self.always_show_tabs_bar:
+			self.hide_sidebar()
+				
+	def set_always_show_tabs_bar(self, active):
+		self.always_show_tabs_bar = active
+		if not active and self.notebook.get_n_pages() < 2 :
+			self.hide_sidebar()
+		else:
+			self.show_sidebar()
+			
+	def set_sidebar_on_right(self, value):
+		secondary = self.secondary_unpack()
+		self.sidebar_on_right = value
+		self.secondary_pack(secondary)
+		self.spacer_update()
+		self.separator_update()
+		self.sidebar_width_update()
+		toggle = self.uimanager.get_widget("/TabsOnTreeviewPopup/TabsOnTreeviewRight")
+		toggle.set_active(self.sidebar_on_right)
+	
+			
+class TreeviewTabsDispatch:
+	def __init__(self):
+		self.winlist = {}
+		self.gconf = gconf.client_get_default()
+		self.always_show_tabs_bar = self.gconf.get_bool("/apps/epiphany/general/always_show_tabs_bar")
+		self.sidebar_on_right = self.gconf.get_bool(base_gconf_path+"sidebar_on_right")
+		self.gconf.notify_add("/apps/epiphany/general/always_show_tabs_bar",
+			self.always_show_tabs_bar_cb)
+		self.gconf.notify_add(base_gconf_path+"sidebar_on_right",
+			self.sidebar_on_right_cb)
+	
+	def always_show_tabs_bar_cb(self, client, a_number, entry, a_list):
+		active = entry.value.get_bool()
+		for window in self.winlist:
+			self.winlist[window].set_always_show_tabs_bar(active)
+		self.always_show_tabs_bar = active
+	
+	def sidebar_on_right_cb(self, client, a_number, entry, a_list):
+		active = entry.value.get_bool()
+		for window in self.winlist:
+			self.winlist[window].set_sidebar_on_right(active)
+		self.sidebar_on_right = active
+
+	def attach_window(self, window):
+		self.winlist[window] = TreeviewTabs(window, self.gconf,
+			self.always_show_tabs_bar, self.sidebar_on_right)
+		self.winlist[window].attach_window()
+	
+	def attach_tab(self, window, tab):
+		self.winlist[window].attach_tab(tab)
+
+	def detach_tab(self, window, tab):
+		self.winlist[window].detach_tab(tab)
+	
+	def detach_window(self, window):
+		self.winlist[window].detach_window()
+		del self.winlist[window]
+
+
+treeview_extension = TreeviewTabsDispatch()
+
+attach_window = treeview_extension.attach_window
+detach_window = treeview_extension.detach_window
+
+attach_tab = treeview_extension.attach_tab
+detach_tab = treeview_extension.detach_tab

Added: packages/experimental/epiphany-extensions-more/ui/throbber-remover.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/throbber-remover.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/throbber-remover.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/ui/throbber-remover.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,10 @@
+[Epiphany Extension]
+Name=Throbber remover
+Description=Removes the throbber from the toolbar
+Authors=Diego Escalante Urrelo <diegoe at gnome.org>
+Version=20080422
+URL=http://www.gnome.org/~diegoe/epiphany/
+
+[Loader]
+Type=python
+Module=throbber-remover

Propchange: packages/experimental/epiphany-extensions-more/ui/throbber-remover.ephy-extension
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: packages/experimental/epiphany-extensions-more/ui/throbber-remover.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/throbber-remover.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/throbber-remover.py (added)
+++ packages/experimental/epiphany-extensions-more/ui/throbber-remover.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,26 @@
+# -*- encoding: utf-8 -*-
+#
+#   Remove-throbber - Epiphany Extension
+#   Copyright © 2006, 2008  Diego Escalante Urrelo <diegoe at gnome.org>
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+import epiphany
+
+def attach_tab(window, tab):
+    window.get_toolbar().get_children()[0].get_children()[1].get_children()[0].hide()
+
+def detach_window(window):
+    window.get_toolbar().get_children()[0].get_children()[1].get_children()[0].show()

Propchange: packages/experimental/epiphany-extensions-more/ui/throbber-remover.py
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.ephy-extension
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.ephy-extension?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.ephy-extension (added)
+++ packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.ephy-extension Thu Jan  8 19:56:45 2009
@@ -1,0 +1,11 @@
+[Epiphany Extension]
+Name=Urgent Content Notify
+Description=Set URGENT window manager hint when content changes in a window that doesn't have focus
+Authors=Stefan Stuhr
+Version=1
+URL=http://www.sstuhr.dk/epiphany-extensions/
+
+
+[Loader]
+Type=python
+Module=urgentcontentnotify

Propchange: packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.ephy-extension
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.py
URL: http://svn.debian.org/wsvn/pkg-gnome/packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.py?rev=18214&op=file
==============================================================================
--- packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.py (added)
+++ packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.py Thu Jan  8 19:56:45 2009
@@ -1,0 +1,64 @@
+#   Urgent Content Notify - Epiphany Extension
+#   Copyright (C) 2006  Stefan Stuhr
+#
+#   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.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import gtk
+import epiphany
+
+def ucn_window_set_focus(window, event):
+	window.set_urgency_hint(False)
+
+def attach_window(window):
+	if hasattr(window, "get_urgency_hint"):
+		signal = window.connect("focus-in-event", ucn_window_set_focus)
+		window._ucn_window_set_focus_sig = signal
+
+def detach_window(window):
+	if hasattr(window, "_ucn_window_set_focus_sig"):
+		window.disconnect(window._ucn_window_set_focus_sig)
+		delattr(window, "_ucn_window_set_focus_sig")
+
+		if window.get_urgency_hint():
+			window.set_urgency_hint(False)
+
+def ucn_embed_content_change(embed, uri, window):
+	if not window.has_focus and hasattr(window, "set_urgency_hint"):
+		window.set_urgency_hint(True)
+
+def attach_tab(window, tab):
+	if hasattr(tab, "get_embed"):
+		embed = tab.get_embed()
+	else:
+		embed = tab
+	try:
+		signal = embed.connect("notify::load-status", ucn_embed_content_change, window)
+	except:
+		signal = embed.connect("ge-content-change", ucn_embed_content_change, window)
+
+	tab._ucn_embed_content_change = signal
+
+def detach_tab(window, tab):
+	if not hasattr(tab, "_ucn_embed_content_change"):
+		return
+
+	if hasattr(tab, "get_embed"):
+		embed = tab.get_embed()
+	else:
+		embed = tab
+	embed.disconnect(tab._ucn_embed_content_change)
+	delattr(tab, "_ucn_embed_content_change")
+

Propchange: packages/experimental/epiphany-extensions-more/ui/urgentcontentnotify.py
------------------------------------------------------------------------------
    svn:mergeinfo = 




More information about the pkg-gnome-commits mailing list