[gnome-control-center] applications: Show portal permissions for snaps



commit 4ffc990d939089b52fa7706ff81a1cf22de624ce
Author: Robert Ancell <robert ancell canonical com>
Date:   Tue Mar 12 16:51:42 2019 +1300

    applications: Show portal permissions for snaps

 panels/applications/cc-applications-panel.c | 53 ++++++++++++++++++-----------
 1 file changed, 34 insertions(+), 19 deletions(-)
---
diff --git a/panels/applications/cc-applications-panel.c b/panels/applications/cc-applications-panel.c
index 075c8475e..a05102fca 100644
--- a/panels/applications/cc-applications-panel.c
+++ b/panels/applications/cc-applications-panel.c
@@ -42,6 +42,8 @@
 #define APP_SCHEMA MASTER_SCHEMA ".application"
 #define APP_PREFIX "/org/gnome/desktop/notifications/application/"
 
+#define PORTAL_SNAP_PREFIX "snap."
+
 struct _CcApplicationsPanel
 {
   CcPanel          parent;
@@ -213,11 +215,23 @@ set_portal_permissions (CcApplicationsPanel *self,
     g_warning ("Error setting portal permissions: %s", error->message);
 }
 
-static char *
-get_flatpak_id (GAppInfo *info)
+static gchar *
+get_portal_app_id (GAppInfo *info)
 {
   if (G_IS_DESKTOP_APP_INFO (info))
-    return g_desktop_app_info_get_string (G_DESKTOP_APP_INFO (info), "X-Flatpak");
+    {
+      gchar *flatpak_id;
+      g_autofree gchar *snap_name = NULL;
+      g_autofree gchar *executable = NULL;
+
+      flatpak_id = g_desktop_app_info_get_string (G_DESKTOP_APP_INFO (info), "X-Flatpak");
+      if (flatpak_id != NULL)
+        return flatpak_id;
+
+      snap_name = g_desktop_app_info_get_string (G_DESKTOP_APP_INFO (info), "X-SnapInstanceName");
+      if (snap_name != NULL)
+        return g_strdup_printf ("%s%s", PORTAL_SNAP_PREFIX, snap_name);
+    }
 
   return NULL;
 }
@@ -636,39 +650,39 @@ static void
 update_permission_section (CcApplicationsPanel *self,
                            GAppInfo            *info)
 {
-  g_autofree gchar *flatpak_id = get_flatpak_id (info);
+  g_autofree gchar *portal_app_id = get_portal_app_id (info);
   gboolean disabled, allowed, set;
   gboolean has_any = FALSE, has_builtin = FALSE;
 
-  if (flatpak_id == NULL)
+  if (portal_app_id == NULL)
     {
       gtk_widget_hide (self->permission_section);
       return;
     }
 
   disabled = g_settings_get_boolean (self->privacy_settings, "disable-camera");
-  get_device_allowed (self, "camera", flatpak_id, &set, &allowed);
+  get_device_allowed (self, "camera", portal_app_id, &set, &allowed);
   cc_toggle_row_set_allowed (CC_TOGGLE_ROW (self->camera), allowed);
   gtk_widget_set_visible (self->camera, set && !disabled);
   gtk_widget_set_visible (self->no_camera, set && disabled);
   has_any |= set;
 
   disabled = g_settings_get_boolean (self->privacy_settings, "disable-microphone");
-  get_device_allowed (self, "microphone", flatpak_id, &set, &allowed);
+  get_device_allowed (self, "microphone", portal_app_id, &set, &allowed);
   cc_toggle_row_set_allowed (CC_TOGGLE_ROW (self->microphone), allowed);
   gtk_widget_set_visible (self->microphone, set && !disabled);
   gtk_widget_set_visible (self->no_microphone, set && disabled);
   has_any |= set;
 
   disabled = !g_settings_get_boolean (self->location_settings, "enabled");
-  get_location_allowed (self, flatpak_id, &set, &allowed);
+  get_location_allowed (self, portal_app_id, &set, &allowed);
   cc_toggle_row_set_allowed (CC_TOGGLE_ROW (self->location), allowed);
   gtk_widget_set_visible (self->location, set && !disabled);
   gtk_widget_set_visible (self->no_location, set && disabled);
   has_any |= set;
 
   remove_static_permissions (self);
-  has_builtin = add_static_permissions (self, info, flatpak_id);
+  has_builtin = add_static_permissions (self, info, portal_app_id);
   gtk_widget_set_visible (self->builtin, has_builtin);
   has_any |= has_builtin;
 
@@ -682,7 +696,7 @@ update_integration_section (CcApplicationsPanel *self,
                             GAppInfo            *info)
 {
   g_autofree gchar *app_id = get_app_id (info);
-  g_autofree gchar *flatpak_id = get_flatpak_id (info);
+  g_autofree gchar *portal_app_id = get_portal_app_id (info);
   gboolean set, allowed, disabled;
   gboolean has_any = FALSE;
 
@@ -692,21 +706,21 @@ update_integration_section (CcApplicationsPanel *self,
   gtk_widget_set_visible (self->search, set && !disabled);
   gtk_widget_set_visible (self->no_search, set && disabled);
 
-  if (flatpak_id != NULL)
+  if (portal_app_id != NULL)
     {
       g_clear_object (&self->notification_settings);
-      get_notification_allowed (self, flatpak_id, &set, &allowed);
+      get_notification_allowed (self, portal_app_id, &set, &allowed);
       cc_toggle_row_set_allowed (CC_TOGGLE_ROW (self->notification), allowed);
       gtk_widget_set_visible (self->notification, set);
       has_any |= set;
 
-      get_background_allowed (self, flatpak_id, &set, &allowed);
+      get_background_allowed (self, portal_app_id, &set, &allowed);
       cc_toggle_row_set_allowed (CC_TOGGLE_ROW (self->background), allowed);
       gtk_widget_set_visible (self->background, set);
       has_any |= set;
 
       disabled = g_settings_get_boolean (self->privacy_settings, "disable-sound-output");
-      get_device_allowed (self, "speakers", flatpak_id, &set, &allowed);
+      get_device_allowed (self, "speakers", portal_app_id, &set, &allowed);
       cc_toggle_row_set_allowed (CC_TOGGLE_ROW (self->sound), allowed);
       gtk_widget_set_visible (self->sound, set && !disabled);
       gtk_widget_set_visible (self->no_sound, set && disabled);
@@ -1353,7 +1367,8 @@ update_app_row (CcApplicationsPanel *self,
 {
   g_autofree gchar *formatted_size = NULL;
 
-  self->app_size = get_flatpak_app_size (app_id);
+  if (!g_str_has_prefix (app_id, PORTAL_SNAP_PREFIX))
+    self->app_size = get_flatpak_app_size (app_id);
   formatted_size = g_format_size (self->app_size);
   g_object_set (self->app, "info", formatted_size, NULL);
   update_total_size (self);
@@ -1376,12 +1391,12 @@ static void
 update_usage_section (CcApplicationsPanel *self,
                       GAppInfo            *info)
 {
-  g_autofree gchar *flatpak_id = get_flatpak_id (info);
+  g_autofree gchar *portal_app_id = get_portal_app_id (info);
 
-  if (flatpak_id != NULL)
+  if (portal_app_id != NULL)
     {
       gtk_widget_show (self->usage_section);
-      update_flatpak_sizes (self, flatpak_id);
+      update_flatpak_sizes (self, portal_app_id);
     }
   else
     {
@@ -1426,7 +1441,7 @@ update_panel (CcApplicationsPanel *self,
   update_usage_section (self, info);
 
   self->current_app_id = get_app_id (info);
-  self->current_portal_app_id = get_flatpak_id (info);
+  self->current_portal_app_id = get_portal_app_id (info);
 }
 
 static void


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