Mercurial > pidgin.yaz
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); |