comparison src/dialogs.c @ 4177:b173736b4ab0

[gaim-migrate @ 4407] Getting some of the privacy changes in. A few more tweaks to come. committer: Tailor Script <tailor@pidgin.im>
author Rob Flynn <gaim@robflynn.com>
date Fri, 03 Jan 2003 05:28:29 +0000
parents 858822a27529
children b2b14e936178
comparison
equal deleted inserted replaced
4176:ce10e30a23d6 4177:b173736b4ab0
1148 static struct gaim_connection *current_deny_gc = NULL; 1148 static struct gaim_connection *current_deny_gc = NULL;
1149 static gboolean current_is_deny = FALSE; 1149 static gboolean current_is_deny = FALSE;
1150 static GtkWidget *allow_list = NULL; 1150 static GtkWidget *allow_list = NULL;
1151 static GtkWidget *block_list = NULL; 1151 static GtkWidget *block_list = NULL;
1152 1152
1153 static GtkListStore *block_store = NULL;
1154 static GtkListStore *allow_store = NULL;
1155
1153 static void set_deny_mode(GtkWidget *w, int data) 1156 static void set_deny_mode(GtkWidget *w, int data)
1154 { 1157 {
1155 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))) 1158 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
1156 return; 1159 return;
1157 debug_printf("setting deny mode %d\n", data); 1160 debug_printf("setting deny mode %d\n", data);
1186 deny_conn_hbox = NULL; 1189 deny_conn_hbox = NULL;
1187 deny_type = NULL; 1190 deny_type = NULL;
1188 deny_opt_menu = NULL; 1191 deny_opt_menu = NULL;
1189 current_is_deny = FALSE; 1192 current_is_deny = FALSE;
1190 allow_list = NULL; 1193 allow_list = NULL;
1194 allow_store = NULL;
1195
1191 block_list = NULL; 1196 block_list = NULL;
1197 block_store = NULL;
1192 } 1198 }
1193 1199
1194 static void set_deny_type() 1200 static void set_deny_type()
1195 { 1201 {
1196 GSList *bg = gtk_radio_button_group(GTK_RADIO_BUTTON(deny_type)); 1202 GSList *bg = gtk_radio_button_group(GTK_RADIO_BUTTON(deny_type));
1215 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(bg->data), TRUE); 1221 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(bg->data), TRUE);
1216 } 1222 }
1217 1223
1218 void build_allow_list() 1224 void build_allow_list()
1219 { 1225 {
1220 GtkWidget *label;
1221 GtkWidget *list_item;
1222 GSList *p; 1226 GSList *p;
1227 GtkListStore *ls;
1228 GtkTreeIter iter;
1223 1229
1224 if (!current_is_deny) 1230 if (!current_is_deny)
1225 return; 1231 return;
1226 1232
1227 p = current_deny_gc->permit; 1233 p = current_deny_gc->permit;
1228 1234
1229 gtk_list_remove_items(GTK_LIST(allow_list), GTK_LIST(allow_list)->children); 1235 gtk_list_store_clear(GTK_LIST_STORE(allow_store));
1230 1236
1231 while (p) { 1237 while (p) {
1232 label = gtk_label_new(p->data); 1238 ls = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(allow_list)));
1233 list_item = gtk_list_item_new(); 1239
1234 gtk_container_add(GTK_CONTAINER(list_item), label); 1240 gtk_list_store_append(ls, &iter);
1235 gtk_object_set_user_data(GTK_OBJECT(list_item), p->data); 1241 gtk_list_store_set(ls, &iter, 0, p->data, -1);
1236 gtk_widget_show(label); 1242
1237 gtk_container_add(GTK_CONTAINER(allow_list), list_item);
1238 gtk_widget_show(list_item);
1239 p = p->next; 1243 p = p->next;
1240 } 1244 }
1241 } 1245 }
1242 1246
1247
1243 void build_block_list() 1248 void build_block_list()
1244 { 1249 {
1245 GtkWidget *label;
1246 GtkWidget *list_item;
1247 GSList *d; 1250 GSList *d;
1251 GtkListStore *ls;
1252 GtkTreeIter iter;
1248 1253
1249 if (!current_is_deny) 1254 if (!current_is_deny)
1250 return; 1255 return;
1251 1256
1252 d = current_deny_gc->deny; 1257 d = current_deny_gc->deny;
1253 1258
1254 gtk_list_remove_items(GTK_LIST(block_list), GTK_LIST(block_list)->children); 1259 gtk_list_store_clear(GTK_LIST_STORE(block_store));
1255 1260
1256 while (d) { 1261 while (d) {
1257 label = gtk_label_new(d->data); 1262 ls = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(block_list)));
1258 list_item = gtk_list_item_new(); 1263
1259 gtk_container_add(GTK_CONTAINER(list_item), label); 1264 gtk_list_store_append(ls, &iter);
1260 gtk_object_set_user_data(GTK_OBJECT(list_item), d->data); 1265 gtk_list_store_set(ls, &iter, 0, d->data, -1);
1261 gtk_widget_show(label); 1266
1262 gtk_container_add(GTK_CONTAINER(block_list), list_item);
1263 gtk_widget_show(list_item);
1264 d = d->next; 1267 d = d->next;
1265 } 1268 }
1266 } 1269 }
1267 1270
1268 static void deny_gc_opt(GtkWidget *opt, struct gaim_connection *gc) 1271 static void deny_gc_opt(GtkWidget *opt, struct gaim_connection *gc)
1323 static void pref_deny_add(GtkWidget *button, gboolean permit) 1326 static void pref_deny_add(GtkWidget *button, gboolean permit)
1324 { 1327 {
1325 show_add_perm(current_deny_gc, NULL, permit); 1328 show_add_perm(current_deny_gc, NULL, permit);
1326 } 1329 }
1327 1330
1331
1332 gchar *find_permdeny_by_name(GSList *l, char *who) {
1333 gchar *name;
1334
1335 while (l) {
1336 name = (gchar *)l->data;
1337 if (!strcmp(name, who)) {
1338 return name;
1339 }
1340
1341 l = l->next;
1342 }
1343
1344 return NULL;
1345 }
1346
1328 static void pref_deny_rem(GtkWidget *button, gboolean permit) 1347 static void pref_deny_rem(GtkWidget *button, gboolean permit)
1329 { 1348 {
1330 GList *i; 1349 GList *i;
1331 char *who; 1350 gchar *who;
1351 GtkTreeIter iter;
1352 GtkTreeModel *mod;
1353 GtkTreeSelection *sel;
1354
1355 if (permit) {
1356 mod = gtk_tree_view_get_model(GTK_TREE_VIEW(allow_list));
1357 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(allow_list));
1358 } else {
1359 mod = gtk_tree_view_get_model(GTK_TREE_VIEW(block_list));
1360 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(block_list));
1361 }
1362
1363 if (gtk_tree_selection_get_selected(sel, NULL, &iter))
1364 gtk_tree_model_get(GTK_TREE_MODEL(mod), &iter, 0, &who, -1);
1365 else {
1366 return;
1367 }
1332 1368
1333 if (permit && !allow_list) 1369 if (permit && !allow_list)
1334 return; 1370 return;
1371
1335 if (!permit && !block_list) 1372 if (!permit && !block_list)
1336 return; 1373 return;
1337 1374
1338 if (permit)
1339 i = GTK_LIST(allow_list)->selection;
1340 else
1341 i = GTK_LIST(block_list)->selection;
1342
1343 if (!i)
1344 return;
1345 who = gtk_object_get_user_data(GTK_OBJECT(i->data));
1346 if (permit) { 1375 if (permit) {
1347 current_deny_gc->permit = g_slist_remove(current_deny_gc->permit, who); 1376 char *name = find_permdeny_by_name(current_deny_gc->permit, who);
1348 serv_rem_permit(current_deny_gc, who); 1377
1349 build_allow_list(); 1378 if (name) {
1379 current_deny_gc->permit = g_slist_remove(current_deny_gc->permit, name);
1380 serv_rem_deny(current_deny_gc, who);
1381 build_allow_list();
1382 }
1350 } else { 1383 } else {
1351 current_deny_gc->deny = g_slist_remove(current_deny_gc->deny, who); 1384 char *name = find_permdeny_by_name(current_deny_gc->deny, who);
1352 serv_rem_deny(current_deny_gc, who); 1385
1353 build_block_list(); 1386 if (name) {
1387 current_deny_gc->deny = g_slist_remove(current_deny_gc->deny, name);
1388 serv_rem_deny(current_deny_gc, who);
1389 build_block_list();
1390 }
1354 } 1391 }
1355 1392
1356 do_export(current_deny_gc); 1393 do_export(current_deny_gc);
1357 } 1394 }
1358 1395
1387 static void destroy_privacy() { 1424 static void destroy_privacy() {
1388 current_deny_gc = NULL; 1425 current_deny_gc = NULL;
1389 privacy_win = NULL; 1426 privacy_win = NULL;
1390 } 1427 }
1391 1428
1392 void show_privacy_options() 1429 void show_privacy_options() {
1430 GtkWidget *pwin;
1431 GtkWidget *box;
1432 GtkWidget *hbox;
1433 GtkWidget *label;
1434 GtkWidget *vbox;
1435 GtkWidget *sw;
1436 GtkWidget *bbox;
1437 GtkWidget *button;
1438 GtkWidget *sep;
1439 GtkWidget *close_button;
1440 GtkSizeGroup *sg1 = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
1441 GtkSizeGroup *sg2 = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
1442 GtkListStore *ls;
1443 GtkWidget *list;
1444 GtkCellRenderer *rend;
1445 GtkTreeViewColumn *col;
1446
1447 current_deny_gc = connections->data; /* this is safe because this screen will only be
1448 available when there are connections */
1449 current_is_deny = TRUE;
1450
1451 privacy_win = pwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1452 gtk_window_set_policy(GTK_WINDOW(pwin), FALSE, TRUE, TRUE);
1453 gtk_window_set_role(GTK_WINDOW(pwin), "privacy");
1454 gtk_window_set_title(GTK_WINDOW(pwin), _("Gaim - Privacy"));
1455 g_signal_connect(GTK_OBJECT(pwin), "destroy", G_CALLBACK(destroy_privacy), NULL);
1456 gtk_widget_realize(pwin);
1457
1458 gtk_widget_set_usize(pwin, 0, 400);
1459
1460 box = gtk_vbox_new(FALSE, 5);
1461 gtk_container_set_border_width(GTK_CONTAINER(box), 5);
1462 gtk_container_add(GTK_CONTAINER(pwin), box);
1463 gtk_widget_show(box);
1464
1465 label = gtk_label_new(_("Changes to privacy settings take effect immediately."));
1466 gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5);
1467 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
1468 gtk_widget_show(label);
1469
1470 deny_conn_hbox = gtk_hbox_new(FALSE, 5);
1471 gtk_box_pack_start(GTK_BOX(box), deny_conn_hbox, FALSE, FALSE, 0);
1472 gtk_widget_show(deny_conn_hbox);
1473
1474 label = gtk_label_new(_("Set privacy for:"));
1475 gtk_box_pack_start(GTK_BOX(deny_conn_hbox), label, FALSE, FALSE, 5);
1476 gtk_widget_show(label);
1477
1478 deny_opt_menu = gtk_option_menu_new();
1479 gtk_box_pack_start(GTK_BOX(deny_conn_hbox), deny_opt_menu, FALSE, FALSE, 5);
1480 g_signal_connect(GTK_OBJECT(deny_opt_menu), "destroy", G_CALLBACK(des_deny_opt), NULL);
1481 gtk_widget_show(deny_opt_menu);
1482
1483 build_deny_menu();
1484
1485 hbox = gtk_hbox_new(FALSE, 5);
1486 gtk_box_pack_start(GTK_BOX(box), hbox, TRUE, TRUE, 5);
1487 gtk_widget_show(hbox);
1488
1489 vbox = gtk_vbox_new(FALSE, 5);
1490 gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5);
1491 gtk_widget_show(vbox);
1492
1493 deny_type = deny_opt(_("Allow all users to contact me"), 1, vbox, NULL);
1494 gtk_size_group_add_widget(sg1, deny_type);
1495 deny_type = deny_opt(_("Allow only the users below"), 3, vbox, deny_type);
1496 gtk_size_group_add_widget(sg1, deny_type);
1497 deny_type = deny_opt(_("Allow only users on my buddy list"), 5, vbox, deny_type);
1498 gtk_size_group_add_widget(sg1, deny_type);
1499
1500 sw = gtk_scrolled_window_new(NULL, NULL);
1501 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1502 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 5);
1503 gtk_widget_show(sw);
1504
1505 allow_store = gtk_list_store_new(1, G_TYPE_STRING);
1506 allow_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(allow_store));
1507
1508 rend = gtk_cell_renderer_text_new();
1509 col = gtk_tree_view_column_new_with_attributes(NULL, rend, "text", 0, NULL);
1510 gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(col), TRUE);
1511 gtk_tree_view_append_column(GTK_TREE_VIEW(allow_list), col);
1512 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(allow_list), FALSE);
1513 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), allow_list);
1514 gtk_widget_show(allow_list);
1515
1516 build_allow_list();
1517
1518 bbox = gtk_hbox_new(TRUE, 5);
1519 gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 5);
1520 gtk_widget_show(bbox);
1521
1522 button = gtk_button_new_from_stock(GTK_STOCK_ADD);
1523 gtk_size_group_add_widget(sg2, button);
1524 gtk_widget_show(button);
1525 g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBACK(pref_deny_add), (void *)TRUE);
1526 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5);
1527
1528 button = gtk_button_new_from_stock(GTK_STOCK_REMOVE);
1529 gtk_size_group_add_widget(sg2, button);
1530 gtk_widget_show(button);
1531 g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBACK(pref_deny_rem), (void *)TRUE);
1532 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5);
1533
1534 vbox = gtk_vbox_new(FALSE, 5);
1535 gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5);
1536 gtk_widget_show(vbox);
1537
1538 label = gtk_label_new("");
1539 gtk_widget_show(label);
1540 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); /* FIXME: Bad temporary hack */
1541
1542 deny_type = deny_opt(_("Deny all users"), 2, vbox, deny_type);
1543 gtk_size_group_add_widget(sg1, deny_type);
1544 deny_type = deny_opt(_("Block the users below"), 4, vbox, deny_type);
1545 gtk_size_group_add_widget(sg1, deny_type);
1546
1547 sw = gtk_scrolled_window_new(NULL, NULL);
1548 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1549 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 5);
1550 gtk_widget_show(sw);
1551
1552 block_store = gtk_list_store_new(1, G_TYPE_STRING);
1553 block_list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(block_store));
1554
1555 rend = gtk_cell_renderer_text_new();
1556 col = gtk_tree_view_column_new_with_attributes(NULL, rend, "text", 0, NULL);
1557 gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(col), TRUE);
1558 gtk_tree_view_append_column(GTK_TREE_VIEW(block_list), col);
1559 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(block_list), FALSE);
1560 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), block_list);
1561 gtk_widget_show(block_list);
1562
1563 build_block_list();
1564
1565 bbox = gtk_hbox_new(TRUE, 5);
1566 gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 5);
1567 gtk_widget_show(bbox);
1568
1569 button = gtk_button_new_from_stock(GTK_STOCK_ADD);
1570 gtk_size_group_add_widget(sg2, button);
1571 gtk_widget_show(button);
1572 g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBACK(pref_deny_add), FALSE);
1573 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5);
1574
1575 button = gtk_button_new_from_stock(GTK_STOCK_REMOVE);
1576 gtk_size_group_add_widget(sg2, button);
1577 gtk_widget_show(button);
1578 g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBACK(pref_deny_rem), FALSE);
1579 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5);
1580
1581 sep = gtk_hseparator_new();
1582 gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 5);
1583 gtk_widget_show(sep);
1584
1585 hbox = gtk_hbox_new(TRUE, 5);
1586 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 0);
1587 gtk_widget_show(hbox);
1588 close_button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
1589 gtk_widget_show(close_button);
1590 gtk_box_pack_end(GTK_BOX(hbox), close_button, FALSE, FALSE, 0);
1591 g_signal_connect_swapped(GTK_OBJECT(close_button), "clicked", G_CALLBACK(gtk_widget_destroy), pwin);
1592
1593 gtk_widget_show(pwin);
1594
1595 }
1596
1597 void show_privacy_options_old()
1393 { 1598 {
1394 GtkWidget *pwin; 1599 GtkWidget *pwin;
1395 GtkWidget *box; 1600 GtkWidget *box;
1396 GtkWidget *hbox; 1601 GtkWidget *hbox;
1397 GtkWidget *label; 1602 GtkWidget *label;
2416 static void do_add_perm(GtkWidget *w, struct addperm *p) 2621 static void do_add_perm(GtkWidget *w, struct addperm *p)
2417 { 2622 {
2418 2623
2419 const char *who; 2624 const char *who;
2420 char *name; 2625 char *name;
2421 2626 GtkTreeIter iter;
2627 GtkListStore *ls;
2422 2628
2423 who = gtk_entry_get_text(GTK_ENTRY(p->entry)); 2629 who = gtk_entry_get_text(GTK_ENTRY(p->entry));
2424 2630
2425 name = g_malloc(strlen(who) + 2); 2631 name = g_malloc(strlen(who) + 2);
2426 g_snprintf(name, strlen(who) + 2, "%s", who); 2632 g_snprintf(name, strlen(who) + 2, "%s", who);