diff options
author | Carlos Garcia Campos <cgarcia@igalia.com> | 2013-01-04 17:54:26 +0800 |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@gnome.org> | 2013-01-04 17:54:26 +0800 |
commit | 8ed26c6a506feec75e37cf285450a23ac7c8a689 (patch) | |
tree | 3fce8657c7b88934ee5ab1d7addbba8738c5a59f | |
parent | 8245a9b3fd56b10684498e9d1be3c71de5543456 (diff) | |
download | gsoc2013-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.c | 57 | ||||
-rw-r--r-- | embed/ephy-download.h | 12 | ||||
-rw-r--r-- | embed/ephy-embed.c | 12 | ||||
-rw-r--r-- | src/ephy-shell.c | 4 | ||||
-rw-r--r-- | src/popup-commands.c | 8 | ||||
-rw-r--r-- | tests/ephy-download-test.c | 2 |
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); |