~ubuntu-branches/ubuntu/saucy/network-manager-applet/saucy-updates

« back to all changes in this revision

Viewing changes to src/applet-dialogs.c

  • Committer: Package Import Robot
  • Author(s): Mathieu Trudel-Lapierre
  • Date: 2013-02-05 16:15:00 UTC
  • mfrom: (1.2.33)
  • Revision ID: package-import@ubuntu.com-20130205161500-nax1yrh7klr0o8ir
Tags: 0.9.7.995+git201301311844.0376019-0ubuntu1
* upstream snapshot 2013-01-31 18:44:13 (GMT)
  + 03760194e54eaeaf493e9b45c4835e84524d8650
* debian/patches/nm-applet-use-indicator.patch: refreshed.
* debian/patches/lp1048516_dont_req_keyring_in_greeter.patch: refreshed.
* debian/patches/lp289466_always_show_tray_icon.patch: refreshed.
* debian/patches/lp829673_gconf_hide_applet.patch: refreshed.
* debian/patches/position_dialogs_to_center_of_the_screen.patch: refreshed.
* debian/patches/hide_policy_items_env_var.patch: refreshed.
* debian/patches/lp1048520_delay_pin_dialog_in_greeter.patch: refreshed.
* debian/patches/nm-applet-use-indicator.patch: fix the addition of separator
  menu items to avoid multiple separators added in a block.
* debian/control: bump network-manager Depends and Build-Depends to the
  appropriate snapshot version.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1081
1081
                gtk_widget_grab_default (widget);
1082
1082
}
1083
1083
 
1084
 
void
1085
 
applet_mobile_pin_dialog_destroy (GtkWidget *widget)
1086
 
{
1087
 
        gtk_widget_hide (widget);
1088
 
        gtk_widget_destroy (widget);
1089
 
}
1090
 
 
1091
1084
static void
1092
1085
mpd_cancel_dialog (GtkDialog *dialog)
1093
1086
{
1115
1108
        gtk_entry_set_visibility (GTK_ENTRY (widget), show);
1116
1109
}
1117
1110
 
1118
 
GtkWidget *
1119
 
applet_mobile_pin_dialog_new (const char *title,
1120
 
                              const char *header,
1121
 
                              const char *desc,
1122
 
                              const char *show_password_label,
1123
 
                              gboolean show_auto_unlock_checkbox)
1124
 
{
1125
 
        char *str;
1126
 
        GtkWidget *dialog;
1127
 
        GtkWidget *widget;
1128
 
        GError *error = NULL;
1129
 
        GtkBuilder *builder;
1130
 
 
1131
 
        g_return_val_if_fail (title != NULL, NULL);
1132
 
        g_return_val_if_fail (header != NULL, NULL);
1133
 
        g_return_val_if_fail (desc != NULL, NULL);
1134
 
        g_return_val_if_fail (show_password_label != NULL, NULL);
1135
 
 
1136
 
        builder = gtk_builder_new ();
1137
 
 
1138
 
        if (!gtk_builder_add_from_file (builder, UIDIR "/gsm-unlock.ui", &error)) {
1139
 
                g_warning ("Couldn't load builder file: %s", error->message);
1140
 
                g_error_free (error);
1141
 
                g_object_unref (builder);
1142
 
                return NULL;
1143
 
        }
1144
 
 
1145
 
        dialog = GTK_WIDGET (gtk_builder_get_object (builder, "unlock_dialog"));
1146
 
        if (!dialog) {
1147
 
                g_object_unref (builder);
1148
 
                g_return_val_if_fail (dialog != NULL, NULL);
1149
 
        }
1150
 
 
1151
 
        g_object_set_data_full (G_OBJECT (dialog), "builder", builder, (GDestroyNotify) g_object_unref);
1152
 
 
1153
 
        gtk_window_set_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ALWAYS);
1154
 
        gtk_window_set_title (GTK_WINDOW (dialog), title);
