[gnome-software] trivial: Do not assume g_network_monitor_get_default() will return non-NULL



commit a0136b192e9667f07daddbd0b4f7232ff08d6ec1
Author: Richard Hughes <richard hughsie com>
Date:   Mon Feb 1 16:15:28 2016 +0000

    trivial: Do not assume g_network_monitor_get_default() will return non-NULL

 src/gs-application.c    |    7 ++++++-
 src/gs-shell-updates.c  |   31 +++++++++++++++++++++++--------
 src/gs-update-monitor.c |   10 ++++++++--
 3 files changed, 37 insertions(+), 11 deletions(-)
---
diff --git a/src/gs-application.c b/src/gs-application.c
index c5681a1..8a177d3 100644
--- a/src/gs-application.c
+++ b/src/gs-application.c
@@ -173,7 +173,12 @@ network_changed_cb (GNetworkMonitor *monitor,
 static void
 gs_application_monitor_network (GsApplication *app)
 {
-       app->network_monitor = g_object_ref (g_network_monitor_get_default ());
+       GNetworkMonitor *network_monitor;
+
+       network_monitor = g_network_monitor_get_default ();
+       if (network_monitor == NULL)
+               return;
+       app->network_monitor = g_object_ref (network_monitor);
 
        g_signal_connect (app->network_monitor, "network-changed",
                          G_CALLBACK (network_changed_cb), app);
diff --git a/src/gs-shell-updates.c b/src/gs-shell-updates.c
index 7327a5e..08e83bd 100644
--- a/src/gs-shell-updates.c
+++ b/src/gs-shell-updates.c
@@ -203,6 +203,7 @@ static void
 gs_shell_updates_update_ui_state (GsShellUpdates *self)
 {
        GtkWidget *widget;
+       gboolean allow_mobile_refresh = TRUE;
        g_autofree gchar *checked_str = NULL;
        g_autofree gchar *spinner_str = NULL;
 
@@ -305,9 +306,11 @@ gs_shell_updates_update_ui_state (GsShellUpdates *self)
                gtk_image_set_from_icon_name (GTK_IMAGE (widget),
                                              "view-refresh-symbolic", GTK_ICON_SIZE_MENU);
                widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "button_refresh"));
-               gtk_widget_set_visible (widget,
-                                       !g_network_monitor_get_network_metered (self->network_monitor) ||
-                                       self->has_agreed_to_mobile_data);
+               if (self->network_monitor != NULL &&
+                   g_network_monitor_get_network_metered (self->network_monitor) &&
+                   !self->has_agreed_to_mobile_data)
+                       allow_mobile_refresh = FALSE;
+               gtk_widget_set_visible (widget, allow_mobile_refresh);
                break;
        default:
                g_assert_not_reached ();
@@ -343,9 +346,13 @@ gs_shell_updates_update_ui_state (GsShellUpdates *self)
                break;
        case GS_SHELL_UPDATES_STATE_NO_UPDATES:
 
+               /* we just don't know */
+               if (self->network_monitor == NULL) {
+                       gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates), "uptodate");
+
                /* check we have a "free" network connection */
-               if (g_network_monitor_get_network_available (self->network_monitor) &&
-                   !g_network_monitor_get_network_metered (self->network_monitor)) {
+               } else if (g_network_monitor_get_network_available (self->network_monitor) &&
+                          !g_network_monitor_get_network_metered (self->network_monitor)) {
                        gtk_stack_set_visible_child_name (GTK_STACK (self->stack_updates), "uptodate");
 
                /* expensive network connection */
@@ -744,6 +751,12 @@ gs_shell_updates_button_refresh_cb (GtkWidget *widget,
                return;
        }
 
+       /* we don't know the network state */
+       if (self->network_monitor == NULL) {
+               gs_shell_updates_get_new_updates (self);
+               return;
+       }
+
        /* check we have a "free" network connection */
        if (g_network_monitor_get_network_available (self->network_monitor) &&
            !g_network_monitor_get_network_metered (self->network_monitor)) {
@@ -988,9 +1001,11 @@ gs_shell_updates_setup (GsShellUpdates *self,
 
        gs_shell_updates_monitor_permission (self);
 
-       g_signal_connect (self->network_monitor, "network-changed",
-                         G_CALLBACK (gs_shell_updates_notify_network_state_cb),
-                         self);
+       if (self->network_monitor != NULL) {
+               g_signal_connect (self->network_monitor, "network-changed",
+                                 G_CALLBACK (gs_shell_updates_notify_network_state_cb),
+                                 self);
+       }
 
        /* chain up */
        gs_page_setup (GS_PAGE (self),
diff --git a/src/gs-update-monitor.c b/src/gs-update-monitor.c
index 0f58906..21d00c6 100644
--- a/src/gs-update-monitor.c
+++ b/src/gs-update-monitor.c
@@ -287,6 +287,10 @@ check_updates (GsUpdateMonitor *monitor)
        g_autoptr(GDateTime) last_refreshed = NULL;
        g_autoptr(GDateTime) now_refreshed = NULL;
 
+       /* we don't know the network state */
+       if (monitor->network_monitor == NULL)
+               return;
+
        /* never refresh when offline or on mobile connections */
        if (!g_network_monitor_get_network_available (monitor->network_monitor) ||
            g_network_monitor_get_network_metered (monitor->network_monitor))
@@ -658,8 +662,10 @@ gs_update_monitor_init (GsUpdateMonitor *monitor)
 
        monitor->cancellable = g_cancellable_new ();
        monitor->network_monitor = g_network_monitor_get_default ();
-       g_signal_connect (monitor->network_monitor, "network-changed",
-                         G_CALLBACK (notify_network_state_cb), monitor);
+       if (monitor->network_monitor != NULL) {
+               g_signal_connect (monitor->network_monitor, "network-changed",
+                                 G_CALLBACK (notify_network_state_cb), monitor);
+       }
 }
 
 static void


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