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