[frogr] Allow cancelling pulse progress bar dialogs.
- From: Mario Sanchez Prada <msanchez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [frogr] Allow cancelling pulse progress bar dialogs.
- Date: Sun, 16 Jan 2011 22:46:21 +0000 (UTC)
commit 36e2b371971a83fe5c1fb1dcdcf64ce92ce6cb0d
Author: Mario Sanchez Prada <msanchez igalia com>
Date: Sun Jan 16 23:29:50 2011 +0100
Allow cancelling pulse progress bar dialogs.
This means allowing to cancel request for tags, albums and groups, not
only picture uploads.
src/frogr-controller.c | 130 ++++++++++++++++++++++++++++--------------------
src/frogr-main-view.c | 22 +++-----
2 files changed, 85 insertions(+), 67 deletions(-)
---
diff --git a/src/frogr-controller.c b/src/frogr-controller.c
index 871ff88..1a75821 100644
--- a/src/frogr-controller.c
+++ b/src/frogr-controller.c
@@ -83,6 +83,7 @@ struct _FrogrControllerPrivate
/* We use these to know when an empty list of tags means that the
user has no tags at all, as fetching already happened before */
gboolean albums_fetched;
+ gboolean groups_fetched;
gboolean tags_fetched;
};
@@ -1056,7 +1057,8 @@ _fetch_albums (FrogrController *self)
priv = FROGR_CONTROLLER_GET_PRIVATE (self);
priv->fetching_albums = TRUE;
- fsp_session_get_photosets_async (priv->session, NULL,
+ _enable_cancellable (self, TRUE);
+ fsp_session_get_photosets_async (priv->session, priv->cancellable,
_fetch_albums_cb, self);
}
@@ -1066,9 +1068,7 @@ _fetch_albums_cb (GObject *object, GAsyncResult *res, gpointer data)
FspSession *session = NULL;
FrogrController *controller = NULL;
FrogrControllerPrivate *priv = NULL;
- FrogrMainViewModel *mainview_model = NULL;
GSList *photosets_list = NULL;
- GSList *albums_list = NULL;
GError *error = NULL;
session = FSP_SESSION (object);
@@ -1085,34 +1085,41 @@ _fetch_albums_cb (GObject *object, GAsyncResult *res, gpointer data)
g_error_free (error);
}
-
- if (photosets_list)
+ else
{
- GSList *item = NULL;
- FspDataPhotoSet *current_photoset = NULL;
- FrogrAlbum *current_album = NULL;
- for (item = photosets_list; item; item = g_slist_next (item))
- {
- current_photoset = FSP_DATA_PHOTO_SET (item->data);
- current_album = frogr_album_new (current_photoset->title,
- current_photoset->description);
- frogr_album_set_id (current_album, current_photoset->id);
- frogr_album_set_primary_photo_id (current_album, current_photoset->primary_photo_id);
- frogr_album_set_n_photos (current_album, current_photoset->n_photos);
+ FrogrMainViewModel *mainview_model = NULL;
+ GSList *albums_list = NULL;
- albums_list = g_slist_append (albums_list, current_album);
+ priv->albums_fetched = TRUE;
- fsp_data_free (FSP_DATA (current_photoset));
+ if (photosets_list)
+ {
+ GSList *item = NULL;
+ FspDataPhotoSet *current_photoset = NULL;
+ FrogrAlbum *current_album = NULL;
+ for (item = photosets_list; item; item = g_slist_next (item))
+ {
+ current_photoset = FSP_DATA_PHOTO_SET (item->data);
+ current_album = frogr_album_new (current_photoset->title,
+ current_photoset->description);
+ frogr_album_set_id (current_album, current_photoset->id);
+ frogr_album_set_primary_photo_id (current_album, current_photoset->primary_photo_id);
+ frogr_album_set_n_photos (current_album, current_photoset->n_photos);
+
+ albums_list = g_slist_append (albums_list, current_album);
+
+ fsp_data_free (FSP_DATA (current_photoset));
+ }
+
+ g_slist_free (photosets_list);
}
- g_slist_free (photosets_list);
+ /* Update main view's model */
+ mainview_model = frogr_main_view_get_model (priv->mainview);
+ frogr_main_view_model_set_albums (mainview_model, albums_list);
}
+ _enable_cancellable (controller, FALSE);
- /* Update main view's model */
- mainview_model = frogr_main_view_get_model (priv->mainview);
- frogr_main_view_model_set_albums (mainview_model, albums_list);
-
- priv->albums_fetched = TRUE;
priv->fetching_albums = FALSE;
}
@@ -1129,7 +1136,8 @@ _fetch_groups (FrogrController *self)
priv = FROGR_CONTROLLER_GET_PRIVATE (self);
priv->fetching_groups = TRUE;
- fsp_session_get_groups_async (priv->session, NULL,
+ _enable_cancellable (self, TRUE);
+ fsp_session_get_groups_async (priv->session, priv->cancellable,
_fetch_groups_cb, self);
}
@@ -1139,13 +1147,12 @@ _fetch_groups_cb (GObject *object, GAsyncResult *res, gpointer data)
FspSession *session = NULL;
FrogrController *controller = NULL;
FrogrControllerPrivate *priv = NULL;
- FrogrMainViewModel *mainview_model = NULL;
GSList *data_groups_list = NULL;
- GSList *groups_list = NULL;
GError *error = NULL;
session = FSP_SESSION (object);
controller = FROGR_CONTROLLER (data);
+ priv = FROGR_CONTROLLER_GET_PRIVATE (controller);
data_groups_list = fsp_session_get_groups_finish (session, res, &error);
if (error != NULL)
@@ -1157,32 +1164,40 @@ _fetch_groups_cb (GObject *object, GAsyncResult *res, gpointer data)
g_error_free (error);
}
-
- if (data_groups_list)
+ else
{
- GSList *item = NULL;
- FspDataGroup *data_group = NULL;
- FrogrGroup *current_group = NULL;
- for (item = data_groups_list; item; item = g_slist_next (item))
- {
- data_group = FSP_DATA_GROUP (item->data);
- current_group = frogr_group_new (data_group->id,
- data_group->name,
- data_group->privacy,
- data_group->n_photos);
+ FrogrMainViewModel *mainview_model = NULL;
+ GSList *groups_list = NULL;
- groups_list = g_slist_append (groups_list, current_group);
+ priv->groups_fetched = TRUE;
- fsp_data_free (FSP_DATA (data_group));
+ if (data_groups_list)
+ {
+ GSList *item = NULL;
+ FspDataGroup *data_group = NULL;
+ FrogrGroup *current_group = NULL;
+ for (item = data_groups_list; item; item = g_slist_next (item))
+ {
+ data_group = FSP_DATA_GROUP (item->data);
+ current_group = frogr_group_new (data_group->id,
+ data_group->name,
+ data_group->privacy,
+ data_group->n_photos);
+
+ groups_list = g_slist_append (groups_list, current_group);
+
+ fsp_data_free (FSP_DATA (data_group));
+ }
+
+ g_slist_free (data_groups_list);
}
- g_slist_free (data_groups_list);
+ /* Update main view's model */
+ mainview_model = frogr_main_view_get_model (priv->mainview);
+ frogr_main_view_model_set_groups (mainview_model, groups_list);
}
- /* Update main view's model */
- priv = FROGR_CONTROLLER_GET_PRIVATE (controller);
- mainview_model = frogr_main_view_get_model (priv->mainview);
- frogr_main_view_model_set_groups (mainview_model, groups_list);
+ _enable_cancellable (controller, FALSE);
priv->fetching_groups = FALSE;
}
@@ -1342,7 +1357,8 @@ _fetch_tags (FrogrController *self)
priv = FROGR_CONTROLLER_GET_PRIVATE (self);
priv->fetching_tags = TRUE;
- fsp_session_get_tags_list_async (priv->session, NULL, _fetch_tags_cb, self);
+ _enable_cancellable (self, TRUE);
+ fsp_session_get_tags_list_async (priv->session, priv->cancellable, _fetch_tags_cb, self);
}
static void
@@ -1369,12 +1385,16 @@ _fetch_tags_cb (GObject *object, GAsyncResult *res, gpointer data)
g_error_free (error);
}
+ else
+ {
+ /* Update main view's model */
+ mainview_model = frogr_main_view_get_model (priv->mainview);
+ frogr_main_view_model_set_tags_list (mainview_model, tags_list);
- /* Update main view's model */
- mainview_model = frogr_main_view_get_model (priv->mainview);
- frogr_main_view_model_set_tags_list (mainview_model, tags_list);
+ priv->tags_fetched = TRUE;
+ }
+ _enable_cancellable (controller, FALSE);
- priv->tags_fetched = TRUE;
priv->fetching_tags = FALSE;
}
@@ -1505,7 +1525,7 @@ _show_add_to_album_dialog_on_idle (GSList *pictures)
window = frogr_main_view_get_window (priv->mainview);
if (frogr_main_view_model_n_albums (mainview_model) > 0)
frogr_add_to_album_dialog_show (window, pictures, albums);
- else
+ else if (priv->albums_fetched)
frogr_util_show_info_dialog (window, _("No albums found"));
return FALSE;
@@ -1540,7 +1560,7 @@ _show_add_to_group_dialog_on_idle (GSList *pictures)
window = frogr_main_view_get_window (priv->mainview);
if (frogr_main_view_model_n_groups (mainview_model) > 0)
frogr_add_to_group_dialog_show (window, pictures, groups);
- else
+ else if (priv->groups_fetched)
frogr_util_show_info_dialog (window, _("No groups found"));
return FALSE;
@@ -1696,6 +1716,7 @@ frogr_controller_init (FrogrController *self)
priv->adding_to_album = FALSE;
priv->adding_to_group = FALSE;
priv->albums_fetched = FALSE;
+ priv->groups_fetched = FALSE;
priv->tags_fetched = FALSE;
/* Get account, if any */
@@ -1845,6 +1866,7 @@ frogr_controller_set_active_account (FrogrController *self,
/* Prefetch info for this user */
priv->albums_fetched = FALSE;
+ priv->groups_fetched = FALSE;
priv->tags_fetched = FALSE;
if (new_account)
_fetch_everything (self);
@@ -2051,7 +2073,7 @@ frogr_controller_show_add_to_group_dialog (FrogrController *self,
mainview_model = frogr_main_view_get_model (priv->mainview);
/* Fetch the groups first if needed */
- if (frogr_main_view_model_n_groups (mainview_model) == 0)
+ if (frogr_main_view_model_n_groups (mainview_model) == 0 && !priv->groups_fetched)
_fetch_groups (self);
/* Show the dialog when possible */
diff --git a/src/frogr-main-view.c b/src/frogr-main-view.c
index eaffb25..f343f47 100644
--- a/src/frogr-main-view.c
+++ b/src/frogr-main-view.c
@@ -87,7 +87,6 @@ typedef struct _FrogrMainViewPrivate {
GtkWidget *progress_dialog;
GtkWidget *progress_bar;
GtkWidget *progress_label;
- gboolean is_progress_cancellable;
GtkTreeModel *tree_model;
guint sb_context_id;
@@ -1106,7 +1105,9 @@ _progress_dialog_response (GtkDialog *dialog,
{
FrogrMainView *self = FROGR_MAIN_VIEW (data);
FrogrMainViewPrivate *priv = FROGR_MAIN_VIEW_GET_PRIVATE (self);
+
frogr_controller_cancel_ongoing_request (priv->controller);
+ gtk_widget_hide (priv->progress_dialog);
}
static gboolean
@@ -1117,8 +1118,8 @@ _progress_dialog_delete_event (GtkWidget *widget,
FrogrMainView *self = FROGR_MAIN_VIEW (data);
FrogrMainViewPrivate *priv = FROGR_MAIN_VIEW_GET_PRIVATE (self);
- if (priv->is_progress_cancellable)
- frogr_controller_cancel_ongoing_request (priv->controller);
+ frogr_controller_cancel_ongoing_request (priv->controller);
+ gtk_widget_hide (priv->progress_dialog);
return TRUE;
}
@@ -1482,6 +1483,10 @@ frogr_main_view_init (FrogrMainView *self)
GTK_STOCK_CANCEL,
GTK_RESPONSE_CANCEL,
NULL);
+
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (progress_dialog),
+ GTK_RESPONSE_CANCEL, TRUE);
+
gtk_container_set_border_width (GTK_CONTAINER (progress_dialog), 6);
gtk_window_set_default_size (GTK_WINDOW (progress_dialog), 250, -1);
@@ -1495,7 +1500,6 @@ frogr_main_view_init (FrogrMainView *self)
priv->progress_dialog = progress_dialog;
priv->progress_bar = progress_bar;
priv->progress_label = progress_label;
- priv->is_progress_cancellable = FALSE;
/* Initialize model */
priv->tree_model = GTK_TREE_MODEL (gtk_list_store_new (3,
@@ -1631,11 +1635,6 @@ frogr_main_view_set_progress_status (FrogrMainView *self,
if (text != NULL)
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar), text);
- /* Allow cancelling this kind of processes */
- priv->is_progress_cancellable = TRUE;
- gtk_dialog_set_response_sensitive (GTK_DIALOG (priv->progress_dialog),
- GTK_RESPONSE_CANCEL, TRUE);
-
gtk_widget_show_all (GTK_WIDGET (priv->progress_dialog));
}
@@ -1649,11 +1648,8 @@ frogr_main_view_pulse_progress (FrogrMainView *self)
/* Show the widget and set fraction */
gtk_progress_bar_pulse (GTK_PROGRESS_BAR (priv->progress_bar));
- /* Empty text for this and no cancellation available for pulse dialogs */
- priv->is_progress_cancellable = FALSE;
+ /* Empty text for this */
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar), NULL);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (priv->progress_dialog),
- GTK_RESPONSE_CANCEL, FALSE);
gtk_widget_show_all (GTK_WIDGET (priv->progress_dialog));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]