aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--embed/ephy-download.c57
-rw-r--r--embed/ephy-download.h12
-rw-r--r--embed/ephy-embed.c12
-rw-r--r--src/ephy-shell.c4
-rw-r--r--src/popup-commands.c8
-rw-r--r--tests/ephy-download-test.c2
6 files changed, 37 insertions, 58 deletions
diff --git a/embed/ephy-download.c b/embed/ephy-download.c
index 2713b75ff..988a0abdb 100644
--- a/embed/ephy-download.c
+++ b/embed/ephy-download.c
@@ -52,7 +52,7 @@ struct _EphyDownloadPrivate
EphyDownloadActionType action;
guint32 start_time;
- GtkWidget *window;
+ GtkWindow *window;
GtkWidget *widget;
};
@@ -125,7 +125,7 @@ ephy_download_set_property (GObject *object,
ephy_download_set_action (download, g_value_get_enum (value));
break;
case PROP_WINDOW:
- ephy_download_set_window (download, g_value_get_object (value));
+ download->priv->window = g_value_dup_object (value);
break;
case PROP_WIDGET:
ephy_download_set_widget (download, g_value_get_object (value));
@@ -427,31 +427,6 @@ ephy_download_set_action (EphyDownload *download,
}
/**
- * ephy_download_set_window:
- * @download: an #EphyDownload
- * @window: #GtkWidget that produced @download
- *
- * Sets @window to be @download's parent, this means that @download will be
- * shown on @window's #EphyWindow (where it is contained).
- **/
-void
-ephy_download_set_window (EphyDownload *download,
- GtkWidget *window)
-{
- g_return_if_fail (EPHY_IS_DOWNLOAD (download));
-
- if (download->priv->window != NULL)
- g_object_unref (download->priv->window);
-
- download->priv->window = NULL;
-
- if (window != NULL)
- download->priv->window = g_object_ref (window);
-
- g_object_notify (G_OBJECT (download), "window");
-}
-
-/**
* ephy_download_set_widget:
* @download: an #EphyDownload
* @widget: a #GtkWidget
@@ -511,12 +486,12 @@ ephy_download_get_webkit_download (EphyDownload *download)
* ephy_download_get_window:
* @download: an #EphyDownload
*
- * Gets the window set as the parent of @download, this can be NULL if no
+ * Gets the window set as the parent of @download, this can be %NULL if no
* specific window generated this download.
*
- * Returns: (transfer none): a #GtkWidget
+ * Returns: (transfer none): a #GtkWindow
**/
-GtkWidget *
+GtkWindow *
ephy_download_get_window (EphyDownload *download)
{
g_return_val_if_fail (EPHY_IS_DOWNLOAD (download), NULL);
@@ -828,7 +803,7 @@ ephy_download_class_init (EphyDownloadClass *klass)
G_PARAM_STATIC_BLURB));
/**
- * EphyDownload::window:
+ * EphyDownload:window:
*
* Window that produced the download, the download will be shown in its
* parent window.
@@ -837,8 +812,9 @@ ephy_download_class_init (EphyDownloadClass *klass)
g_param_spec_object ("window",
"A GtkWindow",
"Window that produced this download.",
- GTK_TYPE_WIDGET,
+ GTK_TYPE_WINDOW,
G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_NAME |
G_PARAM_STATIC_NICK |
G_PARAM_STATIC_BLURB));
@@ -1026,6 +1002,7 @@ download_error_cb (WebKitDownload *download,
/**
* ephy_download_new:
+ * @parent: the #GtkWindow parent of the download, or %NULL
*
* Creates a new #EphyDownload. You can use ephy_download_new_for_download and
* ephy_download_new_for_uri as convenience functions to create #EphyDownload
@@ -1034,21 +1011,23 @@ download_error_cb (WebKitDownload *download,
* Returns: an #EphyDownload.
**/
EphyDownload *
-ephy_download_new (void)
+ephy_download_new (GtkWindow *parent)
{
- return g_object_new (EPHY_TYPE_DOWNLOAD, NULL);
+ return g_object_new (EPHY_TYPE_DOWNLOAD, "window", parent, NULL);
}
/**
* ephy_download_new_for_download:
* @download: a #WebKitDownload to wrap
+ * @parent: the #GtkWindow parent of the download, or %NULL
*
* Wraps @download in an #EphyDownload.
*
* Returns: an #EphyDownload.
**/
EphyDownload *
-ephy_download_new_for_download (WebKitDownload *download)
+ephy_download_new_for_download (WebKitDownload *download,
+ GtkWindow *parent)
{
EphyDownload *ephy_download;
#ifdef HAVE_WEBKIT2
@@ -1057,7 +1036,7 @@ ephy_download_new_for_download (WebKitDownload *download)
g_return_val_if_fail (WEBKIT_IS_DOWNLOAD (download), NULL);
- ephy_download = ephy_download_new ();
+ ephy_download = ephy_download_new (parent);
#ifdef HAVE_WEBKIT2
g_signal_connect (download, "decide-destination",
@@ -1100,13 +1079,15 @@ ephy_download_new_for_download (WebKitDownload *download)
/**
* ephy_download_new_for_uri:
* @uri: a source URI from where to download
+ * @parent: the #GtkWindow parent of the download, or %NULL
*
* Creates an #EphyDownload to download @uri.
*
* Returns: an #EphyDownload.
**/
EphyDownload *
-ephy_download_new_for_uri (const char *uri)
+ephy_download_new_for_uri (const char *uri,
+ GtkWindow *parent)
{
EphyDownload *ephy_download;
WebKitDownload *download;
@@ -1126,7 +1107,7 @@ ephy_download_new_for_uri (const char *uri)
g_object_unref (request);
#endif
- ephy_download = ephy_download_new_for_download (download);
+ ephy_download = ephy_download_new_for_download (download, parent);
g_object_unref (download);
return ephy_download;
diff --git a/embed/ephy-download.h b/embed/ephy-download.h
index e4efeb3e1..902ae5730 100644
--- a/embed/ephy-download.h
+++ b/embed/ephy-download.h
@@ -78,9 +78,11 @@ typedef enum
GType ephy_download_get_type (void) G_GNUC_CONST;
-EphyDownload *ephy_download_new (void);
-EphyDownload *ephy_download_new_for_uri (const char *uri);
-EphyDownload *ephy_download_new_for_download (WebKitDownload *download);
+EphyDownload *ephy_download_new (GtkWindow *parent);
+EphyDownload *ephy_download_new_for_uri (const char *uri,
+ GtkWindow *parent);
+EphyDownload *ephy_download_new_for_download (WebKitDownload *download,
+ GtkWindow *parent);
void ephy_download_start (EphyDownload *download);
@@ -99,9 +101,7 @@ char *ephy_download_get_content_type (EphyDownload *download);
guint32 ephy_download_get_start_time (EphyDownload *download);
-GtkWidget *ephy_download_get_window (EphyDownload *download);
-void ephy_download_set_window (EphyDownload *download,
- GtkWidget *window);
+GtkWindow *ephy_download_get_window (EphyDownload *download);
EphyDownloadActionType ephy_download_get_action (EphyDownload *download);
void ephy_download_set_action (EphyDownload *download,
diff --git a/embed/ephy-embed.c b/embed/ephy-embed.c
index c66dad3c5..dca864299 100644
--- a/embed/ephy-embed.c
+++ b/embed/ephy-embed.c
@@ -635,7 +635,7 @@ ephy_embed_auto_download_url (EphyEmbed *embed, const char *url)
{
EphyDownload *download;
- download = ephy_download_new_for_uri (url);
+ download = ephy_download_new_for_uri (url, NULL);
ephy_download_set_auto_destination (download);
ephy_download_set_action (download, EPHY_DOWNLOAD_ACTION_OPEN);
}
@@ -647,17 +647,19 @@ download_requested_cb (WebKitWebView *web_view,
EphyEmbed *embed)
{
EphyDownload *ed;
- GtkWidget *window;
+ GtkWidget *toplevel;
+ GtkWindow *window = NULL;
/* Is download locked down? */
if (g_settings_get_boolean (EPHY_SETTINGS_LOCKDOWN,
EPHY_PREFS_LOCKDOWN_SAVE_TO_DISK))
return FALSE;
- window = gtk_widget_get_toplevel (GTK_WIDGET (embed));
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (embed));
+ if (GTK_IS_WINDOW (toplevel))
+ window = GTK_WINDOW (toplevel);
- ed = ephy_download_new_for_download (download);
- ephy_download_set_window (ed, window);
+ ed = ephy_download_new_for_download (download, window);
ephy_download_set_auto_destination (ed);
return TRUE;
diff --git a/src/ephy-shell.c b/src/ephy-shell.c
index a44c923dd..6afb29886 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -606,9 +606,7 @@ download_started_cb (WebKitWebContext *web_context,
}
window = gtk_application_get_active_window (GTK_APPLICATION (shell));
-
- ed = ephy_download_new_for_download (download);
- ephy_download_set_window (ed, GTK_WIDGET (window));
+ ed = ephy_download_new_for_download (download, GTK_WINDOW (window));
}
#endif
diff --git a/src/popup-commands.c b/src/popup-commands.c
index e010c2671..c9177886c 100644
--- a/src/popup-commands.c
+++ b/src/popup-commands.c
@@ -245,8 +245,7 @@ save_property_url (GtkAction *action,
ephy_embed_event_get_property (event, property, &value);
location = g_value_get_string (&value);
- download = ephy_download_new_for_uri (location);
- ephy_download_set_window (download, GTK_WIDGET (window));
+ download = ephy_download_new_for_uri (location, GTK_WINDOW (window));
if (ask_dest)
{
@@ -348,8 +347,7 @@ popup_cmd_set_image_as_background (GtkAction *action,
ephy_embed_event_get_property (event, "image-uri", &value);
location = g_value_get_string (&value);
- download = ephy_download_new_for_uri (location);
- ephy_download_set_window (download, GTK_WIDGET (window));
+ download = ephy_download_new_for_uri (location, GTK_WINDOW (window));
base = g_path_get_basename (location);
base_converted = g_filename_from_utf8 (base, -1, NULL, NULL, NULL);
@@ -459,7 +457,7 @@ save_temp_source (const char *address)
if (dest == NULL) return;
dest_uri = g_filename_to_uri (dest, NULL, NULL);
- download = ephy_download_new_for_uri (address);
+ download = ephy_download_new_for_uri (address, NULL);
ephy_download_set_destination_uri (download, dest_uri);
g_signal_connect (download, "completed",
diff --git a/tests/ephy-download-test.c b/tests/ephy-download-test.c
index 475aa0327..d2b986319 100644
--- a/tests/ephy-download-test.c
+++ b/tests/ephy-download-test.c
@@ -88,7 +88,7 @@ fixture_setup (Fixture *fixture, gconstpointer data)
dest_file = g_build_filename (ephy_file_tmp_dir (), tmp_filename, NULL);
fixture->source = get_uri_for_path ("/default");
- fixture->download = ephy_download_new_for_uri (fixture->source);
+ fixture->download = ephy_download_new_for_uri (fixture->source, NULL);
fixture->destination = g_filename_to_uri (dest_file, NULL, NULL);
fixture->loop = g_main_loop_new (NULL, TRUE);