[gnome-software] app addon row: Only emit the "selected" signal for user clicks



commit 8a74ff3b24817e35ade8d78fdff36d50229fb5c5
Author: Kalev Lember <klember redhat com>
Date:   Thu Dec 8 13:39:33 2016 +0100

    app addon row: Only emit the "selected" signal for user clicks
    
    The calling code (the details page) expects to only get the signal for
    user actions and can try to inadvertently remove/install addons if we
    emit it otherwise.

 src/gs-app-addon-row.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)
---
diff --git a/src/gs-app-addon-row.c b/src/gs-app-addon-row.c
index 9682a97..f8af884 100644
--- a/src/gs-app-addon-row.c
+++ b/src/gs-app-addon-row.c
@@ -46,6 +46,12 @@ enum {
        PROP_SELECTED
 };
 
+static void
+checkbox_toggled (GtkWidget *widget, GsAppAddonRow *row)
+{
+       g_object_notify (G_OBJECT (row), "selected");
+}
+
 /**
  * gs_app_addon_row_get_summary:
  *
@@ -110,6 +116,7 @@ gs_app_addon_row_refresh (GsAppAddonRow *row)
        }
 
        /* update the checkbox */
+       g_signal_handlers_block_by_func (row->checkbox, checkbox_toggled, row);
        switch (gs_app_get_state (row->app)) {
        case AS_APP_STATE_QUEUED_FOR_INSTALL:
                gtk_widget_set_sensitive (row->checkbox, TRUE);
@@ -138,6 +145,7 @@ gs_app_addon_row_refresh (GsAppAddonRow *row)
                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (row->checkbox), FALSE);
                break;
        }
+       g_signal_handlers_unblock_by_func (row->checkbox, checkbox_toggled, row);
 }
 
 GsApp *
@@ -245,12 +253,6 @@ gs_app_addon_row_class_init (GsAppAddonRowClass *klass)
 }
 
 static void
-checkbox_toggled (GtkWidget *widget, GsAppAddonRow *row)
-{
-       g_object_notify (G_OBJECT (row), "selected");
-}
-
-static void
 gs_app_addon_row_init (GsAppAddonRow *row)
 {
        gtk_widget_set_has_window (GTK_WIDGET (row), FALSE);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]