static void get_permissions_cb (BMSettingsSystemInterface *settings, BMSettingsSystemPermissions permissions, GError *error, gpointer user_data) { PermInfo *info = user_data; CEPolkitButton *self = info->self; CEPolkitButtonPrivate *priv; gboolean old_actionable, old_authorized; /* Response might come when button is already disposed */ if (info->disposed) goto out; priv = CE_POLKIT_BUTTON_GET_PRIVATE (info->self); priv->perm_calls = g_slist_remove (priv->perm_calls, info); old_actionable = ce_polkit_button_get_actionable (self); old_authorized = priv->authorized; priv->authorized = (permissions & priv->permission); if (priv->use_polkit) update_and_emit (self, old_actionable); if (priv->authorized != old_authorized) g_signal_emit (self, signals[AUTHORIZED], 0, priv->authorized); out: g_free (info); }
static void update_and_emit (CEPolkitButton *self, gboolean old_actionable) { gboolean new_actionable; new_actionable = ce_polkit_button_get_actionable (self); update_button (self, new_actionable); if (new_actionable != old_actionable) g_signal_emit (self, signals[ACTIONABLE], 0, new_actionable); }
static void connection_double_clicked_cb (GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { GtkButton *button = user_data; if (ce_polkit_button_get_actionable (CE_POLKIT_BUTTON (button))) gtk_button_clicked (button); }
void ce_polkit_button_set_master_sensitive (CEPolkitButton *self, gboolean sensitive) { gboolean old_actionable; g_return_if_fail (self != NULL); g_return_if_fail (CE_IS_POLKIT_BUTTON (self)); old_actionable = ce_polkit_button_get_actionable (self); CE_POLKIT_BUTTON_GET_PRIVATE (self)->master_sensitive = sensitive; update_and_emit (self, old_actionable); }
void ce_polkit_button_set_use_polkit (CEPolkitButton *self, gboolean use_polkit) { gboolean old_actionable; g_return_if_fail (self != NULL); g_return_if_fail (CE_IS_POLKIT_BUTTON (self)); old_actionable = ce_polkit_button_get_actionable (self); CE_POLKIT_BUTTON_GET_PRIVATE (self)->use_polkit = use_polkit; update_and_emit (self, old_actionable); }
static void permission_changed_cb (NMClient *client, NMClientPermission permission, NMClientPermissionResult result, CEPolkitButton *self) { CEPolkitButtonPrivate *priv = CE_POLKIT_BUTTON_GET_PRIVATE (self); gboolean old_actionable, old_authorized; old_actionable = ce_polkit_button_get_actionable (self); old_authorized = priv->authorized; priv->authorized = (result == NM_CLIENT_PERMISSION_RESULT_YES || result == NM_CLIENT_PERMISSION_RESULT_AUTH); update_and_emit (self, old_actionable); if (priv->authorized != old_authorized) g_signal_emit (self, signals[AUTHORIZED], 0, priv->authorized); }
static void permission_changed_cb (NMClient *client, NMClientPermission permission, NMClientPermissionResult result, CEPolkitButton *self) { CEPolkitButtonPrivate *priv = CE_POLKIT_BUTTON_GET_PRIVATE (self); gboolean old_actionable; if (priv->permission_result == result) return; old_actionable = ce_polkit_button_get_actionable (self); priv->permission_result = result; update_and_emit (self, old_actionable); g_signal_emit (self, signals[AUTHORIZED], 0, ce_polkit_button_get_authorized (self)); }
GtkWidget * ce_polkit_button_new (const char *label, const char *tooltip, const char *auth_tooltip, const char *stock_icon, NMClient *client, NMClientPermission permission) { GObject *object; CEPolkitButtonPrivate *priv; object = g_object_new (CE_TYPE_POLKIT_BUTTON, NULL); if (!object) return NULL; priv = CE_POLKIT_BUTTON_GET_PRIVATE (object); priv->tooltip = g_strdup (tooltip); priv->auth_tooltip = g_strdup (auth_tooltip); priv->permission = permission; priv->client = g_object_ref (client); priv->perm_id = g_signal_connect (client, "permission-changed", G_CALLBACK (permission_changed_cb), object); priv->stock = gtk_image_new_from_stock (stock_icon, GTK_ICON_SIZE_BUTTON); g_object_ref_sink (priv->stock); priv->auth = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION, GTK_ICON_SIZE_BUTTON); g_object_ref_sink (priv->auth); gtk_button_set_label (GTK_BUTTON (object), label); update_button (CE_POLKIT_BUTTON (object), ce_polkit_button_get_actionable (CE_POLKIT_BUTTON (object))); permission_changed_cb (client, permission, nm_client_get_permission_result (client, permission), CE_POLKIT_BUTTON (object)); return GTK_WIDGET (object); }
GtkWidget * ce_polkit_button_new (const char *label, const char *tooltip, const char *auth_label, const char *auth_tooltip, const char *stock_icon, BMRemoteSettingsSystem *settings, BMSettingsSystemPermissions permission) { GObject *object; CEPolkitButtonPrivate *priv; object = g_object_new (CE_TYPE_POLKIT_BUTTON, NULL); if (!object) return NULL; priv = CE_POLKIT_BUTTON_GET_PRIVATE (object); priv->label = g_strdup (label); priv->tooltip = g_strdup (tooltip); priv->auth_label = g_strdup (auth_label); priv->auth_tooltip = g_strdup (auth_tooltip); priv->permission = permission; priv->use_polkit = FALSE; priv->settings = g_object_ref (settings); priv->check_id = g_signal_connect (settings, BM_SETTINGS_SYSTEM_INTERFACE_CHECK_PERMISSIONS, G_CALLBACK (check_permissions_cb), object); priv->stock = gtk_image_new_from_stock (stock_icon, GTK_ICON_SIZE_BUTTON); g_object_ref_sink (priv->stock); priv->auth = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION, GTK_ICON_SIZE_BUTTON); g_object_ref_sink (priv->auth); update_button (CE_POLKIT_BUTTON (object), ce_polkit_button_get_actionable (CE_POLKIT_BUTTON (object))); check_permissions_cb (settings, CE_POLKIT_BUTTON (object)); return GTK_WIDGET (object); }
void ce_polkit_button_set_validation_error (CEPolkitButton *self, const char *validation_error) { CEPolkitButtonPrivate *priv; gboolean old_actionable; g_return_if_fail (self != NULL); g_return_if_fail (CE_IS_POLKIT_BUTTON (self)); priv = CE_POLKIT_BUTTON_GET_PRIVATE (self); if (g_strcmp0 (validation_error, priv->validation_error) != 0) { old_actionable = ce_polkit_button_get_actionable (self); g_free (priv->validation_error); priv->validation_error = g_strdup (validation_error); update_and_emit (self, old_actionable); } }
static void get_permissions_cb (NMSettingsSystemInterface *settings, NMSettingsSystemPermissions permissions, GError *error, gpointer user_data) { CEPolkitButton *self = CE_POLKIT_BUTTON (user_data); CEPolkitButtonPrivate *priv = CE_POLKIT_BUTTON_GET_PRIVATE (self); gboolean old_actionable, old_authorized; old_actionable = ce_polkit_button_get_actionable (self); old_authorized = priv->authorized; priv->authorized = (permissions & priv->permission); if (priv->use_polkit) update_and_emit (self, old_actionable); if (priv->authorized != old_authorized) g_signal_emit (self, signals[AUTHORIZED], 0, priv->authorized); }
static void update_sensitivity (NMConnectionEditor *editor) { NMSettingConnection *s_con; gboolean actionable = FALSE, authorized = FALSE, sensitive = FALSE; GtkWidget *widget; GSList *iter; s_con = nm_connection_get_setting_connection (editor->connection); /* Can't modify read-only connections; can't modify anything before the * editor is initialized either. */ if ( !nm_setting_connection_get_read_only (s_con) && editor_is_initialized (editor)) { if (editor->can_modify) { actionable = ce_polkit_button_get_actionable (CE_POLKIT_BUTTON (editor->ok_button)); authorized = ce_polkit_button_get_authorized (CE_POLKIT_BUTTON (editor->ok_button)); } /* If the user cannot ever be authorized to change system connections, * we desensitize the entire dialog. */ sensitive = authorized; } /* Cancel button is always sensitive */ gtk_widget_set_sensitive (GTK_WIDGET (editor->cancel_button), TRUE); widget = GTK_WIDGET (gtk_builder_get_object (editor->builder, "connection_name_label")); gtk_widget_set_sensitive (widget, sensitive); widget = GTK_WIDGET (gtk_builder_get_object (editor->builder, "connection_name")); gtk_widget_set_sensitive (widget, sensitive); for (iter = editor->pages; iter; iter = g_slist_next (iter)) { widget = ce_page_get_page (CE_PAGE (iter->data)); gtk_widget_set_sensitive (widget, sensitive); } }
static void update_button (CEPolkitButton *self) { CEPolkitButtonPrivate *priv = CE_POLKIT_BUTTON_GET_PRIVATE (self); gboolean actionable; actionable = ce_polkit_button_get_actionable (self); gtk_widget_set_sensitive (GTK_WIDGET (self), actionable); if (priv->validation_error) gtk_widget_set_tooltip_text (GTK_WIDGET (self), priv->validation_error); else if (priv->permission_result == NM_CLIENT_PERMISSION_RESULT_AUTH) gtk_widget_set_tooltip_text (GTK_WIDGET (self), priv->auth_tooltip); else if (priv->permission_result == NM_CLIENT_PERMISSION_RESULT_YES) gtk_widget_set_tooltip_text (GTK_WIDGET (self), priv->tooltip); else gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("No polkit authorization to perform the action")); if (priv->permission_result == NM_CLIENT_PERMISSION_RESULT_YES) gtk_button_set_image (GTK_BUTTON (self), priv->stock); else gtk_button_set_image (GTK_BUTTON (self), priv->auth); }