1155
 
 
1156
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "header_label"));
1157
 
        str = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>", header);
1158
 
        gtk_label_set_use_markup (GTK_LABEL (widget), TRUE);
1159
 
        gtk_label_set_markup (GTK_LABEL (widget), str);
1160
 
        g_free (str);
1161
 
 
1162
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "desc_label"));
1163
 
        gtk_label_set_text (GTK_LABEL (widget), desc);
1164
 
 
1165
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "show_password_checkbutton"));
1166
 
        gtk_button_set_label (GTK_BUTTON (widget), show_password_label);
1167
 
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
1168
 
        g_signal_connect (widget, "toggled", G_CALLBACK (show_toggled_cb), dialog);
1169
 
        show_toggled_cb (widget, dialog);
1170
 
 
1171
 
        g_signal_connect (dialog, "delete-event", G_CALLBACK (mpd_cancel_dialog), NULL);
1172
 
 
1173
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_checkbutton"));
1174
 
        if (show_auto_unlock_checkbox)
1175
 
                g_object_set_data (G_OBJECT (widget), "active", GUINT_TO_POINTER (TRUE));
1176
 
 
1177
 
        mpd_entry_changed (NULL, dialog);
1178
 
 
1179
 
        return dialog;
1180
 
}
1181
 
 
1182
 
void
1183
 
applet_mobile_pin_dialog_present (GtkWidget *dialog, gboolean now)
1184
 
{
1185
 
        GtkBuilder *builder;
1186
 
        GtkWidget *widget;
1187
 
 
1188
 
        g_return_if_fail (dialog != NULL);
1189
 
        builder = g_object_get_data (G_OBJECT (dialog), "builder");
1190
 
        g_return_if_fail (builder != NULL);
1191
 
 
1192
 
        gtk_widget_show_all (dialog);
1193
 
 
1194
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "progress_hbox"));
1195
 
        gtk_widget_hide (widget);
1196
 
 
1197
 
        /* Hide inactive entries */
1198
 
 
1199
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "code2_entry"));
1200
 
        if (!g_object_get_data (G_OBJECT (widget), "active")) {
1201
 
                gtk_widget_hide (widget);
1202
 
                widget = GTK_WIDGET (gtk_builder_get_object (builder, "code2_label"));
1203
 
                gtk_widget_hide (widget);
1204
 
        }
1205
 
 
1206
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "code3_entry"));
1207
 
        if (!g_object_get_data (G_OBJECT (widget), "active")) {
1208
 
                gtk_widget_hide (widget);
1209
 
                widget = GTK_WIDGET (gtk_builder_get_object (builder, "code3_label"));
1210
 
                gtk_widget_hide (widget);
1211
 
        }
1212
 
 
1213
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_checkbutton"));
1214
 
        if (!g_object_get_data (G_OBJECT (widget), "active"))
1215
 
                gtk_widget_hide (widget);
1216
 
 
1217
 
        /* Need to resize the dialog after hiding widgets */
1218
 
        gtk_window_resize (GTK_WINDOW (dialog), 400, 100);
1219
 
 
1220
 
        /* Show the dialog */
1221
 
        gtk_widget_realize (dialog);
1222
 
        if (now)
1223
 
                gtk_window_present_with_time (GTK_WINDOW (dialog),
1224
 
                        gdk_x11_get_server_time (gtk_widget_get_window (dialog)));
1225
 
        else
1226
 
                gtk_window_present (GTK_WINDOW (dialog));
1227
 
}
1228
 
 
1229
1111
static void
1230
1112
mpd_entry_filter (GtkEntry *entry,
1231
1113
                  const char *text,
1256
1138
        g_free (result);
1257
1139
}
1258
1140
 
1259
 
static void
1260
 
mpd_set_entry (GtkWidget *dialog,
1261
 
               const char *entry_name,
1262
 
               const char *label_name,
1263
 
               const char *label,
1264
 
               guint32 minlen,
1265
 
               guint32 maxlen)
