aboutsummaryrefslogtreecommitdiffstats
path: root/embed/downloader-view.c
diff options
context:
space:
mode:
authorXan Lopez <xan@src.gnome.org>2003-05-02 17:32:28 +0800
committerXan Lopez <xan@src.gnome.org>2003-05-02 17:32:28 +0800
commitb31b537149199df4562bc482dd7fff28f94c7494 (patch)
tree1773083fcc2849b8f7e6ee368bf319571f1760a9 /embed/downloader-view.c
parent00a0ba94312aa3fc5cdb3f39a29c1bbbc4f02b99 (diff)
downloadgsoc2013-epiphany-b31b537149199df4562bc482dd7fff28f94c7494.tar
gsoc2013-epiphany-b31b537149199df4562bc482dd7fff28f94c7494.tar.gz
gsoc2013-epiphany-b31b537149199df4562bc482dd7fff28f94c7494.tar.bz2
gsoc2013-epiphany-b31b537149199df4562bc482dd7fff28f94c7494.tar.lz
gsoc2013-epiphany-b31b537149199df4562bc482dd7fff28f94c7494.tar.xz
gsoc2013-epiphany-b31b537149199df4562bc482dd7fff28f94c7494.tar.zst
gsoc2013-epiphany-b31b537149199df4562bc482dd7fff28f94c7494.zip
Workaround to not act on every download, ongoing or finished, when we
Workaround to not act on every download, ongoing or finished, when we click on Pause/Resume or Remove. Minor UI changes to the download dialog, including merging Pause and Resume in one button, and removing File: from the details view.
Diffstat (limited to 'embed/downloader-view.c')
-rw-r--r--embed/downloader-view.c153
1 files changed, 56 insertions, 97 deletions
diff --git a/embed/downloader-view.c b/embed/downloader-view.c
index 3c8abe873..500d86d76 100644
--- a/embed/downloader-view.c
+++ b/embed/downloader-view.c
@@ -17,7 +17,6 @@
*/
#include "downloader-view.h"
-#include "eel-gconf-extensions.h"
#include "ephy-gui.h"
#include "ephy-prefs.h"
#include "ephy-ellipsizing-label.h"
@@ -60,7 +59,6 @@ struct DownloaderViewPrivate
/* Widgets */
GtkWidget *window;
GtkWidget *treeview;
- GtkWidget *details_file;
GtkWidget *details_location;
GtkWidget *details_status;
GtkWidget *details_elapsed;
@@ -68,10 +66,10 @@ struct DownloaderViewPrivate
GtkWidget *details_progress;
GtkWidget *details_button;
GtkWidget *keep_open_check;
+
+ GtkWidget *open_button;
GtkWidget *pause_button;
- GtkWidget *resume_button;
GtkWidget *abort_button;
- GtkWidget *open_button;
};
typedef struct
@@ -92,7 +90,7 @@ typedef struct
typedef struct
{
- gboolean can_resume;
+ gboolean is_paused;
gboolean can_abort;
gboolean can_open;
DownloaderViewPrivate *priv;
@@ -110,10 +108,9 @@ enum
PROP_DETAILS_ELAPSED,
PROP_DETAILS_REMAINING,
PROP_DETAILS_PROGRESS,
+ PROP_OPEN_BUTTON,
PROP_PAUSE_BUTTON,
- PROP_RESUME_BUTTON,
PROP_ABORT_BUTTON,
- PROP_OPEN_BUTTON,
PROP_DETAILS_BUTTON
};
@@ -130,10 +127,9 @@ EphyDialogProperty properties [] =
{ PROP_DETAILS_ELAPSED, "details_elapsed", NULL, PT_NORMAL, NULL },
{ PROP_DETAILS_REMAINING, "details_remaining", NULL, PT_NORMAL, NULL },
{ PROP_DETAILS_PROGRESS, "details_progress", NULL, PT_NORMAL, NULL },
+ { PROP_OPEN_BUTTON, "open_button", NULL, PT_NORMAL, NULL },
{ PROP_PAUSE_BUTTON, "pause_button", NULL, PT_NORMAL, NULL },
- { PROP_RESUME_BUTTON, "resume_button", NULL, PT_NORMAL, NULL },
{ PROP_ABORT_BUTTON, "abort_button", NULL, PT_NORMAL, NULL },
- { PROP_OPEN_BUTTON, "open_button", NULL, PT_NORMAL, NULL },
{ PROP_DETAILS_BUTTON, "details_togglebutton", CONF_DOWNLOADING_SHOW_DETAILS, PT_NORMAL, NULL },
{ -1, NULL, NULL }
@@ -150,8 +146,6 @@ downloader_view_init (DownloaderView *dv);
/* Callbacks */
void
-download_dialog_resume_cb (GtkButton *button, DownloaderView *dv);
-void
download_dialog_pause_cb (GtkButton *button, DownloaderView *dv);
void
download_dialog_abort_cb (GtkButton *button, DownloaderView *dv);
@@ -238,28 +232,27 @@ downloader_view_class_init (DownloaderViewClass *klass)
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (DownloaderViewClass, download_remove),
NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
downloader_view_signals[DOWNLOAD_PAUSE] =
g_signal_new ("download_pause",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (DownloaderViewClass, download_pause),
NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
downloader_view_signals[DOWNLOAD_RESUME] =
g_signal_new ("download_resume",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (DownloaderViewClass, download_resume),
NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
-
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
}
static void
@@ -328,7 +321,7 @@ controls_info_foreach (GtkTreeModel *model,
details = g_hash_table_lookup (info->priv->details_hash,
persist_object);
- info->can_resume |= (details->status == DOWNLOAD_STATUS_PAUSED);
+ info->is_paused |= (details->status == DOWNLOAD_STATUS_PAUSED);
info->can_abort |= (details->status != DOWNLOAD_STATUS_COMPLETED);
info->can_open |= (details->status == DOWNLOAD_STATUS_COMPLETED);
}
@@ -345,7 +338,7 @@ downloader_view_update_controls (DownloaderViewPrivate *priv)
info->priv = priv;
/* initial conditions */
- info->can_resume = info->can_abort = info->can_open = FALSE;
+ info->is_paused = info->can_abort = info->can_open = FALSE;
if (selection)
{
@@ -356,11 +349,20 @@ downloader_view_update_controls (DownloaderViewPrivate *priv)
}
/* setup buttons */
- gtk_widget_set_sensitive (priv->pause_button, TRUE);
- gtk_widget_set_sensitive (priv->resume_button, info->can_resume);
- gtk_widget_set_sensitive (priv->abort_button, info->can_abort);
gtk_widget_set_sensitive (priv->open_button, info->can_open);
+ gtk_widget_set_sensitive (priv->pause_button, info->can_abort);
+ /* As long as we can abort, we can pause/resume */
+ gtk_widget_set_sensitive (priv->abort_button, info->can_abort);
+ if (info->is_paused)
+ {
+ gtk_button_set_label (GTK_BUTTON (priv->pause_button), _("Resume"));
+ }
+ else
+ {
+ gtk_button_set_label (GTK_BUTTON (priv->pause_button), _("Pause"));
+ }
+
g_free (info);
}
@@ -373,9 +375,6 @@ downloader_view_update_details (DownloaderViewPrivate *priv,
ephy_ellipsizing_label_set_text
(EPHY_ELLIPSIZING_LABEL (priv->details_location),
details->source);
- ephy_ellipsizing_label_set_text
- (EPHY_ELLIPSIZING_LABEL (priv->details_file),
- details->filename);
if (details->size_total >= 10000)
{
@@ -512,7 +511,7 @@ downloader_view_set_download_info (DownloaderViewPrivate *priv,
{
sprintf (buffer,
details->progress > 0 ?
- _("00.00") :
+ "00.00" :
_("Unknown"));
}
@@ -596,7 +595,7 @@ downloader_view_add_download (DownloaderView *dv,
downloader_view_set_download_info (dv->priv, details, &iter);
- ephy_dialog_show (EPHY_DIALOG(dv));
+ ephy_dialog_show (EPHY_DIALOG (dv));
}
void
@@ -721,25 +720,18 @@ downloader_view_build_ui (DownloaderView *dv)
priv->details_progress = ephy_dialog_get_control (d, PROP_DETAILS_PROGRESS);
priv->keep_open_check = ephy_dialog_get_control (d, PROP_KEEP_OPEN);
priv->details_button = ephy_dialog_get_control (d, PROP_DETAILS_BUTTON);
+ priv->open_button = ephy_dialog_get_control (d, PROP_OPEN_BUTTON);
priv->pause_button = ephy_dialog_get_control (d, PROP_PAUSE_BUTTON);
- priv->resume_button = ephy_dialog_get_control (d, PROP_RESUME_BUTTON);
priv->abort_button = ephy_dialog_get_control (d, PROP_ABORT_BUTTON);
- priv->open_button = ephy_dialog_get_control (d, PROP_OPEN_BUTTON);
details_table = ephy_dialog_get_control (d, PROP_DETAILS_TABLE);
/* create file and location details labels */
priv->details_location = ephy_ellipsizing_label_new ("");
- priv->details_file = ephy_ellipsizing_label_new ("");
gtk_table_attach_defaults (GTK_TABLE(details_table), priv->details_location,
1, 2, 0, 1);
- gtk_table_attach_defaults (GTK_TABLE(details_table), priv->details_file,
- 1, 2, 1, 2);
gtk_misc_set_alignment (GTK_MISC(priv->details_location), 0, 0);
- gtk_misc_set_alignment (GTK_MISC(priv->details_file), 0, 0);
gtk_label_set_selectable (GTK_LABEL(priv->details_location), TRUE);
- gtk_label_set_selectable (GTK_LABEL(priv->details_file), TRUE);
gtk_widget_show (priv->details_location);
- gtk_widget_show (priv->details_file);
liststore = gtk_list_store_new (5,
G_TYPE_STRING,
@@ -799,7 +791,7 @@ downloader_view_build_ui (DownloaderView *dv)
gtk_tree_view_column_set_sort_column_id (column, COL_REMAINING);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(priv->treeview));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
g_signal_connect (G_OBJECT (selection), "changed",
G_CALLBACK (downloader_treeview_selection_changed_cb), dv);
@@ -809,74 +801,42 @@ downloader_view_build_ui (DownloaderView *dv)
gtk_window_set_icon_from_file (GTK_WINDOW(priv->window), icon_path, NULL);
}
-static void
-resume_selection_foreach (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter,
- DownloaderView *dv)
+void
+download_dialog_pause_cb (GtkButton *button, DownloaderView *dv)
{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
DownloadDetails *details;
GValue val = {0, };
gpointer *persist_object;
- gtk_tree_model_get_value (model, iter, COL_PERSIST_OBJECT, &val);
- persist_object = g_value_get_pointer (&val);
-
- details = g_hash_table_lookup (dv->priv->details_hash,
- persist_object);
- g_return_if_fail (details);
-
- if (details->status == DOWNLOAD_STATUS_COMPLETED) return;
-
- downloader_view_set_download_status (dv, DOWNLOAD_STATUS_RESUMING, persist_object);
-
- g_signal_emit (G_OBJECT (dv), downloader_view_signals[DOWNLOAD_RESUME], 0);
-}
-
-void
-download_dialog_resume_cb (GtkButton *button, DownloaderView *dv)
-{
- GtkTreeSelection *selection;
-
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(dv->priv->treeview));
- gtk_tree_selection_selected_foreach
- (selection,
- (GtkTreeSelectionForeachFunc)resume_selection_foreach,
- (gpointer)dv);
-}
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) return;
-static void
-pause_selection_foreach (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter,
- DownloaderView *dv)
-{
- DownloadDetails *details;
- GValue val = {0, };
- gpointer *persist_object;
-
- gtk_tree_model_get_value (model, iter, COL_PERSIST_OBJECT, &val);
+ gtk_tree_model_get_value (model, &iter, COL_PERSIST_OBJECT, &val);
persist_object = g_value_get_pointer (&val);
details = g_hash_table_lookup (dv->priv->details_hash,
persist_object);
g_return_if_fail (details);
- if (details->status == DOWNLOAD_STATUS_COMPLETED) return;
-
- downloader_view_set_download_status (dv, DOWNLOAD_STATUS_PAUSED, persist_object);
-
- g_signal_emit (G_OBJECT (dv), downloader_view_signals[DOWNLOAD_PAUSE], 0);
-}
-
-void
-download_dialog_pause_cb (GtkButton *button, DownloaderView *dv)
-{
- GtkTreeSelection *selection;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(dv->priv->treeview));
-
- gtk_tree_selection_selected_foreach
- (selection,
- (GtkTreeSelectionForeachFunc)pause_selection_foreach,
- (gpointer)dv);
+ if (details->status == DOWNLOAD_STATUS_COMPLETED)
+ {
+ return;
+ }
+ else if (details->status == DOWNLOAD_STATUS_DOWNLOADING ||
+ details->status == DOWNLOAD_STATUS_RESUMING)
+ {
+ g_signal_emit (G_OBJECT (dv), downloader_view_signals[DOWNLOAD_PAUSE], 0, persist_object);
+ downloader_view_set_download_status (dv, DOWNLOAD_STATUS_PAUSED, persist_object);
+ }
+ else if (details->status == DOWNLOAD_STATUS_PAUSED)
+ {
+ g_signal_emit (G_OBJECT (dv), downloader_view_signals[DOWNLOAD_RESUME], 0, persist_object);
+ downloader_view_set_download_status (dv, DOWNLOAD_STATUS_RESUMING, persist_object);
+ }
}
void
@@ -913,7 +873,7 @@ download_dialog_abort_cb (GtkButton *button, DownloaderView *dv)
persist_object);
g_return_if_fail (details);
- g_signal_emit (G_OBJECT (dv), downloader_view_signals[DOWNLOAD_REMOVE], 0);
+ g_signal_emit (G_OBJECT (dv), downloader_view_signals[DOWNLOAD_REMOVE], 0, persist_object);
downloader_view_remove_download (dv, persist_object);
@@ -957,7 +917,6 @@ downloader_treeview_selection_changed_cb (GtkTreeSelection *selection,
else
{
gtk_label_set_text (GTK_LABEL (priv->details_location), "");
- gtk_label_set_text (GTK_LABEL (priv->details_file), "");
gtk_label_set_text (GTK_LABEL (priv->details_status), "");
gtk_label_set_text (GTK_LABEL (priv->details_elapsed), "");
gtk_label_set_text (GTK_LABEL (priv->details_remaining), "");
@@ -1007,7 +966,7 @@ download_dialog_delete_cb (GtkWidget *window, GdkEventAny *event,
/* build question dialog */
dialog = gtk_message_dialog_new (
- GTK_WINDOW(window),
+ GTK_WINDOW (window),
GTK_DIALOG_MODAL,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_YES_NO,