Blame src/connection-editor/ce-polkit.c

Packit Service 639700
// SPDX-License-Identifier: GPL-2.0+
Packit fabffb
/* NetworkManager Connection editor -- Connection editor for NetworkManager
Packit fabffb
 *
Packit fabffb
 * Dan Williams <dcbw@redhat.com>
Packit fabffb
 *
Packit fabffb
 * Copyright 2009 - 2017 Red Hat, Inc.
Packit fabffb
 */
Packit fabffb
Packit fabffb
#include "nm-default.h"
Packit fabffb
Packit fabffb
#include <string.h>
Packit fabffb
Packit fabffb
#include "ce-polkit.h"
Packit fabffb
Packit fabffb
typedef struct {
Packit fabffb
	char *tooltip;
Packit fabffb
	char *auth_tooltip;
Packit fabffb
	char *validation_error;
Packit fabffb
Packit fabffb
	NMClientPermission permission;
Packit fabffb
	NMClientPermissionResult permission_result;
Packit fabffb
} CePolkitData;
Packit fabffb
Packit fabffb
static void
Packit fabffb
ce_polkit_data_free (CePolkitData *data)
Packit fabffb
{
Packit fabffb
	g_free (data->tooltip);
Packit fabffb
	g_free (data->auth_tooltip);
Packit fabffb
	g_free (data->validation_error);
Packit fabffb
	g_slice_free (CePolkitData, data);
Packit fabffb
}
Packit fabffb
Packit fabffb
static void
Packit fabffb
update_widget (GtkWidget *widget)
Packit fabffb
{
Packit fabffb
	CePolkitData *data = g_object_get_data (G_OBJECT (widget), "ce-polkit-data");
Packit fabffb
Packit fabffb
	if (data->validation_error) {
Packit fabffb
		gtk_widget_set_sensitive (widget, FALSE);
Packit fabffb
		gtk_widget_set_tooltip_text (widget, data->validation_error);
Packit fabffb
	} else if (data->permission_result == NM_CLIENT_PERMISSION_RESULT_AUTH) {
Packit fabffb
		gtk_widget_set_sensitive (widget, TRUE);
Packit fabffb
		gtk_widget_set_tooltip_text (widget, data->auth_tooltip);
Packit fabffb
	} else if (data->permission_result == NM_CLIENT_PERMISSION_RESULT_YES) {
Packit fabffb
		gtk_widget_set_sensitive (widget, TRUE);
Packit fabffb
		gtk_widget_set_tooltip_text (widget, data->tooltip);
Packit fabffb
	} else {
Packit fabffb
		gtk_widget_set_sensitive (widget, FALSE);
Packit fabffb
		gtk_widget_set_tooltip_text (widget, _("No polkit authorization to perform the action"));
Packit fabffb
	}
Packit fabffb
}
Packit fabffb
Packit fabffb
static void
Packit fabffb
permission_changed_cb (NMClient *client,
Packit fabffb
                       NMClientPermission permission,
Packit fabffb
                       NMClientPermissionResult result,
Packit fabffb
                       GtkWidget *widget)
Packit fabffb
{
Packit fabffb
	CePolkitData *data = g_object_get_data (G_OBJECT (widget), "ce-polkit-data");
Packit fabffb
Packit fabffb
	data->permission_result = result;
Packit fabffb
	update_widget (widget);
Packit fabffb
}
Packit fabffb
Packit fabffb
void ce_polkit_set_widget_validation_error (GtkWidget *widget,
Packit fabffb
                                            const char *validation_error)
Packit fabffb
{
Packit fabffb
	CePolkitData *data = g_object_get_data (G_OBJECT (widget), "ce-polkit-data");
Packit fabffb
Packit fabffb
	g_free (data->validation_error);
Packit fabffb
	data->validation_error = g_strdup (validation_error);
Packit fabffb
	update_widget (widget);
Packit fabffb
}
Packit fabffb
Packit fabffb
void
Packit fabffb
ce_polkit_connect_widget (GtkWidget *widget,
Packit fabffb
                          const char *tooltip,
Packit fabffb
                          const char *auth_tooltip,
Packit fabffb
                          NMClient *client,
Packit fabffb
                          NMClientPermission permission)
Packit fabffb
{
Packit fabffb
	CePolkitData *data;
Packit fabffb
Packit fabffb
	data = g_slice_new0 (CePolkitData);
Packit fabffb
	data->tooltip = g_strdup (tooltip);
Packit fabffb
	data->auth_tooltip = g_strdup (auth_tooltip);
Packit fabffb
	data->permission = permission;
Packit fabffb
	g_object_set_data_full (G_OBJECT (widget),
Packit fabffb
	                        "ce-polkit-data",
Packit fabffb
	                        data,
Packit fabffb
	                        (GDestroyNotify) ce_polkit_data_free);
Packit fabffb
Packit fabffb
	g_signal_connect_object (client,
Packit fabffb
	                         "permission-changed",
Packit fabffb
	                         G_CALLBACK (permission_changed_cb),
Packit fabffb
	                         G_OBJECT (widget),
Packit fabffb
	                         0);
Packit fabffb
Packit fabffb
	permission_changed_cb (client,
Packit fabffb
	                       permission,
Packit fabffb
	                       nm_client_get_permission_result (client, permission),
Packit fabffb
	                       widget);
Packit fabffb
}