1266
 
{
1267
 
        GtkBuilder *builder;
1268
 
        GtkWidget *widget;
1269
 
        gboolean entry2_active = FALSE;
1270
 
        gboolean entry3_active = FALSE;
1271
 
 
1272
 
        g_return_if_fail (dialog != NULL);
1273
 
        builder = g_object_get_data (G_OBJECT (dialog), "builder");
1274
 
        g_return_if_fail (builder != NULL);
1275
 
 
1276
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, label_name));
1277
 
        gtk_label_set_text (GTK_LABEL (widget), label);
1278
 
 
1279
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, entry_name));
1280
 
        g_signal_connect (widget, "changed", G_CALLBACK (mpd_entry_changed), dialog);
1281
 
        g_signal_connect (widget, "insert-text", G_CALLBACK (mpd_entry_filter), NULL);
1282
 
 
1283
 
        if (maxlen)
1284
 
                gtk_entry_set_max_length (GTK_ENTRY (widget), maxlen);
1285
 
        g_object_set_data (G_OBJECT (widget), "minlen", GUINT_TO_POINTER (minlen));
1286
 
 
1287
 
        /* Tag it so we know it's active */
1288
 
        g_object_set_data (G_OBJECT (widget), "active", GUINT_TO_POINTER (1));
1289
 
 
1290
 
        /* Make a single-entry dialog look better */
1291
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "code2_entry"));
1292
 
        entry2_active = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), "active"));
1293
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "code3_entry"));
1294
 
        entry3_active = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), "active"));
1295
 
 
1296
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "table14"));
1297
 
        if (entry2_active || entry3_active)
1298
 
                gtk_table_set_row_spacings (GTK_TABLE (widget), 6);
1299
 
        else
1300
 
                gtk_table_set_row_spacings (GTK_TABLE (widget), 0);
1301
 
 
1302
 
        mpd_entry_changed (NULL, dialog);
1303
 
}
1304
 
 
1305
 
void
1306
 
applet_mobile_pin_dialog_set_entry1 (GtkWidget *dialog,
1307
 
                                     const char *label,
1308
 
                                     guint32 minlen,
1309
 
                                     guint32 maxlen)
1310
 
{
1311
 
        mpd_set_entry (dialog, "code1_entry", "code1_label", label, minlen, maxlen);
1312
 
}
1313
 
 
1314
 
void
1315
 
applet_mobile_pin_dialog_set_entry2 (GtkWidget *dialog,
1316
 
                                     const char *label,
1317
 
                                     guint32 minlen,
1318
 
                                     guint32 maxlen)
1319
 
{
1320
 
        mpd_set_entry (dialog, "code2_entry", "code2_label", label, minlen, maxlen);
1321
 
}
1322
 
 
1323
 
void
1324
 
applet_mobile_pin_dialog_set_entry3 (GtkWidget *dialog,
1325
 
                                     const char *label,
1326
 
                                     guint32 minlen,
1327
 
                                     guint32 maxlen)
1328
 
{
1329
 
        mpd_set_entry (dialog, "code3_entry", "code3_label", label, minlen, maxlen);
1330
 
}
1331
 
 
1332
 
void applet_mobile_pin_dialog_match_23 (GtkWidget *dialog, gboolean match)
1333
 
{
1334
 
        g_return_if_fail (dialog != NULL);
1335
 
 
1336
 
        g_object_set_data (G_OBJECT (dialog), "match23", GUINT_TO_POINTER (match));
1337
 
}
1338
 
 
1339
 
static const char *
1340
 
mpd_get_entry (GtkWidget *dialog, const char *entry_name)
1341
 
