aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarlos Garcia Campos <cgarcia@igalia.com>2013-01-04 17:54:26 +0800
committerCarlos Garcia Campos <carlosgc@gnome.org>2013-01-04 17:54:26 +0800
commit8ed26c6a506feec75e37cf285450a23ac7c8a689 (patch)
tree3fce8657c7b88934ee5ab1d7addbba8738c5a59f
parent8245a9b3fd56b10684498e9d1be3c71de5543456 (diff)
downloadgsoc2013-epiphany-8ed26c6a506feec75e37cf285450a23ac7c8a689.tar
gsoc2013-epiphany-8ed26c6a506feec75e37cf285450a23ac7c8a689.tar.gz
gsoc2013-epiphany-8ed26c6a506feec75e37cf285450a23ac7c8a689.tar.bz2
gsoc2013-epiphany-8ed26c6a506feec75e37cf285450a23ac7c8a689.tar.lz
gsoc2013-epiphany-8ed26c6a506feec75e37cf285450a23ac7c8a689.tar.xz
gsoc2013-epiphany-8ed26c6a506feec75e37cf285450a23ac7c8a689.tar.zst
gsoc2013-epiphany-8ed26c6a506feec75e37cf285450a23ac7c8a689.zip
ephy-download: Make EphyDownload:window a construct only property
It's always set right after the download object is created and it doesn't have any effect when it's set after the download has been added to the embed shell. This way we can make sure that when the download is added to the embed shell the parent window has already been set if there's any.
-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);