[epiphany/peas: 6/6] ephy-window: update for new extension manager
- From: Diego Escalante Urrelo <diegoe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany/peas: 6/6] ephy-window: update for new extension manager
- Date: Thu, 7 Apr 2011 23:02:37 +0000 (UTC)
commit 6f96eba4d5581103427c0ca94aad149a890f360d
Author: Diego Escalante Urrelo <descalante igalia com>
Date: Sat Apr 2 14:26:27 2011 -0500
ephy-window: update for new extension manager
data/ui/epiphany-ui.xml | 4 ++-
src/ephy-window.c | 78 +++++++++++++++++++++++++++++++++++++---------
src/window-commands.c | 29 +++++++++++++++++
src/window-commands.h | 3 ++
4 files changed, 97 insertions(+), 17 deletions(-)
---
diff --git a/data/ui/epiphany-ui.xml b/data/ui/epiphany-ui.xml
index 5d1ffbf..f7589c5 100644
--- a/data/ui/epiphany-ui.xml
+++ b/data/ui/epiphany-ui.xml
@@ -84,7 +84,9 @@
<separator name="BookmarksSep1"/>
</menu>
- <menu name="ToolsMenu" action="Tools"/>
+ <menu name="ToolsMenu" action="Tools">
+ <menuitem name="ToolsExtensionsManager" action="ToolsExtensionsManager"/>
+ </menu>
<menu name="TabsMenu" action="Tabs">
<menuitem name="TabsPreviousMenu" action="TabsPrevious"/>
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 55614e8..6a59e18 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -44,9 +44,12 @@
#include "ephy-toolbar.h"
#include "popup-commands.h"
#include "ephy-encoding-menu.h"
+#include "ephy-extension.h"
+#include "ephy-extensions-manager.h"
+#include "ephy-session.h"
+#include "ephy-lockdown.h"
#include "ephy-tabs-menu.h"
#include "ephy-stock-icons.h"
-#include "ephy-extension.h"
#include "ephy-bookmarks-ui.h"
#include "ephy-link.h"
#include "ephy-gui.h"
@@ -239,6 +242,11 @@ static const GtkActionEntry ephy_menu_entries [] = {
N_("Open the history window"),
G_CALLBACK (window_cmd_go_history) },
+ /* Tools menu */
+ { "ToolsExtensionsManager", NULL, N_("_Extensions"), "<control>Y",
+ N_("Open the extensions manager"),
+ G_CALLBACK (window_cmd_extensions_manager) },
+
/* Tabs menu */
{ "TabsPrevious", NULL, N_("_Previous Tab"), "<control>Page_Up",
@@ -448,6 +456,7 @@ struct _EphyWindowPrivate
guint idle_worker;
GtkWidget *entry;
GtkWidget *downloads_box;
+ PeasExtensionSet *extensions;
guint clear_progress_timeout_id;
@@ -2940,7 +2949,6 @@ notebook_page_added_cb (EphyNotebook *notebook,
EphyWindow *window)
{
EphyWindowPrivate *priv = window->priv;
- EphyExtension *manager;
LOG ("page-added notebook %p embed %p position %u\n", notebook, embed, position);
@@ -2963,8 +2971,7 @@ notebook_page_added_cb (EphyNotebook *notebook,
G_CALLBACK (embed_modal_alert_cb), window, G_CONNECT_AFTER);
/* Let the extensions attach themselves to the tab */
- manager = EPHY_EXTENSION (ephy_shell_get_extensions_manager (ephy_shell));
- ephy_extension_attach_tab (manager, window, embed);
+ peas_extension_set_call (priv->extensions, "attach_tab", window, embed);
if (priv->present_on_insert)
{
@@ -2980,7 +2987,6 @@ notebook_page_removed_cb (EphyNotebook *notebook,
EphyWindow *window)
{
EphyWindowPrivate *priv = window->priv;
- EphyExtension *manager;
LOG ("page-removed notebook %p embed %p position %u\n", notebook, embed, position);
@@ -2988,9 +2994,8 @@ notebook_page_removed_cb (EphyNotebook *notebook,
g_return_if_fail (EPHY_IS_EMBED (embed));
- /* Let the extensions remove themselves from the tab */
- manager = EPHY_EXTENSION (ephy_shell_get_extensions_manager (ephy_shell));
- ephy_extension_detach_tab (manager, window, embed);
+ peas_extension_set_call (priv->extensions, "detach_tab", window, embed);
+ peas_engine_garbage_collect (PEAS_ENGINE (ephy_shell_get_extensions_manager (ephy_shell)));
#if 0
g_signal_handlers_disconnect_by_func (G_OBJECT (embed),
@@ -3214,16 +3219,18 @@ ephy_window_dispose (GObject *object)
LOG ("EphyWindow dispose %p", window);
+ peas_engine_garbage_collect (PEAS_ENGINE (ephy_shell_get_extensions_manager (ephy_shell)));
+
/* Only do these once */
if (window->priv->closing == FALSE)
{
- EphyExtension *manager;
-
window->priv->closing = TRUE;
- /* Let the extensions detach themselves from the window */
- manager = EPHY_EXTENSION (ephy_shell_get_extensions_manager (ephy_shell));
- ephy_extension_detach_window (manager, window);
+ peas_extension_set_call (priv->extensions, "detach_window", window);
+ g_object_unref (priv->extensions);
+ peas_engine_garbage_collect (PEAS_ENGINE (ephy_shell_get_extensions_manager (ephy_shell)));
+
+ ephy_session_detach_window (EPHY_SESSION (ephy_shell_get_session (ephy_shell)), window);
ephy_bookmarks_ui_detach_window (window);
g_signal_handlers_disconnect_by_func
@@ -3260,6 +3267,7 @@ ephy_window_dispose (GObject *object)
_ephy_window_set_context_event (window, NULL);
}
+ peas_engine_garbage_collect (PEAS_ENGINE (ephy_shell_get_extensions_manager (ephy_shell)));
destroy_fullscreen_popup (window);
@@ -3533,6 +3541,34 @@ cancel_handler (gpointer idptr)
g_source_remove (id);
}
+static void
+extension_added_cb (PeasExtensionSet *extensions,
+ PeasPluginInfo *info,
+ PeasExtension *exten,
+ EphyWindow *window)
+{
+ peas_extension_call (exten, "activate");
+ peas_extension_call (exten, "attach_window", window);
+ peas_extension_call (exten, "attach_tab", window->priv->active_embed);
+}
+
+static void
+extension_removed_cb (PeasExtensionSet *extensions,
+ PeasPluginInfo *info,
+ PeasExtension *exten,
+ EphyWindow *window)
+{
+ peas_extension_call (exten, "detach_window", window);
+ peas_extension_call (exten, "deactivate");
+
+ /* Ensure update of ui manager, because we suspect it does something
+ * with expected static strings in the type module (when unloaded the
+ * strings don't exist anymore, and ui manager updates in an idle
+ * func) */
+ gtk_ui_manager_ensure_update (window->priv->manager);
+}
+
+
static void
ephy_window_init (EphyWindow *window)
@@ -3556,7 +3592,6 @@ ephy_window_constructor (GType type,
GObject *object;
EphyWindow *window;
EphyWindowPrivate *priv;
- EphyExtension *manager;
EphyEmbedSingle *single;
EggToolbarsModel *model;
GtkSettings *settings;
@@ -3672,8 +3707,19 @@ ephy_window_constructor (GType type,
FALSE, FALSE, 0);
/* Once the window is sufficiently created let the extensions attach to it */
- manager = EPHY_EXTENSION (ephy_shell_get_extensions_manager (ephy_shell));
- ephy_extension_attach_window (manager, window);
+ priv->extensions = peas_extension_set_new (PEAS_ENGINE (ephy_shell_get_extensions_manager (ephy_shell)),
+ EPHY_TYPE_EXTENSION,
+ NULL);
+ peas_extension_set_call (priv->extensions, "attach_window", window);
+
+ g_signal_connect (priv->extensions, "extension-added",
+ G_CALLBACK (extension_added_cb), window);
+ g_signal_connect (priv->extensions, "extension-removed",
+ G_CALLBACK (extension_removed_cb), window);
+
+
+ ephy_session_attach_window (EPHY_SESSION (ephy_shell_get_session (ephy_shell)), window);
+ ephy_lockdown_attach_window (EPHY_LOCKDOWN (ephy_shell_get_lockdown (ephy_shell)), window);
ephy_bookmarks_ui_attach_window (window);
/* We only set the model now after attaching the extensions, so that
diff --git a/src/window-commands.c b/src/window-commands.c
index 6b70b09..c2ec48c 100644
--- a/src/window-commands.c
+++ b/src/window-commands.c
@@ -56,6 +56,7 @@
#include <gio/gio.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
+#include <libpeas-gtk/peas-gtk.h>
#include <webkit/webkit.h>
static void
@@ -1235,3 +1236,31 @@ window_cmd_browse_with_caret (GtkAction *action,
g_settings_set_boolean (EPHY_SETTINGS_MAIN,
EPHY_PREFS_ENABLE_CARET_BROWSING, active);
}
+
+static void
+extensions_manager_delete_cb (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer data)
+{
+ gtk_widget_destroy (widget);
+}
+
+void
+window_cmd_extensions_manager (GtkAction *action,
+ EphyWindow *window)
+{
+ GtkWidget *manager;
+ GtkWidget *dialog;
+
+ manager = peas_gtk_plugin_manager_new (NULL);
+ dialog = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ gtk_window_set_default_size (GTK_WINDOW (dialog), 500, 400);
+
+ gtk_container_add (GTK_CONTAINER (dialog), manager);
+
+ g_signal_connect (dialog, "delete-event",
+ G_CALLBACK (extensions_manager_delete_cb), NULL);
+
+ gtk_widget_show_all (dialog);
+}
diff --git a/src/window-commands.h b/src/window-commands.h
index 5b37585..07a4779 100644
--- a/src/window-commands.h
+++ b/src/window-commands.h
@@ -159,3 +159,6 @@ void window_cmd_load_location (GtkAction *action,
void window_cmd_browse_with_caret (GtkAction *action,
EphyWindow *window);
+void window_cmd_extensions_manager (GtkAction *action,
+ EphyWindow *window);
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]