{
1342
 
        GtkBuilder *builder;
1343
 
        GtkWidget *widget;
1344
 
 
1345
 
        g_return_val_if_fail (dialog != NULL, NULL);
1346
 
        builder = g_object_get_data (G_OBJECT (dialog), "builder");
1347
 
        g_return_val_if_fail (builder != NULL, NULL);
1348
 
 
1349
 
        widget = GTK_WIDGET (gtk_builder_get_object (builder, entry_name));
1350
 
        return gtk_entry_get_text (GTK_ENTRY (widget));
1351
 
}
1352
 
 
1353
1141
const char *
1354
1142
applet_mobile_pin_dialog_get_entry1 (GtkWidget *dialog)
1355
1143
{
1356
 
        return mpd_get_entry (dialog, "code1_entry");
 
1144
        GtkBuilder *builder;
 
1145
        GtkWidget *widget;
 
1146
 
 
1147
        g_return_val_if_fail (dialog != NULL, NULL);
 
1148
        builder = g_object_get_data (G_OBJECT (dialog), "builder");
 
1149
        g_return_val_if_fail (builder != NULL, NULL);
 
1150
 
 
1151
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "code1_entry"));
 
1152
        return gtk_entry_get_text (GTK_ENTRY (widget));
1357
1153
}
1358
1154
 
1359
1155
const char *
1360
1156
applet_mobile_pin_dialog_get_entry2 (GtkWidget *dialog)
1361
1157
{
1362
 
        return mpd_get_entry (dialog, "code2_entry");
1363
 
}
1364
 
 
1365
 
const char *
1366
 
applet_mobile_pin_dialog_get_entry3 (GtkWidget *dialog)
1367
 
{
1368
 
        return mpd_get_entry (dialog, "code3_entry");
 
1158
        GtkBuilder *builder;
 
1159
        GtkWidget *widget;
 
1160
 
 
1161
        g_return_val_if_fail (dialog != NULL, NULL);
 
1162
        builder = g_object_get_data (G_OBJECT (dialog), "builder");
 
1163
        g_return_val_if_fail (builder != NULL, NULL);
 
1164
 
 
1165
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "code2_entry"));
 
1166
        return gtk_entry_get_text (GTK_ENTRY (widget));
1369
1167
}
1370
1168
 
1371
1169
gboolean
1468
1266
        gtk_widget_set_sensitive (widget, TRUE);
1469
1267
}
1470
1268
 
 
1269
GtkWidget *
 
1270
applet_mobile_pin_dialog_new (const char *unlock_required,
 
1271
                              const char *device_description)
 
