summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Catanzaro <mcatanzaro@gnome.org>2016-11-21 17:55:16 -0600
committerMichael Catanzaro <mcatanzaro@gnome.org>2016-11-21 18:05:41 -0600
commit6ff26acccd0b90ec364681dc7d87b76818b6349f (patch)
treeb4a25fa505f92d866781b8abd86bed43c4e9d51e
parent28e9892775428a80c8819f5522387beaca1b6d22 (diff)
downloadepiphany-6ff26acccd0b90ec364681dc7d87b76818b6349f.tar.gz
Really handle focus stealing prevention properly"
This reverts commit 0283906a4ba772d447bde4a9c5b738a6e027edaa and also fixes the bug, all in one! The original commit was not correct: it conflated UNIX time (g_get_real_time) with X11 time (gtk_get_current_event_time). The easiest way to fix it would be to simply call the later instead of the former, but I also want to revert to using the more explicit API where the caller must pass the user time manually, so do that too.
-rw-r--r--embed/ephy-download.c54
-rw-r--r--embed/ephy-download.h5
-rw-r--r--lib/widgets/ephy-download-widget.c3
-rw-r--r--lib/widgets/ephy-downloads-popover.c4
4 files changed, 32 insertions, 34 deletions
diff --git a/embed/ephy-download.c b/embed/ephy-download.c
index 0f0715c51..fae5ab9d5 100644
--- a/embed/ephy-download.c
+++ b/embed/ephy-download.c
@@ -409,10 +409,22 @@ ephy_download_failed (EphyDownload *download,
return FALSE;
}
-static gboolean
-ephy_download_do_download_action_internal (EphyDownload *download,
- EphyDownloadActionType action,
- guint32 user_time)
+/**
+ * ephy_download_do_download_action:
+ * @download: an #EphyDownload
+ * @action: one of #EphyDownloadActionType
+ * @user_time: GDK timestamp, for focus-stealing prevention
+ *
+ * Executes the given @action for @download, this can be any of
+ * #EphyDownloadActionType.
+ *
+ * Returns: %TRUE if the action was executed succesfully.
+ *
+ **/
+gboolean
+ephy_download_do_download_action (EphyDownload *download,
+ EphyDownloadActionType action,
+ guint32 user_time)
{
GFile *destination;
const char *destination_uri;
@@ -422,16 +434,16 @@ ephy_download_do_download_action_internal (EphyDownload *download,
destination = g_file_new_for_uri (destination_uri);
switch ((action ? action : download->action)) {
+ case EPHY_DOWNLOAD_ACTION_BROWSE_TO:
+ LOG ("ephy_download_do_download_action: browse_to");
+ ret = ephy_file_browse_to (destination, user_time);
+ break;
case EPHY_DOWNLOAD_ACTION_OPEN:
LOG ("ephy_download_do_download_action: open");
ret = ephy_embed_shell_launch_handler (ephy_embed_shell_get_default (),
destination, NULL, user_time);
- /* Fall through if we did not open anything. */
- if (ret)
- break;
- case EPHY_DOWNLOAD_ACTION_BROWSE_TO:
- LOG ("ephy_download_do_download_action: browse_to");
- ret = ephy_file_browse_to (destination, user_time);
+ if (!ret)
+ ret = ephy_file_browse_to (destination, user_time);
break;
case EPHY_DOWNLOAD_ACTION_NONE:
LOG ("ephy_download_do_download_action: none");
@@ -445,24 +457,6 @@ ephy_download_do_download_action_internal (EphyDownload *download,
return ret;
}
-/**
- * ephy_download_do_download_action:
- * @download: an #EphyDownload
- * @action: one of #EphyDownloadActionType
- *
- * Executes the given @action for @download, this can be any of
- * #EphyDownloadActionType.
- *
- * Returns: %TRUE if the action was executed succesfully.
- *
- **/
-gboolean
-ephy_download_do_download_action (EphyDownload *download,
- EphyDownloadActionType action)
-{
- return ephy_download_do_download_action_internal (download, action, g_get_real_time ());
-}
-
static void
ephy_download_dispose (GObject *object)
{
@@ -697,9 +691,9 @@ download_finished_cb (WebKitDownload *wk_download,
if (g_settings_get_boolean (EPHY_SETTINGS_MAIN, EPHY_PREFS_AUTO_DOWNLOADS) &&
download->action == EPHY_DOWNLOAD_ACTION_NONE)
- ephy_download_do_download_action_internal (download, EPHY_DOWNLOAD_ACTION_OPEN, download->start_time);
+ ephy_download_do_download_action (download, EPHY_DOWNLOAD_ACTION_OPEN, download->start_time);
else
- ephy_download_do_download_action_internal (download, download->action, download->start_time);
+ ephy_download_do_download_action (download, download->action, download->start_time);
}
static void
diff --git a/embed/ephy-download.h b/embed/ephy-download.h
index 1792eaad9..e71ff01d4 100644
--- a/embed/ephy-download.h
+++ b/embed/ephy-download.h
@@ -58,7 +58,8 @@ guint32 ephy_download_get_start_time (EphyDownload *download);
EphyDownloadActionType ephy_download_get_action (EphyDownload *download);
void ephy_download_set_action (EphyDownload *download,
EphyDownloadActionType action);
-gboolean ephy_download_do_download_action (EphyDownload *download,
- EphyDownloadActionType action);
+gboolean ephy_download_do_download_action (EphyDownload *download,
+ EphyDownloadActionType action,
+ guint32 user_time);
G_END_DECLS
diff --git a/lib/widgets/ephy-download-widget.c b/lib/widgets/ephy-download-widget.c
index 2e905c5b6..659675fd8 100644
--- a/lib/widgets/ephy-download-widget.c
+++ b/lib/widgets/ephy-download-widget.c
@@ -274,7 +274,8 @@ widget_action_button_clicked_cb (EphyDownloadWidget *widget)
ephy_downloads_manager_remove_download (manager, widget->download);
} else {
ephy_download_do_download_action (widget->download,
- EPHY_DOWNLOAD_ACTION_BROWSE_TO);
+ EPHY_DOWNLOAD_ACTION_BROWSE_TO,
+ gtk_get_current_event_time ());
}
}
diff --git a/lib/widgets/ephy-downloads-popover.c b/lib/widgets/ephy-downloads-popover.c
index 6d1dce9ac..060e98e25 100644
--- a/lib/widgets/ephy-downloads-popover.c
+++ b/lib/widgets/ephy-downloads-popover.c
@@ -50,7 +50,9 @@ download_box_row_activated_cb (EphyDownloadsPopover *popover,
if (!ephy_download_succeeded (download))
return;
- ephy_download_do_download_action (download, EPHY_DOWNLOAD_ACTION_OPEN);
+ ephy_download_do_download_action (download,
+ EPHY_DOWNLOAD_ACTION_OPEN,
+ gtk_get_current_event_time ());
}
static void