commit 6014922f3b2f1564a9d32a33af37676c71ef7fa8
Author: phantomjinx <p.g.richard...@phantomjinx.co.uk>
Date:   Sat Jun 19 01:21:10 2010 +0100

    Experimental simple browser for finding coverart using webkit
    
    * Entire plugin compiling should be conditional on webkit dependency

 TODO                                     |    6 +-
 configure.in                             |   27 ++++
 plugins/Makefile.am                      |    3 +-
 plugins/coverweb/Makefile.am             |  138 +++++++++++++++++++++
 plugins/coverweb/coverweb.c              |  197 ++++++++++++++++++++++++++++++
 plugins/coverweb/coverweb.glade          |  133 ++++++++++++++++++++
 plugins/coverweb/coverweb.h              |   68 ++++++++++
 plugins/coverweb/coverweb.plugin         |    4 +
 plugins/coverweb/coverweb.ui             |    7 +
 plugins/coverweb/coverweb_preferences.c  |  182 +++++++++++++++++++++++++++
 plugins/coverweb/coverweb_preferences.h  |   34 +++++
 plugins/coverweb/icons/Makefile.am       |    4 +
 plugins/coverweb/icons/internet-icon.png |  Bin 0 -> 16261 bytes
 plugins/coverweb/plugin.c                |  167 +++++++++++++++++++++++++
 plugins/coverweb/plugin.h                |   65 ++++++++++
 15 files changed, 1031 insertions(+), 4 deletions(-)
---
diff --git a/TODO b/TODO
index daf7cf6..bcd7c98 100644
--- a/TODO
+++ b/TODO
@@ -53,13 +53,13 @@ Help Menu
 # Help Contents
 # About box
 
-Playlists Plugin
+#Playlists Plugin
 # popup menu
 
-Tracks Plugin
+#Tracks Plugin
 # popup menu
 
-Sorttab Menu
+#Sorttab Menu
 # popup menu
 
 # Save on exit
diff --git a/configure.in b/configure.in
index 6e28697..cfc69c7 100644
--- a/configure.in
+++ b/configure.in
@@ -245,6 +245,31 @@ AC_CHECK_HEADERS(linux/cdrom.h scsi/sg.h scsi/scsi.h 
scsi/scsi_ioctl.h)
 libgpod_version=`$PKG_CONFIG libgpod-1.0 --modversion`
 AC_DEFINE_UNQUOTED(LIBGPOD_VERSION, "${libgpod_version}", [Set this to the 
libgpod version])
 
+dnl Check for webkit
+dnl -------------------------------------------------------------
+
+AC_ARG_ENABLE(plugin-coverweb,
+       AC_HELP_STRING([--disable-plugin-coverweb],[Disable browser plugin for 
finding coverart in gtkpod]), 
+       [ if test "$enableval" = "no"; then
+               user_disabled_coverweb=1
+         fi ],
+       [ user_disabled_coverweb=0 ])
+
+AC_MSG_CHECKING(if coverweb plugin is disabled)
+if test "$user_disabled_coverweb" = 1; then
+       AC_MSG_RESULT(yes)
+       coverweb="no"
+else
+       AC_MSG_RESULT(no)
+       
+       PKG_CHECK_MODULES(PLUGIN_COVERWEB,
+               [webkit-1.0 >= 1.1],
+               [coverweb="yes"],
+               [coverweb="no"])
+fi
+
+AM_CONDITIONAL(HAVE_PLUGIN_COVERWEB, [test x$coverweb = xyes])
+
 dnl Setup Plugin directories
 dnl ------------------------
 gtkpod_plugin_dir='$(libdir)/$(PACKAGE)'
@@ -348,6 +373,8 @@ plugins/core_preferences/icons/hicolor/48x48/places/Makefile
 plugins/info_display/Makefile
 plugins/cover_display/Makefile
 plugins/cover_display/icons/Makefile
+plugins/coverweb/Makefile
+plugins/coverweb/icons/Makefile
 ])
 
 echo "
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 6e7ebdc..067a9ae 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -9,6 +9,7 @@ SUBDIRS = . \
        details_editor \
        core_preferences \
        info_display \
-       cover_display
+       cover_display \
+       coverweb
 
 # indent