1272
{
 
1273
        char *str;
 
1274
        GtkWidget *dialog;
 
1275
        GtkWidget *widget;
 
1276
        GtkWidget *label;
 
1277
        GError *error = NULL;
 
1278
        GtkBuilder *builder;
 
1279
        const char *header = NULL;
 
1280
        const char *title = NULL;
 
1281
        const char *show_password_label = NULL;
 
1282
        char *desc = NULL;
 
1283
        const char *label1 = NULL, *label2 = NULL, *label3 = NULL;
 
1284
        gboolean match23 = FALSE;
 
1285
        guint32 label1_min = 0, label2_min = 0, label3_min = 0;
 
1286
        guint32 label1_max = 0, label2_max = 0, label3_max = 0;
 
1287
        gboolean puk = FALSE;
 
1288
 
 
1289
        g_return_val_if_fail (unlock_required != NULL, NULL);
 
1290
        g_return_val_if_fail (!strcmp (unlock_required, "sim-pin") || !strcmp (unlock_required, "sim-puk"), NULL);
 
1291
 
 
1292
        builder = gtk_builder_new ();
 
1293
 
 
1294
        if (!gtk_builder_add_from_file (builder, UIDIR "/gsm-unlock.ui", &error)) {
 
1295
                g_warning ("Couldn't load builder file: %s", error->message);
 
1296
                g_error_free (error);
 
1297
                g_object_unref (builder);
 
1298
                return NULL;
 
1299
        }
 
1300
 
 
1301
        dialog = GTK_WIDGET (gtk_builder_get_object (builder, "unlock_dialog"));
 
1302
        if (!dialog) {
 
1303
                g_object_unref (builder);
 
1304
                g_return_val_if_fail (dialog != NULL, NULL);
 
1305
        }
 
1306
 
 
1307
        g_object_set_data_full (G_OBJECT (dialog), "builder", builder, (GDestroyNotify) g_object_unref);
 
1308
 
 
1309
        /* Figure out the dialog text based on the required unlock code */
 
1310
        if (!strcmp (unlock_required, "sim-pin")) {
 
1311
                title = _("SIM PIN unlock required");
 
1312
                header = _("SIM PIN Unlock Required");
 
1313
                /* FIXME: some warning about # of times you can enter incorrect PIN */
 
1314
                desc = g_strdup_printf (_("The mobile broadband device '%s' requires a SIM PIN code before it can be used."), device_description);
 
1315
                /* Translators: PIN code entry label */
 
1316
                label1 = _("PIN code:");
 
1317
                label1_min = 4;
 
1318
                label1_max = 8;
 
1319
                /* Translators: Show/obscure PIN checkbox label */
 
1320
                show_password_label = _("Show PIN code");
 
1321
        } else if (!strcmp (unlock_required, "sim-puk")) {
 
1322
                title = _("SIM PUK unlock required");
 
1323
                header = _("SIM PUK Unlock Required");
 
1324
                /* FIXME: some warning about # of times you can enter incorrect PUK */
 
1325
                desc = g_strdup_printf (_("The mobile broadband device '%s' requires a SIM PUK code before it can be used."), device_description);
 
1326
                /* Translators: PUK code entry label */
 
1327
                label1 = _("PUK code:");
 
1328
                label1_min = label1_max = 8;
 
1329
                /* Translators: New PIN entry label */
 
1330
                label2 = _("New PIN code:");
 
1331
                /* Translators: New PIN verification entry label */
 
1332
                label3 = _("Re-enter new PIN code:");
 
1333
                label2_min = label3_min = 4;
 
1334
                label2_max = label3_max = 8;
 
1335
                match23 = TRUE;
 
1336
                /* Translators: Show/obscure PIN/PUK checkbox label */
 
1337
                show_password_label = _("Show PIN/PUK codes");
 
1338
                puk = TRUE;
 
1339
        } else
 
1340
                g_assert_not_reached ();
 
1341
 
 
1342
        gtk_window_set_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ALWAYS);
 
1343
        gtk_window_set_title (GTK_WINDOW (dialog), title);
 
1344
 
 
1345
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "header_label"));
 
1346
        str = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>", header);
 
1347
        gtk_label_set_use_markup (GTK_LABEL (widget), TRUE);
 
1348
        gtk_label_set_markup (GTK_LABEL (widget), str);
 
1349
        g_free (str);
 
1350
 
 
1351
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "desc_label"));
 
1352
        gtk_label_set_text (GTK_LABEL (widget), desc);
 
1353
        g_free (desc);
 
1354
 
 
1355
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "show_password_checkbutton"));
 
1356
        gtk_button_set_label (GTK_BUTTON (widget), show_password_label);
 
1357
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
 
1358
        g_signal_connect (widget, "toggled", G_CALLBACK (show_toggled_cb), dialog);
 
1359
        show_toggled_cb (widget, dialog);
 
1360
 
 
1361
        g_signal_connect (dialog, "delete-event", G_CALLBACK (mpd_cancel_dialog), NULL);
 
1362
 
 
1363
        gtk_widget_show_all (dialog);
 
1364
 
 
1365
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_checkbutton"));
 
1366
        if (!puk)
 
1367
                g_object_set_data (G_OBJECT (widget), "active", GUINT_TO_POINTER (TRUE));
 
1368
        else
 
1369
                gtk_widget_hide (widget);
 
