aboutsummaryrefslogtreecommitdiffstats
path: root/embed/ephy-embed-shell.c
diff options
context:
space:
mode:
Diffstat (limited to 'embed/ephy-embed-shell.c')
-rw-r--r--embed/ephy-embed-shell.c144
1 files changed, 93 insertions, 51 deletions
diff --git a/embed/ephy-embed-shell.c b/embed/ephy-embed-shell.c
index 3fcf7ee82..a0d77cdc6 100644
--- a/embed/ephy-embed-shell.c
+++ b/embed/ephy-embed-shell.c
@@ -25,9 +25,9 @@
#include <glib/gstdio.h>
#include <gtk/gtk.h>
-#include "downloader-view.h"
#include "ephy-adblock-manager.h"
#include "ephy-debug.h"
+#include "ephy-download.h"
#include "ephy-embed-shell.h"
#include "ephy-embed-single.h"
#include "ephy-encodings.h"
@@ -50,7 +50,7 @@
struct _EphyEmbedShellPrivate
{
EphyHistory *global_history;
- DownloaderView *downloader_view;
+ GList *downloads;
EphyFaviconCache *favicon_cache;
EphyEmbedSingle *embed_single;
EphyEncodings *encodings;
@@ -63,6 +63,8 @@ struct _EphyEmbedShellPrivate
enum
{
+ DOWNLOAD_ADDED,
+ DOWNLOAD_REMOVED,
PREPARE_CLOSE,
QUIT,
LAST_SIGNAL
@@ -83,17 +85,6 @@ ephy_embed_shell_dispose (GObject *object)
EphyEmbedShell *shell = EPHY_EMBED_SHELL (object);
EphyEmbedShellPrivate *priv = shell->priv;
- if (priv->downloader_view != NULL)
- {
- DownloaderView **downloader_view = &priv->downloader_view;
- LOG ("Unref downloader");
- g_object_remove_weak_pointer
- (G_OBJECT (priv->downloader_view),
- (gpointer *) downloader_view);
- g_object_unref (priv->downloader_view);
- priv->downloader_view = NULL;
- }
-
if (priv->favicon_cache != NULL)
{
LOG ("Unref favicon cache");
@@ -128,6 +119,14 @@ ephy_embed_shell_finalize (GObject *object)
{
EphyEmbedShell *shell = EPHY_EMBED_SHELL (object);
+ if (shell->priv->downloads != NULL)
+ {
+ LOG ("Destroying downloads list");
+ g_list_foreach (shell->priv->downloads, (GFunc) g_object_unref, NULL);
+ g_list_free (shell->priv->downloads);
+ shell->priv->downloads = NULL;
+ }
+
if (shell->priv->global_history)
{
LOG ("Unref history");
@@ -190,44 +189,6 @@ ephy_embed_shell_get_global_history (EphyEmbedShell *shell)
return G_OBJECT (shell->priv->global_history);
}
-/**
- * ephy_embed_shell_get_downloader_view:
- * @shell: the #EphyEmbedShell
- *
- * Return value: (transfer none):
- **/
-GObject *
-ephy_embed_shell_get_downloader_view (EphyEmbedShell *shell)
-{
- g_return_val_if_fail (EPHY_IS_EMBED_SHELL (shell), NULL);
-
- if (shell->priv->downloader_view == NULL)
- {
- DownloaderView **downloader_view;
- shell->priv->downloader_view = downloader_view_new ();
- downloader_view = &shell->priv->downloader_view;
- g_object_add_weak_pointer
- (G_OBJECT(shell->priv->downloader_view),
- (gpointer *) downloader_view);
- }
-
- return G_OBJECT (shell->priv->downloader_view);
-}
-
-/**
- * ephy_embed_shell_get_downloader_view_nocreate:
- * @shell: the #EphyEmbedShell
- *
- * Return value: (transfer none):
- **/
-GObject *
-ephy_embed_shell_get_downloader_view_nocreate (EphyEmbedShell *shell)
-{
- g_return_val_if_fail (EPHY_IS_EMBED_SHELL (shell), NULL);
-
- return (GObject *) shell->priv->downloader_view;
-}
-
static GObject *
impl_get_embed_single (EphyEmbedShell *shell)
{
@@ -319,6 +280,8 @@ ephy_embed_shell_init (EphyEmbedShell *shell)
/* globally accessible singleton */
g_assert (embed_shell == NULL);
embed_shell = shell;
+
+ shell->priv->downloads = NULL;
}
static void
@@ -332,6 +295,40 @@ ephy_embed_shell_class_init (EphyEmbedShellClass *klass)
klass->get_embed_single = impl_get_embed_single;
/**
+ * EphyEmbed::download-added:
+ * @shell: the #EphyEmbedShell
+ * @download: the #EphyDownload added
+ *
+ * Emitted when a #EphyDownload has been added to the global watch list of
+ * @shell, via ephy_embed_shell_add_download.
+ **/
+ signals[DOWNLOAD_ADDED] =
+ g_signal_new ("download-added",
+ EPHY_TYPE_EMBED_SHELL,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EphyEmbedShellClass, download_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1, EPHY_TYPE_DOWNLOAD);
+
+/**
+ * EphyEmbed::download-removed:
+ * @shell: the #EphyEmbedShell
+ * @download: the #EphyDownload being removed
+ *
+ * Emitted when a #EphyDownload has been removed from the global watch list of
+ * @shell, via ephy_embed_shell_remove_download.
+ **/
+ signals[DOWNLOAD_REMOVED] =
+ g_signal_new ("download-removed",
+ EPHY_TYPE_EMBED_SHELL,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EphyEmbedShellClass, download_removed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1, EPHY_TYPE_DOWNLOAD);
+
+/**
* EphyEmbed::prepare-close:
* @shell: the #EphyEmbedShell
*
@@ -563,6 +560,51 @@ ephy_embed_shell_get_print_settings (EphyEmbedShell *shell)
return priv->print_settings;
}
+/**
+ * ephy_embed_shell_get_downloads:
+ * @shell: the #EphyEmbedShell
+ *
+ * Gets the global #GList object listing active downloads.
+ *
+ * Returns: (transfer none): a #GList object
+ **/
+GList *
+ephy_embed_shell_get_downloads (EphyEmbedShell *shell)
+{
+ EphyEmbedShellPrivate *priv;
+
+ g_return_val_if_fail (EPHY_IS_EMBED_SHELL (shell), NULL);
+ priv = shell->priv;
+
+ return priv->downloads;
+}
+
+void
+ephy_embed_shell_add_download (EphyEmbedShell *shell, EphyDownload *download)
+{
+ EphyEmbedShellPrivate *priv;
+
+ g_return_if_fail (EPHY_IS_EMBED_SHELL (shell));
+
+ priv = shell->priv;
+ priv->downloads = g_list_prepend (priv->downloads, download);
+
+ g_signal_emit_by_name (shell, "download-added", download, NULL);
+}
+
+void
+ephy_embed_shell_remove_download (EphyEmbedShell *shell, EphyDownload *download)
+{
+ EphyEmbedShellPrivate *priv;
+
+ g_return_if_fail (EPHY_IS_EMBED_SHELL (shell));
+
+ priv = shell->priv;
+ priv->downloads = g_list_remove (priv->downloads, download);
+
+ g_signal_emit_by_name (shell, "download-removed", download, NULL);
+}
+
static void
object_notify_cb (EphyEmbedShell *shell, GObject *object)