diff --git a/plugins/coverweb/Makefile.am b/plugins/coverweb/Makefile.am
new file mode 100644
index 0000000..8e70b89
--- /dev/null
+++ b/plugins/coverweb/Makefile.am
@@ -0,0 +1,138 @@
+if HAVE_PLUGIN_COVERWEB
+
+plugin_name = coverweb
+plugin_lib = lib$(plugin_name).so
+plugin_file = $(plugin_name).plugin
+
+# Plugin description file
+plugin_in_files = $(plugin_file)
+
+# Plugin UI file
+coverweb_uidir = $(gtkpod_ui_dir)
+coverweb_ui_DATA = $(plugin_name).ui
+
+# Plugin Glade file
+coverweb_gladedir = $(gtkpod_glade_dir)
+coverweb_glade_DATA =  $(plugin_name).glade
+
+# Plugin Icon file
+coverweb_pixmapsdir = $(gtkpod_image_dir)
+coverweb_pixmaps_DATA =
+
+# Where to install the plugin
+plugindir = $(gtkpod_plugin_dir)
+coverweb_plugindir = $(gtkpod_plugin_dir)
+coverweb_plugin_DATA = $(plugin_file)
+
+SUBDIRS = icons
+
+# Even though this is located in the plugin directory, it will be 
+# included from plugin sub-directories.
+include ../../data/directories.mk
+
+# The plugin
+plugin_LTLIBRARIES = libcoverweb.la
+
+AM_CPPFLAGS = \
+    -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+    -DGTKPOD_DATA_DIR=\"$(gtkpod_data_dir)\" \
+    -DGTKPOD_PLUGIN_DIR=\"$(gtkpod_plugin_dir)\" \
+    -DGTKPOD_IMAGE_DIR=\"$(gtkpod_image_dir)\" \
+    -DGTKPOD_GLADE_DIR=\"$(gtkpod_glade_dir)\" \
+    -DGTKPOD_UI_DIR=\"$(gtkpod_ui_dir)\" \
+    -DPACKAGE_DATA_DIR=\"$(datadir)\" \
+    -DPACKAGE_SRC_DIR=\"$(srcdir)\" \
+    $(GTKPOD_CFLAGS) \
+       $(PLUGIN_COVERWEB_CFLAGS)
+       
+# Plugin sources
+libcoverweb_la_SOURCES = plugin.c plugin.h \
+                                                coverweb.c coverweb.h \
+                                                coverweb_preferences.c 
coverweb_preferences.h
+       
+libcoverweb_la_LDFLAGS = $(GTKPOD_PLUGIN_LDFLAGS)
+
+# Plugin dependencies
+libcoverweb_la_LIBADD = \
+    $(LIBGTKPOD_LIBS) \
+    $(LIBANJUTA_LIBS) \
+    $(PLUGIN_COVERWEB_LIBS)
+    
+all-local: create-plugin-links create-ui-link create-glade-link copy-icons-dir
+
+# Creating symbolic links in plugin root directory
+create-plugin-links:
+       echo "Creating plugin links"
+       if test ! -e ../$(plugin_lib); then \
+               ln -s `pwd`/.libs/$(plugin_lib) ../$(plugin_lib); \
+       fi; \
+       if test ! -e ../$(plugin_file); then \
+               ln -s `pwd`/$(plugin_file) ../$(plugin_file); \
+       fi;
+
+# Creating symbolic link to ui file in installed ui directory
+create-ui-link: create-ui-dir
+       if test -e $(gtkpod_ui_dir)/$(plugin_name).ui; then \
+               # File already exists. Replacing ..." \
+               sudo rm -f $(gtkpod_ui_dir)/$(plugin_name).ui; \
+       fi; \
+       # Creating link for $(plugin_name).ui" \
+       sudo ln -s `pwd`/$(plugin_name).ui $(gtkpod_ui_dir)/$(plugin_name).ui;
+
+create-glade-link: create-glade-dir
+       if test -e `pwd`/$(plugin_name).glade; then \
+               if test -e $(gtkpod_glade_dir)/$(plugin_name).glade; then \
+                       # File already exists. Replacing ..." \
+                       sudo rm -f $(gtkpod_glade_dir)/$(plugin_name).glade; \
+               fi; \
+               # Creating link for $(plugin_name).glade" \
+               sudo ln -s `pwd`/$(plugin_name).glade 
$(gtkpod_glade_dir)/$(plugin_name).glade; \
+       fi; \
+       if test -e `pwd`/$(plugin_name).xml; then \
+               if test -e $(gtkpod_glade_dir)/$(plugin_name).xml; then \
+                       # File already exists. Replacing ..." \
+                       sudo rm -f $(gtkpod_glade_dir)/$(plugin_name).xml; \
+               fi; \
+               # Creating link for $(plugin_name).xml" \
+               sudo ln -s `pwd`/$(plugin_name).xml 
$(gtkpod_glade_dir)/$(plugin_name).xml; \
+       fi;
+       
+# Copy icons
+copy-icons-dir: create-icons-dir
+       if test -e `pwd`/icons; then \
+               sudo cp -rf `pwd`/icons/* $(gtkpod_image_dir)/; \
+               sudo chmod -R 755 $(gtkpod_image_dir)/*; \
+               sudo find $(gtkpod_image_dir) -name 'Makefile*' -delete; \
+       fi;
+
+# Clean up the links and files created purely for dev testing
+clean-local: clean-plugin-files clean-ui-dir clean-glade-dir clean-image-dir
+
+clean-plugin-files:
+       rm -f ../$(plugin_lib) ../$(plugin_file)
+
+clean-ui-dir:
+       if test -h $(gtkpod_ui_dir)/$(plugin_name).ui; then \
+               # Symbolic link exists. Removing ..." \
+               sudo rm -f $(gtkpod_ui_dir)/$(plugin_name).ui; \
+       fi;
+
+clean-glade-dir:
+       if test -h $(gtkpod_glade_dir)/$(plugin_name).glade; then \
+               # Symbolic link exists. Removing ..." \
+               sudo rm -f $(gtkpod_glade_dir)/$(plugin_name).glade; \
+       fi;
+       
+clean-image-dir:
+       if test -d $(gtkpod_image_dir); then \
+         sudo find $(gtkpod_image_dir) -name '$(plugin_name)*' -delete; \
+       fi;
+
+endif
+
+EXTRA_DIST = \
+       $(plugin_in_files) \
+       $(coverweb_plugin_DATA) \
+       $(coverweb_ui_DATA) \
+       $(coverweb_glade_DATA) \
+       $(coverweb_pixmaps_DATA)
diff --git a/plugins/coverweb/coverweb.c b/plugins/coverweb/coverweb.c
new file mode 100644
index 0000000..5c302da
--- /dev/null
+++ b/plugins/coverweb/coverweb.c
@@ -0,0 +1,197 @@
+/*
+ |  Copyright (C) 2002-2010 Jorg Schuler <jcsjcs at users sourceforge net>
+ |                                          Paul Richardson <phantom_sf at 
users.sourceforge.net>
+ |  Part of the gtkpod project.
+ |
+ |  URL: http://www.gtkpod.org/
+ |  URL: http://gtkpod.sourceforge.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 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
+ |
+ |  iTunes and iPod are trademarks of Apple
+ |
+ |  This product is not supported/written/published by Apple!
+ |
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <webkit/webkit.h>
+#include "libgtkpod/prefs.h"
+#include "coverweb.h"
+
+static WebBrowser *browser;
+
+static void activate_uri_entry_cb(GtkWidget* entry, gpointer data) {
+    const gchar* uri = gtk_entry_get_text(GTK_ENTRY (entry));
+    g_assert (uri);
+    webkit_web_view_open(WEBKIT_WEB_VIEW(browser->webview), uri);
+}
+
+static void link_hover_cb(WebKitWebView* page, const gchar* title, const 
gchar* link, gpointer data) {
+    /* underflow is allowed */
+    gtk_statusbar_pop(browser->statusbar, browser->status_context_id);
+    if (link)
+        gtk_statusbar_push(browser->statusbar, browser->status_context_id, 
link);
+}
+
+static void progress_change_cb(WebKitWebView* page, gint progress, gpointer 
data) {
+    browser->load_progress = progress;
+}
+
+static void load_commit_cb(WebKitWebView* page, WebKitWebFrame* frame, 
gpointer data) {
+    const gchar* uri = webkit_web_frame_get_uri(frame);
+    if (uri)
+        gtk_entry_set_text(GTK_ENTRY (browser->uri_entry), uri);
+}
+
+static void go_back_cb(GtkWidget* widget, gpointer data) {
+    webkit_web_view_go_back(WEBKIT_WEB_VIEW(browser->webview));
+}
+
+static void go_forward_cb(GtkWidget* widget, gpointer data) {
+    webkit_web_view_go_forward(WEBKIT_WEB_VIEW(browser->webview));
+}
+
+static void bookmark_menu_item_cb(GtkMenuItem* mi, gpointer data) {
+    webkit_web_view_open(WEBKIT_WEB_VIEW(browser->webview), 
gtk_menu_item_get_label(mi));
+}
+
+static void create_browser() {
+    browser->browser_window = gtk_scrolled_window_new(NULL, NULL);
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW 
(browser->browser_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+    browser->webview = webkit_web_view_new();
+    gtk_container_add(GTK_CONTAINER(browser->browser_window), 
browser->webview);
+
+    g_signal_connect (G_OBJECT (browser->webview), "load-progress-changed", 
G_CALLBACK (progress_change_cb), browser);
+    g_signal_connect (G_OBJECT (browser->webview), "load-committed", 
G_CALLBACK (load_commit_cb), browser);
+    g_signal_connect (G_OBJECT (browser->webview), "hovering-over-link", 
G_CALLBACK (link_hover_cb), browser);
+
+    WebKitWebSettings* settings = webkit_web_settings_new();
+    g_object_set(G_OBJECT(settings), "enable-private-browsing", FALSE, NULL);
+    g_object_set(G_OBJECT(settings), "enable-plugins", FALSE, NULL);
+    webkit_web_view_set_settings(WEBKIT_WEB_VIEW(browser->webview), settings);
+
+    webkit_web_view_open(WEBKIT_WEB_VIEW(browser->webview), 
"http://images.google.com";);
+}
+
+static void create_statusbar() {
+    browser->statusbar = GTK_STATUSBAR (gtk_statusbar_new ());
+    browser->status_context_id = 
gtk_statusbar_get_context_id(browser->statusbar, "Link Hover");
+}
+
+void update_bookmark_menu() {
+    GList *bookmarks;
+    gint i;
+
+    if (browser->bookmark_menu) {
+        gtk_menu_item_set_submenu(GTK_MENU_ITEM(browser->bookmark_menu_item), 
NULL);
+        browser->bookmark_menu = NULL;
+    }
+
+    browser->bookmark_menu = gtk_menu_new();
+    bookmarks = prefs_get_list("coverweb_bookmark_");
+    for (i = 0; i < g_list_length(bookmarks); ++i) {
+        gchar *bookmark = g_list_nth_data(bookmarks, i);
+        GtkWidget *bookitem = gtk_menu_item_new_with_label(bookmark);
+        gtk_menu_append(GTK_MENU(browser->bookmark_menu), bookitem);
+        g_signal_connect (G_OBJECT (bookitem), "activate", 
G_CALLBACK(bookmark_menu_item_cb), (gpointer) browser);
+        gtk_widget_show(bookitem);
+    }
+
+    gtk_menu_item_set_submenu(GTK_MENU_ITEM (browser->bookmark_menu_item), 
browser->bookmark_menu);
+}
+
+static void create_menubar() {
+    browser->menubar = gtk_menu_bar_new();
+    browser->bookmark_menu_item = 
gtk_image_menu_item_new_from_stock(GTK_STOCK_CDROM, NULL);
+    gtk_menu_item_set_label(GTK_MENU_ITEM(browser->bookmark_menu_item), 
"Bookmarks");
+    update_bookmark_menu();
+    gtk_menu_shell_append(GTK_MENU_SHELL(browser->menubar), 
browser->bookmark_menu_item);
+}
+
+static void create_toolbar() {
+    browser->toolbar = gtk_toolbar_new();
+    gtk_toolbar_set_orientation(GTK_TOOLBAR (browser->toolbar), 
GTK_ORIENTATION_HORIZONTAL);
+    gtk_toolbar_set_style(GTK_TOOLBAR (browser->toolbar), 
GTK_TOOLBAR_BOTH_HORIZ);
+
+    GtkToolItem* item;
+    /* the back button */
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_GO_BACK);
+    g_signal_connect (G_OBJECT (item), "clicked", G_CALLBACK (go_back_cb), 
(gpointer) browser);
+    gtk_toolbar_insert(GTK_TOOLBAR (browser->toolbar), item, -1);
+
+    /* The forward button */
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_GO_FORWARD);
+    g_signal_connect (G_OBJECT (item), "clicked", G_CALLBACK (go_forward_cb), 
(gpointer) browser);
+    gtk_toolbar_insert(GTK_TOOLBAR (browser->toolbar), item, -1);
+
+    /* The URL entry */
+    item = gtk_tool_item_new();
+    gtk_tool_item_set_expand(item, TRUE);
+
+    browser->uri_entry = gtk_entry_new();
+    gtk_container_add(GTK_CONTAINER (item), browser->uri_entry);
+    g_signal_connect (G_OBJECT (browser->uri_entry), "activate", G_CALLBACK 
(activate_uri_entry_cb), (gpointer)browser);
+    gtk_toolbar_insert(GTK_TOOLBAR (browser->toolbar), item, -1);
+
+    /* The go button */
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_OK);
+    g_signal_connect_swapped (G_OBJECT (item), "clicked", G_CALLBACK 
(activate_uri_entry_cb), (gpointer)browser->uri_entry);
+    gtk_toolbar_insert(GTK_TOOLBAR (browser->toolbar), item, -1);
+}
+
+/**
+ *
+ * init_web_browser
+ *
+ * Initialise the webkit browser
+ *
+ * @parent: Widget to house the browser
+ */
+WebBrowser *init_web_browser(GtkWidget *parent) {
+    browser = g_new0(WebBrowser, 1);
+
+    create_menubar();
+    create_toolbar();
+    create_browser();
+    create_statusbar();
+
+    GtkWidget* vbox = gtk_vbox_new(FALSE, 0);
+    gtk_box_pack_start(GTK_BOX (vbox), browser->menubar, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX (vbox), browser->toolbar, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX (vbox), browser->browser_window, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX (vbox), GTK_WIDGET(browser->statusbar), FALSE, 
FALSE, 0);
+
+    if (GTK_IS_SCROLLED_WINDOW(parent))
+        gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(parent), 
vbox);
+    else
+        gtk_container_add(GTK_CONTAINER (parent), vbox);
+
+    return browser;
+}
+
+/**
+ *
+ * destroy_cover_web
+ *
+ * destroy the web browser and all associated items.
+ */
+void destroy_cover_web() {
+
+}
diff --git a/plugins/coverweb/coverweb.glade b/plugins/coverweb/coverweb.glade
new file mode 100644
index 0000000..d784846
--- /dev/null
+++ b/plugins/coverweb/coverweb.glade
@@ -0,0 +1,133 @@
+<?xml version="1.0"?>
+<glade-interface>
+  <!-- interface-requires gtk+ 2.6 -->
+  <!-- interface-naming-policy toplevel-contextual -->
+  <widget class="GtkWindow" id="prefs_window">
+    <child>
+      <widget class="GtkNotebook" id="coverweb_settings_notebook">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <child>
+          <widget class="GtkVBox" id="vbox5">
+            <property name="visible">True</property>
+            <property name="border_width">12</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">18</property>
+            <child>
+              <widget class="GtkFrame" id="frame4">
+                <property name="visible">True</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
+                <child>
+                  <widget class="GtkAlignment" id="alignment14">
+                    <property name="visible">True</property>
+                    <property name="xalign">0.43999999761581421</property>
+                    <property name="top_padding">6</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <widget class="GtkHBox" id="hbox3">
+                        <property name="height_request">140</property>
+                        <property name="visible">True</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <widget class="GtkScrolledWindow" 
id="scrolledwindow1">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="hscrollbar_policy">never</property>
+                            <property 
name="vscrollbar_policy">automatic</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <widget class="GtkTreeView" id="bookmarks_view">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property 
name="headers_visible">False</property>
+                                <property name="rules_hint">True</property>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkVButtonBox" id="vbuttonbox2">
+                            <property name="visible">True</property>
+                            <property name="orientation">vertical</property>
+                            <property name="spacing">6</property>
+                            <property name="layout_style">spread</property>
+                            <child>
+                              <widget class="GtkButton" id="bookmark_add">
+                                <property name="label">gtk-add</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">True</property>
+                                <property name="use_stock">True</property>
+                                <signal name="clicked" 
handler="on_bookmark_add_clicked"/>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkButton" id="bookmark_remove">
+                                <property name="label">gtk-remove</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">True</property>
+                                <property name="use_stock">True</property>
+                                <signal name="clicked" 
handler="on_bookmark_remove_clicked"/>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
+                </child>
+                <child>
+                  <widget class="GtkLabel" id="label7">
+                    <property name="visible">True</property>
+                    <property name="xalign">0.43999999761581421</property>
+                    <property name="label" 
translatable="yes">&lt;b&gt;Bookmarks&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </widget>
+                  <packing>
+                    <property name="type">label_item</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </widget>
+        </child>
+        <child>
+          <widget class="GtkLabel" id="display_page_label">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">Cover Browser</property>
+          </widget>
+          <packing>
+            <property name="tab_fill">False</property>
+            <property name="type">tab</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</glade-interface>
diff --git a/plugins/coverweb/coverweb.h b/plugins/coverweb/coverweb.h
new file mode 100644
index 0000000..eaa7a6d
--- /dev/null
+++ b/plugins/coverweb/coverweb.h
@@ -0,0 +1,68 @@
+/*
+ |  Copyright (C) 2002-2010 Jorg Schuler <jcsjcs at users sourceforge net>
+ |                                          Paul Richardson <phantom_sf at 
users.sourceforge.net>
+ |  Part of the gtkpod project.
+ |
+ |  URL: http://www.gtkpod.org/
+ |  URL: http://gtkpod.sourceforge.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 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
+ |
+ |  iTunes and iPod are trademarks of Apple
+ |
+ |  This product is not supported/written/published by Apple!
+ |
+ */
+
+#ifndef COVERWEB_H_
+#define COVERWEB_H_
+
+typedef struct {
+    GtkWidget *window;
+    GtkWidget *menubar;
+    GtkWidget *bookmark_menu_item;
+    GtkWidget *bookmark_menu;
+    GtkWidget *toolbar;
+    GtkWidget *browser_window;
+    GtkWidget *webview;
+
+    GtkStatusbar *statusbar;
+    guint status_context_id;
+    gint load_progress;
+    GtkWidget* uri_entry;
+
+} WebBrowser;
+
+/**
+ *
+ * init_web_browser
+ *
+ * Initialise the webkit browser
+ *
+ * @parent: Widget to house the browser
+ */
+WebBrowser *init_web_browser(GtkWidget *parent);
+
+/**
+ *
+ * destroy_cover_web
+ *
+ * destroy the web browser and all associated items.
+ */
+void destroy_cover_web();
+
+void update_bookmark_menu();
+
+#endif /* COVERWEB_H_ */
diff --git a/plugins/coverweb/coverweb.plugin b/plugins/coverweb/coverweb.plugin
new file mode 100644
index 0000000..f68b703
--- /dev/null
+++ b/plugins/coverweb/coverweb.plugin
@@ -0,0 +1,4 @@
+[Anjuta Plugin]
+Location=coverweb:CoverWebPlugin
+Name=Cover Web Plugin
+Description=Web Browser for downloading Cover Artwork
diff --git a/plugins/coverweb/coverweb.ui b/plugins/coverweb/coverweb.ui
new file mode 100644
index 0000000..b141558
--- /dev/null
+++ b/plugins/coverweb/coverweb.ui
@@ -0,0 +1,7 @@
+<!--*- xml -*-->
+<ui>
+       <menubar name="MenuMain">
+       </menubar>
+       <toolbar name="ToolbarMain">
+       </toolbar>
+</ui>
diff --git a/plugins/coverweb/coverweb_preferences.c 
b/plugins/coverweb/coverweb_preferences.c
new file mode 100644
index 0000000..367d8f0
--- /dev/null
+++ b/plugins/coverweb/coverweb_preferences.c
@@ -0,0 +1,182 @@
+/*
+ |  Copyright (C) 2002-2010 Jorg Schuler <jcsjcs at users sourceforge net>
+ |                                          Paul Richardson <phantom_sf at 
users.sourceforge.net>
+ |  Part of the gtkpod project.
+ |
+ |  URL: http://www.gtkpod.org/
+ |  URL: http://gtkpod.sourceforge.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 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
+ |
+ |  iTunes and iPod are trademarks of Apple
+ |
+ |  This product is not supported/written/published by Apple!
+ |
+ */
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include "libgtkpod/misc.h"
+#include "libgtkpod/prefs.h"
+#include "libgtkpod/gtkpod_app_iface.h"
+#include "plugin.h"
+#include "coverweb.h"
+#include "coverweb_preferences.h"
+
+static GtkWidget *bookmarks_view = NULL;
+
+static void setup_bookmarks_tree (GtkTreeView *treeview, gboolean list_visible)
+{
+    GtkListStore *store;
+    GtkTreeIter iter;
+    GtkTreeViewColumn *column;
+    GtkCellRenderer *renderer;
+    gint i;
+
+    /* Delete any existing columns first */
+    GList *columns = gtk_tree_view_get_columns(treeview);
+    for (i = 0; i < g_list_length(columns); ++i) {
+        column = gtk_tree_view_get_column (treeview, 0);
+        gtk_tree_view_remove_column (treeview, column);
+    }
+    g_list_free(columns);
+
+    store = gtk_list_store_new (1, G_TYPE_STRING);
+    column = gtk_tree_view_column_new ();
+    renderer = gtk_cell_renderer_text_new ();
+
+    gtk_tree_view_column_pack_start (column, renderer, TRUE);
+    gtk_tree_view_column_set_attributes (column, renderer, "text", 0, NULL);
+    gtk_tree_view_append_column (treeview, column);
+    gtk_tree_view_set_model (treeview, GTK_TREE_MODEL (store));
+    g_object_unref (G_OBJECT (store));
+
+    GList *bookmarks = prefs_get_list("coverweb_bookmark_");
+    for (i = 0; i < g_list_length(bookmarks); i++) {
+        gchar *bmark = g_list_nth_data(bookmarks, i);
+        gtk_list_store_append (store, &iter);
+        gtk_list_store_set(store, &iter,
+                   0, bmark, -1);
+    }
+}
+
+static gboolean tree_get_current_iter (GtkTreeView *view, GtkTreeIter *iter)
+{
+    GtkTreeModel *model = gtk_tree_view_get_model (view);
+    GtkTreePath *path;
+
+    gtk_tree_view_get_cursor (view, &path, NULL);
+
+    if (!path)
+        return FALSE;
+
+    gtk_tree_model_get_iter (model, iter, path);
+    gtk_tree_path_free (path);
+
+    return TRUE;
+}
+
+static void save_bookmarks_preferences() {
+    g_return_if_fail(bookmarks_view);
+    GtkTreeModel *model;
+    GtkListStore *store;
+    GtkTreeIter iter;
+    gint row = 0;
+    gboolean valid;
+
+    model = gtk_tree_view_get_model (GTK_TREE_VIEW(bookmarks_view));
+    store = GTK_LIST_STORE(model);
+
+    valid = gtk_tree_model_get_iter_first (model, &iter);
+    while (valid) {
+        /* Walk through the list, reading each row */
+        gchar *bmark;
+
+        gtk_tree_model_get (model, &iter,
+                              0, &bmark,
+                              -1);
+
+        prefs_set_string_index("coverweb_bookmark_", row, bmark);
+        g_free (bmark);
+        row++;
+        valid = gtk_tree_model_iter_next (model, &iter);
+    }
+    prefs_set_string_index("coverweb_bookmark_", row, LIST_END_MARKER);
+
+    update_bookmark_menu();
+}
+
+/*
+    glade callback
+*/
+G_MODULE_EXPORT void on_bookmark_add_clicked (GtkButton *sender, gpointer e)
+{
+    g_return_if_fail(bookmarks_view);
+
+    gchar *bookmark;
+    GtkTreeView *view = GTK_TREE_VIEW (bookmarks_view);
+    GtkTreeModel *model;
+    GtkTreeIter iter;
+
+    bookmark
+                = get_user_string(_("Bookmark Url"), _("Please enter the full 
url of the bookmark"), NULL, NULL, NULL, GTK_STOCK_ADD);
+
+    if (!bookmark)
+        return;
+
+    model = gtk_tree_view_get_model (view);
+    gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+    gtk_list_store_set(GTK_LIST_STORE (model), &iter,
+               0, bookmark, -1);
+
+    save_bookmarks_preferences();
+}
+
+/*
+    glade callback
+*/
+G_MODULE_EXPORT void on_bookmark_remove_clicked (GtkButton *sender, gpointer e)
+{
+    g_return_if_fail(bookmarks_view);
+
+    gchar *bmark;
+    GtkTreeView *view = GTK_TREE_VIEW (bookmarks_view);
+    GtkTreeModel *model = gtk_tree_view_get_model (view);
+    GtkTreeIter iter;
+
+    if(!tree_get_current_iter (view, &iter) || !gtk_list_store_iter_is_valid 
(GTK_LIST_STORE (model), &iter))
+        return;
+
+    gtk_tree_model_get (model, &iter, 0, &bmark, -1);
+    gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+
+    save_bookmarks_preferences();
+}
+
+GtkWidget *init_coverweb_preferences() {
+    GtkWidget *notebook;
+    GladeXML *pref_xml;
+
+    pref_xml = gtkpod_xml_new(GLADE_FILE, "coverweb_settings_notebook");
+    notebook = gtkpod_xml_get_widget(pref_xml, "coverweb_settings_notebook");
+    bookmarks_view = gtkpod_xml_get_widget(pref_xml, "bookmarks_view");
+
+    gtk_widget_ref(notebook);
+
+    setup_bookmarks_tree (GTK_TREE_VIEW(bookmarks_view), TRUE);
+
+    glade_xml_signal_autoconnect(pref_xml);
+    return notebook;
+}
diff --git a/plugins/coverweb/coverweb_preferences.h 
b/plugins/coverweb/coverweb_preferences.h
new file mode 100644
index 0000000..2b1d05e
--- /dev/null
+++ b/plugins/coverweb/coverweb_preferences.h
@@ -0,0 +1,34 @@
+/*
+ |  Copyright (C) 2002-2010 Jorg Schuler <jcsjcs at users sourceforge net>
+ |                                          Paul Richardson <phantom_sf at 
users.sourceforge.net>
+ |  Part of the gtkpod project.
+ |
+ |  URL: http://www.gtkpod.org/
+ |  URL: http://gtkpod.sourceforge.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 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
+ |
+ |  iTunes and iPod are trademarks of Apple
+ |
+ |  This product is not supported/written/published by Apple!
+ |
+ */
+
+#ifndef COVER_WEB_PREFERENCES_H_
+#define COVER_WEB_PREFERENCES_H_
+
+GtkWidget *init_coverweb_preferences();
+
+#endif /* COVER_WEB_PREFERENCES_H_ */
diff --git a/plugins/coverweb/icons/Makefile.am 
b/plugins/coverweb/icons/Makefile.am
new file mode 100644
index 0000000..60bfa77
--- /dev/null
+++ b/plugins/coverweb/icons/Makefile.am
@@ -0,0 +1,4 @@
+coverweb_icondir = $(pkgdatadir)/icons
+coverweb_icon_DATA = internet-icon.png
+
+EXTRA_DIST = $(cover_display_icon_DATA)
\ No newline at end of file
diff --git a/plugins/coverweb/icons/internet-icon.png 
b/plugins/coverweb/icons/internet-icon.png
new file mode 100644
index 0000000..f9ce002
Binary files /dev/null and b/plugins/coverweb/icons/internet-icon.png differ
diff --git a/plugins/coverweb/plugin.c b/plugins/coverweb/plugin.c
new file mode 100644
index 0000000..629b367
--- /dev/null
+++ b/plugins/coverweb/plugin.c
@@ -0,0 +1,167 @@
+/*
+ |  Copyright (C) 2002-2010 Jorg Schuler <jcsjcs at users sourceforge net>
+ |                                          Paul Richardson <phantom_sf at 
users.sourceforge.net>
+ |  Part of the gtkpod project.
+ |
+ |  URL: http://www.gtkpod.org/
+ |  URL: http://gtkpod.sourceforge.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 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
+ |
+ |  iTunes and iPod are trademarks of Apple
+ |
+ |  This product is not supported/written/published by Apple!
+ |
+ |  $Id$
+ */
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <glib.h>
+#include <libanjuta/anjuta-utils.h>
+#include <libanjuta/interfaces/ianjuta-preferences.h>
+#include "libgtkpod/gtkpod_app_iface.h"
+#include "libgtkpod/prefs.h"
+#include "plugin.h"
+#include "coverweb.h"
+#include "coverweb_preferences.h"
+
+#define TAB_NAME "Cover Web"
+
+/* Parent class. Part of standard class definition */
+static gpointer parent_class;
+
+static GtkActionEntry cover_actions[] =
+    {
+    };
+
+static void set_default_preferences() {
+    if (!prefs_get_string_value_index("coverweb_bookmark_", 0, NULL))
+    {
+       prefs_set_string_index("coverweb_bookmark_", 0, 
"http://images.google.com";);
+       prefs_set_string_index("coverweb_bookmark_", 1, 
"http://www.allcdcovers.com";);
+       prefs_set_string_index("coverweb_bookmark_", 2, LIST_END_MARKER);
+    }
+}
+
+static gboolean activate_plugin(AnjutaPlugin *plugin) {
+    AnjutaUI *ui;
+    CoverWebPlugin *cover_web_plugin;
+    GtkActionGroup* action_group;
+
+    cover_web_plugin = (CoverWebPlugin*) plugin;
+    ui = anjuta_shell_get_ui(plugin->shell, NULL);
+
+    /* Add our cover_actions */
+    action_group
+            = anjuta_ui_add_action_group_entries(ui, "ActionGroupCoverWeb", 
_("Cover Display"), cover_actions, G_N_ELEMENTS (cover_actions), 
GETTEXT_PACKAGE, TRUE, plugin);
+    cover_web_plugin->action_group = action_group;
+
+    /* Merge UI */
+    cover_web_plugin->uiid = anjuta_ui_merge(ui, UI_FILE);
+
+    /* Set preferences */
+    set_default_preferences();
+
+    /* Add widget in Shell. Any number of widgets can be added */
+    cover_web_plugin->coverweb_window = gtk_scrolled_window_new(NULL, NULL);
+    gtk_widget_ref(cover_web_plugin->coverweb_window);
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW 
(cover_web_plugin->coverweb_window), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
+    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW 
(cover_web_plugin->coverweb_window), GTK_SHADOW_IN);
+
+    init_web_browser(cover_web_plugin->coverweb_window);
+    gtk_widget_show_all(cover_web_plugin->coverweb_window);
+    anjuta_shell_add_widget(plugin->shell, cover_web_plugin->coverweb_window, 
"CoverWebPlugin", "Cover Browser", NULL, ANJUTA_SHELL_PLACEMENT_CENTER, NULL);
+
+    return TRUE; /* FALSE if activation failed */
+}
+
+static gboolean deactivate_plugin(AnjutaPlugin *plugin) {
+    AnjutaUI *ui;
+    CoverWebPlugin *cover_web_plugin;
+
+    cover_web_plugin = (CoverWebPlugin*) plugin;
+    ui = anjuta_shell_get_ui(plugin->shell, NULL);
+
+    /* Remove widgets from Shell */
+    anjuta_shell_remove_widget(plugin->shell, 
cover_web_plugin->coverweb_window, NULL);
+
+    /* Destroy the browser */
+    destroy_cover_web();
+
+    /* Unmerge UI */
+    anjuta_ui_unmerge(ui, cover_web_plugin->uiid);
+
+    /* Remove Action groups */
+    anjuta_ui_remove_action_group(ui, cover_web_plugin->action_group);
+
+    /* FALSE if plugin doesn't want to deactivate */
+    return TRUE;
+}
+
+static void cover_web_plugin_instance_init(GObject *obj) {
+    CoverWebPlugin *plugin = (CoverWebPlugin*) obj;
+    plugin->uiid = 0;
+    plugin->coverweb_window = NULL;
+    plugin->action_group = NULL;
+}
+
+static void cover_web_plugin_class_init(GObjectClass *klass) {
+    AnjutaPluginClass *plugin_class = ANJUTA_PLUGIN_CLASS (klass);
+
+    parent_class = g_type_class_peek_parent(klass);
+
+    plugin_class->activate = activate_plugin;
+    plugin_class->deactivate = deactivate_plugin;
+}
+
+static void ipreferences_merge(IAnjutaPreferences* ipref, AnjutaPreferences* 
prefs, GError** e) {
+    gchar *file;
+    GdkPixbuf *pixbuf;
+    GdkPixbuf *scaled;
+
+    CoverWebPlugin* plugin = COVER_WEB_PLUGIN(ipref);
+    plugin->prefs = init_coverweb_preferences();
+    if (plugin->prefs == NULL)
+        return;
+
+    file = g_build_filename(GTKPOD_IMAGE_DIR, "internet-icon.png", NULL);
+    pixbuf = gdk_pixbuf_new_from_file(file, NULL);
+    scaled = gdk_pixbuf_scale_simple(pixbuf, 48, 48, GDK_INTERP_BILINEAR);
+    anjuta_preferences_dialog_add_page(ANJUTA_PREFERENCES_DIALOG 
(anjuta_preferences_get_dialog (prefs)), "gtkpod-coverweb-settings", 
_(TAB_NAME), scaled, plugin->prefs);
+    g_free(file);
+    g_object_unref(pixbuf);
+    g_object_unref(scaled);
+}
+
+static void ipreferences_unmerge(IAnjutaPreferences* ipref, AnjutaPreferences* 
prefs, GError** e) {
+    anjuta_preferences_remove_page(prefs, _(TAB_NAME));
+    CoverWebPlugin* plugin = COVER_WEB_PLUGIN(ipref);
+    gtk_widget_destroy(plugin->prefs);
+}
+
+static void
+ipreferences_iface_init(IAnjutaPreferencesIface* iface)
+{
+    iface->merge = ipreferences_merge;
+    iface->unmerge = ipreferences_unmerge;
+}
+
+ANJUTA_PLUGIN_BEGIN (CoverWebPlugin, cover_web_plugin);
+ANJUTA_PLUGIN_ADD_INTERFACE(ipreferences, IANJUTA_TYPE_PREFERENCES);
+ANJUTA_PLUGIN_END;
+
+ANJUTA_SIMPLE_PLUGIN (CoverWebPlugin, cover_web_plugin);
diff --git a/plugins/coverweb/plugin.h b/plugins/coverweb/plugin.h
new file mode 100644
index 0000000..936eef7
--- /dev/null
+++ b/plugins/coverweb/plugin.h
@@ -0,0 +1,65 @@
+/*
+|  Copyright (C) 2002-2010 Jorg Schuler <jcsjcs at users sourceforge net>
+|                                          Paul Richardson <phantom_sf at 
users.sourceforge.net>
+|  Part of the gtkpod project.
+|
+|  URL: http://www.gtkpod.org/
+|  URL: http://gtkpod.sourceforge.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 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
+|
+|  iTunes and iPod are trademarks of Apple
+|
+|  This product is not supported/written/published by Apple!
+|
+|  $Id$
+*/
+
+#ifndef PLUGIN_H_
+#define PLUGIN_H_
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <libanjuta/anjuta-plugin.h>
+
+#define UI_FILE GTKPOD_UI_DIR"/coverweb.ui"
+#define GLADE_FILE GTKPOD_GLADE_DIR"/coverweb.glade"
+
+extern GType cover_web_plugin_get_type (GTypeModule *module);
+#define COVER_WEB_TYPE_PLUGIN         (cover_web_plugin_get_type (NULL))
+#define COVER_WEB_PLUGIN(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), 
COVER_WEB_TYPE_PLUGIN, CoverWebPlugin))
+#define COVER_WEB_PLUGIN_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST ((k), 
COVER_WEB_TYPE_PLUGIN, CoverWebPluginClass))
+#define COVER_WEB_IS_PLUGIN(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), 
COVER_WEB_TYPE_PLUGIN))
+#define COVER_WEB_IS_PLUGIN_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), 
COVER_WEB_TYPE_PLUGIN))
+#define COVER_WEB_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), 
COVER_WEB_TYPE_PLUGIN, CoverWebPluginClass))
+
+typedef struct _CoverWebPlugin CoverWebPlugin;
+typedef struct _CoverWebPluginClass CoverWebPluginClass;
+
+struct _CoverWebPlugin {
+    AnjutaPlugin parent;
+    GtkWidget *coverweb_window;
+    gint uiid;
+    GtkActionGroup *action_group;
+    GtkWidget *prefs;
+};
+
+struct _CoverWebPluginClass {
+    AnjutaPluginClass parent_class;
+};
+
+#endif /* PLUGIN_H_ */

------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
gtkpod-cvs2 mailing list
gtkpod-cvs2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to