comparison src/multi.c @ 3754:599194293ee5

[gaim-migrate @ 3893] ChipX86 is writing UI out the wazoo! committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Sat, 19 Oct 2002 22:15:55 +0000
parents a20bf3d247ff
children a868e1181321
comparison
equal deleted inserted replaced
3753:764ecb5f984b 3754:599194293ee5
41 41
42 GSList *connections; 42 GSList *connections;
43 int connecting_count = 0; 43 int connecting_count = 0;
44 44
45 static GtkWidget *acctedit = NULL; 45 static GtkWidget *acctedit = NULL;
46 static GtkWidget *list = NULL; /* the clist of names in the accteditor */ 46 static GtkWidget *treeview = NULL; /* the treeview of names in the accteditor */
47 static GtkListStore *model = NULL;
47 48
48 static GSList *mod_users = NULL; 49 static GSList *mod_users = NULL;
50
51 enum
52 {
53 COLUMN_SCREENNAME,
54 COLUMN_ONLINE,
55 COLUMN_AUTOLOGIN,
56 COLUMN_PROTOCOL,
57 COLUMN_DATA,
58 NUM_COLUMNS
59 };
60
61 static void acct_signin(GtkCellRendererToggle *cell, gchar *path_str,
62 gpointer d);
63 static void acct_autologin(GtkCellRendererToggle *cell, gchar *path_str,
64 gpointer d);
49 65
50 static struct mod_user *find_mod_user(struct aim_user *a) 66 static struct mod_user *find_mod_user(struct aim_user *a)
51 { 67 {
52 GSList *m = mod_users; 68 GSList *m = mod_users;
53 while (m) { 69 while (m) {
136 if (acctedit) { 152 if (acctedit) {
137 save_prefs(); 153 save_prefs();
138 gtk_widget_destroy(acctedit); 154 gtk_widget_destroy(acctedit);
139 } 155 }
140 acctedit = NULL; 156 acctedit = NULL;
141 list = NULL; 157 treeview = NULL;
142 if (!d && !blist && !mainwindow && !connections) 158 if (!d && !blist && !mainwindow && !connections)
143 gtk_main_quit(); 159 gtk_main_quit();
144 } 160 }
145 161
146 static gint acctedit_close(GtkWidget *w, gpointer d) 162 static gint acctedit_close(GtkWidget *w, gpointer d)
158 return p->name; 174 return p->name;
159 else 175 else
160 return "Unknown"; 176 return "Unknown";
161 } 177 }
162 178
163
164 static void reorder_list(GtkCList *cl, int from, int to, void *p)
165 {
166 struct aim_user *au;
167 if (from == to)
168 return; /* This shouldn't happen, but just in case */
169 au = (struct aim_user*)g_slist_nth_data(aim_users, from);
170 aim_users = g_slist_remove (aim_users, au);
171 aim_users = g_slist_insert(aim_users, au, to);
172 save_prefs();
173 }
174
175 void regenerate_user_list() 179 void regenerate_user_list()
176 { 180 {
177 char *titles[4];
178 GSList *u = aim_users; 181 GSList *u = aim_users;
179 struct aim_user *a; 182 struct aim_user *a;
180 int i; 183 GtkTreeIter iter;
181 184
182 if (!acctedit) 185 if (!acctedit)
183 return; 186 return;
184 187
185 gtk_clist_clear(GTK_CLIST(list)); 188 gtk_list_store_clear(model);
186 189
187 while (u) { 190 while (u) {
188 a = (struct aim_user *)u->data; 191 a = (struct aim_user *)u->data;
189 titles[0] = a->username; 192
190 titles[1] = a->gc ? "Yes" : "No"; 193 gtk_list_store_append(model, &iter);
191 titles[2] = (a->options & OPT_USR_AUTO) ? "True" : "False"; 194 gtk_list_store_set(model, &iter,
192 titles[3] = proto_name(a->protocol); 195 COLUMN_SCREENNAME, a->username,
193 i = gtk_clist_append(GTK_CLIST(list), titles); 196 COLUMN_ONLINE, (a->gc ? TRUE : FALSE),
194 gtk_clist_set_row_data(GTK_CLIST(list), i, a); 197 COLUMN_AUTOLOGIN, (a->options & OPT_USR_AUTO),
198 COLUMN_PROTOCOL, proto_name(a->protocol),
199 COLUMN_DATA, a,
200 -1);
195 u = u->next; 201 u = u->next;
196 } 202 }
197 } 203 }
198 204
205 static gboolean get_iter_from_data(GtkTreeView *treeview,
206 struct aim_user *a, GtkTreeIter *iter)
207 {
208 return gtk_tree_model_iter_nth_child(gtk_tree_view_get_model(treeview),
209 iter, NULL,
210 g_slist_index(aim_users, a));
211 #if 0
212 GtkListModel *model = gtk_tree_view_get_model(treeview);
213 struct aim_user *user;
214 int i;
215
216 rows = gtk_tree_model_iter_n_children(model, NULL);
217
218 for (i = 0; i < rows; i++)
219 {
220 gtk_tree_model_get(model, iter, COLUMN_DATA, &user, -1);
221
222 if (user == a)
223 return TRUE;
224 }
225
226 return FALSE;
227 #endif
228 }
229
230 static void add_columns(GtkWidget *treeview)
231 {
232 GtkCellRenderer *renderer;
233 GtkTreeViewColumn *column;
234
235 /* Screennames */
236 renderer = gtk_cell_renderer_text_new();
237 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview),
238 -1, _("Screenname"),
239 renderer,
240 "text", COLUMN_SCREENNAME,
241 NULL);
242
243 /* Online? */
244 renderer = gtk_cell_renderer_toggle_new();
245 g_signal_connect(G_OBJECT(renderer), "toggled",
246 G_CALLBACK(acct_signin), model);
247 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview),
248 -1, _("Online"),
249 renderer,
250 "active", COLUMN_ONLINE,
251 NULL);
252
253 /* Auto-login? */
254 renderer = gtk_cell_renderer_toggle_new();
255 g_signal_connect(G_OBJECT(renderer), "toggled",
256 G_CALLBACK(acct_autologin), model);
257 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview),
258 -1, _("Auto-login"),
259 renderer,
260 "active", COLUMN_AUTOLOGIN,
261 NULL);
262
263 /* Protocol */
264 renderer = gtk_cell_renderer_text_new();
265 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview),
266 -1, _("Protocol"),
267 renderer,
268 "text", COLUMN_PROTOCOL,
269 NULL);
270
271 /* Data */
272 column = gtk_tree_view_column_new();
273 // gtk_tree_view_insert_column(GTK_TREE_VIEW(treeview), column, -1);
274 gtk_tree_view_column_set_visible(column, FALSE);
275 }
276
199 static GtkWidget *generate_list() 277 static GtkWidget *generate_list()
200 { 278 {
201 GtkWidget *win; 279 GtkWidget *win;
202 char *titles[4] = { "Screenname", "Currently Online", "Auto-login", "Protocol" };
203 280
204 win = gtk_scrolled_window_new(0, 0); 281 win = gtk_scrolled_window_new(0, 0);
205 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(win), GTK_POLICY_AUTOMATIC, 282 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(win),
206 GTK_POLICY_ALWAYS); 283 GTK_POLICY_AUTOMATIC,
207 284 GTK_POLICY_ALWAYS);
208 list = gtk_clist_new_with_titles(4, titles); 285
209 gtk_clist_set_column_width(GTK_CLIST(list), 0, 90); 286 /* Create the list model. */
210 gtk_clist_set_selection_mode(GTK_CLIST(list), GTK_SELECTION_EXTENDED); 287 model = gtk_list_store_new(NUM_COLUMNS, G_TYPE_STRING, G_TYPE_BOOLEAN,
211 gtk_clist_column_titles_passive(GTK_CLIST(list)); 288 G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER);
212 289
213 gtk_container_add(GTK_CONTAINER(win), list); 290 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
214 gtk_widget_show(list); 291 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE);
292 gtk_tree_selection_set_mode(
293 gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)),
294 GTK_SELECTION_MULTIPLE);
295
296 add_columns(treeview);
297
298 gtk_container_add(GTK_CONTAINER(win), treeview);
299 gtk_widget_show(treeview);
215 300
216 regenerate_user_list(); 301 regenerate_user_list();
217 gtk_clist_set_reorderable (GTK_CLIST(list), TRUE); 302 gtk_tree_view_set_reorderable (GTK_TREE_VIEW(treeview), TRUE);
218 gtk_clist_set_use_drag_icons (GTK_CLIST(list), TRUE);
219 gtk_signal_connect(GTK_OBJECT(list), "row-move", GTK_SIGNAL_FUNC(reorder_list), NULL);
220
221 gtk_widget_show(win); 303 gtk_widget_show(win);
222 return win; 304 return win;
223 } 305 }
224 306
225 static void delmod(GtkWidget *w, struct mod_user *u) 307 static void delmod(GtkWidget *w, struct mod_user *u)
255 337
256 static void ok_mod(GtkWidget *w, struct mod_user *u) 338 static void ok_mod(GtkWidget *w, struct mod_user *u)
257 { 339 {
258 GList *tmp; 340 GList *tmp;
259 const char *txt; 341 const char *txt;
260 int i;
261 struct aim_user *a; 342 struct aim_user *a;
262 struct prpl *p; 343 struct prpl *p;
344 GtkTreeIter iter;
263 345
264 if (!u->user) { 346 if (!u->user) {
265 txt = gtk_entry_get_text(GTK_ENTRY(u->name)); 347 txt = gtk_entry_get_text(GTK_ENTRY(u->name));
266 u->user = new_user(txt, u->protocol, u->options); 348 u->user = new_user(txt, u->protocol, u->options);
267 } 349 }
277 if (a->options & OPT_USR_REM_PASS) 359 if (a->options & OPT_USR_REM_PASS)
278 g_snprintf(a->password, sizeof(a->password), "%s", txt); 360 g_snprintf(a->password, sizeof(a->password), "%s", txt);
279 else 361 else
280 a->password[0] = '\0'; 362 a->password[0] = '\0';
281 363
364 if (get_iter_from_data(GTK_TREE_VIEW(treeview), a, &iter)) {
365 gtk_list_store_set(model, &iter,
366 COLUMN_SCREENNAME, a->username,
367 COLUMN_AUTOLOGIN, (a->options & OPT_USR_AUTO),
368 COLUMN_PROTOCOL, proto_name(a->protocol),
369 -1);
370 }
371
372 #if 0
282 i = gtk_clist_find_row_from_data(GTK_CLIST(list), a); 373 i = gtk_clist_find_row_from_data(GTK_CLIST(list), a);
283 gtk_clist_set_text(GTK_CLIST(list), i, 0, a->username); 374 gtk_clist_set_text(GTK_CLIST(list), i, 0, a->username);
284 gtk_clist_set_text(GTK_CLIST(list), i, 2, 375 gtk_clist_set_text(GTK_CLIST(list), i, 2,
285 (a->options & OPT_USR_AUTO) ? "True" : "False"); 376 (a->options & OPT_USR_AUTO) ? "True" : "False");
286 gtk_clist_set_text(GTK_CLIST(list), i, 3, proto_name(a->protocol)); 377 gtk_clist_set_text(GTK_CLIST(list), i, 3, proto_name(a->protocol));
378 #endif
287 379
288 tmp = u->opt_entries; 380 tmp = u->opt_entries;
289 while (tmp) { 381 while (tmp) {
290 GtkEntry *entry = tmp->data; 382 GtkEntry *entry = tmp->data;
291 int pos = (int)gtk_object_get_user_data(GTK_OBJECT(entry)); 383 int pos = (int)gtk_object_get_user_data(GTK_OBJECT(entry));
489 hbox = gtk_hbox_new(FALSE, 0); 581 hbox = gtk_hbox_new(FALSE, 0);
490 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5); 582 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5);
491 gtk_widget_show(hbox); 583 gtk_widget_show(hbox);
492 584
493 label = gtk_label_new(_("Buddy Icon File:")); 585 label = gtk_label_new(_("Buddy Icon File:"));
586 gtk_size_group_add_widget(u->sg, label);
587 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
494 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); 588 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
495 gtk_widget_show(label); 589 gtk_widget_show(label);
496 590
497 name = gtk_entry_new(); 591 name = gtk_entry_new();
498 gtk_entry_set_text(GTK_ENTRY(name), u->iconfile); 592 gtk_entry_set_text(GTK_ENTRY(name), u->iconfile);
521 GtkWidget *hbox; 615 GtkWidget *hbox;
522 GtkWidget *label; 616 GtkWidget *label;
523 617
524 struct prpl *p; 618 struct prpl *p;
525 619
526 frame = gtk_frame_new("Login Options"); 620 frame = make_frame(box, _("Login Options"));
527 gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 0);
528 621
529 vbox = gtk_vbox_new(FALSE, 5); 622 vbox = gtk_vbox_new(FALSE, 5);
530 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); 623 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
531 gtk_container_add(GTK_CONTAINER(frame), vbox); 624 gtk_container_add(GTK_CONTAINER(frame), vbox);
532 625
533 hbox = gtk_hbox_new(FALSE, 5); 626 hbox = gtk_hbox_new(FALSE, 5);
534 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 627 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
535 628
536 label = gtk_label_new(_("Screenname:")); 629 label = gtk_label_new(_("Screenname:"));
630 gtk_size_group_add_widget(u->sg, label);
631 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
537 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); 632 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
538 633
539 u->name = gtk_entry_new(); 634 u->name = gtk_entry_new();
540 gtk_box_pack_start(GTK_BOX(hbox), u->name, TRUE, TRUE, 0); 635 gtk_box_pack_start(GTK_BOX(hbox), u->name, TRUE, TRUE, 0);
541 636
542 u->pwdbox = gtk_hbox_new(FALSE, 5); 637 u->pwdbox = gtk_hbox_new(FALSE, 5);
543 gtk_box_pack_start(GTK_BOX(vbox), u->pwdbox, FALSE, FALSE, 0); 638 gtk_box_pack_start(GTK_BOX(vbox), u->pwdbox, FALSE, FALSE, 0);
544 639
545 label = gtk_label_new(_("Password:")); 640 label = gtk_label_new(_("Password:"));
641 gtk_size_group_add_widget(u->sg, label);
642 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
546 gtk_box_pack_start(GTK_BOX(u->pwdbox), label, FALSE, FALSE, 0); 643 gtk_box_pack_start(GTK_BOX(u->pwdbox), label, FALSE, FALSE, 0);
547 644
548 u->pass = gtk_entry_new(); 645 u->pass = gtk_entry_new();
549 gtk_box_pack_start(GTK_BOX(u->pwdbox), u->pass, TRUE, TRUE, 0); 646 gtk_box_pack_start(GTK_BOX(u->pwdbox), u->pass, TRUE, TRUE, 0);
550 gtk_entry_set_visibility(GTK_ENTRY(u->pass), FALSE); 647 gtk_entry_set_visibility(GTK_ENTRY(u->pass), FALSE);
551 648
552 hbox = gtk_hbox_new(FALSE, 5); 649 hbox = gtk_hbox_new(FALSE, 5);
553 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 650 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
554 651
555 label = gtk_label_new(_("Alias:")); 652 label = gtk_label_new(_("Alias:"));
653 gtk_size_group_add_widget(u->sg, label);
654 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
556 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); 655 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
557 656
558 u->alias = gtk_entry_new(); 657 u->alias = gtk_entry_new();
559 gtk_box_pack_start(GTK_BOX(hbox), u->alias, TRUE, TRUE, 0); 658 gtk_box_pack_start(GTK_BOX(hbox), u->alias, TRUE, TRUE, 0);
560 659
561 hbox = gtk_hbox_new(FALSE, 5); 660 hbox = gtk_hbox_new(FALSE, 5);
562 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 661 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
563 gtk_widget_show(hbox); 662 gtk_widget_show(hbox);
564 663
565 label = gtk_label_new(_("Protocol:")); 664 label = gtk_label_new(_("Protocol:"));
665 gtk_size_group_add_widget(u->sg, label);
666 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
566 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); 667 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
567 668
568 make_protocol_menu(hbox, u); 669 make_protocol_menu(hbox, u);
569 670
570 u->rempass = acct_button(_("Remember Password"), u, OPT_USR_REM_PASS, vbox); 671 u->rempass = acct_button(_("Remember Password"), u, OPT_USR_REM_PASS, vbox);
598 699
599 GtkWidget *vbox; 700 GtkWidget *vbox;
600 701
601 struct prpl *p = find_prpl(u->protocol); 702 struct prpl *p = find_prpl(u->protocol);
602 703
603 u->user_frame = gtk_frame_new("User Options"); 704 u->user_frame = make_frame(box, _("User Options"));
604 gtk_box_pack_start(GTK_BOX(box), u->user_frame, FALSE, FALSE, 0);
605 gtk_widget_show(u->user_frame); 705 gtk_widget_show(u->user_frame);
606 706
607 vbox = gtk_vbox_new(FALSE, 5); 707 vbox = gtk_vbox_new(FALSE, 5);
608 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); 708 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
609 gtk_container_add(GTK_CONTAINER(u->user_frame), vbox); 709 gtk_container_add(GTK_CONTAINER(u->user_frame), vbox);
635 735
636 GtkWidget *vbox; 736 GtkWidget *vbox;
637 GtkWidget *hbox; 737 GtkWidget *hbox;
638 GtkWidget *label; 738 GtkWidget *label;
639 GtkWidget *entry; 739 GtkWidget *entry;
740 GtkWidget *frame;
640 741
641 char buf[256]; 742 char buf[256];
642 743
643 if (u->proto_frame) 744 if (u->proto_frame)
644 gtk_widget_destroy(u->proto_frame); 745 gtk_widget_destroy(u->proto_frame);
659 760
660 if (!op) 761 if (!op)
661 return; 762 return;
662 763
663 g_snprintf(buf, sizeof(buf), "%s Options", p->name); 764 g_snprintf(buf, sizeof(buf), "%s Options", p->name);
664 u->proto_frame = gtk_frame_new(buf); 765 frame = make_frame(box, buf);
665 gtk_box_pack_start(GTK_BOX(box), u->proto_frame, FALSE, FALSE, 0); 766
666 gtk_widget_show(u->proto_frame); 767 /* BLEH */
768 u->proto_frame = gtk_widget_get_parent(gtk_widget_get_parent(frame));
769 gtk_widget_show_all(u->proto_frame);
667 770
668 vbox = gtk_vbox_new(FALSE, 5); 771 vbox = gtk_vbox_new(FALSE, 5);
669 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); 772 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
670 gtk_container_add(GTK_CONTAINER(u->proto_frame), vbox); 773 gtk_container_add(GTK_CONTAINER(frame), vbox);
671 gtk_widget_show(vbox); 774 gtk_widget_show(vbox);
672 775
673 while (op) { 776 while (op) {
674 struct proto_user_opt *puo = op->data; 777 struct proto_user_opt *puo = op->data;
675 778
676 hbox = gtk_hbox_new(FALSE, 5); 779 hbox = gtk_hbox_new(FALSE, 5);
677 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 780 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
678 gtk_widget_show(hbox); 781 gtk_widget_show(hbox);
679 782
680 label = gtk_label_new(puo->label); 783 label = gtk_label_new(puo->label);
784 gtk_size_group_add_widget(u->sg, label);
785 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
681 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); 786 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
682 gtk_widget_show(label); 787 gtk_widget_show(label);
683 788
684 entry = gtk_entry_new(); 789 entry = gtk_entry_new();
685 gtk_box_pack_end(GTK_BOX(hbox), entry, FALSE, FALSE, 0); 790 gtk_box_pack_end(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
712 * three fucking frames: 817 * three fucking frames:
713 * a fucking Login Options frame, a fucking User Options frame and a fucking 818 * a fucking Login Options frame, a fucking User Options frame and a fucking
714 * Protcol Options frame. This fucking removes the two fucking tabs, which were 819 * Protcol Options frame. This fucking removes the two fucking tabs, which were
715 * quite fucking uneccessary. Fuck. */ 820 * quite fucking uneccessary. Fuck. */
716 /* -- SeanEgan */ 821 /* -- SeanEgan */
717 GtkWidget *hbox; 822 /* YEAH!! -- ChipX86 */
823 GtkWidget *hbox, *vbox;
718 GtkWidget *button; 824 GtkWidget *button;
825 GtkWidget *sep;
826 GtkSizeGroup *button_sg;
719 827
720 struct mod_user *u = find_mod_user(a); 828 struct mod_user *u = find_mod_user(a);
721 829
722 if (!u) { 830 if (!u) {
723 u = g_new0(struct mod_user, 1); 831 u = g_new0(struct mod_user, 1);
756 gtk_widget_realize(u->mod); 864 gtk_widget_realize(u->mod);
757 gtk_window_set_title(GTK_WINDOW(u->mod), _("Gaim - Modify Account")); 865 gtk_window_set_title(GTK_WINDOW(u->mod), _("Gaim - Modify Account"));
758 gtk_window_set_policy(GTK_WINDOW(u->mod), FALSE, TRUE, TRUE); /* nothing odd here :) */ 866 gtk_window_set_policy(GTK_WINDOW(u->mod), FALSE, TRUE, TRUE); /* nothing odd here :) */
759 gtk_signal_connect(GTK_OBJECT(u->mod), "destroy", GTK_SIGNAL_FUNC(delmod), u); 867 gtk_signal_connect(GTK_OBJECT(u->mod), "destroy", GTK_SIGNAL_FUNC(delmod), u);
760 868
761 u->main = gtk_vbox_new(FALSE, 5); 869 vbox = gtk_vbox_new(FALSE, 6);
762 gtk_container_border_width(GTK_CONTAINER(u->main), 5); 870 gtk_container_border_width(GTK_CONTAINER(vbox), 6);
763 gtk_container_add(GTK_CONTAINER(u->mod), u->main); 871 gtk_container_add(GTK_CONTAINER(u->mod), vbox);
764 gtk_widget_show(u->main); 872
873 u->main = gtk_vbox_new(FALSE, 12);
874 gtk_container_border_width(GTK_CONTAINER(u->main), 6);
875 gtk_box_pack_start(GTK_BOX(vbox), u->main, FALSE, FALSE, 0);
876
877 u->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
765 878
766 generate_login_options(u, u->main); 879 generate_login_options(u, u->main);
767 generate_user_options(u, u->main); 880 generate_user_options(u, u->main);
768 generate_protocol_options(u, u->main); 881 generate_protocol_options(u, u->main);
769 882
770 hbox = gtk_hbox_new(FALSE, 5); 883 sep = gtk_hseparator_new();
771 gtk_box_pack_end(GTK_BOX(u->main), hbox, FALSE, FALSE, 0); 884 gtk_box_pack_start (GTK_BOX (vbox), sep, FALSE, FALSE, 0);
772 gtk_widget_show(hbox); 885
773 886 hbox = gtk_hbox_new(FALSE, 6);
774 button = picture_button(u->mod, _("Cancel"), cancel_xpm); 887 gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
888 gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
889
890 button_sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
891
892 button = gtk_button_new_from_stock(GTK_STOCK_OK);
893 gtk_size_group_add_widget(button_sg, button);
894 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
895 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(ok_mod), u);
896
897 button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
898 gtk_size_group_add_widget(button_sg, button);
775 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); 899 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
776 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cancel_mod), u); 900 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cancel_mod), u);
777 gtk_widget_show(button); 901
778 902 gtk_widget_show_all(u->mod);
779 button = picture_button(u->mod, _("OK"), ok_xpm);
780 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
781 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(ok_mod), u);
782 gtk_widget_show(button);
783
784 gtk_widget_show(u->mod);
785 } 903 }
786 904
787 static void add_acct(GtkWidget *w, gpointer d) 905 static void add_acct(GtkWidget *w, gpointer d)
788 { 906 {
789 show_acct_mod(NULL); 907 show_acct_mod(NULL);
790 } 908 }
791 909
910 static void mod_acct_func(GtkTreeModel *model, GtkTreePath *path,
911 GtkTreeIter *iter, gpointer data)
912 {
913 struct aim_user *u;
914
915 gtk_tree_model_get(model, iter, COLUMN_DATA, &u, -1);
916
917 if (u != NULL)
918 show_acct_mod(u);
919 }
920
792 static void mod_acct(GtkWidget *w, gpointer d) 921 static void mod_acct(GtkWidget *w, gpointer d)
793 { 922 {
794 GList *l = GTK_CLIST(list)->selection; 923 GtkTreeSelection *selection;
795 int row = -1; 924 GtkTreeIter iter;
796 struct aim_user *u; 925 GtkTreeModel *model;
926
927 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
928
929 gtk_tree_selection_selected_foreach(selection, mod_acct_func, NULL);
930
931 #if 0
797 while (l) { 932 while (l) {
798 row = (int)l->data; 933 row = (int)l->data;
799 if (row != -1) { 934 if (row != -1) {
800 u = g_slist_nth_data(aim_users, row); 935 u = g_slist_nth_data(aim_users, row);
801 if (u) 936 if (u)
802 show_acct_mod(u); 937 show_acct_mod(u);
803 } 938 }
804 l = l->next; 939 l = l->next;
805 } 940 }
941 #endif
806 } 942 }
807 943
808 struct pass_prompt { 944 struct pass_prompt {
809 struct aim_user *u; 945 struct aim_user *u;
810 GtkWidget *win; 946 GtkWidget *win;
867 gtk_window_set_wmclass(GTK_WINDOW(p->win), "password", "Gaim"); 1003 gtk_window_set_wmclass(GTK_WINDOW(p->win), "password", "Gaim");
868 gtk_container_border_width(GTK_CONTAINER(p->win), 5); 1004 gtk_container_border_width(GTK_CONTAINER(p->win), 5);
869 gtk_signal_connect(GTK_OBJECT(p->win), "destroy", GTK_SIGNAL_FUNC(pass_des), p); 1005 gtk_signal_connect(GTK_OBJECT(p->win), "destroy", GTK_SIGNAL_FUNC(pass_des), p);
870 gtk_widget_realize(p->win); 1006 gtk_widget_realize(p->win);
871 1007
872 frame = gtk_frame_new(_("Enter Password")); 1008 frame = make_frame(p->win, _("Enter Password"));
873 gtk_container_add(GTK_CONTAINER(p->win), frame);
874 gtk_widget_show(frame); 1009 gtk_widget_show(frame);
875 1010
876 vbox = gtk_vbox_new(FALSE, 5); 1011 vbox = gtk_vbox_new(FALSE, 5);
877 gtk_container_add(GTK_CONTAINER(frame), vbox); 1012 gtk_container_add(GTK_CONTAINER(frame), vbox);
878 gtk_widget_show(vbox); 1013 gtk_widget_show(vbox);
906 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); 1041 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5);
907 1042
908 gtk_widget_show(p->win); 1043 gtk_widget_show(p->win);
909 } 1044 }
910 1045
911 static void acct_signin(GtkWidget *w, gpointer d) 1046 static void acct_signin(GtkCellRendererToggle *cell, gchar *path_str,
912 { 1047 gpointer d)
913 GList *l = GTK_CLIST(list)->selection; 1048 {
914 int row = -1; 1049 GtkTreeModel *model = (GtkTreeModel *)d;
1050 GtkTreeIter iter;
1051 GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
1052
915 struct aim_user *u = NULL; 1053 struct aim_user *u = NULL;
916 struct prpl *p = NULL; 1054 struct prpl *p = NULL;
917 while (l) { 1055
918 row = (int)l->data; 1056 gtk_tree_model_get_iter_from_string(model, &iter, path_str);
919 u = g_slist_nth_data(aim_users, row); 1057 gtk_tree_model_get(model, &iter, COLUMN_DATA, &u, -1);
920 p = find_prpl(u->protocol); 1058
921 if (!u->gc && p && p->login) { 1059 p = find_prpl(u->protocol);
922 struct prpl *p = find_prpl(u->protocol); 1060 if (!u->gc && p && p->login) {
923 if (p && !(p->options & OPT_PROTO_NO_PASSWORD) && !u->password[0]) { 1061 struct prpl *p = find_prpl(u->protocol);
924 do_pass_dlg(u); 1062 if (p && !(p->options & OPT_PROTO_NO_PASSWORD) && !u->password[0]) {
925 } else { 1063 do_pass_dlg(u);
926 serv_login(u);
927 gtk_clist_set_text(GTK_CLIST(list), row, 1, "Attempting");
928 }
929 } else if (u->gc) {
930 u->gc->wants_to_die = TRUE;
931 signoff(u->gc);
932 } else { 1064 } else {
933 if (u->protocol == PROTO_TOC) 1065 serv_login(u);
934 do_error_dialog(_("TOC not found."),
935 _("You have attempted to login an IM account using the "
936 "TOC protocol. Because this protocol is inferior to "
937 "OSCAR, it is now compiled as a plugin by default. "
938 "To login, edit this account to use OSCAR or load the "
939 "TOC plugin."), GAIM_ERROR);
940 else
941 do_error_dialog(_("Protocol not found."),
942 _("You cannot log this account in; you do not have "
943 "the protocol it uses loaded, or the protocol does "
944 "not have a login function."), GAIM_ERROR);
945 } 1066 }
946 l = l->next; 1067 } else if (u->gc) {
947 } 1068 u->gc->wants_to_die = TRUE;
948 } 1069 signoff(u->gc);
949 1070 } else {
950 static void do_del_acct(gpointer w, struct aim_user *u) 1071 if (u->protocol == PROTO_TOC)
951 { 1072 do_error_dialog(_("TOC not found."),
1073 _("You have attempted to login an IM account using the "
1074 "TOC protocol. Because this protocol is inferior to "
1075 "OSCAR, it is now compiled as a plugin by default. "
1076 "To login, edit this account to use OSCAR or load the "
1077 "TOC plugin."), GAIM_ERROR);
1078 else
1079 do_error_dialog(_("Protocol not found."),
1080 _("You cannot log this account in; you do not have "
1081 "the protocol it uses loaded, or the protocol does "
1082 "not have a login function."), GAIM_ERROR);
1083 }
1084 }
1085
1086 static void acct_autologin(GtkCellRendererToggle *cell, gchar *path_str,
1087 gpointer d)
1088 {
1089 GtkTreeModel *model = (GtkTreeModel *)d;
1090 GtkTreeIter iter;
1091 GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
1092
1093 struct aim_user *u = NULL;
1094 struct prpl *p = NULL;
1095
1096 gtk_tree_model_get_iter_from_string(model, &iter, path_str);
1097 gtk_tree_model_get(model, &iter, COLUMN_DATA, &u, -1);
1098
1099 u->options ^= OPT_USR_AUTO;
1100
1101 gtk_list_store_set(GTK_LIST_STORE(model), &iter,
1102 COLUMN_AUTOLOGIN, (u->options & OPT_USR_AUTO), -1);
1103
1104 save_prefs();
1105 }
1106
1107 static void do_del_acct(struct aim_user *u)
1108 {
1109 GtkTreeIter iter;
1110
952 if (u->gc) { 1111 if (u->gc) {
953 u->gc->wants_to_die = TRUE; 1112 u->gc->wants_to_die = TRUE;
954 signoff(u->gc); 1113 signoff(u->gc);
955 } 1114 }
956 gtk_clist_remove(GTK_CLIST(list), g_slist_index(aim_users, u)); 1115
1116 if (get_iter_from_data(GTK_TREE_VIEW(treeview), u, &iter)) {
1117 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
1118 }
1119
957 aim_users = g_slist_remove(aim_users, u); 1120 aim_users = g_slist_remove(aim_users, u);
958 save_prefs(); 1121 save_prefs();
959 } 1122 }
960 1123
1124 static void del_acct_func(GtkTreeModel *model, GtkTreePath *path,
1125 GtkTreeIter *iter, gpointer data)
1126 {
1127 struct aim_user *u;
1128
1129 gtk_tree_model_get(model, iter, COLUMN_DATA, &u, -1);
1130
1131 if (u != NULL) {
1132 char buf[8192];
1133
1134 g_snprintf(buf, sizeof(buf),
1135 _("Are you sure you want to delete %s?"), u->username);
1136 do_ask_dialog(buf, NULL, u, _("Delete"), do_del_acct, _("Cancel"), NULL);
1137 }
1138 }
1139
961 static void del_acct(GtkWidget *w, gpointer d) 1140 static void del_acct(GtkWidget *w, gpointer d)
962 { 1141 {
963 GList *l = GTK_CLIST(list)->selection; 1142 GtkTreeSelection *selection;
964 char buf[8192]; 1143 GtkTreeIter iter;
965 int row = -1; 1144 GtkTreeModel *model;
966 struct aim_user *u; 1145
967 while (l) { 1146 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
968 row = (int)l->data; 1147
969 u = g_slist_nth_data(aim_users, row); 1148 gtk_tree_selection_selected_foreach(selection, del_acct_func, NULL);
970 if (!u) 1149 }
971 return; 1150
972 1151 #if 0
973 g_snprintf(buf, sizeof(buf), _("Are you sure you want to delete %s?"), u->username);
974 do_ask_dialog(buf, NULL, u, _("Delete"), do_del_acct, _("Cancel"), NULL);
975 l = l->next;
976 }
977 }
978
979 static void sel_auto(gpointer w, gpointer d) 1152 static void sel_auto(gpointer w, gpointer d)
980 { 1153 {
981 GSList *l = aim_users; 1154 GSList *l = aim_users;
982 struct aim_user *u; 1155 struct aim_user *u;
983 int i = 0; /* faster than doing g_list_index each time */ 1156 int i = 0; /* faster than doing g_list_index each time */
989 else 1162 else
990 gtk_clist_unselect_row(GTK_CLIST(list), i, -1); 1163 gtk_clist_unselect_row(GTK_CLIST(list), i, -1);
991 i++; 1164 i++;
992 } 1165 }
993 } 1166 }
1167 #endif
994 1168
995 void account_editor(GtkWidget *w, GtkWidget *W) 1169 void account_editor(GtkWidget *w, GtkWidget *W)
996 { 1170 {
997 /* please kill me */ 1171 /* please kill me */
998 GtkWidget *vbox; 1172 GtkWidget *vbox;
999 GtkWidget *hbox; 1173 GtkWidget *hbox;
1000 GtkWidget *vbox2; 1174 GtkWidget *vbox2;
1001 GtkWidget *sw; 1175 GtkWidget *sw;
1002 GtkWidget *button; /* used for many things */ 1176 GtkWidget *button; /* used for many things */
1177 GtkWidget *sep;
1178 GtkSizeGroup *sg;
1003 1179
1004 if (acctedit) { 1180 if (acctedit) {
1005 gtk_window_present(GTK_WINDOW(acctedit)); 1181 gtk_window_present(GTK_WINDOW(acctedit));
1006 return; 1182 return;
1007 } 1183 }
1008 1184
1009 acctedit = gtk_window_new(GTK_WINDOW_TOPLEVEL); 1185 acctedit = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1010 gtk_window_set_title(GTK_WINDOW(acctedit), _("Gaim - Account Editor")); 1186 gtk_window_set_title(GTK_WINDOW(acctedit), _("Gaim - Account Editor"));
1011 gtk_window_set_wmclass(GTK_WINDOW(acctedit), "accounteditor", "Gaim"); 1187 gtk_window_set_wmclass(GTK_WINDOW(acctedit), "accounteditor", "Gaim");
1012 gtk_widget_realize(acctedit); 1188 gtk_widget_realize(acctedit);
1013 gtk_widget_set_usize(acctedit, -1, 200); 1189 gtk_widget_set_usize(acctedit, -1, 250);
1190 gtk_window_set_default_size(GTK_WINDOW(acctedit), 450, 250);
1014 gtk_signal_connect(GTK_OBJECT(acctedit), "destroy", GTK_SIGNAL_FUNC(delete_acctedit), W); 1191 gtk_signal_connect(GTK_OBJECT(acctedit), "destroy", GTK_SIGNAL_FUNC(delete_acctedit), W);
1015 1192
1016 vbox = gtk_vbox_new(FALSE, 5); 1193 vbox = gtk_vbox_new(FALSE, 6);
1017 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); 1194 gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
1018 gtk_container_add(GTK_CONTAINER(acctedit), vbox); 1195 gtk_container_add(GTK_CONTAINER(acctedit), vbox);
1019 1196
1020 hbox = gtk_hbox_new(FALSE, 5);
1021 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
1022
1023 sw = generate_list(); 1197 sw = generate_list();
1024 1198
1199 hbox = gtk_hbox_new(FALSE, 6);
1200 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 6);
1201
1202 gtk_box_pack_start(GTK_BOX(hbox), sw, TRUE, TRUE, 6);
1203
1204 #if 0
1025 vbox2 = gtk_vbox_new(TRUE, 5); 1205 vbox2 = gtk_vbox_new(TRUE, 5);
1026 gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0); 1206 gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0);
1027 1207
1028 button = picture_button2(acctedit, _("Select All"), tb_refresh_xpm, 2); 1208 button = gtk_button_new_from_stock(GTK_STOCK_REFRESH);
1209 gtk_button_set_use_stock(GTK_BUTTON(button), FALSE);
1210 gtk_button_set_label(GTK_BUTTON(button), "Select All");
1211 // button = picture_button2(acctedit, _("Select All"), tb_refresh_xpm, 2);
1029 gtk_box_pack_start(GTK_BOX(vbox2), button, TRUE, TRUE, 0); 1212 gtk_box_pack_start(GTK_BOX(vbox2), button, TRUE, TRUE, 0);
1030 gtk_signal_connect_object(GTK_OBJECT(button), "clicked", 1213 gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
1031 GTK_SIGNAL_FUNC(gtk_clist_select_all), GTK_OBJECT(list)); 1214 GTK_SIGNAL_FUNC(gtk_clist_select_all), GTK_OBJECT(list));
1032 1215
1033 button = picture_button2(acctedit, _("Select Autos"), tb_redo_xpm, 2); 1216 button = gtk_button_new_from_stock(GTK_STOCK_REDO);
1217 gtk_button_set_use_stock(GTK_BUTTON(button), FALSE);
1218 // gtk_button_set_label(button, "Select Autos");
1219 // button = picture_button2(acctedit, _("Select Autos"), tb_redo_xpm, 2);
1034 gtk_box_pack_start(GTK_BOX(vbox2), button, TRUE, TRUE, 0); 1220 gtk_box_pack_start(GTK_BOX(vbox2), button, TRUE, TRUE, 0);
1035 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(sel_auto), NULL); 1221 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(sel_auto), NULL);
1036 1222
1037 button = picture_button2(acctedit, _("Select None"), tb_undo_xpm, 2); 1223 button = gtk_button_new_from_stock(GTK_STOCK_UNDO);
1224 gtk_button_set_use_stock(GTK_BUTTON(button), FALSE);
1225 gtk_button_set_label(GTK_BUTTON(button), "Select None");
1226 // button = picture_button2(acctedit, _("Select None"), tb_undo_xpm, 2);
1038 gtk_box_pack_start(GTK_BOX(vbox2), button, TRUE, TRUE, 0); 1227 gtk_box_pack_start(GTK_BOX(vbox2), button, TRUE, TRUE, 0);
1039 gtk_signal_connect_object(GTK_OBJECT(button), "clicked", 1228 gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
1040 GTK_SIGNAL_FUNC(gtk_clist_unselect_all), GTK_OBJECT(list)); 1229 GTK_SIGNAL_FUNC(gtk_clist_unselect_all), GTK_OBJECT(list));
1041 1230
1042 gtk_box_pack_start(GTK_BOX(hbox), sw, TRUE, TRUE, 0); 1231 #endif
1043 1232
1044 hbox = gtk_hbox_new(TRUE, 5); 1233 sep = gtk_hseparator_new();
1234 gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
1235
1236 hbox = gtk_hbox_new(FALSE, 6);
1237 gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
1045 gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 1238 gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1046 1239
1047 button = picture_button(acctedit, _("Add"), gnome_add_xpm); 1240 sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
1048 gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); 1241
1242 button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
1243 gtk_size_group_add_widget(sg, button);
1244 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
1245 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(acctedit_close), W);
1246
1247 button = gtk_button_new_from_stock(GTK_STOCK_DELETE);
1248 gtk_size_group_add_widget(sg, button);
1249 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
1250 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(del_acct), NULL);
1251
1252 button = gaim_pixbuf_button_from_stock("_Modify", GTK_STOCK_PREFERENCES,
1253 GAIM_BUTTON_HORIZONTAL);
1254 gtk_size_group_add_widget(sg, button);
1255 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
1256 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(mod_acct), NULL);
1257
1258 button = gtk_button_new_from_stock(GTK_STOCK_ADD);
1259 gtk_size_group_add_widget(sg, button);
1260 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
1049 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(add_acct), NULL); 1261 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(add_acct), NULL);
1050
1051 button = picture_button(acctedit, _("Modify"), gnome_preferences_xpm);
1052 gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
1053 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(mod_acct), NULL);
1054
1055 button = picture_button(acctedit, _("Sign On/Off"), join_xpm);
1056 gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
1057 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(acct_signin), NULL);
1058
1059 button = picture_button(acctedit, _("Delete"), gnome_remove_xpm);
1060 gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
1061 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(del_acct), NULL);
1062
1063 button = picture_button(acctedit, _("Close"), cancel_xpm);
1064 gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
1065 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(acctedit_close), W);
1066 1262
1067 gtk_widget_show_all(acctedit); 1263 gtk_widget_show_all(acctedit);
1068 } 1264 }
1069 1265
1070 struct signon_meter { 1266 struct signon_meter {
1115 1311
1116 void account_online(struct gaim_connection *gc) 1312 void account_online(struct gaim_connection *gc)
1117 { 1313 {
1118 int i; 1314 int i;
1119 struct signon_meter *meter = find_signon_meter(gc); 1315 struct signon_meter *meter = find_signon_meter(gc);
1316 GtkTreeIter iter;
1120 1317
1121 /* first we hide the login progress meter */ 1318 /* first we hide the login progress meter */
1122 if (meter) { 1319 if (meter) {
1123 kill_meter(meter); 1320 kill_meter(meter);
1124 meters = g_slist_remove(meters, meter); 1321 meters = g_slist_remove(meters, meter);
1158 } 1355 }
1159 1356
1160 /* everything for the account editor */ 1357 /* everything for the account editor */
1161 if (!acctedit) 1358 if (!acctedit)
1162 return; 1359 return;
1163 i = gtk_clist_find_row_from_data(GTK_CLIST(list), gc->user); 1360
1164 gtk_clist_set_text(GTK_CLIST(list), i, 1, "Yes"); 1361 if (get_iter_from_data(GTK_TREE_VIEW(treeview), gc->user, &iter)) {
1165 gtk_clist_set_text(GTK_CLIST(list), i, 3, gc->prpl->name); 1362 gtk_list_store_set(model, &iter,
1363 COLUMN_ONLINE, TRUE,
1364 COLUMN_PROTOCOL, gc->prpl->name,
1365 -1);
1366 }
1166 1367
1167 return; 1368 return;
1168 } 1369 }
1169 1370
1170 void account_offline(struct gaim_connection *gc) 1371 void account_offline(struct gaim_connection *gc)
1171 { 1372 {
1172 int i;
1173 struct signon_meter *meter = find_signon_meter(gc); 1373 struct signon_meter *meter = find_signon_meter(gc);
1374 GtkTreeIter iter;
1375
1174 if (meter) { 1376 if (meter) {
1175 kill_meter(meter); 1377 kill_meter(meter);
1176 meters = g_slist_remove(meters, meter); 1378 meters = g_slist_remove(meters, meter);
1177 g_free(meter); 1379 g_free(meter);
1178 } 1380 }
1179 gc->user->gc = NULL; /* wasn't that awkward? */ 1381 gc->user->gc = NULL; /* wasn't that awkward? */
1180 if (!acctedit) 1382 if (!acctedit)
1181 return; 1383 return;
1182 i = gtk_clist_find_row_from_data(GTK_CLIST(list), gc->user); 1384
1183 gtk_clist_set_text(GTK_CLIST(list), i, 1, "No"); 1385 if (get_iter_from_data(GTK_TREE_VIEW(treeview), gc->user, &iter)) {
1386 gtk_list_store_set(model, &iter, COLUMN_ONLINE, FALSE, -1);
1387 }
1184 } 1388 }
1185 1389
1186 void auto_login() 1390 void auto_login()
1187 { 1391 {
1188 GSList *u = aim_users; 1392 GSList *u = aim_users;
1460 show_login(); 1664 show_login();
1461 } 1665 }
1462 1666
1463 struct aim_user *new_user(const char *name, int proto, int opts) 1667 struct aim_user *new_user(const char *name, int proto, int opts)
1464 { 1668 {
1465 char *titles[4];
1466 int i;
1467
1468 struct aim_user *u = g_new0(struct aim_user, 1); 1669 struct aim_user *u = g_new0(struct aim_user, 1);
1469 g_snprintf(u->username, sizeof(u->username), "%s", name); 1670 g_snprintf(u->username, sizeof(u->username), "%s", name);
1470 g_snprintf(u->user_info, sizeof(u->user_info), "%s", DEFAULT_INFO); 1671 g_snprintf(u->user_info, sizeof(u->user_info), "%s", DEFAULT_INFO);
1471 u->protocol = proto; 1672 u->protocol = proto;
1472 u->options = opts; 1673 u->options = opts;
1473 aim_users = g_slist_append(aim_users, u); 1674 aim_users = g_slist_append(aim_users, u);
1474 1675
1475 if (list) { 1676 if (treeview) {
1476 titles[0] = u->username; 1677 GtkTreeIter iter;
1477 titles[1] = u->gc ? "Yes" : "No"; 1678
1478 titles[2] = (u->options & OPT_USR_AUTO) ? "True" : "False"; 1679 gtk_list_store_append(model, &iter);
1479 titles[3] = proto_name(u->protocol); 1680 gtk_list_store_set(model, &iter,
1480 i = gtk_clist_append(GTK_CLIST(list), titles); 1681 COLUMN_SCREENNAME, u->username,
1481 gtk_clist_set_row_data(GTK_CLIST(list), i, u); 1682 COLUMN_ONLINE, (u->gc ? TRUE : FALSE),
1683 COLUMN_AUTOLOGIN, (u->options & OPT_USR_AUTO),
1684 COLUMN_PROTOCOL, proto_name(u->protocol),
1685 COLUMN_DATA, u,
1686 -1);
1482 } 1687 }
1483 1688
1484 return u; 1689 return u;
1485 } 1690 }