camera: Make the switches toggleable when disabled

Allow to toggle the applications switches when the main permission
is disabled.
This commit is contained in:
Alessandro Bono 2023-01-23 21:23:42 +01:00 committed by Felipe Borges
parent 8ecdeb2805
commit fa821608b5

View file

@ -101,14 +101,17 @@ on_camera_app_state_set (GtkSwitch *widget,
GVariant *params; GVariant *params;
const gchar *key; const gchar *key;
gchar **value; gchar **value;
gboolean active_camera;
self = data->self; self = data->self;
if (data->changing_state) if (data->changing_state)
return TRUE; return TRUE;
active_camera = !g_settings_get_boolean (self->privacy_settings,
"disable-camera");
data->changing_state = TRUE; data->changing_state = TRUE;
data->pending_state = state; data->pending_state = active_camera && state;
g_variant_iter_init (&iter, self->camera_apps_perms); g_variant_iter_init (&iter, self->camera_apps_perms);
g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY); g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
@ -151,6 +154,25 @@ on_camera_app_state_set (GtkSwitch *widget,
return TRUE; return TRUE;
} }
static gboolean
update_app_switch_state (GValue *value,
GVariant *variant,
gpointer data)
{
GtkSwitch *w = GTK_SWITCH (data);
gboolean active_camera;
gboolean active_app;
gboolean state;
active_camera = !g_variant_get_boolean (variant);
active_app = gtk_switch_get_active (w);
state = active_camera && active_app;
g_value_set_boolean (value, state);
return TRUE;
}
static void static void
add_camera_app (CcCameraPanel *self, add_camera_app (CcCameraPanel *self,
const gchar *app_id, const gchar *app_id,
@ -190,11 +212,17 @@ add_camera_app (CcCameraPanel *self,
gtk_switch_set_active (GTK_SWITCH (w), enabled); gtk_switch_set_active (GTK_SWITCH (w), enabled);
gtk_widget_set_valign (w, GTK_ALIGN_CENTER); gtk_widget_set_valign (w, GTK_ALIGN_CENTER);
adw_action_row_add_suffix (ADW_ACTION_ROW (row), w); adw_action_row_add_suffix (ADW_ACTION_ROW (row), w);
g_settings_bind (self->privacy_settings,
"disable-camera", g_settings_bind_with_mapping (self->privacy_settings,
w, "disable-camera",
"sensitive", w,
G_SETTINGS_BIND_INVERT_BOOLEAN); "state",
G_SETTINGS_BIND_GET,
update_app_switch_state,
NULL,
g_object_ref (w),
g_object_unref);
g_hash_table_insert (self->camera_app_switches, g_hash_table_insert (self->camera_app_switches,
g_strdup (app_id), g_strdup (app_id),
g_object_ref (w)); g_object_ref (w));