static void on_id_combo_user_changed(GtkComboBox *combo, AuthDlgData *d) { GtkTreeIter iter; GtkTreeModel *model = gtk_combo_box_get_model(combo); PolkitIdentity *id; if (!gtk_combo_box_get_active_iter(combo, &iter)) return; gtk_tree_model_get(model, &iter, 1, &id, -1); if (d->session) { g_signal_handlers_disconnect_matched(d->session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, d); polkit_agent_session_cancel(d->session); g_object_unref(d->session); } d->session = polkit_agent_session_new(id, d->cookie); g_object_unref(id); g_signal_connect(d->session, "completed", G_CALLBACK(on_session_completed), d); g_signal_connect(d->session, "request", G_CALLBACK(on_session_request), d); g_signal_connect(d->session, "show-error", G_CALLBACK(on_session_show_error), d); g_signal_connect(d->session, "show-info", G_CALLBACK(on_session_show_info), d); polkit_agent_session_initiate(d->session); }
/* A different user is selected. */ static void on_user_changed(GtkComboBox* id_combo, DlgData* data) { GtkTreeIter it; GtkTreeModel* model = gtk_combo_box_get_model(id_combo); DEBUG("on_user_changed"); if(gtk_combo_box_get_active_iter(id_combo, &it)) { PolkitIdentity* id; gtk_tree_model_get(model, &it, 1, &id, -1); if(data->session) /* delete old session object */ { /* prevent receiving completed signal. */ g_signal_handlers_disconnect_matched(data->session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, data); polkit_agent_session_cancel(data->session); g_object_unref(data->session); } /* create authentication session for currently selected user */ data->session = polkit_agent_session_new(id, data->cookie); g_object_unref(id); g_signal_connect(data->session, "completed", G_CALLBACK(on_completed), data); g_signal_connect(data->session, "request", G_CALLBACK(on_request), data); g_signal_connect(data->session, "show-error", G_CALLBACK(on_show_error), data); g_signal_connect(data->session, "show-info", G_CALLBACK(on_show_info), data); polkit_agent_session_initiate(data->session); } }
static void initiate_authentication (PolkitAgentListener *listener, const char *action_id, const char *message, const char *icon_name, PolkitDetails *details, const char *cookie, GList *identities, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { NMPolkitListenerPrivate *priv = NM_POLKIT_LISTENER_GET_PRIVATE (listener); GSimpleAsyncResult *simple; PolkitIdentity *identity; simple = g_simple_async_result_new (G_OBJECT (listener), callback, user_data, initiate_authentication); if (priv->active_session != NULL) { g_simple_async_result_set_error (simple, POLKIT_ERROR, POLKIT_ERROR_FAILED, _("An authentication session is already underway.")); g_simple_async_result_complete_in_idle (simple); g_object_unref (simple); return; } /* Choose identity */ identity = choose_identity (identities); priv->active_session = polkit_agent_session_new (identity, cookie); g_signal_connect (priv->active_session, "completed", G_CALLBACK (on_completed), listener); g_signal_connect (priv->active_session, "request", G_CALLBACK (on_request), listener); g_signal_connect (priv->active_session, "show-info", G_CALLBACK (on_show_info), listener); g_signal_connect (priv->active_session, "show-error", G_CALLBACK (on_show_error), listener); priv->action_id = g_strdup (action_id); priv->message = g_strdup (message); priv->icon_name = g_strdup (icon_name); if (POLKIT_IS_UNIX_USER (identity)) priv->identity = g_strdup (polkit_unix_user_get_name (POLKIT_UNIX_USER (identity))); else priv->identity = polkit_identity_to_string (identity); priv->simple = simple; priv->cancellable = g_object_ref (cancellable); priv->cancel_id = g_cancellable_connect (cancellable, G_CALLBACK (on_cancelled), listener, NULL); polkit_agent_session_initiate (priv->active_session); }