1370
 
 
1371
        /* Set contents */
 
1372
        g_object_set_data (G_OBJECT (dialog), "match23", GUINT_TO_POINTER (match23));
 
1373
 
 
1374
        /* code1_entry */
 
1375
        label = GTK_WIDGET (gtk_builder_get_object (builder, "code1_label"));
 
1376
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "code1_entry"));
 
1377
        gtk_label_set_text (GTK_LABEL (label), label1);
 
1378
        g_signal_connect (widget, "changed", G_CALLBACK (mpd_entry_changed), dialog);
 
1379
        g_signal_connect (widget, "insert-text", G_CALLBACK (mpd_entry_filter), NULL);
 
1380
        if (label1_max)
 
1381
                gtk_entry_set_max_length (GTK_ENTRY (widget), label1_max);
 
1382
        g_object_set_data (G_OBJECT (widget), "minlen", GUINT_TO_POINTER (label1_min));
 
1383
        g_object_set_data (G_OBJECT (widget), "active", GUINT_TO_POINTER (1));
 
1384
 
 
1385
        /* code2_entry */
 
1386
        label = GTK_WIDGET (gtk_builder_get_object (builder, "code2_label"));
 
1387
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "code2_entry"));
 
1388
        if (label2) {
 
1389
                gtk_label_set_text (GTK_LABEL (label), label2);
 
1390
                g_signal_connect (widget, "changed", G_CALLBACK (mpd_entry_changed), dialog);
 
1391
                g_signal_connect (widget, "insert-text", G_CALLBACK (mpd_entry_filter), NULL);
 
1392
                if (label2_max)
 
1393
                        gtk_entry_set_max_length (GTK_ENTRY (widget), label2_max);
 
1394
                g_object_set_data (G_OBJECT (widget), "minlen", GUINT_TO_POINTER (label2_min));
 
1395
                g_object_set_data (G_OBJECT (widget), "active", GUINT_TO_POINTER (1));
 
1396
        } else {
 
1397
                gtk_widget_hide (label);
 
1398
                gtk_widget_hide (widget);
 
1399
        }
 
1400
 
 
1401
        /* code3_entry */
 
1402
        if (label3) {
 
1403
                widget = GTK_WIDGET (gtk_builder_get_object (builder, "code3_label"));
 
1404
                gtk_label_set_text (GTK_LABEL (widget), label3);
 
1405
                widget = GTK_WIDGET (gtk_builder_get_object (builder, "code3_entry"));
 
1406
                g_signal_connect (widget, "changed", G_CALLBACK (mpd_entry_changed), dialog);
 
1407
                g_signal_connect (widget, "insert-text", G_CALLBACK (mpd_entry_filter), NULL);
 
1408
                if (label3_max)
 
1409
                        gtk_entry_set_max_length (GTK_ENTRY (widget), label3_max);
 
1410
                g_object_set_data (G_OBJECT (widget), "minlen", GUINT_TO_POINTER (label3_min));
 
1411
                g_object_set_data (G_OBJECT (widget), "active", GUINT_TO_POINTER (1));
 
1412
        } else {
 
1413
                gtk_widget_hide (label);
 
1414
                gtk_widget_hide (widget);
 
1415
        }
 
1416
 
 
1417
        /* Make a single-entry dialog look better */
 
1418
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "table14"));
 
1419
        if (label2 || label3)
 
1420
                gtk_table_set_row_spacings (GTK_TABLE (widget), 6);
 
1421
        else
 
1422
                gtk_table_set_row_spacings (GTK_TABLE (widget), 0);
 
1423
 
 
1424
        widget = GTK_WIDGET (gtk_builder_get_object (builder, "progress_hbox"));
 
1425
        gtk_widget_hide (widget);
 
1426
 
 
1427
        mpd_entry_changed (NULL, dialog);
 
1428
 
 
1429
        return dialog;
 
1430
}