[gnome-software] Don't allow review actions when offline
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software] Don't allow review actions when offline
- Date: Mon, 28 Nov 2016 09:16:33 +0000 (UTC)
commit 6f013a41c9cb3a6da18fcf059982d0353529ed84
Author: Richard Hughes <richard hughsie com>
Date: Sun Nov 27 21:27:16 2016 +0000
Don't allow review actions when offline
src/gs-review-row.c | 30 ++++++++++++++++++++++--------
src/gs-review-row.h | 2 ++
src/gs-shell-details.c | 17 +++++++++++++++++
3 files changed, 41 insertions(+), 8 deletions(-)
---
diff --git a/src/gs-review-row.c b/src/gs-review-row.c
index 006a1d7..a648b57 100644
--- a/src/gs-review-row.c
+++ b/src/gs-review-row.c
@@ -32,6 +32,7 @@ typedef struct
GtkListBoxRow parent_instance;
AsReview *review;
+ gboolean network_available;
guint64 actions;
GtkWidget *stars;
GtkWidget *summary_label;
@@ -60,6 +61,7 @@ gs_review_row_refresh (GsReviewRow *row)
{
GsReviewRowPrivate *priv = gs_review_row_get_instance_private (row);
const gchar *reviewer;
+ guint64 actions = 0;
GDateTime *date;
g_autofree gchar *text = NULL;
@@ -87,23 +89,33 @@ gs_review_row_refresh (GsReviewRow *row)
priv->actions = 0;
/* set actions up */
- if ((priv->actions & (1 << GS_PLUGIN_ACTION_REVIEW_UPVOTE |
- 1 << GS_PLUGIN_ACTION_REVIEW_DOWNVOTE |
- 1 << GS_PLUGIN_ACTION_REVIEW_DISMISS)) == 0) {
+ if (priv->network_available)
+ actions = priv->actions;
+ if ((actions & (1 << GS_PLUGIN_ACTION_REVIEW_UPVOTE |
+ 1 << GS_PLUGIN_ACTION_REVIEW_DOWNVOTE |
+ 1 << GS_PLUGIN_ACTION_REVIEW_DISMISS)) == 0) {
gtk_widget_set_visible (priv->box_voting, FALSE);
} else {
gtk_widget_set_visible (priv->box_voting, TRUE);
gtk_widget_set_visible (priv->button_yes,
- priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_UPVOTE);
+ actions & 1 << GS_PLUGIN_ACTION_REVIEW_UPVOTE);
gtk_widget_set_visible (priv->button_no,
- priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_DOWNVOTE);
+ actions & 1 << GS_PLUGIN_ACTION_REVIEW_DOWNVOTE);
gtk_widget_set_visible (priv->button_dismiss,
- priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_DISMISS);
+ actions & 1 << GS_PLUGIN_ACTION_REVIEW_DISMISS);
}
gtk_widget_set_visible (priv->button_remove,
- priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_REMOVE);
+ actions & 1 << GS_PLUGIN_ACTION_REVIEW_REMOVE);
gtk_widget_set_visible (priv->button_report,
- priv->actions & 1 << GS_PLUGIN_ACTION_REVIEW_REPORT);
+ actions & 1 << GS_PLUGIN_ACTION_REVIEW_REPORT);
+}
+
+void
+gs_review_row_set_network_available (GsReviewRow *review_row, gboolean network_available)
+{
+ GsReviewRowPrivate *priv = gs_review_row_get_instance_private (review_row);
+ priv->network_available = network_available;
+ gs_review_row_refresh (review_row);
}
static gboolean
@@ -128,6 +140,8 @@ gs_review_row_notify_props_changed_cb (GsApp *app,
static void
gs_review_row_init (GsReviewRow *row)
{
+ GsReviewRowPrivate *priv = gs_review_row_get_instance_private (row);
+ priv->network_available = TRUE;
gtk_widget_set_has_window (GTK_WIDGET (row), FALSE);
gtk_widget_init_template (GTK_WIDGET (row));
}
diff --git a/src/gs-review-row.h b/src/gs-review-row.h
index 0306b7f..6c1e40f 100644
--- a/src/gs-review-row.h
+++ b/src/gs-review-row.h
@@ -43,6 +43,8 @@ GtkWidget *gs_review_row_new (AsReview *review);
AsReview *gs_review_row_get_review (GsReviewRow *review_row);
void gs_review_row_set_actions (GsReviewRow *review_row,
guint64 actions);
+void gs_review_row_set_network_available (GsReviewRow *review_row,
+ gboolean network_available);
G_END_DECLS
diff --git a/src/gs-shell-details.c b/src/gs-shell-details.c
index 858df36..31aeeca 100644
--- a/src/gs-shell-details.c
+++ b/src/gs-shell-details.c
@@ -1275,6 +1275,8 @@ gs_shell_details_refresh_reviews (GsShellDetails *self)
gs_review_row_set_actions (GS_REVIEW_ROW (row), actions);
gtk_container_add (GTK_CONTAINER (self->list_box_reviews), row);
gtk_widget_set_visible (row, i < SHOW_NR_REVIEWS_INITIAL);
+ gs_review_row_set_network_available (GS_REVIEW_ROW (row),
+ gs_plugin_loader_get_network_available
(self->plugin_loader));
}
/* only show the button if there are more to show */
@@ -1283,6 +1285,8 @@ gs_shell_details_refresh_reviews (GsShellDetails *self)
/* show the button only if the user never reviewed */
gtk_widget_set_visible (self->button_review, show_review_button);
+ gtk_widget_set_sensitive (self->button_review,
+ gs_plugin_loader_get_network_available (self->plugin_loader));
}
static void
@@ -1984,6 +1988,14 @@ gs_shell_details_license_unknown_cb (GtkWidget *widget, GsShellDetails *self)
gtk_widget_show (self->popover_license_unknown);
}
+static void
+gs_shell_details_network_available_notify_cb (GsPluginLoader *plugin_loader,
+ GParamSpec *pspec,
+ GsShellDetails *self)
+{
+ gs_shell_details_refresh_reviews (self);
+}
+
void
gs_shell_details_setup (GsShellDetails *self,
GsShell *shell,
@@ -2009,6 +2021,11 @@ gs_shell_details_setup (GsShellDetails *self,
G_CALLBACK (gs_shell_details_write_review_cb),
self);
+ /* hide some UI when offline */
+ g_signal_connect_object (self->plugin_loader, "notify::network-available",
+ G_CALLBACK (gs_shell_details_network_available_notify_cb),
+ self, 0);
+
/* setup details */
g_signal_connect (self->button_install, "clicked",
G_CALLBACK (gs_shell_details_app_install_button_cb),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]