[PATCH] Add JavaScript extensions
=3D?UTF-8?q?Guido=3D20G=3DC3=3DBCnther?=3D
agx at sigxcpu.org
Sat Jan 23 15:01:42 UTC 2010
from http://live.gnome.org/Epiphany/ThirdPartyExtensions/Epiphany228AndLa=
ter
---
debian/README.Debian | 40 ---
debian/control.in | 44 +---
debian/copyright | 69 +----
debian/install | 6 +
debian/rules | 18 --
docs/README.bookmark-shortcuts | 25 ++
docs/README.bookmarkshortcuts | 19 --
docs/README.close_other_tabs | 38 ---
docs/README.tablinks | 23 --
docs/README.video-downloader | 77 -----
misc/autofindasyoutype.ephy-extension | 11 -
misc/autofindasyoutype.py | 97 ------
misc/autofindlinksasyoutype.ephy-extension | 11 -
misc/autofindlinksasyoutype.py | 97 ------
misc/bookmark-shortcuts.ephy-extension | 11 +-
misc/bookmark-shortcuts.js | 221 ++++++++++++++
misc/bookmark-shortcuts.py | 88 ------
misc/session-manager.ephy-extension | 10 -
misc/session-manager.py | 127 --------
misc/tablinks.ephy-extension | 10 -
misc/tablinks.py | 128 --------
misc/universal-edit-button.ephy-extension | 10 -
misc/universal-edit-button.py | 230 --------------
misc/video-downloader.ephy-extension | 10 -
misc/video-downloader.py | 352 ---------------------=
-
misc/view-source.ephy-extension | 10 -
misc/view-source.py | 66 ----
tabs/close_other_tabs.ephy-extension | 10 -
tabs/close_other_tabs.py | 167 ----------
tabs/colour-tabs.ephy-extension | 9 -
tabs/colour-tabs.py | 84 -----
tabs/middle-click-closes-tab.ephy-extension | 10 -
tabs/middle-click-closes-tab.py | 49 ---
tabs/onlyoneclosebutton.ephy-extension | 11 -
tabs/onlyoneclosebutton.py | 134 --------
tabs/reopen-closed-tabs.ephy-extension | 10 +
tabs/reopen-closed-tabs.js | 73 +++++
tabs/restore-tab.ephy-extension | 10 -
tabs/restore-tab.py | 70 -----
tabs/tabforeground.ephy-extension | 11 -
tabs/tabforeground.py | 23 --
tabs/tabkeytabnavigate.ephy-extension | 11 -
tabs/tabkeytabnavigate.py | 50 ---
tabs/tablabelborder.ephy-extension | 11 -
tabs/tablabelborder.py | 44 ---
tabs/widetabs.ephy-extension | 10 -
tabs/widetabs.py | 97 ------
ui/close-multiple-tabs.ephy-extension | 10 +
ui/close-multiple-tabs.js | 27 ++
ui/confirmwindowclose.ephy-extension | 11 -
ui/confirmwindowclose.py | 52 ----
ui/hidden-menu.ephy-extension | 10 -
ui/hidden-menu.py | 92 ------
ui/menuandtoolbar.ephy-extension | 11 -
ui/menuandtoolbar.py | 77 -----
ui/quitmenuitem.ephy-extension | 10 -
ui/quitmenuitem.py | 55 ----
ui/tabs_on_treeview.ephy-extension | 10 -
ui/tabs_on_treeview.py | 434 ---------------------=
------
ui/throbber-remover.ephy-extension | 10 -
ui/throbber-remover.py | 26 --
ui/urgentcontentnotify.ephy-extension | 11 -
ui/urgentcontentnotify.py | 64 ----
64 files changed, 412 insertions(+), 3289 deletions(-)
create mode 100644 debian/install
create mode 100644 docs/README.bookmark-shortcuts
delete mode 100644 docs/README.bookmarkshortcuts
delete mode 100644 docs/README.close_other_tabs
delete mode 100644 docs/README.tablinks
delete mode 100644 docs/README.video-downloader
delete mode 100644 misc/autofindasyoutype.ephy-extension
delete mode 100644 misc/autofindasyoutype.py
delete mode 100644 misc/autofindlinksasyoutype.ephy-extension
delete mode 100644 misc/autofindlinksasyoutype.py
create mode 100644 misc/bookmark-shortcuts.js
delete mode 100644 misc/bookmark-shortcuts.py
delete mode 100644 misc/session-manager.ephy-extension
delete mode 100644 misc/session-manager.py
delete mode 100644 misc/tablinks.ephy-extension
delete mode 100644 misc/tablinks.py
delete mode 100644 misc/universal-edit-button.ephy-extension
delete mode 100644 misc/universal-edit-button.py
delete mode 100644 misc/video-downloader.ephy-extension
delete mode 100644 misc/video-downloader.py
delete mode 100644 misc/view-source.ephy-extension
delete mode 100644 misc/view-source.py
delete mode 100644 tabs/close_other_tabs.ephy-extension
delete mode 100644 tabs/close_other_tabs.py
delete mode 100644 tabs/colour-tabs.ephy-extension
delete mode 100644 tabs/colour-tabs.py
delete mode 100644 tabs/middle-click-closes-tab.ephy-extension
delete mode 100644 tabs/middle-click-closes-tab.py
delete mode 100644 tabs/onlyoneclosebutton.ephy-extension
delete mode 100644 tabs/onlyoneclosebutton.py
create mode 100644 tabs/reopen-closed-tabs.ephy-extension
create mode 100644 tabs/reopen-closed-tabs.js
delete mode 100644 tabs/restore-tab.ephy-extension
delete mode 100644 tabs/restore-tab.py
delete mode 100644 tabs/tabforeground.ephy-extension
delete mode 100644 tabs/tabforeground.py
delete mode 100644 tabs/tabkeytabnavigate.ephy-extension
delete mode 100644 tabs/tabkeytabnavigate.py
delete mode 100644 tabs/tablabelborder.ephy-extension
delete mode 100644 tabs/tablabelborder.py
delete mode 100644 tabs/widetabs.ephy-extension
delete mode 100644 tabs/widetabs.py
create mode 100644 ui/close-multiple-tabs.ephy-extension
create mode 100644 ui/close-multiple-tabs.js
delete mode 100644 ui/confirmwindowclose.ephy-extension
delete mode 100644 ui/confirmwindowclose.py
delete mode 100644 ui/hidden-menu.ephy-extension
delete mode 100644 ui/hidden-menu.py
delete mode 100644 ui/menuandtoolbar.ephy-extension
delete mode 100644 ui/menuandtoolbar.py
delete mode 100644 ui/quitmenuitem.ephy-extension
delete mode 100644 ui/quitmenuitem.py
delete mode 100644 ui/tabs_on_treeview.ephy-extension
delete mode 100644 ui/tabs_on_treeview.py
delete mode 100644 ui/throbber-remover.ephy-extension
delete mode 100644 ui/throbber-remover.py
delete mode 100644 ui/urgentcontentnotify.ephy-extension
delete mode 100644 ui/urgentcontentnotify.py
diff --git a/debian/README.Debian b/debian/README.Debian
index 7a6a6e0..7a48799 100644
--- a/debian/README.Debian
+++ b/debian/README.Debian
@@ -4,43 +4,3 @@ epiphany-extensions-more
This is a collection of extensions from various sources. The quality and
stability of the extensions are just as various.
=20
-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.
-
- 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.
-Proxy fixes.
-
- view-source
- -----------
-The specific menu entry was removed, instead we override the existing
-menu entry with an identical-looking one.
diff --git a/debian/control.in b/debian/control.in
index d79fb18..cfc5e9a 100644
--- a/debian/control.in
+++ b/debian/control.in
@@ -5,56 +5,28 @@ Maintainer: Josselin Mouette <joss at debian.org>
Uploaders: @GNOME_TEAM@
Build-Depends: debhelper (>=3D 5),
cdbs,
- gnome-pkg-tools (>=3D 0.6),
- python-support (>=3D 0.7)
+ gnome-pkg-tools (>=3D 0.6)
Standards-Version: 3.8.1
-Homepage: http://live.gnome.org/Epiphany/ThirdPartyExtensions
+Homepage: http://live.gnome.org/Epiphany/ThirdPartyExtensions/Epiphany22=
8AndLater
=20
Package: epiphany-extensions-more
Architecture: all
Depends: epiphany-extensions (>=3D ${gnome:Version}),
epiphany-extensions (<< ${gnome:NextVersion}),
- ${python:Depends},
- ${misc:Depends},
- python-gtk2,
- python-gobject,
- python-gnome2,
- python-notify,
- clive (>=3D 2)
+ gir1.0-webkit-1.0,
+ gir1.0-soup-2.4,
+ ${misc:Depends}
Description: Collection of third-party extensions for the Epiphany web b=
rowser
This package contains various user-contributed extensions for=20
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
- * Universal Edit Button - A single shortcut to bring the editor for=20
- sites with editable content (wikis)
- * Video Downloader - Automatically download or open Flash videos from=20
- popular sites, without Flash support
- * View Source - View page source inside the browser
+ * Bookmark shortcuts - Perform bookmark searches by typing a shortcut =
in the
+ address bar
.
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
- * 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=20
- 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=20
- 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
+
diff --git a/debian/copyright b/debian/copyright
index 8d9bf29..34e0e24 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -4,72 +4,31 @@ Thu, 08 Jan 2009 19:23:55 +0100.
It was downloaded from http://live.gnome.org/Epiphany/ThirdPartyExtensio=
ns
=20
Authors:
- Stefan Stuhr <webmaster at sstuhr.dk> - autofindasyoutype,=20
- autofindlinksasyoutype, urgentcontentnotify,=20
- onlyoneclosebutton, tabkeytabnavigate, tablabelborder,=20
- confirmwindowclose, menuandtoolbar
- 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,=20
- view-source, widetabs, hidden-menu
- Adam Schmalhofer <blauebirke at gmx.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=E2=80=99Adh=C3=A9mar <cdadhemar at free.fr> - tabforegr=
ound
- Reinout van Schouwen <reinouts at gnome.org> - quitmenuitem
- Kevin Michel <kmichel.info at gmail.com> - tabs_on_treeview
- Thomas Thurman <tthurman at gnome.org> - colour-tabs
- Johannes Berg <johannes at sipsolutions.net> - universal-edit-button
+ Nigel Tao <nigeltao at gnome.org>, bookmark-shortcuts
+ Iain Nicol <iainn at src.gnome.org>, bookmark-shortcuts
+ Tim Horton <hortont424 at gmail.com>, reopen-closed-tabs,
+ close-multiple-tabs
=20
Copyright:
- Copyright =C2=A9 2006-2007 Stefan Stuhr
- Copyright =C2=A9 2006 Nigel Tao
- Copyright =C2=A9 2007 Simon E. Ward
- Copyright =C2=A9 2007 George Notaras
- Copyright =C2=A9 2006, 2008 Diego Escalante Urrelo
- Copyright =C2=A9 2006 Jaime Frutos Morales
- Copyright =C2=A9 2008 Adam Schmalhofer
- Copyright =C2=A9 2008 Wouter Bolsterlee
- Copyright =C2=A9 2008 Sean Fulmer
- Copyright =C2=A9 2007 Thomas Thurman
- Copyright =C2=A9 2008 Siegfried Gevatter
- Copyright =C2=A9 2007 Michael Opitz
- Copyright =C2=A9 2007 Charles-Henri d=E2=80=99Adh=C3=A9mar
- Copyright =C2=A9 2008 Reinout van Schouwen
- Copyright =C2=A9 Kevin Michel
- Copyright =C2=A9 2009 Josselin Mouette
- Copyright =C2=A9 2006 Jaime Frutos Morales
- Copyright =C2=A9 2008 Johannes Berg
+ Copyright =C2=A9 2009 Iain Nicol <iainn at src.gnome.org>
+ Copyright =C2=A9 2009 Tim Horton <hortont424 at gmail.com>
=20
-License for the session-manager, tabforeground and tabs_on_treeview=20
-extensions:
+License for the bookmark-shortcuts, reopen-closed-tabs:
=20
- 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 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.
=20
- This package is distributed in the hope that it will be useful,
+ 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.
=20
- 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
+On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL-2'.
=20
-
-Note: the tabs_on_treeview extension did not include licensing=20
-information, but the author sent the following statement by email:
-
- I release "tabs on treeeview" under the GPL 2 licence.
-
-
-License for the other extensions and the Debian changes:
+License for the Debian changes:
=20
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
diff --git a/debian/install b/debian/install
new file mode 100644
index 0000000..217934f
--- /dev/null
+++ b/debian/install
@@ -0,0 +1,6 @@
+tabs/*.js /usr/lib/epiphany-browser/2.29/extensions/
+tabs/*.ephy-extension /usr/lib/epiphany-browser/2.29/extensions/
+misc/*.js /usr/lib/epiphany-browser/2.29/extensions/
+misc/*.ephy-extension /usr/lib/epiphany-browser/2.29/extensions/
+ui/*.js /usr/lib/epiphany-browser/2.29/extensions/
+ui/*.ephy-extension /usr/lib/epiphany-browser/2.29/extensions/
diff --git a/debian/rules b/debian/rules
index 10078ce..82ff59f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -4,21 +4,3 @@ 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
=20
-webkit_exts =3D \
- bookmark-shortcuts session-manager tablinks close_other_tabs \
- middle-click-closes-tab restore-tab tabkeytabnavigate tablabelborder \
- widetabs confirmwindowclose hidden-menu quitmenuitem \
- tabs_on_treeview throbber-remover
-
-binary-post-install/epiphany-extensions-more::
- dh_pysupport -p$(cdbs_curpkg) /usr/lib/epiphany-gecko/$(DEB_GNOME_VERSI=
ON)/extensions
-
-binary-install/epiphany-extensions-more::
- mkdir -p debian/$(cdbs_curpkg)/usr/lib/epiphany-gecko/$(DEB_GNOME_VERSI=
ON)/extensions
- install -m 644 misc/*.py tabs/*.py ui/*.py debian/$(cdbs_curpkg)/usr/li=
b/epiphany-gecko/$(DEB_GNOME_VERSION)/extensions/
- install -m 644 misc/*.ephy-extension tabs/*.ephy-extension ui/*.ephy-ex=
tension debian/$(cdbs_curpkg)/usr/lib/epiphany-gecko/$(DEB_GNOME_VERSION)=
/extensions/
- mkdir -p debian/$(cdbs_curpkg)/usr/lib/epiphany-webkit/$(DEB_GNOME_VERS=
ION)/extensions
- cd debian/$(cdbs_curpkg)/usr/lib/epiphany-webkit/$(DEB_GNOME_VERSION)/e=
xtensions && \
- for i in $(webkit_exts); do \
- ln -s ../../../epiphany-gecko/$(DEB_GNOME_VERSION)/extensions/$$i.* .=
; \
- done
diff --git a/docs/README.bookmark-shortcuts b/docs/README.bookmark-shortc=
uts
new file mode 100644
index 0000000..a7ec3ce
--- /dev/null
+++ b/docs/README.bookmark-shortcuts
@@ -0,0 +1,25 @@
+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=3D%foo
+
+To install, move the .js and .ephy-extension files into
+~/.gnome2/epiphany/extensions/ and then, from Epiphany's menu, go to
+Tools -> Extensions to enable it.
+
+You can configure the shortcuts from Epiphany's Edit -> Bookmark
+Shortcuts menu. Alternatively, right-click on Deskbar's icon, choose
+Preferences and from the ``Web Searches (Epiphany)'' extension, click
+the ``More...'' button. That, or just edit Deskbar's list of search
+shortcuts (it's a text file):
+~/.gnome2/deskbar-applet/search-bookmarks-shortcuts.txt
+
+Note that this is an Epiphany extension, not a Deskbar extension.
+Deskbar comes out-of-the-box with this behavior.
+
+This extension was originally written by Nigel Tao. It was ported to be
+a ``Seed'' Javascript extension by Iain Nicol, to get it to work with
+versions of Epiphany greater than 2.28. However, to avoid crashes when
+using this extension you should use Epiphany 2.29.3 or later, and Seed
+2.29.5 or later.
\ No newline at end of file
diff --git a/docs/README.bookmarkshortcuts b/docs/README.bookmarkshortcut=
s
deleted file mode 100644
index f662a09..0000000
--- a/docs/README.bookmarkshortcuts
+++ /dev/null
@@ -1,19 +0,0 @@
-This Epiphany extension uses the Deskbar's shortcuts for the browser's "=
smart
-bookmarks", or searches, so that, if you have the Wikipedia search bookm=
arked,
-and you have configured Deskbar properly, you can type "wp foo" in Epiph=
any's
-location bar to go to http://en.wikipedia.org/wiki/Special:Search?search=
=3D%foo
-
-To configure the Deskbar's shortcuts, right-click on its icon, choose
-Preferences and from the "Web Searches" extension, click the "More..." b=
utton.
-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/extensio=
ns/
-and then, from Epiphany's menu, go to Tools -> Extensions to enable it.
-
-Note that this is an Epiphany extension, not a Deskbar extension. Deskb=
ar
-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.
-
diff --git a/docs/README.close_other_tabs b/docs/README.close_other_tabs
deleted file mode 100644
index 6971164..0000000
--- a/docs/README.close_other_tabs
+++ /dev/null
@@ -1,38 +0,0 @@
-Close Other Tabs
-=3D=3D=3D
-
-Legal Nonsense
-=3D=3D
-
-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 Sof=
tware
-Foundation; either version 2 of the License, or (at your option) any lat=
er
-version. For more information, see COPYING.
-
-What Is It?
-=3D=3D
-
-Close Other Tabs is a small extension for Epiphany that adds items to th=
e main=20
-and tab context menus to allow you to close tabs other than the active t=
ab. You
-can close all other tabs, or tabs to the left/right of the current tab. =
This=20
-was inspired by similar functionality in the Tab Mix Plus extension for =
Firefox.=20
-
-Installation
-=3D=3D
-
-For now, simply copy the following files to ~/.gnome2/epiphany/extension=
s:
-
-* 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
-=3D=3D
-Ross Burton, from whose EphyDeli extension I borrowed the Makefile and t=
he
-general project layout
-http://www.burtonini.com/blog//computers/ephydeli-2006-08-29-21-40
diff --git a/docs/README.tablinks b/docs/README.tablinks
deleted file mode 100644
index 6e81928..0000000
--- a/docs/README.tablinks
+++ /dev/null
@@ -1,23 +0,0 @@
-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-b=
rowser/
-
-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
diff --git a/docs/README.video-downloader b/docs/README.video-downloader
deleted file mode 100644
index e7f07a8..0000000
--- a/docs/README.video-downloader
+++ /dev/null
@@ -1,77 +0,0 @@
-About
-=3D=3D=3D=3D=3D
-
-This in an extension for the Epiphany Webbrowser. It searches the viewed=
web=20
-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 cli=
ck on=20
-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-ext=
ension/
-
-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
-=3D=3D=3D=3D=3D=3D=3D
-
-Like all Epiphany extensions, it is Free Software licenced under the GNU=
=20
-General Public Licence either version 2, or (at your option) any later v=
ersion.
-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-s=
a 3.0.
-
-Install
-=3D=3D=3D=3D=3D=3D=3D
-
-To install just copy the files "video-downloader.ephy-extension" and=20
-"video-downloader.py" into one of epiphany's extensions folder:=20
-"~/.gnome2/epiphany/extensions/" or "/usr/lib/epiphany-gecko/2.22/extens=
ions/".=20
-Don=E2=80=99t forget to install clive (both 1.x and 2.x are fine). Then =
you can=20
-activate it in the "Tools/Extensions" menu.
-
-
-Pre-requirements
-----------------
-
-In addition to epiphany and clive there are a few dependancies. However =
these=20
-should already be installed on any resonable GNOME desktop. Here is a li=
st of=20
-them:
-
-* epiphany
-* clive
-* python
-* python-gconf
-* python-gtk2
-* python-libnotify
-
-Bugs, issues and questions
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D
-
-Please don't hesitate to drop a line at:
-
- http://blauebirke.wordpress.com/2008/09/09/epiphany-video-download-ext=
ension/
-
-If you prefer writing an email: Adam.Schmalhofer at gmx.de
-
-New versions and development
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
-
-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=20
-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 wi=
th:
-
- bzr pull
diff --git a/misc/autofindasyoutype.ephy-extension b/misc/autofindasyouty=
pe.ephy-extension
deleted file mode 100644
index 7e064f9..0000000
--- a/misc/autofindasyoutype.ephy-extension
+++ /dev/null
@@ -1,11 +0,0 @@
-[Epiphany Extension]
-Name=3DAutomatic Find As You Type
-Description=3DStart typing, and you will find
-Authors=3DStefan Stuhr
-Version=3D1
-URL=3Dhttp://www.sstuhr.dk/epiphany-extensions/
-
-
-[Loader]
-Type=3Dpython
-Module=3Dautofindasyoutype
diff --git a/misc/autofindasyoutype.py b/misc/autofindasyoutype.py
deleted file mode 100644
index 16b56a0..0000000
--- a/misc/autofindasyoutype.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 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 =3D afayt_get_entry(child)
- if result !=3D 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 =3D gtk.gdk.keyval_to_unicode(event.keyval)
- if unival =3D=3D 0:
- unistr =3D u""
- else:
- unistr =3D unichr(unival)
-
- if unistr in (u"", u"'", u"/", u" "):
- return
-
- entry =3D 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 =3D 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 =3D tab.get_embed()
- else:
- embed =3D tab
- signal =3D embed.connect("ge-search-key-press", afayt_search_key_press_=
cb, window, window.get_find_toolbar())
-
- tab._afayt_search_key_press_sig =3D signal
-
-def detach_tab(window, tab):
- if not hasattr(tab, "_afayt_search_key_press_sig"):
- return
-
- if hasattr(tab, "get_embed"):
- embed =3D tab.get_embed()
- else:
- embed =3D tab
- embed.disconnect(tab._afayt_search_key_press_sig)
-
- delattr(tab, "_afayt_search_key_press_sig")
-
diff --git a/misc/autofindlinksasyoutype.ephy-extension b/misc/autofindli=
nksasyoutype.ephy-extension
deleted file mode 100644
index 896d270..0000000
--- a/misc/autofindlinksasyoutype.ephy-extension
+++ /dev/null
@@ -1,11 +0,0 @@
-[Epiphany Extension]
-Name=3DAutomatic Find Links As You Type
-Description=3DStart typing, and you will find links
-Authors=3DStefan Stuhr
-Version=3D1
-URL=3Dhttp://www.sstuhr.dk/epiphany-extensions/
-
-
-[Loader]
-Type=3Dpython
-Module=3Dautofindlinksasyoutype
diff --git a/misc/autofindlinksasyoutype.py b/misc/autofindlinksasyoutype=
.py
deleted file mode 100644
index 069f75e..0000000
--- a/misc/autofindlinksasyoutype.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 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 =3D aflayt_get_entry(child)
- if result !=3D 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 =3D gtk.gdk.keyval_to_unicode(event.keyval)
- if unival =3D=3D 0:
- unistr =3D u""
- else:
- unistr =3D unichr(unival)
-
- if unistr in (u"", u"'", u"/", u" "):
- return
-
- entry =3D 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 =3D gobject.idle_add(aflayt_idle_cb, window, ent=
ry)
-
- 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 =3D tab.get_embed()
- else:
- embed =3D tab
- signal =3D embed.connect("ge-search-key-press", aflayt_search_key_press=
_cb, window, window.get_find_toolbar())
-
- tab._aflayt_search_key_press_sig =3D signal
-
-def detach_tab(window, tab):
- if not hasattr(tab, "_aflayt_search_key_press_sig"):
- return
-
- if hasattr(tab, "get_embed"):
- embed =3D tab.get_embed()
- else:
- embed =3D tab
- embed.disconnect(tab._aflayt_search_key_press_sig)
-
- delattr(tab, "_aflayt_search_key_press_sig")
-
diff --git a/misc/bookmark-shortcuts.ephy-extension b/misc/bookmark-short=
cuts.ephy-extension
index c99efbe..46a231b 100644
--- a/misc/bookmark-shortcuts.ephy-extension
+++ b/misc/bookmark-shortcuts.ephy-extension
@@ -1,11 +1,10 @@
[Epiphany Extension]
Name=3DBookmark shortcuts
-Description=3DUse deskbar applet shortcuts in the URL bar
-Authors=3DNigel Tao
-Version=3D1
-URL=3Dhttp://www.gnome.org/~nigeltao/epiphany_extensions/bookmark-shortc=
uts/
-
+Description=3DPerform bookmark searches by typing a shortcut in the addr=
ess bar
+Authors=3DIain Nicol\nNigel Tao
+Version=3D1.1.1
+URL=3Dhttp://live.gnome.org/Epiphany/ThirdPartyExtensions
=20
[Loader]
-Type=3Dpython
+Type=3Dseed
Module=3Dbookmark-shortcuts
diff --git a/misc/bookmark-shortcuts.js b/misc/bookmark-shortcuts.js
new file mode 100644
index 0000000..df82809
--- /dev/null
+++ b/misc/bookmark-shortcuts.js
@@ -0,0 +1,221 @@
+// bookmark shortcuts v1.1.1
+// shortcuts for smart bookmark searches, shared with Deskbar Applet
+
+// Original extension for the Mozilla-based Epiphany:
+// (c) 2006-10-17 by Nigel Tao <nigeltao at gnome.org>, GPL licensed.
+// Port to Seed and GIO, and add an entry to the Edit menu:
+// Copyright =C2=A9 2009 Iain Nicol <iainn at src.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, see <http://www.gnu.org/licenses/>.
+
+Gio =3D imports.gi.Gio;
+Gdk =3D imports.gi.Gdk;
+
+var shortcut_to_bookmark_map =3D {};
+var shortcuts_file_name =3D GLib.get_user_config_dir() +
+ "/deskbar-applet/search-bookmarks-shortcuts.txt";
+var shortcuts_file_monitor;
+
+var get_map_from_file =3D function (file) {
+ var map =3D {};
+
+ try {
+ var data_in_stream =3D new Gio.DataInputStream.c_new(file.read()=
);
+
+ while ((line =3D data_in_stream.read_line(null)) !=3D=3D null) {
+ line =3D line.trim();
+
+ var sep_location =3D line.search(/ |\t/);
+ if (sep_location > 0) {
+ var url =3D line.substring(0, sep_location);
+ var shortcut =3D line.substring(sep_location + 1).trim()=
;
+
+ map[shortcut] =3D url;
+ }
+ }
+ } catch (e) {
+ // Maybe the file doesn't exist, etc. Ignore.
+ printerr(e);
+ }
+
+ return map;
+};
+
+var shortcuts_changed_cb =3D function (file_monitor, file, other_file,
+ event_type, user_data) {
+ if (event_type =3D=3D=3D Gio.FileMonitorEvent.CHANGES_DONE_HINT) {
+ shortcut_to_bookmark_map =3D get_map_from_file(file);
+ }
+};
+
+var edit_bookmark_shortcuts_cb =3D function (action, window) {
+ // Comment out the code to spawn programs on the correct screen
+ // because as of the end of 2009, missing annotations in GDK will
+ // cause a crash.
+ //
+ var screen =3D null; // window.get_screen();
+ var deskbar_extn =3D Gio.file_new_for_path(
+ "/usr/lib/deskbar-applet/modules-2.20-compatible/epiphany.py");
+
+ if (deskbar_extn.query_exists()) {
+ // launch Deskbar's editor
+ var python_commands =3D
+ "import sys\n" +
+ "sys.path.insert(0," +
+ " '/usr/lib/deskbar-applet/modules-2.20-compatible')\n" +
+ "import epiphany\n" +
+ "e =3D epiphany.EpiphanySearchHandler()\n" +
+ "e.initialize()\n" +
+ "e.show_config(None)\n";
+
+ // Gdk.spawn_on_screen(screen, null, ["python", "-c", python_com=
mands],
+ // null, GLib.SpawnFlags.SEARCH_PATH, null, =
null,
+ // null);
+ GLib.spawn_async(null, ["python", "-c", python_commands],
+ null, GLib.SpawnFlags.SEARCH_PATH, null, null,
+ null);
+ } else {
+ var dialog =3D new Gtk.MessageDialog({
+ text: "The file format is a series of lines, each of the for=
m:\n" +
+ "\n" +
+ "url shortcut\n" +
+ "\n" +
+ "Each =E2=80=9Curl=E2=80=9D should contain =E2=80=9C%s=E2=
=80=9D in the position the search " +
+ "terms should go."});
+ dialog.add_button(Gtk.STOCK_CANCEL,
+ Gtk.ResponseType.CANCEL);
+ dialog.add_button("Open Editor", Gtk.ResponseType.OK).grab_focus=
();
+
+ var response =3D dialog.run();
+ dialog.destroy();
+
+ if (response !=3D=3D Gtk.ResponseType.OK) {
+ return;
+ }
+
+ var shortcuts_file =3D Gio.file_new_for_path(shortcuts_file_name=
);
+ try {
+ shortcuts_file.create();
+ } catch (e) {
+ }
+ Gtk.show_uri(screen, shortcuts_file.get_uri(), Gdk.CURRENT_TIME)=
;
+ }
+};
+
+var resolve_address_cb =3D function (bookmarks, address, content) {
+ address =3D address.trim();
+ var n =3D address.indexOf(" ");
+ var shortcut;
+ var args;
+
+ if (n =3D=3D=3D -1) {
+ shortcut =3D address;
+ args =3D "";
+ } else {
+ shortcut =3D address.substring(0, n);
+ args =3D address.substring(n+1);
+ }
+
+ bookmark =3D shortcut_to_bookmark_map[shortcut];
+ if (bookmark =3D=3D=3D undefined) {
+ return null;
+ } else {
+ return bookmark.replace("%s", args);
+ }
+};
+
+var initialize_extension =3D function () {
+ bookmarks =3D Epiphany.EphyShell.get_default().get_bookmarks();
+ bookmarks._bookmark_shortcuts_signal =3D bookmarks.signal.
+ resolve_address.connect(resolve_address_cb);
+
+ var file =3D Gio.file_new_for_path(shortcuts_file_name);
+ try {
+ shortcuts_file_monitor =3D file.monitor();
+ shortcuts_file_monitor.signal.changed.connect(shortcuts_changed_=
cb);
+ shortcut_to_bookmark_map =3D get_map_from_file(file);
+ } catch (e) {
+ }
+};
+
+var finalize_extension =3D function () {
+ bookmarks =3D Epiphany.EphyShell.get_default().get_bookmarks();
+ bookmarks.signal.disconnect(bookmarks._bookmark_shortcuts_signal);
+ delete bookmarks._bookmark_shortcuts_signal;
+ shortcuts_file_monitor =3D null;
+};
+
+var attached_window_count =3D 0;
+
+var attach_window =3D function (window) {
+ // No race condition below because this extension is always called
+ // in the one GUI thread. Hopefully.
+ if (attached_window_count =3D=3D=3D 0) {
+ initialize_extension();
+ }
+ attached_window_count++;
+
+ // Add Edit -> Bookmark Shortcuts to this window's menu.
+
+ // Object to hold onto the Edit menu entry, etc., for the window's
+ // lifetime.
+ window._bookmark_shortcuts =3D {};
+ var wbs =3D window._bookmark_shortcuts;
+
+ wbs.action =3D new Gtk.Action({
+ name: "EditBookmarkShortcuts",
+ label: "_Bookmark Shortcuts",
+ tooltip: "Configure shortcuts for your bookmark searches",
+ stock_id: null});
+ wbs.sig_id =3D wbs.action.signal.activate.connect(edit_bookmark_shor=
tcuts_cb,
+ window);
+ wbs.action_group =3D new Gtk.ActionGroup({
+ name: "EditBookmarkShortcutsActionGroup"});
+ wbs.action_group.add_action(wbs.action);
+
+ // Unfortunately the following line can trigger:
+ // Gtk-CRITICAL **: gtk_container_foreach: assertion
+ // `GTK_IS_CONTAINER (container)' failed
+ // when we close the window. This isn't our fault, though.
+ wbs.manager =3D window.get_ui_manager();
+
+ wbs.manager.insert_action_group(wbs.action_group, 0);
+ wbs.merge_id =3D wbs.manager.new_merge_id();
+ wbs.manager.add_ui(wbs.merge_id, "/menubar/EditMenu/EditPrefsMenu",
+ "EditBookmarkShortcutsMenu", "EditBookmarkShortcu=
ts",
+ Gtk.UIManagerItemType.MENUITEM, true);
+};
+
+var detach_window =3D function (window) {
+ // Remove our Edit menu entry.
+ // Is this necessary? Well, it doesn't hurt /too/ much, at least.
+ var wbs =3D window._bookmark_shortcuts;
+
+ wbs.manager.remove_ui(wbs.merge_id);
+ wbs.manager.remove_action_group(wbs.action_group);
+ wbs.action_group.remove_action(wbs.action);
+ wbs.action.signal.disconnect(wbs.sig_id);
+ delete window._bookmark_shortcuts;
+
+ // Cleanup the rest of the extension if necessary.
+ attached_window_count--;
+ if (attached_window_count =3D=3D=3D 0) {
+ finalize_extension();
+ }
+};
+
+extension =3D {
+ attach_window: attach_window,
+ detach_window: detach_window
+};
diff --git a/misc/bookmark-shortcuts.py b/misc/bookmark-shortcuts.py
deleted file mode 100644
index 4dd2817..0000000
--- a/misc/bookmark-shortcuts.py
+++ /dev/null
@@ -1,88 +0,0 @@
-# (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 =3D line.strip()
- if len(line) > 0:
- try:
- url, shortcut =3D line.split()
- sc_bm_map[shortcut] =3D 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 =3D address.strip()
- n =3D address.find(' ')
- if n =3D=3D -1:
- shortcut, args =3D address, ''
- else:
- shortcut, args =3D 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 =3D epiphany.ephy_shell_get_default().get_bookmarks()
- # bmsc stands for BookMark ShortCut.
- bookmarks._bmsc_signal =3D bookmarks.connect('resolve-address',
- resolve_address_cb)
- load_map()
- gnomevfs_id =3D gnomevfs.monitor_add('file://' + shortcuts_file,
- gnomevfs.MONITOR_FILE,
- on_vfs_monitor)
-
-
-def extension_finalize():
- global gnomevfs_id
- bookmarks =3D epiphany.ephy_shell_get_default().get_bookmarks()
- signal =3D bookmarks._bmsc_signal
- del bookmarks._bmsc_signal
- bookmarks.disconnect(signal)
- if gnomevfs_id !=3D None:
- gnomevfs.monitor_cancel(gnomevfs_id)
- gnomevfs_id =3D 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 =3D=3D 0:
- extension_initialize()
- attached_window_count =3D attached_window_count + 1
-
-
-def detach_window(window):
- global attached_window_count
- attached_window_count =3D attached_window_count - 1
- if attached_window_count =3D=3D 0:
- extension_finalize()
-
-
-shortcuts_file =3D os.path.expanduser(
- "~/.gnome2/deskbar-applet/search-bookmarks-shortcuts.tx=
t")
-attached_window_count =3D 0
-gnomevfs_id =3D None
-sc_bm_map =3D {} # map from ShortCuts to (smart) BookMarks
diff --git a/misc/session-manager.ephy-extension b/misc/session-manager.e=
phy-extension
deleted file mode 100644
index adb914b..0000000
--- a/misc/session-manager.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DSession Manager
-Description=3DAdds the ability to save the current session to a file, an=
d restore saved sessions.
-Authors=3DSimon Ward <simon at bleah.co.uk>
-URL=3Dhttp://bleah.co.uk/miscbits/epiphany-session-manager
-Version=3D0.1
-
-[Loader]
-Type=3Dpython
-Module=3Dsession-manager
diff --git a/misc/session-manager.py b/misc/session-manager.py
deleted file mode 100644
index ffa161a..0000000
--- a/misc/session-manager.py
+++ /dev/null
@@ -1,127 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Session save/restore facility for Epiphany
-#
-# Copyright =C2=A9 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 =3D """
-<ui>
- <menubar name=3D"menubar">
- <menu name=3D"ToolsMenu" action=3D"Tools">
- <separator/>
- <menuitem name=3D"LoadSession" action=3D"LoadSession"/>
- <menuitem name=3D"SaveSession" action=3D"SaveSession"/>
- <separator/>
- </menu>
- </menubar>
-</ui>
-"""
-
-def _warn_on_overwrite(parent, filename):
- dirname, basename =3D os.path.split(filename)
- msg =3D 'A file named "%s" already exists in the directory "%s".'\
- 'Do you want to overwrite it?' % (basename, dirname)
- dialog =3D gtk.MessageDialog(
- parent=3Dparent,
- flags=3Dgtk.DIALOG_MODAL
- |gtk.DIALOG_DESTROY_WITH_PARENT,
- type=3Dgtk.MESSAGE_WARNING,
- buttons=3Dgtk.BUTTONS_YES_NO,
- message_format=3Dmsg)
- overwrite =3D dialog.run()
- dialog.destroy()
- return overwrite
-
-def _show_dialog(title, action):
- if action =3D=3D gtk.FILE_CHOOSER_ACTION_SAVE:
- ok_button =3D gtk.STOCK_SAVE
- else:
- ok_button =3D gtk.STOCK_OPEN
-
- dialog =3D gtk.FileChooserDialog(
- title=3Dtitle,
- action=3Daction,
- buttons=3D(
- gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- ok_button, gtk.RESPONSE_OK
- )
- )
- dialog.set_default_response(gtk.RESPONSE_OK)
-
- response =3D dialog.run()
- if response =3D=3D gtk.RESPONSE_OK:
- filename =3D dialog.get_filename()
-
- if action =3D=3D gtk.FILE_CHOOSER_ACTION_SAVE:
- while os.path.exists(filename):
- if _warn_on_overwrite(dialog, filename) \
- =3D=3D gtk.RESPONSE_YES:
- break
- response =3D dialog.run()
- if response !=3D gtk.RESPONSE_OK:
- filename =3D None
- break
- filename =3D dialog.get_filename()
- else:
- filename =3D None
-
- dialog.destroy()
- return filename
-
-def _get_session():
- shell =3D epiphany.ephy_embed_shell_get_default()
- return shell.get_session()
-
-def _save_session(action, session):
- filename =3D _show_dialog('Save Session',
- gtk.FILE_CHOOSER_ACTION_SAVE)
- if filename:
- session.save(filename)
-
-def _load_session(action, session):
- filename =3D _show_dialog('Load Session',
- gtk.FILE_CHOOSER_ACTION_OPEN)
- if filename:
- session.load(filename, 0)
-
-_actions =3D [
- ('LoadSession', "gtk-open", 'Load Session=E2=80=A6', None, None, _load_=
session),
- ('SaveSession', "gtk-save-as", 'Save Session=E2=80=A6', None, None, _sa=
ve_session),
- ]
-
-def attach_window(window):
- session =3D _get_session()
- ui_manager =3D window.get_ui_manager()
- group =3D gtk.ActionGroup('SessionManager')
- group.add_actions(_actions, user_data=3Dsession)
- ui_manager.insert_action_group(group, -1)
- ui_id =3D ui_manager.add_ui_from_string(_ui_str)
-
- window._session_manager_data =3D (group, ui_id)
-
-def detach_window(window):
- group, ui_id =3D window._session_manager_data
- del window._session_manager_data
-
- ui_manager =3D window.get_ui_manager()
- ui_manager.remove_ui(ui_id)
- ui_manager.remove_action_group(group)
- ui_manager.ensure_update()
diff --git a/misc/tablinks.ephy-extension b/misc/tablinks.ephy-extension
deleted file mode 100644
index 3dc4bd6..0000000
--- a/misc/tablinks.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DTab Links
-Description=3DAllows the user to copy all the tabs' URIs to clipboard in=
a variety of formats.
-Authors=3DGeorge Notaras <gnotar at gmail.com>
-URL=3Dhttp://www.g-loaded.eu/2007/02/28/tab-links-extension-for-the-epip=
hany-browser/
-Version=3D0.1
-
-[Loader]
-Type=3Dpython
-Module=3Dtablinks
diff --git a/misc/tablinks.py b/misc/tablinks.py
deleted file mode 100644
index 76b4965..0000000
--- a/misc/tablinks.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# -*- 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 =3D """
-<ui>
- <menubar name=3D"menubar">
- <menu name=3D"ToolsMenu" action=3D"Tools">
- <separator />
- <menu name=3D"Tab Links Menu" action=3D"TabLinksMenu">
- <menuitem name=3D"Default" action=3D"CopyTabLinksDefault" />
- <menuitem name=3D"Mediawiki" action=3D"CopyTabLinksMediaWiki" />
- <menuitem name=3D"MoinMoin" action=3D"CopyTabLinksMoinMoin" />
- <menuitem name=3D"DokuWiki" action=3D"CopyTabLinksDokuwiki" />
- <menuitem name=3D"HTML" action=3D"CopyTabLinksHTML" />
- </menu>
- <separator />
- </menu>
- </menubar>
-</ui>
-"""
-
-def _get_tab_links_list(window):
- LinkList =3D []
- for aTab in window.get_notebook():
- LinkList.append( (aTab.get_address(), aTab.get_title() ) )
- return LinkList
-
-def _copy_links_text_to_clipboard(LinksText):
- clipboard =3D gtk.Clipboard(gtk.gdk.display_get_default(), 'CLIPBOARD')
- clipboard.set_text(LinksText, -1)
-
-def _get_formatted_links_text(window, format =3D ""):
- LinkList =3D _get_tab_links_list(window)
- outfmt =3D {
- # Format: "format_name" : (leading_text, format_template, trailing_tex=
t)
- # contains all except the default bare naked link list
- "mediawiki" : ("", "* [%s %s]", ""),
- "moinmoin" : ("", " * [%s %s]", ""),
- "dokuwiki" : ("", " * [[%s|%s]]", ""),
- "html" : ("<ul>\n", "<li><a href=3D\"%s\">%s</a></li>", "\n</ul>"),
- }
- if LinkList:
- if outfmt.has_key(format):
- LinksText =3D "\n".join( [ outfmt[format][1] % (tablink[0], tablink[1=
]) for tablink in LinkList if tablink] )
- LinksText =3D "%s%s%s" % ( outfmt[format][0], LinksText, outfmt[forma=
t][2] )
- else:
- # just return the links
- LinksText =3D "\n".join( [tablink[0] for tablink in LinkList if tabli=
nk] )
- _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 =3D [
- ('TabLinksMenu', None, 'Tab Links', None, None, None),
- ('CopyTabLinksDefault', None, 'Default', None, None, _copy_tab_links_d=
efault),
- ('CopyTabLinksMediaWiki', None, 'Mediawiki', None, None, _copy_tab_lin=
ks_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 =3D window.get_ui_manager()
- group =3D gtk.ActionGroup('TabLinks')
- group.add_actions(_actions, window)
- ui_manager.insert_action_group(group, -1)
- ui_id =3D ui_manager.add_ui_from_string(_ui_str)
-
- window._TabLinks_data =3D (group, ui_id)
-
-
-def detach_window(window):
- group, ui_id =3D window._TabLinks_data
- del window._TabLinks_data
-
- ui_manager =3D window.get_ui_manager()
- ui_manager.remove_ui(ui_id)
- ui_manager.remove_action_group(group)
- ui_manager.ensure_update()
-
diff --git a/misc/universal-edit-button.ephy-extension b/misc/universal-e=
dit-button.ephy-extension
deleted file mode 100644
index d6f0be4..0000000
--- a/misc/universal-edit-button.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DUniversal Edit Button
-Description=3DShows the Universal Edit Button if the site has one
-Authors=3DJohannes Berg <johannes at sipsolutions.net>, Jaime Frutos Morale=
s <acidborg at gmail.com>
-Version=3D1
-URL=3Dhttp://johannes.sipsolutions.net/Projects/ephy-ueb
-
-[Loader]
-Type=3Dpython
-Module=3Duniversal-edit-button
diff --git a/misc/universal-edit-button.py b/misc/universal-edit-button.p=
y
deleted file mode 100644
index dda15bf..0000000
--- a/misc/universal-edit-button.py
+++ /dev/null
@@ -1,230 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# Epiphany extension: Universal Edit Button
-# Version 1 (2008-06-27)
-# Copyright (C) 2006 Jaime Frutos Morales <acidborg at gmail.com>
-# Copyright (C) 2008 Johannes Berg <johannes at sipsolutions.net>
-#
-# 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 pygtk
-pygtk.require('2.0')
-import gtk
-from gettext import gettext as _
-import os.path
-import re
-import urllib
-from htmlentitydefs import name2codepoint as n2cp
-
-# Create UEB icon from code generated using "gdk-pixbuf-csource --raw cc=
.png"
-_icon =3D (""
- # Pixbuf magic (0x47646b50)
- "GdkP"
- # length: header (24) + pixel_data (1024)
- "\0\0\4\30"
- # pixdata_type (0x1010002)
- "\1\1\0\2"
- # rowstride (64)
- "\0\0\0@"
- # width (16)
- "\0\0\0\20"
- # height (16)
- "\0\0\0\20"
- # pixel_data:
- "\377\377\377\0\201\330\201\377\24\234\24\377\23\231\23\377\25\236\25"
- "\377\27\244\27\377\30\251\30\377\32\256\32\377\34\263\34\377\14H\14\3=
77"
- "\0\0\0\377\237x\27\377\377\300%\377\377\300%\377\377\334\205\377\377"
- "\377\377\0\201\330\201\377\4p\4\377\11~\11\377\15\211\15\377\21\223\2=
1"
- "\377\24\236\24\377\30\250\30\377\34\263\34\377\13E\13\377\0\0\0\377\2=
37"
- "x\27\377\377\300%\377\377\300%\377\377\300%\377\335\245\36\377\243\22=
5"
- "r\377\24\234\24\377\11~\11\377\15\211\15\377\21\223\21\377\24\236\24"
- "\377\30\250\30\377\34\263\34\377\13E\13\377\0\0\0\377\237x\27\377\377=
"
- "\300%\377\377\300%\377\377\300%\377\335\245\36\377S;\2\377G2\0\377\23=
"
- "\231\23\377\15\211\15\377\21\223\21\377\24\236\24\377\30\250\30\377\3=
4"
- "\263\34\377\23u\23\377\0\0\0\377\237x\27\377\377\300%\377\377\300%\37=
7"
- "\377\300%\377\335\245\36\377S;\2\377G2\0\377G2\0\377\25\236\25\377\21=
"
- "\223\21\377\24\236\24\377\30\250\30\377\34\263\34\377\40\275\40\377\4=
"
- "\30\4\377]YK\377\377\300%\377\377\300%\377\377\300%\377\335\245\36\37=
7"
- "S;\2\377G2\0\377G2\0\377:)\0\377\27\244\27\377\24\236\24\377\30\250\3=
0"
- "\377\34\263\34\377\40\275\40\377\32\224\32\377\0\0\0\377\330\320\257"
- "\377\377\300%\377\377\300%\377\335\245\36\377S;\2\377G2\0\377G2\0\377=
"
- ":)\0\377\4\3\0\377\30\251\30\377\30\250\30\377\34\263\34\377\40\275\4=
0"
- "\377#\310#\377\11""3\11\377]YK\377\367\356\310\377\370\350\264\377\33=
0"
- "\277z\377S;\2\377G2\0\377G2\0\377:)\0\377\4\3\0\377\14H\14\377\32\256=
"
- "\32\377\34\263\34\377\40\275\40\377#\310#\377\"\267\"\377\0\0\0\377\3=
30"
- "\320\257\377\367\356\310\377\367\356\310\377\326\313\243\377G2\0\377"
- "G2\0\377:)\0\377\4\3\0\377\14H\14\377\35\266\35\377\34\263\34\377\40"
- "\275\40\377#\310#\377'\322'\377\20Q\20\377MJ\77\377\367\356\310\377\3=
67"
- "\356\310\377\367\356\310\377\367\356\310\377\307\274\226\377PH2\377\4=
"
- "\3\0\377\14H\14\377\36\271\36\377\33\261\33\377\36\271\36\377#\310#\3=
77"
- "'\322'\377(\316(\377\0\0\0\377\0\0\0\377.-&\377\367\356\310\377\350\3=
37"
- "\274\377|wd\377\17\17\15\377\4\31\4\377\25y\25\377\36\271\36\377\32\2=
56"
- "\32\377\31\254\31\377\40\276\40\377'\322'\377+\335+\377\27r\27\377\0"
- "\0\0\377\0\0\0\377\0\0\0\377lhX\377\17\17\15\377\12""5\12\377\34\231"
- "\34\377\"\303\"\377\36\271\36\377\32\256\32\377\27\244\27\377\30\247"
- "\30\377\"\303\"\377+\335+\377/\347/\377\3\17\3\377\0\0\0\377\0\0\0\37=
7"
- "\0\0\0\377\20T\20\377$\274$\377%\315%\377\"\303\"\377\36\271\36\377\3=
2"
- "\256\32\377\27\244\27\377\23\231\23\377\26\241\26\377$\310$\377/\347"
- "/\3772\3622\377\24^\24\377\3\17\3\377\30u\30\377*\324*\377)\330)\377"
- "%\315%\377\"\303\"\377\36\271\36\377\32\256\32\377\27\244\27\377\23\2=
31"
- "\23\377\17\217\17\377\24\234\24\377#\306#\3772\3622\3776\3736\3774\37=
0"
- "4\3771\3551\377-\343-\377)\330)\377%\315%\377\"\303\"\377\36\271\36\3=
77"
- "\32\256\32\377\27\244\27\377\23\231\23\377\17\217\17\377\13\204\13\37=
7"
- "\25\236\25\377\201\330\201\377%\314%\3774\3704\3771\3551\377-\343-\37=
7"
- ")\330)\377%\315%\377\"\303\"\377\36\271\36\377\32\256\32\377\27\244\2=
7"
- "\377\23\231\23\377\17\217\17\377\13\204\13\377\6t\6\377\201\330\201\3=
77"
- "\377\377\377\0\201\330\201\377$\311$\377%\313%\377#\306#\377!\301!\37=
7"
- "\37\274\37\377\35\266\35\377\33\261\33\377\31\254\31\377\30\247\30\37=
7"
- "\26\241\26\377\24\234\24\377\25\236\25\377\201\330\201\377\377\377\37=
7"
- "\0"
-)
-icon_size =3D gtk.icon_size_lookup(gtk.ICON_SIZE_MENU)
-pixbuf =3D gtk.gdk.pixbuf_new_from_inline(len(_icon), _icon, False)
-pixbuf =3D pixbuf.scale_simple(icon_size[0], icon_size[1], gtk.gdk.INTER=
P_BILINEAR)
-
-ueb_re =3D re.compile(r'<link(\s+(rel=3D"(?P<alt>alternate)"|type=3D"(?P=
<type>application/(x-)?wiki)"|title=3D"(?P<title>[^"]*)"|href=3D"(?P<href=
>[^"]*)"))+\s*/?>', re.IGNORECASE | re.DOTALL | re.MULTILINE)
-head_re =3D re.compile(r'<head>(.*?)</head>', re.IGNORECASE | re.DOTALL =
| re.MULTILINE)
-
-
-def substitute_entity(match):
- ent =3D match.group(2)
- if match.group(1) =3D=3D "#":
- return unichr(int(ent))
- else:
- cp =3D n2cp.get(ent)
-
- if cp:
- return unichr(cp)
- else:
- return match.group()
-
-entity_re =3D re.compile("&(#?)(\d{1,5}|\w{1,8});")
-def decode_htmlentities(string):
- return entity_re.subn(substitute_entity, string)[0]
-
-def _switch_page_cb(notebook, page, page_num, window):
- ui_show(window, window.get_active_child())
- =20
-def _load_status_cb(embed, data, window):
- if not embed.get_property('load-status'):
- # page is loaded
- detect_ueb(window, embed)
- else:
- embed._has_ueb =3D False
- ui_show(window, embed)
- =20
-def _ueb_button_pressed(button, event, window):
- embed =3D window.get_active_child()
- ueb_url =3D embed._ueb_url
- embed.load_url(ueb_url)
-
-def ui_init(window):
- ueb_image =3D gtk.Image()
- ueb_image.set_from_pixbuf(pixbuf)
- ueb_image.show()
-
- eventbox =3D gtk.EventBox() =20
- eventbox.set_visible_window(False)
- eventbox.connect("button-press-event", _ueb_button_pressed, window)
- # Pack the widgets
- eventbox.add(ueb_image)
-
- eventbox.show() =20
-
- statusbar =3D window.get_statusbar()
- statusbar.add_widget(eventbox)
- statusbar._ueb_eventbox =3D eventbox
- eventbox.set_tooltip_text('')
-
-def ui_show(window, embed):
- if embed !=3D window.get_active_child():
- return
-
- statusbar =3D window.get_statusbar()
- eventbox =3D statusbar._ueb_eventbox
- =20
- try:
- if embed._has_ueb:
- statusbar._ueb_eventbox.set_tooltip_text(embed._ueb_title)
- eventbox.show()
- else:
- eventbox.hide()
- except:=20
- eventbox.hide()
-
-def ui_destroy(window):
- statusbar =3D window.get_statusbar()
- eventbox =3D statusbar._ueb_eventbox
- del statusbar._ueb_eventbox
- statusbar.remove_widget(eventbox)
-
-def detect_ueb(window, embed):
- # Get the HTML code
- persist =3D epiphany.ephy_embed_factory_new_object(epiphany.EmbedPer=
sist)
- persist.set_flags(epiphany.EMBED_PERSIST_NO_VIEW |epiphany.EMBED_PER=
SIST_COPY_PAGE)
- persist.set_embed(embed)
- embed._has_ueb =3D False
- page_string =3D persist.to_string()
- ueb_url, ueb_title =3D get_ueb_data(page_string)
- if ueb_url is not None:
- cur =3D embed.get_property('address')
- if not '://' in ueb_url:
- if ueb_url[0] =3D=3D '/':
- ueb_url =3D '/'.join(cur.split('/')[:3]) + ueb_url
- else:
- ueb_url =3D '/'.join(cur.split('/')[:-1]) + ueb_url
- embed._ueb_url =3D decode_htmlentities(ueb_url)
- embed._ueb_title =3D decode_htmlentities(ueb_title)
- embed._has_ueb =3D True
-
-def get_ueb_data(page_string):
- match =3D head_re.search(page_string)
- if not match:
- return None, None
- head_string =3D match.group(1)
- for match in ueb_re.finditer(head_string):
- if not match.group('alt'):
- continue
- if not match.group('type'):
- continue
- href =3D match.group('href')
- if not href:
- continue
- title =3D match.group('title')
- return href, title
- return None, None
-
-def attach_window(window):
- notebook =3D window.get_notebook()
- ui_init(window)
- signal_tab_switch =3D notebook.connect_after("switch_page", _switch_=
page_cb, window);
- notebook._ueb_signal_tab_switch =3D signal_tab_switch
-
-def detach_window(window):
- notebook =3D window.get_notebook()
- notebook.disconnect(notebook._ueb_signal_tab_switch)
- del notebook._ueb_signal_tab_switch
- ui_destroy(window)
-
-def attach_tab(window, embed):
- signal_load_status =3D embed.connect_after("notify::load-status",_lo=
ad_status_cb, window)
- embed._ueb_signal_load_status =3D signal_load_status
-
-def detach_tab(window, embed):
- embed.disconnect(embed._ueb_signal_load_status)
- del embed._ueb_signal_load_status
diff --git a/misc/video-downloader.ephy-extension b/misc/video-downloader=
.ephy-extension
deleted file mode 100644
index 4eb73b5..0000000
--- a/misc/video-downloader.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DVideo Downloader
-Description=3DDownloads embeded Youtube videos (and other video hosting =
sites) via clive.
-Authors=3DAdam Schmalhofer <blauebirke at gmx.de>
-Version=3D1
-URL=3Dhttp://blauebirke.wordpress.com/2008/09/09/epiphany-video-download=
-extension/
-
-[Loader]
-Type=3Dpython
-Module=3Dvideo-downloader
diff --git a/misc/video-downloader.py b/misc/video-downloader.py
deleted file mode 100644
index 37cbfc9..0000000
--- a/misc/video-downloader.py
+++ /dev/null
@@ -1,352 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Epiphany extension: Video downloader;=20
-# 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 embed=
ed=20
-videos then can be via clive.
-"""
-
-CLIVE_VERSION =3D 2
-
-import re
-import gconf
-import os
-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 =3D '/apps/epiphany/directories/downloads_fold=
er'
-GCONF_KEY_USE_PROXY =3D '/system/http_proxy/use_http_proxy'
-GCONF_KEY_PROXY_PORT =3D '/system/http_proxy/port'
-GCONF_KEY_PROXY_HOST =3D '/system/http_proxy/host'
-GCONF_KEY_USE_PROXY_AUTH =3D '/system/http_proxy/use_authentication'
-GCONF_KEY_PROXY_USER =3D '/system/http_proxy/authentication_user'
-GCONF_KEY_PROXY_PASSWORD =3D '/system/http_proxy/authentication_password=
'
-
-# Each element in EMBEDED_VIDEO_RE_LIST must contain exactly one set of =
braces.
-EMBEDED_VIDEO_RE_LIST =3D [
- r'(?:[a-z]{2,3}\.)?youtube\.[a-z]{2,3}/[^\'"#&]*v[=3D/]([\w-]{11})',
- r'video\.google\.com/googleplayer\.swf\?docid=3D(\d{19})',
- r'www\.dailymotion\.com/swf/(\w{18})',
- r'www\.guba\.com/f/root\.swf\?video_url=3Dhttp://free\.guba\.com/upl=
oaditem/(\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.=20
-# %s is replaced with the string matching the braces in EMBEDED_VIDEO_RE=
_LIST.
-VIDEO_PAGE_BASE =3D [
- r'http://youtube.com/watch?v=3D%s',
- r'http://video.google.com/videoplay?docid=3D%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 =3D [=20
- r'[a-z]{2,3}\.youtube\.com/watch\?v=3D[\w-]{11}',
- r'video\.google\.com/videoplay\?docid=3D\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 =3D [=20
- 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=3D\d{3}_\d{10}' ]
-if CLIVE_VERSION =3D=3D 2:
- URL_VIDEO_RE_BASE_LIST.extend(CLIVE2X_ONLY_URL_VIDEO_RE_BASE_LIST)
-URL_VIDEO_RE =3D re.compile('^http://(%s)' %=20
- '|'.join(URL_VIDEO_RE_BASE_LIST), re.I)
-EMBEDED_VIDEO_RE =3D re.compile('http://(%s)' %=20
- '|'.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)
- =20
-def _video_button_pressed(widget, event, window):
- if event.button not in [1,2]:
- return
- embed =3D window.get_active_child()
- if pynotify.init('Basics') and event.button =3D=3D 1:
- n =3D Notification(_('Started downloading.'),=20
- N_('Started to download %s video.',=20
- 'Started to download %s videos.', len(embed._video_urls)=
) % \
- len(embed._video_urls) )
- n.set_urgency(pynotify.URGENCY_LOW)
- x, y =3D embed.get_pointer()
- forget, x, y, forget =3D 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 =3D=3D=
2)
-
-def ui_init(window):
- cc_image =3D gtk.Image()
- icon_theme =3D gtk.icon_theme_get_default()
- pixbuf =3D icon_theme.load_icon('video',=20
- gtk.icon_size_lookup(gtk.ICON_SIZE_MENU)[0], 0)
- cc_image.set_from_pixbuf(pixbuf)
- cc_image.show()
-
- eventbox =3D gtk.EventBox() =20
- eventbox.set_visible_window(True)
- eventbox.connect ("button-press-event", _video_button_pressed, windo=
w);
- # Pack the widgets
- eventbox.add(cc_image)
- eventbox.show() =20
-
- statusbar =3D window.get_statusbar()
- statusbar.add_widget(eventbox)
- statusbar._video_eventbox =3D eventbox
-
-def ui_show(window, embed):
- if embed !=3D window.get_active_child(): return
-
- statusbar =3D window.get_statusbar()
- eventbox =3D statusbar._video_eventbox
- =20
- try:
- if embed._has_video:
- n =3D len(embed._video_urls)
- eventbox.set_tooltip_text(
- N_("%s embeded video", "%s embeded videos", n) % n)
- eventbox.show()
- else:
- eventbox.hide()
- except:=20
- eventbox.hide()
-
-def ui_destroy(window):
- statusbar =3D window.get_statusbar()
- eventbox =3D statusbar._video_eventbox
- del statusbar._video_eventbox
- statusbar.remove_widget(eventbox)
-
-def on_gconf_new_downloads_folder(client, gconf_id, gconf_entry, **kwarg=
s):
- update_downloads_folder()
-
-def on_gconf_proxy_changed(client, gconf_id, gconf_entry, **kwargs):
- update_proxy_settings()
-
-def update_proxy_settings():
- global proxy
- g =3D gconf_client
- if g.get_bool(GCONF_KEY_USE_PROXY):
- # XXX: Should check if string is a valid proxy.
- proxy =3D '%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):
- auth =3D '%s:%s@'%(g.get_string(GCONF_KEY_PROXY_USER), \
- g.get_string(GCONF_KEY_PROXY_PASSWORD))
- else:
- auth =3D ''
- proxy =3D 'http://%s%s:%i'%(auth, g.get_string(GCONF_KEY_PROXY_H=
OST), \
- g.get_int(GCONF_KEY_PROXY_PORT))
- else:
- proxy =3D None
-
-def update_downloads_folder():
- global downloads_folder
- new_folder =3D path.join(path.expanduser('~'), path.expanduser(
- gconf_client.get_string(GCONF_KEY_DOWNLOAD_FOLDER)))
- if path.isdir(new_folder):
- downloads_folder =3D new_folder
- return True
- return False
-
-def download_videos(window, embed, video_urls, open_inside):
- clive_cmd_base =3D [ 'clive', '--quiet', '--emit-csv' ]
- clive_env =3D { "HOME": os.getenv("HOME") }
- if proxy !=3D None:
- clive_env["http_proxy"]=3Dproxy
-
- for video_url in video_urls:
- clive_cmd =3D clive_cmd_base + [ video_url ]=20
- try:
- new_download_ps =3D Popen(clive_cmd, stdout=3DPIPE, stderr=3D=
PIPE, close_fds=3DTrue, env=3Dclive_env)
- except OSError, e:
- print 'OSError executing clive', e
- if e.args[0] =3D=3D 2:
- error_text =3D _("Video-downloader extension could not e=
xecute \
- 'clive'. Please make sure clive is instal=
led \
- in a directory listed in the $PATH variab=
le.")
- else:
- error_text =3D str(e)
- message =3D gtk.MessageDialog(type=3Dgtk.MESSAGE_ERROR,=20
- buttons=3Dgtk.BUTTONS_CLOSE, message_format=3Derror_=
text)
- message.run()
- message.destroy()
- else:
- gobject.child_watch_add(new_download_ps.pid, on_clive_finish=
ed,=20
- data=3D(window, embed, new_download_ps.stdout,=20
- 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=20
- dialog with the URLs which otherwise would be downloaded.=20
- =20
- Used for debugging only.
- """
- message_text =3D "\n".join(video_urls)
- message =3D gtk.MessageDialog(type=3Dgtk.MESSAGE_ERROR,=20
- buttons=3Dgtk.BUTTONS_CLOSE, message_format=3Dmessage_text)
- message.run()
- message.destroy()
-
-def detect_videos_in_address(window, embed):
- url =3D embed.get_address()
- if URL_VIDEO_RE.findall(url) !=3D []:
- embed._video_urls =3D [url]
- embed._has_video =3D True
- else:
- embed._has_video =3D 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 =3D epiphany.ephy_embed_factory_new_object(epiphany.EmbedPer=
sist)
- 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 =3D _("Failed to start the download. Please report th=
is \
- problem as a comment at http://blauebirke.wordpre=
ss.com/2008/10/04/new-improvements-in-epiphany-video-downloader-extension=
/ \
- or send an email backend to schmalho at users.berlio=
s.de.")
- message =3D gtk.MessageDialog(type=3Dgtk.MESSAGE_ERROR,=20
- buttons=3Dgtk.BUTTONS_CLOSE, message_format=3Derror_text=
)
- message.run()
- message.destroy()
-
-def open_videos_inside(window, embed, url):
- tab =3D 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 =3D=
data
- if condition =3D=3D 0:
- url, file_name =3D clive_stdout.readlines()[-1].split(',')[1:3]
- url =3D url[1:-1] # to remove the quotes
- =20
- if open_inside:
- open_videos_inside(window, embed, url)
- else:
- start_video_download(window, embed, url, file_name)
- else:
- title_text =3D _('Video Downloader extension: Extracting video i=
nformation via clive failed:')
- error_text =3D ''.join(['Exited with status %s.\n' % condition] =
+
- clive_stderr.readlines() + ['=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D\n'] +
- clive_stdout.readlines())
- message =3D gtk.MessageDialog(type=3Dgtk.MESSAGE_ERROR,=20
- buttons=3Dgtk.BUTTONS_CLOSE, message_format=3Dtitle_text=
)
- message.format_secondary_text(error_text)
- message.run()
- message.destroy()
-
-def detect_videos_in_page(window, embed):
- # Get the HTML code
- persist =3D epiphany.ephy_embed_factory_new_object(epiphany.EmbedPer=
sist)
- persist.set_flags(
- epiphany.EMBED_PERSIST_NO_VIEW | epiphany.EMBED_PERSIST_COPY=
_PAGE)
- persist.set_embed(embed)
- page_string =3D persist.to_string()
- video_urls =3D get_video_urls(page_string)
- if video_urls:
- embed._video_urls =3D video_urls
- embed._has_video =3D True
- else :
- embed._has_video =3D False
-
-def get_video_urls(page_string):
- """
- Finds all unique videos represented by a plain text link from the=20
- page (something starting with a "http://").=20
- =20
- Returns a set of url-strings.
- """
- video_urls =3D 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 !=3D '':
- video_urls.add(page_base % video_id)
- return video_urls
-
-def attach_window(window):
- notebook =3D window.get_notebook()
- ui_init(window)
- signal_tab_switch =3D notebook.connect_after(
- "switch_page", _switch_page_cb, window);
- notebook._video_signal_tab_switch =3D signal_tab_switch
-
-def detach_window(window):
- notebook =3D 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 =3D embed.connect_after(
- "notify::load-status", _load_status_cb, window)
- embed._video_signal_load_status =3D signal_load_status
-
-def detach_tab(window, embed):
- embed.disconnect(embed._video_signal_load_status)
- del embed._video_signal_load_status
-
-gconf_client =3D gconf.client_get_default()
-gconf_client.notify_add(GCONF_KEY_DOWNLOAD_FOLDER,=20
- on_gconf_new_downloads_folder)
-for key in [ GCONF_KEY_USE_PROXY, GCONF_KEY_PROXY_HOST, GCONF_KEY_PROXY_=
PORT,=20
- GCONF_KEY_USE_PROXY_AUTH, GCONF_KEY_PROXY_USER,=20
- GCONF_KEY_PROXY_PASSWORD ]:
- gconf_client.notify_add(key, on_gconf_proxy_changed)
-downloads_folder =3D path.expanduser('~')
-update_downloads_folder()
-update_proxy_settings()
-
-# DEBUG
-#download_videos =3D debug_video_urls
diff --git a/misc/view-source.ephy-extension b/misc/view-source.ephy-exte=
nsion
deleted file mode 100644
index 5d0b985..0000000
--- a/misc/view-source.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DView Source (the fast way)
-Description=3DView page source using gecko's view-source:, it overrides =
the default view-source action.
-Authors=3DDiego Escalante Urrelo <diegoe at gnome.org>\nWouter Bolsterlee <=
wbolster at gnome.org>
-Version=3D20080422
-URL=3Dhttp://www.gnome.org/~diegoe/epiphany/
-
-[Loader]
-Type=3Dpython
-Module=3Dview-source
diff --git a/misc/view-source.py b/misc/view-source.py
deleted file mode 100644
index 6561ef2..0000000
--- a/misc/view-source.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# -*- encoding: utf-8 -*-
-#
-# View Source - Epiphany Extension
-# Copyright =C2=A9 2006, 2008 Diego Escalante Urrelo <diegoe at gnome.or=
g>
-# Copyright =C2=A9 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-import epiphany
-import gtk
-import gettext
-
-try:
- t =3D gettext.translation("epiphany")
- _ =3D t.ugettext
-except Exception, e:
- _ =3D lambda x : x
-
-_ui_str =3D """
-<ui>
- <menubar>
- <menu name=3D"ViewMenu" action=3D"View">
- <menuitem name=3D"ViewPageSourceMenu" action=3D"ViewPageSource"/>
- </menu>
- </menubar>
-</ui>
-"""
-
-def _view_source_cb(action, window):
- source_url =3D 'view-source:%s' % window.get_active_child().get_addr=
ess()
- tab =3D 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) =20
- =20
-_actions =3D [('ViewPageSource', 'stock_view-html-source', _('_Page Sour=
ce'),
- '<control>U', None, _view_source_cb)]
-
-def attach_window(window):
- ui_manager =3D window.get_ui_manager()
- group =3D gtk.ActionGroup('ViewPageSource')
- group.add_actions(_actions, window)
- ui_manager.insert_action_group(group, 0)
- ui_id =3D ui_manager.add_ui_from_string(_ui_str)
-
- window._sample_menu_entry_data =3D (group, ui_id)
-
-def detach_window(window):
- group, ui_id =3D window._sample_menu_entry_data
- del window._sample_menu_entry_data
-
- ui_manager =3D window.get_ui_manager()
- ui_manager.remove_ui(ui_id)
- ui_manager.remove_action_group(group)
- ui_manager.ensure_update()
diff --git a/tabs/close_other_tabs.ephy-extension b/tabs/close_other_tabs=
.ephy-extension
deleted file mode 100644
index 4c5b63f..0000000
--- a/tabs/close_other_tabs.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DClose Other Tabs
-Description=3DCloses all but the active tab
-Authors=3DSean Fulmer <wsfulmer at gmail.com
-Version=3D1
-URL=3Dhttp://noandwhere.com
-
-[Loader]
-Type=3Dpython
-Module=3Dclose_other_tabs
diff --git a/tabs/close_other_tabs.py b/tabs/close_other_tabs.py
deleted file mode 100644
index faa5431..0000000
--- a/tabs/close_other_tabs.py
+++ /dev/null
@@ -1,167 +0,0 @@
-##
-## 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 U=
SA
-##
-
-import epiphany
-
-import gtk
-
-def _close_other_tabs_cb (action, window, close_left=3DTrue, close_right=
=3DTrue):
- atab =3D window.get_active_child()
- right=3DFalse
- for tab in window.get_notebook():
- if tab =3D=3D atab:
- right=3DTrue
- 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
- """
- =20
- _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
- """
- =20
- page_num =3D 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 =3D page_num
- pages =3D notebook.get_n_pages()
- not_only =3D pages > 1
- not_first =3D page > 0
- not_last =3D page + 1 < pages
-
- action_group =3D window._close_other_tabs[0]
-
- action =3D action_group.get_action('CloseOtherTabs')
- action.set_sensitive(not_only)
-
- action =3D action_group.get_action('CloseLeftTabs')
- action.set_sensitive(not_first)
-
- action =3D action_group.get_action('CloseRightTabs')
- action.set_sensitive(not_last)
-
-
-
-_ui_str =3D """
-<ui>
-<menubar name=3D"menubar">
-<menu name=3D"TabsMenu" action=3D"Tabs">
- <separator />
- <menuitem name=3D"TabsCloseOtherTabsMenu" action=3D"CloseOtherTabs"/=
>
- <menuitem name=3D"TabsCloseLeftTabsMenu" action=3D"CloseLeftTabs"/>
- <menuitem name=3D"TabsCloseRightTabsMenu" action=3D"CloseRightTabs"/=
>
-</menu>
-</menubar>
-<popup name=3D"EphyNotebookPopup" action=3D"NotebookPopupAction">
- <separator />
- <menuitem name=3D"TabsCloseOtherTabsMenuENP" action=3D"CloseOtherTab=
s"/>
- <menuitem name=3D"TabsCloseLeftTabsMenuENP" action=3D"CloseLeftTabs"=
/>
- <menuitem name=3D"TabsCloseRightTabsMenuENP" action=3D"CloseRightTab=
s"/>
-</popup>
-</ui>
-"""
-
-_actions =3D [
- ('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 =3D window.get_ui_manager()
- group =3D gtk.ActionGroup('CloseOtherTabs')
- group.add_actions(_actions, window)
- ui_manager.insert_action_group(group, 0)
- ui_id =3D ui_manager.add_ui_from_string(_ui_str)
- window._close_other_tabs =3D (group, ui_id)
-
- # connect switch_page signal
- notebook =3D window.get_notebook()
- signal_id =3D notebook.connect('switch_page', _switch_page_cb, windo=
w)
- notebook._switch_page_signal =3D signal_id
-
- # connect page_added signal
- signal_id =3D notebook.connect('page_added', _page_added_removed_reo=
rdered_cb, window)
- notebook._page_added_signal =3D signal_id
-
- # connect page_removed signal
- signal_id =3D notebook.connect('page_removed', _page_added_removed_r=
eordered_cb, window)
- notebook._page_removed_signal =3D signal_id
-
- # connect page_added signal
- signal_id =3D notebook.connect('page_reordered', _page_added_removed=
_reordered_cb, window)
- notebook._page_reordered_signal =3D signal_id
-
-
-def detach_window(window):
-
- # remove ui stuff
- group, ui_id =3D window._close_other_tabs
- del window._close_other_tabs
- ui_manager =3D 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 =3D window.get_notebook()
- signal_id =3D notebook._switch_page_signal
- notebook.disconnect(signal_id)
- del notebook._switch_page_signal
-
- # disconnect page_added signal
- signal_id =3D notebook._page_added_signal
- notebook.disconnect(signal_id)
- del notebook._page_added_signal
-
- # disconnect page_removed signal
- signal_id =3D notebook._page_removed_signal
- notebook.disconnect(signal_id)
- del notebook._page_removed_signal
-
- # disconnect page_reordered signal
- signal_id =3D notebook._page_reordered_signal
- notebook.disconnect(signal_id)
- del notebook._page_reordered_signal
diff --git a/tabs/colour-tabs.ephy-extension b/tabs/colour-tabs.ephy-exte=
nsion
deleted file mode 100644
index 5893449..0000000
--- a/tabs/colour-tabs.ephy-extension
+++ /dev/null
@@ -1,9 +0,0 @@
-[Epiphany Extension]
-Name=3DColour tabs
-Description=3DI like colour tabs
-Version=3D0
-URL=3Dhttp://www.gnome.org/projects/epiphany/extensions.html
-
-[Loader]
-Type=3Dpython
-Module=3Dcolour-tabs
diff --git a/tabs/colour-tabs.py b/tabs/colour-tabs.py
deleted file mode 100644
index 0531c2b..0000000
--- a/tabs/colour-tabs.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# -*- 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=3DNone):
- url =3D tab.get_address()
- try:
- host =3D gnomevfs.URI(url).host_name.split('.')
- except:
- return # ah, forget it. probably about:mozilla or something
-
- if len(host)=3D=3D0:
- return # weird
- elif len(host)=3D=3D1:
- # one element; assume a machine on the local net; use that
- domain =3D 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 =3D host[-3]
- else:
- domain =3D host[-2]
-
- # So we have the name to use. Turn it into a colour.
- # Save ourselves some complexity by using MD5.
- colour =3D md5.md5(domain).hexdigest()[:6]
-
- notebook =3D tab.get_parent()
-
- hbox =3D notebook.get_tab_label(tab)
- eb =3D gtk.EventBox()
- newhbox =3D gtk.HBox()
-
- colour =3D 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 =3D 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 =3D tab.connect("dom-content-loaded", _colou=
r_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
diff --git a/tabs/middle-click-closes-tab.ephy-extension b/tabs/middle-cl=
ick-closes-tab.ephy-extension
deleted file mode 100644
index 0a73042..0000000
--- a/tabs/middle-click-closes-tab.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DClose tabs with middle-click
-Description=3DClose tabs by clicking on them with the middle mouse butto=
n
-Authors=3DSiegfried Gevatter
-Version=3D1
-URL=3Dhttps://launchpad.net/epiphany-extensions-extra
-
-[Loader]
-Type=3Dpython
-Module=3Dmiddle-click-closes-tab
diff --git a/tabs/middle-click-closes-tab.py b/tabs/middle-click-closes-t=
ab.py
deleted file mode 100644
index bb00ed2..0000000
--- a/tabs/middle-click-closes-tab.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- 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 alon=
g
-# 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 =3D window.get_notebook()
- signal =3D notebook.connect('button-release-event', _button_release_cb,
- notebook)
- notebook._mcct_extension_signal =3D signal
-
-def detach_window(window):
- notebook =3D 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 !=3D 2:
- return None
-=09
- # Let's find which tab was pressed, iterating over all tabs.
- pointer =3D event.window.get_pointer()
- tab_count =3D widget.get_n_pages()
- for tab, num in ((widget.get_nth_page(i), i) for i in xrange(0, tab_cou=
nt)):
- label =3D notebook.get_tab_label(tab)
- if label.allocation.x < pointer[0] and (label.allocation.x +=20
- label.allocation.width) > pointer[0]:
- # Found it, let's remove it.
- tab.get_parent().remove_page(num)
- break
diff --git a/tabs/onlyoneclosebutton.ephy-extension b/tabs/onlyoneclosebu=
tton.ephy-extension
deleted file mode 100644
index 86ca7e8..0000000
--- a/tabs/onlyoneclosebutton.ephy-extension
+++ /dev/null
@@ -1,11 +0,0 @@
-[Epiphany Extension]
-Name=3DOnly One Close Button
-Description=3DOne on each tab is a waste of space and increases the risk=
of accidental closing
-Authors=3DStefan Stuhr
-Version=3D1
-URL=3Dhttp://www.sstuhr.dk/epiphany-extensions/
-
-
-[Loader]
-Type=3Dpython
-Module=3Donlyoneclosebutton
diff --git a/tabs/onlyoneclosebutton.py b/tabs/onlyoneclosebutton.py
deleted file mode 100644
index a47fafe..0000000
--- a/tabs/onlyoneclosebutton.py
+++ /dev/null
@@ -1,134 +0,0 @@
-# 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-
-import gtk
-import epiphany
-
-EGG_TB_MODEL_NAME_KNOWN =3D 1 << 2
-
-class OnlyOneCloseButton:
- tab_popup_xml =3D '''
- <ui>
- <popup name=3D"EphyNotebookPopup" action=3D"NotebookPopupAction">
- <separator/>
- <menuitem name=3D"TabCloseENP" action=3D"FileCloseTab"/>
- <separator/>
- </popup>
- </ui>'''
-
- def __init__(self):
- self.win_data =3D {}
-
- # Make the toolbar button available in the editor
- shell =3D epiphany.ephy_shell_get_default()
- model =3D shell.get_toolbars_model(False)
- name_flags =3D model.get_name_flags("FileCloseTab")
- model.set_name_flags("FileCloseTab", name_flags | EGG_TB_MODEL_NAME_KN=
OWN)
-
- # 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 =3D epiphany.ephy_shell_get_default()
- model =3D shell.get_toolbars_model(False)
- name_flags =3D model.get_name_flags("FileCloseTab")
- model.set_name_flags("FileCloseTab", name_flags & ~EGG_TB_MODEL_NAME_K=
NOWN)
-
- def attach_window(self, window):
- data =3D self.win_data[window] =3D {"tab_data": {}}
-
- ui_manager =3D window.get_ui_manager()
- merge_id =3D ui_manager.add_ui_from_string(self.tab_popup_xml)
- data["ui_merge_id"] =3D merge_id
-
- notebook =3D window.get_notebook()
-
- initially_homogeneous =3D notebook.get_property("homogeneous")
- data["initially_homogeneous"] =3D initially_homogeneous
- notebook.set_property("homogeneous", True)
-
- def detach_window(self, window):
- data =3D self.win_data.pop(window)
-
- ui_manager =3D window.get_ui_manager()
-
- merge_id =3D data["ui_merge_id"]
- ui_manager.remove_ui(merge_id)
- ui_manager.ensure_update()
-
- notebook =3D window.get_notebook()
-
- initially_homogeneous =3D data["initially_homogeneous"]
- notebook.set_property("homogeneous", initially_homogeneous)
-
- def hbox_style_set_cb(self, hbox, previous_style, window, tab):
- data =3D self.win_data[window]
- tab_data =3D data["tab_data"][tab]
-
- tab_data["tab_initial_width"] =3D hbox.get_size_request()[0]
- hbox.set_size_request(16, -1)
-
- def attach_tab(self, window, tab):
- data =3D self.win_data[window]
- tab_data =3D data["tab_data"][tab] =3D {}
-
- notebook =3D window.get_notebook()
- widget =3D notebook.get_tab_label(tab)
-
- if isinstance(widget, gtk.HBox):
- children =3D widget.get_children()
-
- tab_data["tab_initial_width"] =3D widget.get_size_request()[0]
- widget.set_size_request(16, -1)
-
- handler_id =3D widget.connect("style-set", self.hbox_style_set_cb, wi=
ndow, tab)
- tab_data["hbox_style_set_hid"] =3D 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 =3D self.win_data[window]
- tab_data =3D data["tab_data"].pop(tab)
-
- notebook =3D window.get_notebook()
- widget =3D notebook.get_tab_label(tab)
-
- if tab.parent =3D=3D notebook:
- notebook.child_set(tab, "tab-expand", False)
-
- if isinstance(widget, gtk.HBox):
- children =3D widget.get_children()
-
- handler_id =3D 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 =3D OnlyOneCloseButton()
-
-attach_window =3D oocb_extension.attach_window
-detach_window =3D oocb_extension.detach_window
-
-attach_tab =3D oocb_extension.attach_tab
-detach_tab =3D oocb_extension.detach_tab
diff --git a/tabs/reopen-closed-tabs.ephy-extension b/tabs/reopen-closed-=
tabs.ephy-extension
new file mode 100644
index 0000000..b1b269b
--- /dev/null
+++ b/tabs/reopen-closed-tabs.ephy-extension
@@ -0,0 +1,10 @@
+[Epiphany Extension]
+Name=3DReopen Closed Tabs Queue
+Description=3DUse Ctrl-Shift-T to reopen, one by one, the tabs you recen=
tly closed.
+Authors=3DTim Horton
+Version=3D1
+URL=3D
+
+[Loader]
+Type=3Dseed
+Module=3Dreopen-closed-tabs
diff --git a/tabs/reopen-closed-tabs.js b/tabs/reopen-closed-tabs.js
new file mode 100644
index 0000000..62b9648
--- /dev/null
+++ b/tabs/reopen-closed-tabs.js
@@ -0,0 +1,73 @@
+/*
+ * Copyright =C2=A9 2009 Tim Horton <hortont424 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.
+ *
+ * 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.
+ */
+
+Gtk =3D imports.gi.Gtk;
+Gdk =3D imports.gi.Gdk;
+WebKit =3D imports.gi.WebKit;
+Epiphany =3D imports.gi.Epiphany;
+
+var last_closed_urls =3D [ ];
+
+var key_pressed =3D function (window, event)
+{
+ if(event.key.state & Gdk.ModifierType.CONTROL_MASK &&
+ event.key.state & Gdk.ModifierType.SHIFT_MASK)
+ {
+ if(event.key.keyval =3D=3D Gdk.T)
+ {
+ var embed =3D window.get_active_child();
+ var shell =3D Epiphany.EphyShell.get_default();
+ var new_url =3D last_closed_urls.pop();
+ =09
+ if(new_url !=3D null)
+ var new_tab =3D new Epiphany.EphyShell.tab(shell, window, embed,
+ new_url,
+ Epiphany.EphyNewTabFlags.OPEN_PAGE |
+ Epiphany.EphyNewTabFlags.IN_EXISTING_WINDOW |
+ Epiphany.EphyNewTabFlags.JUMP);
+ }
+ }
+=09
+ return false;
+}
+
+extension =3D {
+ attach_tab: function(window, tab)
+ {
+=09
+ },
+ detach_tab: function(window, tab)
+ {
+ var embed;
+ =09
+ if(tab.get_embed !=3D null)
+ embed =3D tab.get_embed();
+ else
+ embed =3D tab;
+ =09
+ last_closed_urls.push(embed.get_web_view().get_location());
+ },
+ attach_window: function(window)
+ {
+ window.signal.key_press_event.connect(key_pressed);
+ },
+ detach_window: function(window)
+ {
+
+ }
+}
diff --git a/tabs/restore-tab.ephy-extension b/tabs/restore-tab.ephy-exte=
nsion
deleted file mode 100644
index 39c25bf..0000000
--- a/tabs/restore-tab.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DRestore Closed Tab
-Description=3DRestore a previously closed tab
-Authors=3DMichael Opitz <opitz.michael at gmail.com>
-URL=3Dhttp://code.google.com/p/epiphany-tab-restore/
-Version=3D0.0.1
-
-[Loader]
-Type=3Dpython
-Module=3Drestore-tab
diff --git a/tabs/restore-tab.py b/tabs/restore-tab.py
deleted file mode 100644
index b2b39e5..0000000
--- a/tabs/restore-tab.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# 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 =3D """
-<ui>
- <menubar name=3D"menubar">
- <menu name=3D"ToolsMenu" action=3D"Tools">
- <separator/>
- <menuitem name=3D"PyTabRestore" action=3D"PyTabRestore"/>
- </menu>
- </menubar>
-</ui>
-"""
-
-def _restore_tab_cb(action, window):
- # restore the last closed tab
- if(len(window._py_restore_urls) > 0):
- notebook =3D window.get_notebook()
- position =3D notebook.get_n_pages() - 1
- prev_tab =3D notebook.get_nth_page(position)
- shell =3D epiphany.ephy_shell_get_default()
- shell.new_tab(window, prev_tab, window._py_restore_urls.pop(),
- epiphany.NEW_TAB_IN_EXISTING_WINDOW |=20
- epiphany.NEW_TAB_OPEN_PAGE |=20
- epiphany.NEW_TAB_JUMP)
-
-_actions =3D [('PyTabRestore', None, '_Restore Tab', "<control><shift>T"=
,=20
- "Restore a previosly closed tab", _restore_tab_cb),]
-def attach_window(window):
- window._py_restore_urls =3D []
- # create the menu entry
- ui_manager =3D window.get_ui_manager()
- group =3D gtk.ActionGroup('PyTabRestore')
- group.add_actions(_actions, window)
- ui_manager.insert_action_group(group, -1)
- ui_id =3D ui_manager.add_ui_from_string(_ui_str)
-
- window._python_tab_restore_window_data =3D (group, ui_id)
-
-def detach_window(window):
- # delete our list...
- del window._py_restore_urls=20
- # delete the epiphany stuff
- group, ui_id =3D window._python_tab_restore_window_data
- del window._python_tab_restore_window_data
-
- ui_manager =3D 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))
-
diff --git a/tabs/tabforeground.ephy-extension b/tabs/tabforeground.ephy-=
extension
deleted file mode 100644
index eba02ef..0000000
--- a/tabs/tabforeground.ephy-extension
+++ /dev/null
@@ -1,11 +0,0 @@
-[Epiphany Extension]
-Name=3DTab Foreground
-Description=3DOpen new tab in the foreground when clicking on a link wit=
h the middle mouse button or CTRL + middle mouse button
-Authors=3DCharles-Henri d'Adhemar
-Version=3D2
-URL=3Dcdadhemar.free.fr/epiphany/
-
-
-[Loader]
-Type=3Dpython
-Module=3Dtabforeground
diff --git a/tabs/tabforeground.py b/tabs/tabforeground.py
deleted file mode 100644
index ffa0099..0000000
--- a/tabs/tabforeground.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-
-import epiphany
-
-def attach_tab(window, tab): =20
- window.set_active_child(tab)
diff --git a/tabs/tabkeytabnavigate.ephy-extension b/tabs/tabkeytabnaviga=
te.ephy-extension
deleted file mode 100644
index 2a45eca..0000000
--- a/tabs/tabkeytabnavigate.ephy-extension
+++ /dev/null
@@ -1,11 +0,0 @@
-[Epiphany Extension]
-Name=3DTab Key Tab Navigate
-Description=3DUse the tab key to navigate between tabs
-Authors=3DStefan Stuhr
-Version=3D1
-URL=3Dhttp://www.sstuhr.dk/epiphany-extensions/
-
-
-[Loader]
-Type=3Dpython
-Module=3Dtabkeytabnavigate
diff --git a/tabs/tabkeytabnavigate.py b/tabs/tabkeytabnavigate.py
deleted file mode 100644
index fa4bcfd..0000000
--- a/tabs/tabkeytabnavigate.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-
-import gtk
-import epiphany
-
-def tktn_set_tab_offset(window, offset):
- notebook =3D window.get_notebook()
-
- index =3D notebook.get_current_page()
- count =3D notebook.get_n_pages()
-
- new_index =3D (index + offset) % count
- notebook.set_current_page(new_index)
-
-def tktn_key_press_cb(window, event):
- if event.state & gtk.gdk.CONTROL_MASK:
- keyvalname =3D gtk.gdk.keyval_name(event.keyval)
- if keyvalname =3D=3D "Tab":
- tktn_set_tab_offset(window, 1)
- elif keyvalname =3D=3D "ISO_Left_Tab":
- tktn_set_tab_offset(window, -1)
- else:
- return False
-
- return True
-
-def attach_window(window):
- signal =3D window.connect("key-press-event", tktn_key_press_cb)
- window._tktn_key_press_sig =3D 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")
diff --git a/tabs/tablabelborder.ephy-extension b/tabs/tablabelborder.eph=
y-extension
deleted file mode 100644
index 2d6c7fa..0000000
--- a/tabs/tablabelborder.ephy-extension
+++ /dev/null
@@ -1,11 +0,0 @@
-[Epiphany Extension]
-Name=3DLess Tab Label Border
-Description=3DLess border around tab labels
-Authors=3DStefan Stuhr
-Version=3D1
-URL=3Dhttp://www.sstuhr.dk/epiphany-extensions/
-
-
-[Loader]
-Type=3Dpython
-Module=3Dtablabelborder
diff --git a/tabs/tablabelborder.py b/tabs/tablabelborder.py
deleted file mode 100644
index 435cada..0000000
--- a/tabs/tablabelborder.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-
-import gtk
-import epiphany
-
-tab_label_hborder =3D 1
-tab_label_vborder =3D 1
-
-def attach_window(window):
- notebook =3D window.get_notebook()
-
- borders =3D (notebook.get_property("tab-hborder"), notebook.get_propert=
y("tab-vborder"))
- window._tlb_tab_label_borders =3D 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 =3D window.get_notebook()
- hborder, vborder =3D window._tlb_tab_label_borders
-
- notebook.set_property("tab-hborder", hborder)
- notebook.set_property("tab-vborder", vborder)
-
- delattr(window, "_tlb_tab_label_borders")
diff --git a/tabs/widetabs.ephy-extension b/tabs/widetabs.ephy-extension
deleted file mode 100644
index d521b0c..0000000
--- a/tabs/widetabs.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DWide tabs
-Description=3DMake tabs wide while keeping the close button.
-Authors=3DDiego Escalante Urrelo <diegoe at gnome.org>
-Version=3D20080422
-URL=3Dhttp://www.gnome.org/~diegoe/epiphany/
-
-[Loader]
-Type=3Dpython
-Module=3Dwidetabs
diff --git a/tabs/widetabs.py b/tabs/widetabs.py
deleted file mode 100644
index ca0689c..0000000
--- a/tabs/widetabs.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# -*- encoding: utf-8 -*-
-#
-# Widetabs - Epiphany Extension
-# Copyright =C2=A9 2008 Diego Escalante Urrelo <diegoe at gnome.org>
-# Based on:
-# Only One Close Button - Epiphany Extension
-# Copyright =C2=A9 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-
-import gtk
-import epiphany
-
-
-class WideTab:
- def __init__(self):
- self.win_data =3D {}
- def attach_window(self, window):
- data =3D self.win_data[window] =3D {"tab_data": {}}
-
- notebook =3D window.get_notebook()
-
- initially_homogeneous =3D notebook.get_property("homogeneous")
- data["initially_homogeneous"] =3D initially_homogeneous
- notebook.set_property("homogeneous", True)
- =09
- initially_scrollable =3D notebook.get_property("scrollable")
- data["initially_scrollable"] =3D initially_scrollable
- notebook.set_property("scrollable", False)
-
- def detach_window(self, window):
- data =3D self.win_data.pop(window)
-
- notebook =3D window.get_notebook()
-
- initially_homogeneous =3D data["initially_homogeneous"]
- notebook.set_property("homogeneous", initially_homogeneous)
-
- def hbox_style_set_cb(self, hbox, previous_style, window, tab):
- data =3D self.win_data[window]
- tab_data =3D data["tab_data"][tab]
-
- tab_data["tab_initial_width"] =3D hbox.get_size_request()[0]
- hbox.set_size_request(16, -1)
-
- def attach_tab(self, window, tab):
- data =3D self.win_data[window]
- tab_data =3D data["tab_data"][tab] =3D {}
-
- notebook =3D window.get_notebook()
- widget =3D notebook.get_tab_label(tab)
-
- if isinstance(widget, gtk.HBox):
- tab_data["tab_initial_width"] =3D widget.get_size_request()[0]
- widget.set_size_request(16, -1)
-
- handler_id =3D widget.connect("style-set", self.hbox_style_set_cb, wi=
ndow, tab)
- tab_data["hbox_style_set_hid"] =3D handler_id
-
- notebook.child_set(tab, "tab-expand", True)
-
- def detach_tab(self, window, tab):
- data =3D self.win_data[window]
- tab_data =3D data["tab_data"].pop(tab)
-
- notebook =3D window.get_notebook()
- widget =3D notebook.get_tab_label(tab)
-
- if tab.parent =3D=3D notebook:
- notebook.child_set(tab, "tab-expand", False)
-
- if isinstance(widget, gtk.HBox):
- handler_id =3D tab_data["hbox_style_set_hid"]
- widget.disconnect(handler_id)
-
- widget.set_size_request(tab_data["tab_initial_width"], -1)
-
-wt_extension =3D WideTab()
-
-attach_window =3D wt_extension.attach_window
-detach_window =3D wt_extension.detach_window
-
-attach_tab =3D wt_extension.attach_tab
-detach_tab =3D wt_extension.detach_tab
diff --git a/ui/close-multiple-tabs.ephy-extension b/ui/close-multiple-ta=
bs.ephy-extension
new file mode 100644
index 0000000..d94509f
--- /dev/null
+++ b/ui/close-multiple-tabs.ephy-extension
@@ -0,0 +1,10 @@
+[Epiphany Extension]
+Name=3DDon't Close Multiple Tabs
+Description=3DWarn before closing a window containing multiple open tabs=
.
+Authors=3DTim Horton
+Version=3D1
+URL=3D
+
+[Loader]
+Type=3Dseed
+Module=3Dclose-multiple-tabs
diff --git a/ui/close-multiple-tabs.js b/ui/close-multiple-tabs.js
new file mode 100644
index 0000000..53bf9aa
--- /dev/null
+++ b/ui/close-multiple-tabs.js
@@ -0,0 +1,27 @@
+var delete_event =3D function (window, event)
+{
+ var n =3D window.get_notebook();
+ if(n.get_n_pages() <=3D 1)
+ return false;
+=09
+ var dialog =3D new Gtk.MessageDialog({text:"You are about to close a wi=
ndow with " + n.get_n_pages() + " open tabs.", message_type:Gtk.MessageTy=
pe.WARNING });
+ dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL).grab_focus=
();
+ dialog.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK);
+ dialog.set_default_response(Gtk.ResponseType.CANCEL);
+=09
+ var result =3D dialog.run();
+ dialog.hide();
+ dialog.destroy();
+=09
+ if(result =3D=3D Gtk.ResponseType.OK)
+ return false;
+ else
+ return true;
+}
+
+extension =3D {
+ attach_window: function(window)
+ {
+ signal =3D window.signal.delete_event.connect(delete_event);
+ }
+}
diff --git a/ui/confirmwindowclose.ephy-extension b/ui/confirmwindowclose=
.ephy-extension
deleted file mode 100644
index 8f4ebf6..0000000
--- a/ui/confirmwindowclose.ephy-extension
+++ /dev/null
@@ -1,11 +0,0 @@
-[Epiphany Extension]
-Name=3DConfirm Window Close
-Description=3DConfirm closing of windows with multiple tabs
-Authors=3DStefan Stuhr
-Version=3D1
-URL=3Dhttp://www.sstuhr.dk/epiphany-extensions/
-
-
-[Loader]
-Type=3Dpython
-Module=3Dconfirmwindowclose
diff --git a/ui/confirmwindowclose.py b/ui/confirmwindowclose.py
deleted file mode 100644
index c6d2faf..0000000
--- a/ui/confirmwindowclose.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-
-import gtk
-import epiphany
-
-def _cwc_window_delete_event_cb(window, event):
- notebook =3D window.get_notebook()
- tab_count =3D notebook.get_n_pages()
-
- if tab_count <=3D 1:
- return False
-
- dialog =3D gtk.MessageDialog(window,
- gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_P=
ARENT,
- gtk.MESSAGE_WARNING, gtk.BUTTONS_NONE,
- "You are about to close a window with %i ope=
n 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 =3D dialog.run()
- dialog.hide()
- dialog.destroy()
-
- return result not in (gtk.RESPONSE_OK,)
-
-def attach_window(window):
- signal =3D window.connect("delete-event", _cwc_window_delete_event_cb)
- window._cwc_window_delete_sig =3D 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")
diff --git a/ui/hidden-menu.ephy-extension b/ui/hidden-menu.ephy-extensio=
n
deleted file mode 100644
index 77ffac4..0000000
--- a/ui/hidden-menu.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DHidden menu
-Description=3DHides and shows the Menubar with a button
-Authors=3DDiego Escalante Urrelo <diegoe at gnome.org>
-Version=3D20080422
-URL=3Dhttp://www.gnome.org/~diegoe/epiphany/
-
-[Loader]
-Type=3Dpython
-Module=3Dhidden-menu
diff --git a/ui/hidden-menu.py b/ui/hidden-menu.py
deleted file mode 100644
index f69e326..0000000
--- a/ui/hidden-menu.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# -*- encoding: utf-8 -*-
-#
-# Hidden Menu - Epiphany Extension
-# Copyright =C2=A9 2006, 2008 Diego Escalante Urrelo <diegoe at gnome.or=
g>
-#
-# 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 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 =3D '/apps/epiphany-extensions/hiddenmenu/hidden'
-EGG_TB_MODEL_NAME_KNOWN =3D 1 << 2
-
-class HiddenMenuExtension(object):
- def __init__(self): =09
- shell =3D epiphany.ephy_shell_get_default()
- model =3D shell.get_toolbars_model(False)
- flags =3D model.get_name_flags('HideMenu')
- model.set_name_flags('HideMenu', flags | EGG_TB_MODEL_NAME_KNOWN)
- =09
- self.client =3D gconf.client_get_default ();
- self.mb_hidden =3D self.client.get_bool(HIDDENMENU_KEY)
-
- if self.client.key_is_writable(HIDDENMENU_KEY):
- self.gconf =3D True
- else:
- self.gconf =3D False
- del self.client
-
- def attach(self, window):
- actions =3D [('HideMenu', gtk.STOCK_GO_DOWN, 'Hi_de menubar',
- None, 'Toggle menubar visibility', self._hmb_activate_cb)]
- group =3D self._find_group(window)
- group.add_actions(actions, window)
- window._mb_visible =3D self.mb_hidden
-
- def detach(self, window):
- if self.gconf:
- self.client.set_bool(HIDDENMENU_KEY, window._mb_visible)
-=09
- # Not supported yet in Epiphany
- def finalize(self):
- shell =3D epiphany.ephy_shell_get_default()
- model =3D shell.get_toolbars_model(False)
- name_flags =3D model.get_name_flags('HideMenu')
- model.set_name_flags('HideMenu', name_flags & ~EGG_TB_MODEL_NAME_KNOWN=
)
- =09
- def _find_group(self, window):
- for group in window.get_ui_manager().get_action_groups():
- if group.get_name() =3D=3D 'SpecialToolbarActions':
- return group
- else:
- raise AssertionError('Cannot find SpecialToolbarActions group')
-=09
- def _toggle_visible(self, menubar):
- if menubar.parent.parent.parent._mb_visible:
- menubar.hide()
- else:
- menubar.show()
-=09
- def _hmb_activate_cb(self, action, window):
- menubar =3D window.get_child().get_children()[0].get_children()[0]
- window._mb_visible =3D self.mb_hidden =3D not window._mb_visible
- self._toggle_visible(menubar)
-
-hm =3D HiddenMenuExtension()
-
-def attach_window(window):
- hm.attach(window)
- window.hm_started =3D False
-
-def attach_tab(window, tab):
- if not window.hm_started:
- menubar =3D window.get_child().get_children()[0].get_children()[0]
- hm._toggle_visible(menubar)
- window.hm_started =3D True
-
-def detach_window(window):
- hm.detach(window)
diff --git a/ui/menuandtoolbar.ephy-extension b/ui/menuandtoolbar.ephy-ex=
tension
deleted file mode 100644
index 14d0ae3..0000000
--- a/ui/menuandtoolbar.ephy-extension
+++ /dev/null
@@ -1,11 +0,0 @@
-[Epiphany Extension]
-Name=3DMenubar and Toolbar beside each other
-Description=3DPut the menubar and toolbar beside each other
-Authors=3DStefan Stuhr
-Version=3D1
-URL=3Dhttp://www.sstuhr.dk/epiphany-extensions/
-
-
-[Loader]
-Type=3Dpython
-Module=3Dmenuandtoolbar
diff --git a/ui/menuandtoolbar.py b/ui/menuandtoolbar.py
deleted file mode 100644
index 2e5d963..0000000
--- a/ui/menuandtoolbar.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-
-import gtk
-import epiphany
-
-def attach_window(window):
- toolbar =3D window.get_toolbar()
- vbox =3D toolbar.parent
- if not isinstance(vbox, gtk.VBox):
- return
-
- children =3D vbox.get_children()
- if len(children) !=3D 2 or (not isinstance(children[0], gtk.MenuBar)) o=
r children[1] !=3D toolbar:
- return
-
- hbox =3D gtk.HBox()
- vbox.pack_start(hbox, False, True, 0)
-
- window._mbatb_top_packings =3D []
-
- for index, widget in enumerate(children):
- is_visible =3D 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 =3D hbox
-
-def detach_window(window):
- if not (hasattr(window, "_mbatb_top_hbox") and hasattr(window, "_mbatb_=
top_packings")):
- return
-
- hbox =3D window._mbatb_top_hbox
- vbox =3D hbox.parent
-
- for widget, packing in zip(hbox.get_children(), window._mbatb_top_packi=
ngs):
- is_visible =3D 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")
diff --git a/ui/quitmenuitem.ephy-extension b/ui/quitmenuitem.ephy-extens=
ion
deleted file mode 100644
index 20ac843..0000000
--- a/ui/quitmenuitem.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DQuit menu item
-Description=3DAdds a Quit menu item to the File menu
-Authors=3DReinout van Schouwen <reinouts at gnome.org>
-Version=3D1
-URL=3Dhttp://projects.gnome.org/epiphany
-
-[Loader]
-Type=3Dpython
-Module=3Dquitmenuitem
diff --git a/ui/quitmenuitem.py b/ui/quitmenuitem.py
deleted file mode 100644
index b769577..0000000
--- a/ui/quitmenuitem.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright =C2=A9 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 =3D """
-<ui>
- <menubar name=3D"menubar">
- <menu name=3D"FileMenu" action=3D"File">
- <separator/>
- <menuitem name=3D"Quit" action=3D"Quit"/>
- <separator/>
- </menu>
- </menubar>
-</ui>
-"""
-
-def quit_cb(action, window):
- for tab in window.get_notebook():
- tab.close()
-=09
-_actions =3D [
- ('Quit', "gtk-quit", None, None, None, quit_cb)]
-=09
-def attach_window(window):
- ui_manager =3D window.get_ui_manager()
- group =3D gtk.ActionGroup('Quit')
- group.add_actions(_actions, window)
- window._quit_group =3D group
- ui_manager.insert_action_group(group, 0)
- window._quit_ui =3D ui_manager.add_ui_from_string(_ui_str)
-
-def detach_window(window):
- ui_manager =3D 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
diff --git a/ui/tabs_on_treeview.ephy-extension b/ui/tabs_on_treeview.eph=
y-extension
deleted file mode 100644
index a0119f7..0000000
--- a/ui/tabs_on_treeview.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DTabs on treeview
-Description=3DReplace tabs with a treeview in a sidebar
-Authors=3DMichel Kevin <kmichel.info at gmail.com>
-Version=3D0.5
-URL=3Dhttp://kmichel.info/projects/epiphany
-
-[Loader]
-Type=3Dpython
-Module=3Dtabs_on_treeview
diff --git a/ui/tabs_on_treeview.py b/ui/tabs_on_treeview.py
deleted file mode 100644
index a608145..0000000
--- a/ui/tabs_on_treeview.py
+++ /dev/null
@@ -1,434 +0,0 @@
-import gtk
-import pango
-import epiphany
-import gconf
-
-base_gconf_path=3D"/apps/epiphany/general/"
-
-class TreeviewTabs:
- treeview_popup_xml =3D """
- <ui>
- <popup name=3D"TabsOnTreeviewPopup">
- <menuitem action=3D"TabsOnTreeviewLeft"/>
- <menuitem action=3D"TabsOnTreeviewRight" />
- </popup>
- </ui>
- """
- actiongroupdef =3D [
- ('TabsOnTreeviewLeft', None, 'Left Sidebar', None, 'Move sidebar to t=
he left', False),
- ('TabsOnTreeviewRight', None, 'Right Sidebar', None, 'Move sidebar to=
the right', True)
- ]
- def __init__(self, window, gconf, always_show_tabs_bar, sidebar_on_righ=
t):
- self.window =3D window
- self.notebook =3D window.get_notebook()
- self.no_update =3D False
- self.no_update_left =3D False
- self.no_update_right =3D False
- self.gconf =3D gconf
- self.always_show_tabs_bar =3D always_show_tabs_bar
- self.sidebar_on_right =3D sidebar_on_right
- self.sidebar_width =3D self.gconf.get_int(base_gconf_path+"sidebar_wid=
th")
- =09
- def toggle_sidebar_side_cb(self, first, second):
- self.gconf.set_bool(base_gconf_path+"sidebar_on_right", first.get_curr=
ent_value())
-=09
- def on_selection_change(self, treeselection):
- treemodel, iter =3D treeselection.get_selected()
- if iter and not self.no_update:
- path =3D treemodel.get_path(iter)
- self.notebook.set_current_page(self.get_pos(path))
- =09
- def move_tab(self, treemodel, path, iter):
- tab =3D self.get_pos(treemodel.get_path(iter))
- self.notebook.reorder_child(self.notebook.get_nth_page(tab), self.get_=
pos(path))
- =09
- def setup_drag(self):
- self.TARGETS =3D [
- ('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.TARG=
ETS,
- gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE)
- self.treeview.enable_model_drag_dest(self.TARGETS, gtk.gdk.ACTION_DEFA=
ULT | 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_da=
ta)
- =09
- def drag_data_get_data(self, treeview, context, selection, info, etime)=
:
- treeselection =3D treeview.get_selection()
- model, iter =3D treeselection.get_selected()
- if info =3D=3D 0:
- data =3D model.get_string_from_iter(iter)
- selection.set(selection.target, 8, data)
- else:
- data =3D str(self.notebook.get_nth_page(self.get_pos(model.get_path(i=
ter))).get_address())
- selection.set_text(data)
- =09
- def get_pos(self, path):
- return list(path)[0]
- =09
- def drag_data_received_data(self, treeview, context, x, y, selection, i=
nfo, etime):
- data =3D selection.data
- drop_info =3D treeview.get_dest_row_at_pos(x, y)
- model =3D treeview.get_model()
- if info =3D=3D 0:
- # Internal move
- iter =3D model.get_iter_from_string(data)
- if drop_info:
- path, position =3D drop_info
- if (position =3D=3D gtk.TREE_VIEW_DROP_AFTER or
- position =3D=3D gtk.TREE_VIEW_DROP_INTO_OR_AFTER):
- old_pos =3D self.get_pos(model.get_path(iter))
- if old_pos >=3D self.get_pos(path):
- path =3D model.get_path(model.iter_next(model.get_iter(path)))
- self.move_tab(model, path, iter)
- else:
- dest =3D 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 =3D drop_info
-# iter =3D model.get_iter(path)
-# source_tab =3D model.get_value(iter, 0)
-# new_tab =3D self.window.open(data, source_tab, 2)
-# tabrow =3D self.find_tab_row(new_tab)
-# if (position =3D=3D gtk.TREE_VIEW_DROP_AFTER or
-# position =3D=3D gtk.TREE_VIEW_DROP_INTO_OR_AFTER):
-# iter =3D model.iter_next(iter)
-# path =3D model.get_path(iter)
-# self.move_tab(model, path, tabrow)
-# self.notebook.set_current_page( self.get_pos(path))
-# else:
-# iter =3D model.iter_nth_child(None, model.iter_n_children(None)-1)
-# source_tab =3D model.get_value(iter, 0)
-# self.window.open(data, source_tab, 2)
-# path =3D model.get_path(iter)
-# self.notebook.set_current_page(self.get_pos(path)+1)
-# if info =3D=3D 1:
-# context.finish(True, True, etime)
- =09
- def treeview_click_cb(self, treeview, event):
- if event.button =3D=3D 3:
- pos_info =3D treeview.get_dest_row_at_pos(int(event.x), int(event.y))
- if pos_info:
- path, position =3D 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 =3D gtk.HPaned()
- self.custom_part.pack2(gtk.HPaned(), True)
- self.treemodel =3D gtk.ListStore(int, str, gtk.gdk.Pixbuf)
- self.treeview =3D 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 =3D gtk.CellRendererText()
- title_cell.set_property("ellipsize", pango.ELLIPSIZE_END)
- icon_cell =3D gtk.CellRendererPixbuf()
- self.column =3D gtk.TreeViewColumn('Tab icon')
- self.column.pack_start(icon_cell, False)
- self.column.set_attributes(icon_cell, pixbuf=3D2)
- self.column.pack_start(title_cell)
- self.column.set_attributes(title_cell, text=3D1)
- 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_cha=
nge)
- self.treemodel.connect('row-changed', self.move_tab)
- scrolled =3D gtk.ScrolledWindow()
- scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
- scrolled.set_shadow_type(gtk.SHADOW_IN)
- scrolled.add(self.treeview)
- label =3D 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 =3D gtk.Button()
- close_button.set_relief(gtk.RELIEF_NONE)
- close_image =3D 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 =3D gtk.HBox()
- title_hbox.pack_start(label, True)
- title_hbox.pack_end(close_button, False)
- self.vbox =3D gtk.VBox()
- self.vbox.pack_start(title_hbox, False)
- self.vbox.pack_start(scrolled, True)
- self.spacer =3D gtk.Alignment(xscale=3D1.0, yscale=3D1.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_change=
d1_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 si=
ze
- self.rs_hack =3D self.custom_part.get_child2().connect("notify::max-po=
sition",
- self.right_sidebar_hack_cb)
- =09
- def right_sidebar_hack_cb(self, paned, position):
- self.sidebar_width_update()
- self.custom_part.get_child2().disconnect(self.rs_hack)
- =09
- 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()
- =09
- def sidebar_width_changed1_cb(self, paned, position):
- if not self.no_update:
- self.sidebar_width =3D paned.get_position()
- self.sidebar_width_save()
-=09
- def sidebar_width_changed2_cb(self, paned, position):
- if not self.no_update:
- paned =3D self.custom_part.get_child2()
- self.sidebar_width =3D paned.get_allocation().width-paned.get_positio=
n()-6
- self.sidebar_width_save()
- =09
- def sidebar_width_save(self):
- self.gconf.set_int(base_gconf_path+"sidebar_width", self.sidebar_width=
)
-=09
- def sidebar_width_update(self):
- self.no_update =3D True
- if self.sidebar_on_right:
- paned =3D self.custom_part.get_child2()
- paned.set_position(self.window.get_allocation().width-self.sidebar_wi=
dth-6)
- else:
- self.custom_part.set_position(self.sidebar_width)
- self.no_update =3D 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)
- =09
- def separator_update(self):
- hbchilds =3D 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()
- =09
- def main_pack(self, widget):
- hbox =3D gtk.HBox()
- sep1 =3D gtk.VSeparator()
- sep2 =3D 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()
- =09
- 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()
- =09
- def secondary_unpack(self):
- widget =3D self.get_secondary()
- widget.get_parent().remove(widget)
- return widget
- =09
- def get_main(self):
- return self.custom_part.get_child2().get_child1().get_children()[1]
-=09
- def get_secondary(self):
- if self.sidebar_on_right:
- return self.custom_part.get_child2().get_child2()
- else:
- return self.custom_part.get_child1()
- =09
- 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]
- =09
- def show_tab_popup(self,etime):
- popupmenu =3D self.uimanager.get_widget("/EphyNotebookPopup")
- popupmenu.popup(None, None, None, 2, etime)
- =09
- def show_sidebar_popup(self, etime):
- popupmenu =3D self.uimanager.get_widget("/TabsOnTreeviewPopup")
- popupmenu.popup(None, None, None, 2, etime)
- =09
- def close_clicked(self, button):
- self.window.get_active_child().close()
- =09
- def show_sidebar(self):
- self.get_secondary().show()
- self.get_separator().show()
- self.force_hidden_tabs(self.notebook, True)
- =09
- def hide_sidebar(self):
- self.get_secondary().hide()
- self.get_separator().hide()
-=09
- def update_tab_order(self, notebook, child, page_num):
- tabrow =3D self.find_tab_row(child)
- if tabrow:
- dest =3D self.treemodel.iter_nth_child(None, page_num)
- old_num =3D 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)
- =09
- # Workaround for bug: #169116=20
- def workaround_embed(self):
- active =3D self.window.get_active_child()
- if active:
- active.hide()
- active.show()
-
- def attach_window(self):
- winvbox =3D 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 =3D self.notebook.connect('notify::show-tabs', =
self.force_hidden_tabs)
- self.workaround_embed()
- self.uimanager =3D self.window.get_ui_manager()
- self.ui_id =3D self.uimanager.add_ui_from_string(self.treeview_popup_x=
ml)
- self.actiongroup =3D gtk.ActionGroup('TabsOnTreeview')
- self.actiongroup.add_radio_actions(self.actiongroupdef, self.sidebar_o=
n_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)
-=09
- def force_hidden_tabs(self, notebook, visible):
- if visible:
- notebook.set_show_tabs(False)
-
- def detach_window(self):
- winvbox =3D 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()
-=09
- def update_current_tab(self, notebook, page, page_num):
- self.no_update =3D True
- self.treeview.set_cursor(int(page_num))
- self.no_update =3D False
-
- def find_tab_row(self, tab):
- iter =3D self.treemodel.get_iter_first()
- h =3D hash(tab)
- while (iter):
- if self.treemodel.get_value (iter, 0) =3D=3D h:
- return iter
- iter =3D self.treemodel.iter_next(iter)
- return None
-
- def update_tab_title_and_icon(self, tab, data):
- tabrow =3D 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 =3D self.notebook.page_num(tab)
- self.treemodel.insert(page_num, [hash(tab), tab.get_title(), tab.get_i=
con()])
- tab.connect('dom-content-loaded', self.update_tab_title_and_icon)
- if self.notebook.get_n_pages() =3D=3D 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()
- =09
- def set_always_show_tabs_bar(self, active):
- self.always_show_tabs_bar =3D active
- if not active and self.notebook.get_n_pages() < 2 :
- self.hide_sidebar()
- else:
- self.show_sidebar()
- =09
- def set_sidebar_on_right(self, value):
- secondary =3D self.secondary_unpack()
- self.sidebar_on_right =3D value
- self.secondary_pack(secondary)
- self.spacer_update()
- self.separator_update()
- self.sidebar_width_update()
- toggle =3D self.uimanager.get_widget("/TabsOnTreeviewPopup/TabsOnTreev=
iewRight")
- toggle.set_active(self.sidebar_on_right)
-=09
- =09
-class TreeviewTabsDispatch:
- def __init__(self):
- self.winlist =3D {}
- self.gconf =3D gconf.client_get_default()
- self.always_show_tabs_bar =3D self.gconf.get_bool("/apps/epiphany/gene=
ral/always_show_tabs_bar")
- self.sidebar_on_right =3D 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)
-=09
- def always_show_tabs_bar_cb(self, client, a_number, entry, a_list):
- active =3D entry.value.get_bool()
- for window in self.winlist:
- self.winlist[window].set_always_show_tabs_bar(active)
- self.always_show_tabs_bar =3D active
-=09
- def sidebar_on_right_cb(self, client, a_number, entry, a_list):
- active =3D entry.value.get_bool()
- for window in self.winlist:
- self.winlist[window].set_sidebar_on_right(active)
- self.sidebar_on_right =3D active
-
- def attach_window(self, window):
- self.winlist[window] =3D TreeviewTabs(window, self.gconf,
- self.always_show_tabs_bar, self.sidebar_on_right)
- self.winlist[window].attach_window()
-=09
- def attach_tab(self, window, tab):
- self.winlist[window].attach_tab(tab)
-
- def detach_tab(self, window, tab):
- self.winlist[window].detach_tab(tab)
-=09
- def detach_window(self, window):
- self.winlist[window].detach_window()
- del self.winlist[window]
-
-
-treeview_extension =3D TreeviewTabsDispatch()
-
-attach_window =3D treeview_extension.attach_window
-detach_window =3D treeview_extension.detach_window
-
-attach_tab =3D treeview_extension.attach_tab
-detach_tab =3D treeview_extension.detach_tab
diff --git a/ui/throbber-remover.ephy-extension b/ui/throbber-remover.eph=
y-extension
deleted file mode 100644
index 5b7a682..0000000
--- a/ui/throbber-remover.ephy-extension
+++ /dev/null
@@ -1,10 +0,0 @@
-[Epiphany Extension]
-Name=3DThrobber remover
-Description=3DRemoves the throbber from the toolbar
-Authors=3DDiego Escalante Urrelo <diegoe at gnome.org>
-Version=3D20080422
-URL=3Dhttp://www.gnome.org/~diegoe/epiphany/
-
-[Loader]
-Type=3Dpython
-Module=3Dthrobber-remover
diff --git a/ui/throbber-remover.py b/ui/throbber-remover.py
deleted file mode 100644
index 2b49b54..0000000
--- a/ui/throbber-remover.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- encoding: utf-8 -*-
-#
-# Remove-throbber - Epiphany Extension
-# Copyright =C2=A9 2006, 2008 Diego Escalante Urrelo <diegoe at gnome.or=
g>
-#
-# 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 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_childre=
n()[0].hide()
-
-def detach_window(window):
- window.get_toolbar().get_children()[0].get_children()[1].get_childre=
n()[0].show()
diff --git a/ui/urgentcontentnotify.ephy-extension b/ui/urgentcontentnoti=
fy.ephy-extension
deleted file mode 100644
index f820694..0000000
--- a/ui/urgentcontentnotify.ephy-extension
+++ /dev/null
@@ -1,11 +0,0 @@
-[Epiphany Extension]
-Name=3DUrgent Content Notify
-Description=3DSet URGENT window manager hint when content changes in a w=
indow that doesn't have focus
-Authors=3DStefan Stuhr
-Version=3D1
-URL=3Dhttp://www.sstuhr.dk/epiphany-extensions/
-
-
-[Loader]
-Type=3Dpython
-Module=3Durgentcontentnotify
diff --git a/ui/urgentcontentnotify.py b/ui/urgentcontentnotify.py
deleted file mode 100644
index 08a3b7c..0000000
--- a/ui/urgentcontentnotify.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# 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 al=
ong
-# with this program; if not, write to the Free Software Foundation, In=
c.,
-# 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 =3D window.connect("focus-in-event", ucn_window_set_focus)
- window._ucn_window_set_focus_sig =3D 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 =3D tab.get_embed()
- else:
- embed =3D tab
- try:
- signal =3D embed.connect("notify::load-status", ucn_embed_content_chan=
ge, window)
- except:
- signal =3D embed.connect("ge-content-change", ucn_embed_content_change=
, window)
-
- tab._ucn_embed_content_change =3D signal
-
-def detach_tab(window, tab):
- if not hasattr(tab, "_ucn_embed_content_change"):
- return
-
- if hasattr(tab, "get_embed"):
- embed =3D tab.get_embed()
- else:
- embed =3D tab
- embed.disconnect(tab._ucn_embed_content_change)
- delattr(tab, "_ucn_embed_content_change")
-
--=20
1.6.6
--0F1p//8PRICkK4MW--
More information about the pkg-gnome-maintainers
mailing list