static void connection_editor_validate (NMConnectionEditor *editor) { NMSettingConnection *s_con; GSList *iter; gs_free char *validation_error = NULL; GError *error = NULL; if (!editor_is_initialized (editor)) { validation_error = g_strdup (_("Editor initializing…")); goto done_silent; } s_con = nm_connection_get_setting_connection (editor->connection); g_assert (s_con); if (nm_setting_connection_get_read_only (s_con)) { validation_error = g_strdup (_("Connection cannot be modified")); goto done; } if (!ui_to_setting (editor, &error)) { validation_error = g_strdup (error->message); g_clear_error (&error); goto done; } for (iter = editor->pages; iter; iter = g_slist_next (iter)) { if (!ce_page_validate (CE_PAGE (iter->data), editor->connection, &error)) { if (!validation_error) { validation_error = g_strdup_printf (_("Invalid setting %s: %s"), CE_PAGE (iter->data)->title, error->message); } g_clear_error (&error); } } done: if (g_strcmp0 (validation_error, editor->last_validation_error) != 0) { if (editor->last_validation_error && !validation_error) g_message ("Connection validates and can be saved"); else if (validation_error) g_message ("Cannot save connection due to error: %s", validation_error); g_free (editor->last_validation_error); editor->last_validation_error = g_strdup (validation_error); } done_silent: ce_polkit_button_set_validation_error (CE_POLKIT_BUTTON (editor->ok_button), validation_error); gtk_widget_set_sensitive (editor->export_button, !validation_error); update_sensitivity (editor); }
static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { NMSettingConnection *setting = NM_SETTING_CONNECTION (object); NMSettingConnectionPrivate *priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting); switch (prop_id) { case PROP_ID: g_value_set_string (value, nm_setting_connection_get_id (setting)); break; case PROP_UUID: g_value_set_string (value, nm_setting_connection_get_uuid (setting)); break; case PROP_TYPE: g_value_set_string (value, nm_setting_connection_get_connection_type (setting)); break; case PROP_PERMISSIONS: g_value_take_boxed (value, perm_permlist_to_stringlist (priv->permissions)); break; case PROP_AUTOCONNECT: g_value_set_boolean (value, nm_setting_connection_get_autoconnect (setting)); break; case PROP_TIMESTAMP: g_value_set_uint64 (value, nm_setting_connection_get_timestamp (setting)); break; case PROP_READ_ONLY: g_value_set_boolean (value, nm_setting_connection_get_read_only (setting)); break; case PROP_ZONE: g_value_set_string (value, nm_setting_connection_get_zone (setting)); break; case PROP_MASTER: g_value_set_string (value, nm_setting_connection_get_master (setting)); break; case PROP_SLAVE_TYPE: g_value_set_string (value, nm_setting_connection_get_slave_type (setting)); break; case PROP_SECONDARIES: g_value_set_boxed (value, priv->secondaries); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
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 pk_button_selection_changed_cb (GtkTreeSelection *selection, gpointer user_data) { CEPolkitButton *button = user_data; NMConnectionList *list = g_object_get_data (G_OBJECT (button), "NMConnectionList"); GtkTreeIter iter; GtkTreeModel *model; NMRemoteConnection *connection; NMSettingConnection *s_con; gboolean sensitive = FALSE; if (gtk_tree_selection_get_selected (selection, &model, &iter)) { connection = get_active_connection (list->connection_list); if (connection) { s_con = nm_connection_get_setting_connection (NM_CONNECTION (connection)); g_assert (s_con); sensitive = !nm_setting_connection_get_read_only (s_con); } } ce_polkit_button_set_master_sensitive (button, sensitive); }