1
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2
/* NetworkManager Wireless Applet -- Display wireless access points and allow user control
4
* Dan Williams <dcbw@redhat.com>
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License along
17
* with this program; if not, write to the Free Software Foundation, Inc.,
18
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
* (C) Copyright 2008 - 2011 Red Hat, Inc.
25
#include <netinet/in.h>
26
#include <sys/socket.h>
27
#include <arpa/inet.h>
30
#include <nm-device-ethernet.h>
31
#include <nm-device-wifi.h>
32
#include <nm-device-modem.h>
33
#include <nm-device-wimax.h>
35
#include <nm-setting-connection.h>
36
#include <nm-setting-wireless.h>
37
#include <nm-setting-wireless-security.h>
38
#include <nm-setting-wired.h>
39
#include <nm-setting-8021x.h>
40
#include <nm-setting-ip4-config.h>
41
#include <nm-setting-ip6-config.h>
42
#include <nm-vpn-connection.h>
46
#include <glib/gi18n.h>
48
#include "applet-dialogs.h"
52
info_dialog_show_error (const char *err)
56
dialog = gtk_message_dialog_new_with_markup (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
57
"<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s", _("Error displaying connection information:"), err);
58
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS);
59
gtk_window_present (GTK_WINDOW (dialog));
60
g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
64
ip4_address_as_string (guint32 ip)
67
struct in_addr tmp_addr;
70
ip_string = g_malloc0 (INET_ADDRSTRLEN + 1);
71
if (!inet_ntop (AF_INET, &tmp_addr, ip_string, INET_ADDRSTRLEN))
72
strcpy (ip_string, "(none)");
77
ip6_address_as_string (const struct in6_addr *ip)
79
char buf[INET6_ADDRSTRLEN];
81
memset (&buf, '\0', sizeof (buf));
83
if (inet_ntop (AF_INET6, ip, buf, INET6_ADDRSTRLEN)) {
84
return g_strdup (buf);
87
GString *ip6_str = g_string_new (NULL);
88
g_string_append_printf (ip6_str, "%02X", ip->s6_addr[0]);
89
for (j = 1; j < 16; j++)
90
g_string_append_printf (ip6_str, " %02X", ip->s6_addr[j]);
91
g_warning ("%s: error converting IP6 address %s", __func__, ip6_str->str);
92
g_string_free (ip6_str, TRUE);
98
get_eap_label (NMSettingWirelessSecurity *sec,
99
NMSetting8021x *s_8021x)
102
char *phase2_str = NULL;
105
const char *key_mgmt = nm_setting_wireless_security_get_key_mgmt (sec);
106
const char *auth_alg = nm_setting_wireless_security_get_auth_alg (sec);
108
if (!strcmp (key_mgmt, "ieee8021x")) {
109
if (auth_alg && !strcmp (auth_alg, "leap"))
110
str = g_string_new (_("LEAP"));
112
str = g_string_new (_("Dynamic WEP"));
113
} else if (!strcmp (key_mgmt, "wpa-eap"))
114
str = g_string_new (_("WPA/WPA2"));
118
str = g_string_new ("802.1x");
123
if (nm_setting_802_1x_get_num_eap_methods (s_8021x)) {
124
char *eap_str = g_ascii_strup (nm_setting_802_1x_get_eap_method (s_8021x, 0), -1);
125
g_string_append_printf (str, ", EAP-%s", eap_str);
129
if (nm_setting_802_1x_get_phase2_auth (s_8021x))
130
phase2_str = g_ascii_strup (nm_setting_802_1x_get_phase2_auth (s_8021x), -1);
131
else if (nm_setting_802_1x_get_phase2_autheap (s_8021x))
132
phase2_str = g_ascii_strup (nm_setting_802_1x_get_phase2_autheap (s_8021x), -1);
135
g_string_append (str, ", ");
136
g_string_append (str, phase2_str);
141
return g_string_free (str, FALSE);
144
static NMConnection *
145
get_connection_for_active (NMApplet *applet, NMActiveConnection *active)
148
NMConnection *connection = NULL;
151
path = nm_active_connection_get_connection (active);
152
g_return_val_if_fail (path != NULL, NULL);
154
list = applet_get_all_connections (applet);
155
for (iter = list; iter; iter = g_slist_next (iter)) {
156
NMConnection *candidate = NM_CONNECTION (iter->data);
158
if (!strcmp (nm_connection_get_path (candidate), path)) {
159
connection = candidate;
168
static NMConnection *
169
get_connection_for_active_path (NMApplet *applet, const char *active_path)
171
NMActiveConnection *active = NULL;
172
const GPtrArray *connections;
175
if (active_path == NULL)
178
connections = nm_client_get_active_connections (applet->nm_client);
179
for (i = 0; connections && (i < connections->len); i++) {
180
NMActiveConnection *candidate = g_ptr_array_index (connections, i);
181
const char *ac_path = nm_object_get_path (NM_OBJECT (candidate));
183
if (g_strcmp0 (ac_path, active_path) == 0) {
189
return active ? get_connection_for_active (applet, active) : NULL;
193
create_info_label (const char *text, gboolean selectable)
197
label = gtk_label_new (text ? text : "");
198
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
199
gtk_label_set_selectable (GTK_LABEL (label), selectable);
204
create_info_group_label (const char *text, gboolean selectable)
209
label = create_info_label (NULL, selectable);
210
markup = g_markup_printf_escaped ("<span weight=\"bold\">%s</span>", text);
211
gtk_label_set_markup (GTK_LABEL (label), markup);
218
create_info_label_security (NMConnection *connection)
220
NMSettingConnection *s_con;
223
const char *connection_type;
225
s_con = nm_connection_get_setting_connection (connection);
228
connection_type = nm_setting_connection_get_connection_type (s_con);
229
if (!strcmp (connection_type, NM_SETTING_WIRELESS_SETTING_NAME)) {
230
NMSettingWireless *s_wireless;
231
NMSettingWirelessSecurity *s_wireless_sec;
232
NMSetting8021x *s_8021x;
233
const char *security;
235
s_wireless = nm_connection_get_setting_wireless (connection);
236
s_wireless_sec = nm_connection_get_setting_wireless_security (connection);
237
s_8021x = nm_connection_get_setting_802_1x (connection);
238
security = s_wireless ? nm_setting_wireless_get_security (s_wireless) : NULL;
240
if (security && !strcmp (security, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME) && s_wireless_sec) {
241
const char *key_mgmt = nm_setting_wireless_security_get_key_mgmt (s_wireless_sec);
243
if (!strcmp (key_mgmt, "none"))
244
label = g_strdup (_("WEP"));
245
else if (!strcmp (key_mgmt, "wpa-none"))
246
label = g_strdup (_("WPA/WPA2"));
247
else if (!strcmp (key_mgmt, "wpa-psk"))
248
label = g_strdup (_("WPA/WPA2"));
250
label = get_eap_label (s_wireless_sec, s_8021x);
252
label = g_strdup (C_("Wifi/wired security", "None"));
254
} else if (!strcmp (connection_type, NM_SETTING_WIRED_SETTING_NAME)) {
255
NMSetting8021x *s_8021x;
257
s_8021x = nm_connection_get_setting_802_1x (connection);
259
label = get_eap_label (NULL, s_8021x);
261
label = g_strdup (C_("Wifi/wired security", "None"));
265
w = create_info_label (label, TRUE);
272
create_info_notebook_label (NMConnection *connection, gboolean is_default)
278
str = g_strdup_printf (_("%s (default)"), nm_connection_get_id (connection));
279
label = gtk_label_new (str);
282
label = gtk_label_new (nm_connection_get_id (connection));
294
device_destroyed (gpointer data, GObject *device_ptr)
296
LabelInfo *info = data;
298
/* Device is destroyed, notify handler won't fire
299
* anymore anyway. Let the label destroy handler
300
* know it doesn't have to disconnect the callback.
307
label_destroyed (gpointer data, GObject *label_ptr)
309
LabelInfo *info = data;
311
/* Remove the notify handler from the device */
314
g_signal_handler_disconnect (info->device, info->id);
315
/* destroy our info data */
316
g_object_weak_unref (G_OBJECT (info->device), device_destroyed, info);
317
memset (info, 0, sizeof (LabelInfo));
323
label_info_new (NMDevice *device,
325
const char *notify_prop,
330
info = g_malloc0 (sizeof (LabelInfo));
331
info->device = device;
333
info->id = g_signal_connect (device, notify_prop, callback, label);
334
g_object_weak_ref (G_OBJECT (label), label_destroyed, info);
335
g_object_weak_ref (G_OBJECT (device), device_destroyed, info);
339
bitrate_changed_cb (GObject *device, GParamSpec *pspec, gpointer user_data)
341
GtkWidget *speed_label = GTK_WIDGET (user_data);
345
bitrate = nm_device_wifi_get_bitrate (NM_DEVICE_WIFI (device)) / 1000;
347
str = g_strdup_printf (_("%u Mb/s"), bitrate);
349
gtk_label_set_text (GTK_LABEL (speed_label), str ? str : C_("Speed", "Unknown"));
354
wimax_cinr_changed_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
356
GtkWidget *label = GTK_WIDGET (user_data);
360
cinr = nm_device_wimax_get_cinr (NM_DEVICE_WIMAX (device));
362
str = g_strdup_printf (_("%d dB"), cinr);
364
gtk_label_set_text (GTK_LABEL (label), str ? str : C_("WiMAX CINR", "unknown"));
369
wimax_bsid_changed_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data)
371
GtkWidget *label = GTK_WIDGET (user_data);
372
const char *str = NULL;
374
str = nm_device_wimax_get_bsid (NM_DEVICE_WIMAX (device));
376
str = C_("WiMAX Base Station ID", "unknown");
377
gtk_label_set_text (GTK_LABEL (label), str);
381
info_dialog_add_page (GtkNotebook *notebook,
382
NMConnection *connection,
389
const char *iface, *method = NULL;
390
NMIP4Config *ip4_config;
391
NMIP6Config *ip6_config;
394
NMIP4Address *def_addr = NULL;
395
NMIP6Address *def6_addr = NULL;
396
NMSettingIP6Config *s_ip6;
397
guint32 hostmask, network, bcast, netmask;
399
GtkWidget* speed_label, *sec_label = NULL;
400
const GSList *addresses;
401
gboolean show_security = FALSE;
403
table = GTK_TABLE (gtk_table_new (12, 2, FALSE));
404
gtk_table_set_col_spacings (table, 12);
405
gtk_table_set_row_spacings (table, 6);
406
gtk_container_set_border_width (GTK_CONTAINER (table), 12);
409
iface = nm_device_get_iface (device);
410
if (NM_IS_DEVICE_ETHERNET (device)) {
411
str = g_strdup_printf (_("Ethernet (%s)"), iface);
412
show_security = TRUE;
413
} else if (NM_IS_DEVICE_WIFI (device)) {
414
str = g_strdup_printf (_("802.11 WiFi (%s)"), iface);
415
show_security = TRUE;
416
} else if (NM_IS_DEVICE_MODEM (device)) {
417
NMDeviceModemCapabilities caps;
419
caps = nm_device_modem_get_current_capabilities (NM_DEVICE_MODEM (device));
420
if (caps & NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS)
421
str = g_strdup_printf (_("GSM (%s)"), iface);
422
else if (caps & NM_DEVICE_MODEM_CAPABILITY_CDMA_EVDO)
423
str = g_strdup_printf (_("CDMA (%s)"), iface);
425
str = g_strdup_printf (_("Mobile Broadband (%s)"), iface);
426
} else if (NM_IS_DEVICE_WIMAX (device))
427
str = g_strdup_printf (_("WiMAX (%s)"), iface);
429
str = g_strdup (iface);
433
gtk_table_attach (table, create_info_group_label (_("General"), FALSE),
434
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
437
gtk_table_attach (table, create_info_label (_("Interface:"), FALSE),
438
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
439
gtk_table_attach (table, create_info_label (str, TRUE),
440
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
444
/* Hardware address */
446
if (NM_IS_DEVICE_ETHERNET (device))
447
str = g_strdup (nm_device_ethernet_get_hw_address (NM_DEVICE_ETHERNET (device)));
448
else if (NM_IS_DEVICE_WIFI (device))
449
str = g_strdup (nm_device_wifi_get_hw_address (NM_DEVICE_WIFI (device)));
450
else if (NM_IS_DEVICE_WIMAX (device))
451
str = g_strdup (nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device)));
453
gtk_table_attach (table, create_info_label (_("Hardware Address:"), FALSE),
454
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
455
gtk_table_attach (table, create_info_label (str, TRUE),
456
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
461
gtk_table_attach (table, create_info_label (_("Driver:"), FALSE),
462
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
463
gtk_table_attach (table, create_info_label (nm_device_get_driver (device), TRUE),
464
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
467
speed_label = create_info_label ("", TRUE);
471
if (NM_IS_DEVICE_ETHERNET (device)) {
472
/* Wired speed in Mb/s */
473
speed = nm_device_ethernet_get_speed (NM_DEVICE_ETHERNET (device));
474
} else if (NM_IS_DEVICE_WIFI (device)) {
475
/* Wireless speed in Kb/s */
476
speed = nm_device_wifi_get_bitrate (NM_DEVICE_WIFI (device)) / 1000;
478
label_info_new (device,
480
"notify::" NM_DEVICE_WIFI_BITRATE,
481
G_CALLBACK (bitrate_changed_cb));
485
str = g_strdup_printf (_("%u Mb/s"), speed);
487
gtk_label_set_text (GTK_LABEL(speed_label), str ? str : C_("Speed", "Unknown"));
490
gtk_table_attach (table, create_info_label (_("Speed:"), FALSE),
491
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
492
gtk_table_attach (table, speed_label,
493
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
498
sec_label = create_info_label_security (connection);
500
gtk_table_attach (table, create_info_label (_("Security:"), FALSE),
501
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
502
gtk_table_attach (table, sec_label,
503
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
508
if (NM_IS_DEVICE_WIMAX (device)) {
509
GtkWidget *bsid_label, *cinr_label;
512
cinr_label = create_info_label ("", TRUE);
513
gtk_table_attach (table, create_info_label (_("CINR:"), FALSE),
514
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
515
gtk_table_attach (table, cinr_label,
516
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
517
label_info_new (device,
519
"notify::" NM_DEVICE_WIMAX_CINR,
520
G_CALLBACK (wimax_cinr_changed_cb));
521
wimax_cinr_changed_cb (device, NULL, cinr_label);
524
/* Base Station ID */
525
bsid_label = create_info_label ("", TRUE);
526
gtk_table_attach (table, create_info_label (_("BSID:"), FALSE),
527
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
528
gtk_table_attach (table, bsid_label,
529
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
530
label_info_new (device,
532
"notify::" NM_DEVICE_WIMAX_BSID,
533
G_CALLBACK (wimax_bsid_changed_cb));
534
wimax_bsid_changed_cb (device, NULL, bsid_label);
539
gtk_table_attach (table, gtk_label_new (""), 0, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
543
gtk_table_attach (table, create_info_group_label (_("IPv4"), FALSE),
544
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
548
ip4_config = nm_device_get_ip4_config (device);
549
addresses = nm_ip4_config_get_addresses (ip4_config);
550
if (g_slist_length ((GSList *) addresses))
551
def_addr = addresses->data;
554
gtk_table_attach (table, create_info_label (_("IP Address:"), FALSE),
555
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
556
str = def_addr ? ip4_address_as_string (nm_ip4_address_get_address (def_addr)) : g_strdup (C_("Address", "Unknown"));
557
gtk_table_attach (table, create_info_label (str, TRUE),
558
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
564
netmask = nm_utils_ip4_prefix_to_netmask (nm_ip4_address_get_prefix (def_addr));
565
network = ntohl (nm_ip4_address_get_address (def_addr)) & ntohl (netmask);
566
hostmask = ~ntohl (netmask);
567
bcast = htonl (network | hostmask);
570
gtk_table_attach (table, create_info_label (_("Broadcast Address:"), FALSE),
571
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
572
str = def_addr ? ip4_address_as_string (bcast) : g_strdup (C_("Address", "Unknown"));
573
gtk_table_attach (table, create_info_label (str, TRUE),
574
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
579
gtk_table_attach (table, create_info_label (_("Subnet Mask:"), FALSE),
580
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
581
str = def_addr ? ip4_address_as_string (netmask) : g_strdup (C_("Subnet Mask", "Unknown"));
582
gtk_table_attach (table, create_info_label (str, TRUE),
583
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
588
if (def_addr && nm_ip4_address_get_gateway (def_addr)) {
589
gtk_table_attach (table, create_info_label (_("Default Route:"), FALSE),
590
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
591
str = ip4_address_as_string (nm_ip4_address_get_gateway (def_addr));
592
gtk_table_attach (table, create_info_label (str, TRUE),
593
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
599
dns = def_addr ? nm_ip4_config_get_nameservers (ip4_config) : NULL;
600
if (dns && dns->len) {
601
gtk_table_attach (table, create_info_label (_("Primary DNS:"), FALSE),
602
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
603
str = ip4_address_as_string (g_array_index (dns, guint32, 0));
604
gtk_table_attach (table, create_info_label (str, TRUE),
605
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
610
gtk_table_attach (table, create_info_label (_("Secondary DNS:"), FALSE),
611
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
612
str = ip4_address_as_string (g_array_index (dns, guint32, 1));
613
gtk_table_attach (table, create_info_label (str, TRUE),
614
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
620
gtk_table_attach (table, create_info_label (_("Ternary DNS:"), FALSE),
621
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
622
str = ip4_address_as_string (g_array_index (dns, guint32, 2));
623
gtk_table_attach (table, create_info_label (str, TRUE),
624
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
631
gtk_table_attach (table, gtk_label_new (""), 0, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
635
gtk_table_attach (table, create_info_group_label (_("IPv6"), FALSE),
636
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
639
s_ip6 = nm_connection_get_setting_ip6_config (connection);
641
method = nm_setting_ip6_config_get_method (s_ip6);
643
if (method && !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
644
gtk_table_attach (table, create_info_label (_("Ignored"), FALSE),
645
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
649
ip6_config = nm_device_get_ip6_config (device);
651
addresses = nm_ip6_config_get_addresses (ip6_config);
652
if (g_slist_length ((GSList *) addresses))
653
def6_addr = addresses->data;
661
gtk_table_attach (table, create_info_label (_("IP Address:"), FALSE),
662
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
663
tmp_addr = ip6_address_as_string (nm_ip6_address_get_address (def6_addr));
664
prefix = nm_ip6_address_get_prefix (def6_addr);
665
str = g_strdup_printf ("%s/%d", tmp_addr, prefix);
668
gtk_table_attach (table, create_info_label (str, TRUE),
669
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
675
if (def6_addr && nm_ip6_address_get_gateway (def6_addr)) {
676
gtk_table_attach (table, create_info_label (_("Default Route:"), FALSE),
677
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
678
str = ip6_address_as_string (nm_ip6_address_get_gateway (def6_addr));
679
gtk_table_attach (table, create_info_label (str, TRUE),
680
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
686
dns6 = def6_addr ? nm_ip6_config_get_nameservers (ip6_config) : NULL;
688
for (i = 0; dns6 && i < 3 ; dns6 = g_slist_next (dns6), i++) {
689
char *label[] = { "Primary DNS:", "Secondary DNS:", "Ternary DNS:" };
691
gtk_table_attach (table, create_info_label (_(label[i]), FALSE),
692
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
693
str = ip6_address_as_string (dns6->data);
694
gtk_table_attach (table, create_info_label (str, TRUE),
695
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
700
gtk_notebook_append_page (notebook, GTK_WIDGET (table),
701
create_info_notebook_label (connection, is_default));
703
gtk_widget_show_all (GTK_WIDGET (table));
707
get_vpn_connection_type (NMConnection *connection)
709
const char *type, *p;
711
/* The service type is in format of "org.freedesktop.NetworkManager.vpnc".
712
* Extract end part after last dot, e.g. "vpnc" */
713
type = nm_setting_vpn_get_service_type (nm_connection_get_setting_vpn (connection));
714
p = strrchr (type, '.');
715
return g_strdup (p ? p + 1 : type);
718
/* VPN parameters can be found at:
719
* http://git.gnome.org/browse/network-manager-openvpn/tree/src/nm-openvpn-service.h
720
* http://git.gnome.org/browse/network-manager-vpnc/tree/src/nm-vpnc-service.h
721
* http://git.gnome.org/browse/network-manager-pptp/tree/src/nm-pptp-service.h
722
* http://git.gnome.org/browse/network-manager-openconnect/tree/src/nm-openconnect-service.h
723
* http://git.gnome.org/browse/network-manager-openswan/tree/src/nm-openswan-service.h
724
* See also 'properties' directory in these plugins.
727
find_vpn_gateway_key (const char *vpn_type)
729
if (g_strcmp0 (vpn_type, "openvpn") == 0) return "remote";
730
if (g_strcmp0 (vpn_type, "vpnc") == 0) return "IPSec gateway";
731
if (g_strcmp0 (vpn_type, "pptp") == 0) return "gateway";
732
if (g_strcmp0 (vpn_type, "openconnect") == 0) return "gateway";
733
if (g_strcmp0 (vpn_type, "openswan") == 0) return "right";
738
find_vpn_username_key (const char *vpn_type)
740
if (g_strcmp0 (vpn_type, "openvpn") == 0) return "username";
741
if (g_strcmp0 (vpn_type, "vpnc") == 0) return "Xauth username";
742
if (g_strcmp0 (vpn_type, "pptp") == 0) return "user";
743
if (g_strcmp0 (vpn_type, "openconnect") == 0) return "username";
744
if (g_strcmp0 (vpn_type, "openswan") == 0) return "leftxauthusername";
749
VPN_DATA_ITEM_GATEWAY,
750
VPN_DATA_ITEM_USERNAME
754
get_vpn_data_item (NMConnection *connection, enum VpnDataItem vpn_data_item)
757
char *type = get_vpn_connection_type (connection);
759
switch (vpn_data_item) {
760
case VPN_DATA_ITEM_GATEWAY:
761
key = find_vpn_gateway_key (type);
763
case VPN_DATA_ITEM_USERNAME:
764
key = find_vpn_username_key (type);
772
return nm_setting_vpn_get_data_item (nm_connection_get_setting_vpn (connection), key);
776
info_dialog_add_page_for_vpn (GtkNotebook *notebook,
777
NMConnection *connection,
778
NMActiveConnection *active,
779
NMConnection *parent_con)
784
gboolean is_default = nm_active_connection_get_default (active);
786
table = GTK_TABLE (gtk_table_new (12, 2, FALSE));
787
gtk_table_set_col_spacings (table, 12);
788
gtk_table_set_row_spacings (table, 6);
789
gtk_container_set_border_width (GTK_CONTAINER (table), 12);
792
gtk_table_attach (table, create_info_group_label (_("General"), FALSE),
793
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
796
str = get_vpn_connection_type (connection);
797
gtk_table_attach (table, create_info_label (_("VPN Type:"), FALSE),
798
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
799
gtk_table_attach (table, create_info_label (str, TRUE),
800
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
804
gtk_table_attach (table, create_info_label (_("VPN Gateway:"), FALSE),
805
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
806
gtk_table_attach (table, create_info_label (get_vpn_data_item (connection, VPN_DATA_ITEM_GATEWAY), TRUE),
807
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
810
gtk_table_attach (table, create_info_label (_("VPN Username:"), FALSE),
811
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
812
gtk_table_attach (table, create_info_label (get_vpn_data_item (connection, VPN_DATA_ITEM_USERNAME), TRUE),
813
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
816
gtk_table_attach (table, create_info_label (_("VPN Banner:"), FALSE),
817
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
818
gtk_table_attach (table, create_info_label (nm_vpn_connection_get_banner (NM_VPN_CONNECTION (active)), TRUE),
819
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
822
gtk_table_attach (table, create_info_label (_("Base Connection:"), FALSE),
823
0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
824
gtk_table_attach (table, create_info_label (parent_con ? nm_connection_get_id (parent_con) : _("Unknown"), TRUE),
825
1, 2, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
827
gtk_notebook_append_page (notebook, GTK_WIDGET (table),
828
create_info_notebook_label (connection, is_default));
830
gtk_widget_show_all (GTK_WIDGET (table));
834
info_dialog_update (NMApplet *applet)
836
GtkNotebook *notebook;
837
const GPtrArray *connections;
841
notebook = GTK_NOTEBOOK (GTK_WIDGET (gtk_builder_get_object (applet->info_dialog_ui, "info_notebook")));
843
/* Remove old pages */
844
for (i = gtk_notebook_get_n_pages (notebook); i > 0; i--)
845
gtk_notebook_remove_page (notebook, -1);
848
connections = nm_client_get_active_connections (applet->nm_client);
849
for (i = 0; connections && (i < connections->len); i++) {
850
NMActiveConnection *active_connection = g_ptr_array_index (connections, i);
851
NMConnection *connection;
852
const GPtrArray *devices;
854
if (nm_active_connection_get_state (active_connection) != NM_ACTIVE_CONNECTION_STATE_ACTIVATED)
857
connection = get_connection_for_active (applet, active_connection);
859
g_warning ("%s: couldn't find the default active connection's NMConnection!", __func__);
863
devices = nm_active_connection_get_devices (active_connection);
864
if (devices && devices->len > 0)
865
info_dialog_add_page (notebook,
867
nm_active_connection_get_default (active_connection),
868
g_ptr_array_index (devices, 0));
870
if (NM_IS_VPN_CONNECTION (active_connection)) {
871
const char *spec_object = nm_active_connection_get_specific_object (active_connection);
872
NMConnection *parent_con = get_connection_for_active_path (applet, spec_object);
874
info_dialog_add_page_for_vpn (notebook, connection, active_connection, parent_con);
876
g_warning ("Active connection %s had no devices and was not a VPN!",
877
nm_object_get_path (NM_OBJECT (active_connection)));
886
/* Shouldn't really happen but ... */
887
info_dialog_show_error (_("No valid active connections found!"));
891
return GTK_WIDGET (gtk_builder_get_object (applet->info_dialog_ui, "info_dialog"));
895
applet_info_dialog_show (NMApplet *applet)
899
dialog = info_dialog_update (applet);
903
g_signal_connect (dialog, "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), dialog);
904
g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_hide), dialog);
905
gtk_widget_realize (dialog);
906
gtk_window_set_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ALWAYS);
907
gtk_window_present_with_time (GTK_WINDOW (dialog),
908
gdk_x11_get_server_time (gtk_widget_get_window (dialog)));
911
#if !GTK_CHECK_VERSION(2,23,0)
913
about_dialog_handle_url_cb (GtkAboutDialog *about, const gchar *url, gpointer data)
919
screen = gtk_window_get_screen (GTK_WINDOW (about));
921
cmdline = g_strconcat ("gnome-open ", url, NULL);
922
ret = gdk_spawn_command_line_on_screen (screen, cmdline, NULL);
926
cmdline = g_strconcat ("xdg-open ", url, NULL);
927
ret = gdk_spawn_command_line_on_screen (screen, cmdline, NULL);
934
applet_about_dialog_show (NMApplet *applet)
936
#if !GTK_CHECK_VERSION(2,23,0)
937
gtk_about_dialog_set_url_hook (about_dialog_handle_url_cb, NULL, NULL);
939
gtk_show_about_dialog (NULL,
941
"copyright", _("Copyright \xc2\xa9 2004-2011 Red Hat, Inc.\n"
942
"Copyright \xc2\xa9 2005-2008 Novell, Inc.\n"
943
"and many other community contributors and translators"),
944
"comments", _("Notification area applet for managing your network devices and connections."),
945
"website", "http://www.gnome.org/projects/NetworkManager/",
946
"website-label", _("NetworkManager Website"),
947
"logo-icon-name", GTK_STOCK_NETWORK,
952
applet_warning_dialog_show (const char *message)
956
dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, message, NULL);
958
/* Bash focus-stealing prevention in the face */
959
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS);
960
gtk_window_set_default_icon_name (GTK_STOCK_DIALOG_ERROR);
961
gtk_window_set_title (GTK_WINDOW (dialog), _("Missing resources"));
962
gtk_widget_realize (dialog);
963
gtk_widget_show (dialog);
964
gtk_window_present_with_time (GTK_WINDOW (dialog),
965
gdk_x11_get_server_time (gtk_widget_get_window (dialog)));
967
g_signal_connect_swapped (dialog, "response",
968
G_CALLBACK (gtk_widget_destroy),
974
applet_mobile_password_dialog_new (NMConnection *connection,
975
GtkEntry **out_secret_entry)
979
GtkBox *box = NULL, *vbox = NULL;
980
NMSettingConnection *s_con;
984
dialog = GTK_DIALOG (gtk_dialog_new ());
985
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
986
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS);
987
gtk_window_set_title (GTK_WINDOW (dialog), _("Mobile broadband network password"));
989
w = gtk_dialog_add_button (dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
990
w = gtk_dialog_add_button (dialog, GTK_STOCK_OK, GTK_RESPONSE_OK);
991
gtk_window_set_default (GTK_WINDOW (dialog), w);
993
s_con = nm_connection_get_setting_connection (connection);
994
id = nm_setting_connection_get_id (s_con);
996
tmp = g_strdup_printf (_("A password is required to connect to '%s'."), id);
997
w = gtk_label_new (tmp);
1000
vbox = GTK_BOX (gtk_dialog_get_content_area (dialog));
1002
gtk_box_pack_start (vbox, w, TRUE, TRUE, 0);
1004
w = gtk_alignment_new (0.5, 0.5, 0, 1.0);
1005
gtk_box_pack_start (vbox, w, TRUE, TRUE, 0);
1007
#if GTK_CHECK_VERSION(3,1,6)
1008
box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6));
1010
box = GTK_BOX (gtk_hbox_new (FALSE, 6));
1012
gtk_container_set_border_width (GTK_CONTAINER (box), 6);
1013
gtk_container_add (GTK_CONTAINER (w), GTK_WIDGET (box));
1015
gtk_box_pack_start (box, gtk_label_new (_("Password:")), FALSE, FALSE, 0);
1017
w = gtk_entry_new ();
1018
*out_secret_entry = GTK_ENTRY (w);
1019
gtk_entry_set_activates_default (GTK_ENTRY (w), TRUE);
1020
gtk_box_pack_start (box, w, FALSE, FALSE, 0);
1022
gtk_widget_show_all (GTK_WIDGET (vbox));
1023
return GTK_WIDGET (dialog);
1026
/**********************************************************************/
1029
mpd_entry_changed (GtkWidget *widget, gpointer user_data)
1031
GtkWidget *dialog = GTK_WIDGET (user_data);
1032
GtkBuilder *builder = g_object_get_data (G_OBJECT (dialog), "builder");
1035
gboolean valid = FALSE;
1036
const char *text, *text2 = NULL, *text3 = NULL;
1039
g_return_if_fail (builder != NULL);
1041
entry = GTK_WIDGET (gtk_builder_get_object (builder, "code1_entry"));
1042
if (g_object_get_data (G_OBJECT (entry), "active")) {
1043
minlen = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (entry), "minlen"));
1044
text = gtk_entry_get_text (GTK_ENTRY (entry));
1045
if (text && (strlen (text) < minlen))
1049
entry = GTK_WIDGET (gtk_builder_get_object (builder, "code2_entry"));
1050
if (g_object_get_data (G_OBJECT (entry), "active")) {
1051
minlen = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (entry), "minlen"));
1052
text2 = gtk_entry_get_text (GTK_ENTRY (entry));
1053
if (text2 && (strlen (text2) < minlen))
1057
entry = GTK_WIDGET (gtk_builder_get_object (builder, "code3_entry"));
1058
if (g_object_get_data (G_OBJECT (entry), "active")) {
1059
minlen = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (entry), "minlen"));
1060
text3 = gtk_entry_get_text (GTK_ENTRY (entry));
1061
if (text3 && (strlen (text3) < minlen))
1065
/* Validate 2 & 3 if they are supposed to be the same */
1066
match23 = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (dialog), "match23"));
1068
if (!text2 || !text3 || strcmp (text2, text3))
1075
/* Clear any error text in the progress label now that the user has changed something */
1076
widget = GTK_WIDGET (gtk_builder_get_object (builder, "progress_label"));
1077
gtk_label_set_text (GTK_LABEL (widget), "");
1079
widget = GTK_WIDGET (gtk_builder_get_object (builder, "unlock_button"));
1080
g_warn_if_fail (widget != NULL);
1081
gtk_widget_set_sensitive (widget, valid);
1083
gtk_widget_grab_default (widget);
1087
applet_mobile_pin_dialog_destroy (GtkWidget *widget)
1089
gtk_widget_hide (widget);
1090
gtk_widget_destroy (widget);
1094
mpd_cancel_dialog (GtkDialog *dialog)
1096
gtk_dialog_response (dialog, GTK_RESPONSE_CANCEL);
1100
show_toggled_cb (GtkWidget *button, gpointer user_data)
1102
GtkWidget *dialog = GTK_WIDGET (user_data);
1105
GtkBuilder *builder;
1107
builder = g_object_get_data (G_OBJECT (dialog), "builder");
1108
g_return_if_fail (builder != NULL);
1110
show = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
1112
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code1_entry"));
1113
gtk_entry_set_visibility (GTK_ENTRY (widget), show);
1114
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code2_entry"));
1115
gtk_entry_set_visibility (GTK_ENTRY (widget), show);
1116
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code3_entry"));
1117
gtk_entry_set_visibility (GTK_ENTRY (widget), show);
1121
applet_mobile_pin_dialog_new (const char *title,
1124
const char *show_password_label,
1125
gboolean show_auto_unlock_checkbox)
1130
GError *error = NULL;
1131
GtkBuilder *builder;
1133
g_return_val_if_fail (title != NULL, NULL);
1134
g_return_val_if_fail (header != NULL, NULL);
1135
g_return_val_if_fail (desc != NULL, NULL);
1136
g_return_val_if_fail (show_password_label != NULL, NULL);
1138
builder = gtk_builder_new ();
1140
if (!gtk_builder_add_from_file (builder, UIDIR "/gsm-unlock.ui", &error)) {
1141
g_warning ("Couldn't load builder file: %s", error->message);
1142
g_error_free (error);
1143
g_object_unref (builder);
1147
dialog = GTK_WIDGET (gtk_builder_get_object (builder, "unlock_dialog"));
1149
g_object_unref (builder);
1150
g_return_val_if_fail (dialog != NULL, NULL);
1153
g_object_set_data_full (G_OBJECT (dialog), "builder", builder, (GDestroyNotify) g_object_unref);
1155
gtk_window_set_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ALWAYS);
1156
gtk_window_set_title (GTK_WINDOW (dialog), title);
1158
widget = GTK_WIDGET (gtk_builder_get_object (builder, "header_label"));
1159
str = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>", header);
1160
gtk_label_set_use_markup (GTK_LABEL (widget), TRUE);
1161
gtk_label_set_markup (GTK_LABEL (widget), str);
1164
widget = GTK_WIDGET (gtk_builder_get_object (builder, "desc_label"));
1165
gtk_label_set_text (GTK_LABEL (widget), desc);
1167
widget = GTK_WIDGET (gtk_builder_get_object (builder, "show_password_checkbutton"));
1168
gtk_button_set_label (GTK_BUTTON (widget), show_password_label);
1169
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
1170
g_signal_connect (widget, "toggled", G_CALLBACK (show_toggled_cb), dialog);
1171
show_toggled_cb (widget, dialog);
1173
g_signal_connect (dialog, "delete-event", G_CALLBACK (mpd_cancel_dialog), NULL);
1175
widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_checkbutton"));
1176
if (show_auto_unlock_checkbox)
1177
g_object_set_data (G_OBJECT (widget), "active", GUINT_TO_POINTER (TRUE));
1179
mpd_entry_changed (NULL, dialog);
1185
applet_mobile_pin_dialog_present (GtkWidget *dialog, gboolean now)
1187
GtkBuilder *builder;
1190
g_return_if_fail (dialog != NULL);
1191
builder = g_object_get_data (G_OBJECT (dialog), "builder");
1192
g_return_if_fail (builder != NULL);
1194
gtk_widget_show_all (dialog);
1196
widget = GTK_WIDGET (gtk_builder_get_object (builder, "progress_hbox"));
1197
gtk_widget_hide (widget);
1199
/* Hide inactive entries */
1201
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code2_entry"));
1202
if (!g_object_get_data (G_OBJECT (widget), "active")) {
1203
gtk_widget_hide (widget);
1204
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code2_label"));
1205
gtk_widget_hide (widget);
1208
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code3_entry"));
1209
if (!g_object_get_data (G_OBJECT (widget), "active")) {
1210
gtk_widget_hide (widget);
1211
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code3_label"));
1212
gtk_widget_hide (widget);
1215
widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_checkbutton"));
1216
if (!g_object_get_data (G_OBJECT (widget), "active"))
1217
gtk_widget_hide (widget);
1219
/* Need to resize the dialog after hiding widgets */
1220
gtk_window_resize (GTK_WINDOW (dialog), 400, 100);
1222
/* Show the dialog */
1223
gtk_widget_realize (dialog);
1225
gtk_window_present_with_time (GTK_WINDOW (dialog),
1226
gdk_x11_get_server_time (gtk_widget_get_window (dialog)));
1228
gtk_window_present (GTK_WINDOW (dialog));
1232
mpd_entry_filter (GtkEntry *entry,
1238
GtkEditable *editable = GTK_EDITABLE (entry);
1240
gchar *result = g_malloc0 (length);
1243
for (i = 0; i < length; i++) {
1244
if (isdigit (text[i]))
1245
result[count++] = text[i];
1249
g_signal_handlers_block_by_func (G_OBJECT (editable),
1250
G_CALLBACK (mpd_entry_filter),
1252
gtk_editable_insert_text (editable, result, count, position);
1253
g_signal_handlers_unblock_by_func (G_OBJECT (editable),
1254
G_CALLBACK (mpd_entry_filter),
1257
g_signal_stop_emission_by_name (G_OBJECT (editable), "insert-text");
1262
mpd_set_entry (GtkWidget *dialog,
1263
const char *entry_name,
1264
const char *label_name,
1269
GtkBuilder *builder;
1271
gboolean entry2_active = FALSE;
1272
gboolean entry3_active = FALSE;
1274
g_return_if_fail (dialog != NULL);
1275
builder = g_object_get_data (G_OBJECT (dialog), "builder");
1276
g_return_if_fail (builder != NULL);
1278
widget = GTK_WIDGET (gtk_builder_get_object (builder, label_name));
1279
gtk_label_set_text (GTK_LABEL (widget), label);
1281
widget = GTK_WIDGET (gtk_builder_get_object (builder, entry_name));
1282
g_signal_connect (widget, "changed", G_CALLBACK (mpd_entry_changed), dialog);
1283
g_signal_connect (widget, "insert-text", G_CALLBACK (mpd_entry_filter), NULL);
1286
gtk_entry_set_max_length (GTK_ENTRY (widget), maxlen);
1287
g_object_set_data (G_OBJECT (widget), "minlen", GUINT_TO_POINTER (minlen));
1289
/* Tag it so we know it's active */
1290
g_object_set_data (G_OBJECT (widget), "active", GUINT_TO_POINTER (1));
1292
/* Make a single-entry dialog look better */
1293
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code2_entry"));
1294
entry2_active = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), "active"));
1295
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code3_entry"));
1296
entry3_active = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), "active"));
1298
widget = GTK_WIDGET (gtk_builder_get_object (builder, "table14"));
1299
if (entry2_active || entry3_active)
1300
gtk_table_set_row_spacings (GTK_TABLE (widget), 6);
1302
gtk_table_set_row_spacings (GTK_TABLE (widget), 0);
1304
mpd_entry_changed (NULL, dialog);
1308
applet_mobile_pin_dialog_set_entry1 (GtkWidget *dialog,
1313
mpd_set_entry (dialog, "code1_entry", "code1_label", label, minlen, maxlen);
1317
applet_mobile_pin_dialog_set_entry2 (GtkWidget *dialog,
1322
mpd_set_entry (dialog, "code2_entry", "code2_label", label, minlen, maxlen);
1326
applet_mobile_pin_dialog_set_entry3 (GtkWidget *dialog,
1331
mpd_set_entry (dialog, "code3_entry", "code3_label", label, minlen, maxlen);
1334
void applet_mobile_pin_dialog_match_23 (GtkWidget *dialog, gboolean match)
1336
g_return_if_fail (dialog != NULL);
1338
g_object_set_data (G_OBJECT (dialog), "match23", GUINT_TO_POINTER (match));
1342
mpd_get_entry (GtkWidget *dialog, const char *entry_name)
1344
GtkBuilder *builder;
1347
g_return_val_if_fail (dialog != NULL, NULL);
1348
builder = g_object_get_data (G_OBJECT (dialog), "builder");
1349
g_return_val_if_fail (builder != NULL, NULL);
1351
widget = GTK_WIDGET (gtk_builder_get_object (builder, entry_name));
1352
return gtk_entry_get_text (GTK_ENTRY (widget));
1356
applet_mobile_pin_dialog_get_entry1 (GtkWidget *dialog)
1358
return mpd_get_entry (dialog, "code1_entry");
1362
applet_mobile_pin_dialog_get_entry2 (GtkWidget *dialog)
1364
return mpd_get_entry (dialog, "code2_entry");
1368
applet_mobile_pin_dialog_get_entry3 (GtkWidget *dialog)
1370
return mpd_get_entry (dialog, "code3_entry");
1374
applet_mobile_pin_dialog_get_auto_unlock (GtkWidget *dialog)
1376
GtkBuilder *builder;
1379
g_return_val_if_fail (dialog != NULL, FALSE);
1380
builder = g_object_get_data (G_OBJECT (dialog), "builder");
1381
g_return_val_if_fail (builder != NULL, FALSE);
1383
widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_checkbutton"));
1384
return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
1388
applet_mobile_pin_dialog_start_spinner (GtkWidget *dialog, const char *text)
1390
GtkBuilder *builder;
1391
GtkWidget *spinner, *widget, *hbox, *align;
1393
g_return_if_fail (dialog != NULL);
1394
g_return_if_fail (text != NULL);
1396
builder = g_object_get_data (G_OBJECT (dialog), "builder");
1397
g_return_if_fail (builder != NULL);
1399
spinner = gtk_spinner_new ();
1400
g_return_if_fail (spinner != NULL);
1401
g_object_set_data (G_OBJECT (dialog), "spinner", spinner);
1403
align = GTK_WIDGET (gtk_builder_get_object (builder, "spinner_alignment"));
1404
gtk_container_add (GTK_CONTAINER (align), spinner);
1405
gtk_spinner_start (GTK_SPINNER (spinner));
1407
widget = GTK_WIDGET (gtk_builder_get_object (builder, "progress_label"));
1408
gtk_label_set_text (GTK_LABEL (widget), text);
1409
gtk_widget_show (widget);
1411
hbox = GTK_WIDGET (gtk_builder_get_object (builder, "progress_hbox"));
1412
gtk_widget_show_all (hbox);
1414
/* Desensitize everything while spinning */
1415
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code1_entry"));
1416
gtk_widget_set_sensitive (widget, FALSE);
1417
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code2_entry"));
1418
gtk_widget_set_sensitive (widget, FALSE);
1419
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code3_entry"));
1420
gtk_widget_set_sensitive (widget, FALSE);
1421
widget = GTK_WIDGET (gtk_builder_get_object (builder, "unlock_button"));
1422
gtk_widget_set_sensitive (widget, FALSE);
1423
widget = GTK_WIDGET (gtk_builder_get_object (builder, "unlock_cancel_button"));
1424
gtk_widget_set_sensitive (widget, FALSE);
1426
widget = GTK_WIDGET (gtk_builder_get_object (builder, "show_password_checkbutton"));
1427
gtk_widget_set_sensitive (widget, FALSE);
1431
applet_mobile_pin_dialog_stop_spinner (GtkWidget *dialog, const char *text)
1433
GtkBuilder *builder;
1434
GtkWidget *spinner, *widget, *align;
1436
g_return_if_fail (dialog != NULL);
1438
builder = g_object_get_data (G_OBJECT (dialog), "builder");
1439
g_return_if_fail (builder != NULL);
1441
spinner = g_object_get_data (G_OBJECT (dialog), "spinner");
1442
g_return_if_fail (spinner != NULL);
1443
gtk_spinner_stop (GTK_SPINNER (spinner));
1444
g_object_set_data (G_OBJECT (dialog), "spinner", NULL);
1446
/* Remove it from the alignment */
1447
align = GTK_WIDGET (gtk_builder_get_object (builder, "spinner_alignment"));
1448
gtk_container_remove (GTK_CONTAINER (align), spinner);
1450
widget = GTK_WIDGET (gtk_builder_get_object (builder, "progress_label"));
1452
gtk_label_set_text (GTK_LABEL (widget), text);
1453
gtk_widget_show (widget);
1455
gtk_widget_hide (widget);
1457
/* Resensitize stuff */
1458
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code1_entry"));
1459
gtk_widget_set_sensitive (widget, TRUE);
1460
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code2_entry"));
1461
gtk_widget_set_sensitive (widget, TRUE);
1462
widget = GTK_WIDGET (gtk_builder_get_object (builder, "code3_entry"));
1463
gtk_widget_set_sensitive (widget, TRUE);
1464
widget = GTK_WIDGET (gtk_builder_get_object (builder, "unlock_button"));
1465
gtk_widget_set_sensitive (widget, TRUE);
1466
widget = GTK_WIDGET (gtk_builder_get_object (builder, "unlock_cancel_button"));
1467
gtk_widget_set_sensitive (widget, TRUE);
1469
widget = GTK_WIDGET (gtk_builder_get_object (builder, "show_password_checkbutton"));
1470
gtk_widget_set_sensitive (widget, TRUE);