comparison src/dialogs.c @ 6334:930708df05dd

[gaim-migrate @ 6833] When I got back from swimming, I found a bunch of IMs and chat requests from some annoying user who kept asking if I was dumb or dead. I decided to block this user, but realized just how ugly the dialog for doing so is. So, I rewrote it. Now I can block him in peace. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Wed, 30 Jul 2003 01:45:31 +0000
parents b7f983d1392c
children 7a34722b3164
comparison
equal deleted inserted replaced
6333:e06e04e44914 6334:930708df05dd
82 GtkWidget *entry_for_alias; 82 GtkWidget *entry_for_alias;
83 GtkWidget *account; 83 GtkWidget *account;
84 GaimConnection *gc; 84 GaimConnection *gc;
85 }; 85 };
86 86
87 struct addperm {
88 GtkWidget *window;
89 GtkWidget *entry;
90 GaimConnection *gc;
91 gboolean permit;
92 };
93
94 struct findbyemail { 87 struct findbyemail {
95 GtkWidget *window; 88 GtkWidget *window;
96 GtkWidget *emailentry; 89 GtkWidget *emailentry;
97 GaimConnection *gc; 90 GaimConnection *gc;
98 }; 91 };
120 GtkWidget *window; 113 GtkWidget *window;
121 GtkWidget *entry; 114 GtkWidget *entry;
122 GtkWidget *account; 115 GtkWidget *account;
123 GaimConnection *gc; 116 GaimConnection *gc;
124 }; 117 };
118
119 typedef struct
120 {
121 char *username;
122 gboolean block;
123 GaimConnection *gc;
124
125 } GaimGtkBlockData;
125 126
126 static GSList *info_dlgs = NULL; 127 static GSList *info_dlgs = NULL;
127 128
128 static struct info_dlg *find_info_dlg(GaimConnection *gc, const char *who) 129 static struct info_dlg *find_info_dlg(GaimConnection *gc, const char *who)
129 { 130 {
377 378
378 dialogwindows = g_list_prepend(dialogwindows, w->window); 379 dialogwindows = g_list_prepend(dialogwindows, w->window);
379 gtk_widget_show_all(w->window); 380 gtk_widget_show_all(w->window);
380 } 381 }
381 382
382 void do_remove_chat(struct chat *chat) 383 static void
384 do_remove_chat(struct chat *chat)
383 { 385 {
384 gaim_blist_remove_chat(chat); 386 gaim_blist_remove_chat(chat);
385 gaim_blist_save(); 387 gaim_blist_save();
386 } 388 }
387 389
388 void do_remove_buddy(struct buddy *b) 390 static void
391 do_remove_buddy(struct buddy *b)
389 { 392 {
390 struct group *g; 393 struct group *g;
391 GaimConversation *c; 394 GaimConversation *c;
392 gchar *name; 395 gchar *name;
393 396
2316 2319
2317 /*------------------------------------------------------------------------*/ 2320 /*------------------------------------------------------------------------*/
2318 /* The dialog for adding to permit/deny */ 2321 /* The dialog for adding to permit/deny */
2319 /*------------------------------------------------------------------------*/ 2322 /*------------------------------------------------------------------------*/
2320 2323
2321 2324 static void
2322 static void do_add_perm(GtkWidget *w, struct addperm *p) 2325 destroy_block_data_cb(GaimGtkBlockData *data)
2323 { 2326 {
2324 2327 g_free(data->username);
2325 const char *who; 2328 g_free(data);
2326 2329 }
2327 who = gtk_entry_get_text(GTK_ENTRY(p->entry)); 2330
2328 2331 static void
2329 if (!p->permit) { 2332 block_unblock_cb(GaimGtkBlockData *data)
2330 if (gaim_privacy_deny_add(p->gc->account, who)) { 2333 {
2331 serv_add_deny(p->gc, who); 2334 GaimAccount *account;
2335
2336 account = gaim_connection_get_account(data->gc);
2337
2338 if (data->block) {
2339 if (gaim_privacy_deny_add(account, data->username)) {
2340 serv_add_deny(data->gc, data->username);
2332 build_block_list(); 2341 build_block_list();
2333 gaim_blist_save(); 2342 gaim_blist_save();
2334 } 2343 }
2335 } else { 2344 }
2336 if (gaim_privacy_permit_add(p->gc->account, who)) { 2345 else {
2337 serv_add_permit(p->gc, who); 2346 if (gaim_privacy_permit_add(account, data->username)) {
2347 serv_add_permit(data->gc, data->username);
2338 build_allow_list(); 2348 build_allow_list();
2339 gaim_blist_save(); 2349 gaim_blist_save();
2340 } 2350 }
2341 } 2351 }
2342 2352
2343 destroy_dialog(NULL, p->window); 2353 destroy_block_data_cb(data);
2344 } 2354 }
2345 2355
2346 2356 void
2347 2357 show_add_perm(GaimConnection *gc, char *who, gboolean permit)
2348 void show_add_perm(GaimConnection *gc, char *who, gboolean permit) 2358 {
2349 { 2359 char *primary, *secondary;
2350 GtkWidget *cancel; 2360 GaimGtkBlockData *data;
2351 GtkWidget *add; 2361
2352 GtkWidget *label; 2362 data = g_new0(GaimGtkBlockData, 1);
2353 GtkWidget *bbox; 2363
2354 GtkWidget *vbox; 2364 data->gc = gc;
2355 GtkWidget *topbox; 2365 data->block = !permit;
2356 2366 data->username = g_strdup(who);
2357 struct addperm *p = g_new0(struct addperm, 1); 2367
2358 p->gc = gc; 2368 if (permit) {
2359 p->permit = permit; 2369 primary = g_strdup_printf(_("Unblock %s?"), who);
2360 2370 secondary = g_strdup_printf(
2361 GAIM_DIALOG(p->window); 2371 _("You are about to unblock %s. This will allow %s "
2362 gtk_container_set_border_width(GTK_CONTAINER(p->window), 5); 2372 "to speak to you again. Do you want to continue?"),
2363 gtk_window_set_resizable(GTK_WINDOW(p->window), FALSE); 2373 who, who);
2364 gtk_widget_realize(p->window); 2374
2365 2375 gaim_request_action(gc, _("Unblock User"), primary, secondary,
2366 dialogwindows = g_list_prepend(dialogwindows, p->window); 2376 0, data, 2,
2367 2377 _("Unblock"), G_CALLBACK(block_unblock_cb),
2368 bbox = gtk_hbox_new(FALSE, 5); 2378 _("Cancel"), G_CALLBACK(destroy_block_data_cb));
2369 topbox = gtk_hbox_new(FALSE, 5); 2379 }
2370 vbox = gtk_vbox_new(FALSE, 5);
2371 p->entry = gtk_entry_new();
2372
2373 /* Build Add Button */
2374
2375 if (permit)
2376 add = gaim_pixbuf_button_from_stock(_("Permit"), GTK_STOCK_ADD, GAIM_BUTTON_HORIZONTAL);
2377 else 2380 else
2378 add = gaim_pixbuf_button_from_stock(_("Deny"), GTK_STOCK_ADD, GAIM_BUTTON_HORIZONTAL); 2381 {
2379 cancel = gaim_pixbuf_button_from_stock(_("Cancel"), GTK_STOCK_CANCEL, GAIM_BUTTON_HORIZONTAL); 2382 primary = g_strdup_printf(_("Block %s?"), who);
2380 2383 secondary = g_strdup_printf(
2381 /* End of Cancel Button */ 2384 _("You are about to block %s. This will prevent %s "
2382 if (who != NULL) 2385 "from speaking to you again. Do you want to continue?"),
2383 gtk_entry_set_text(GTK_ENTRY(p->entry), who); 2386 who, who);
2384 2387
2385 /* Put the buttons in the box */ 2388 gaim_request_action(gc, _("Unblock User"), primary, secondary,
2386 2389 0, data, 2,
2387 gtk_box_pack_end(GTK_BOX(bbox), add, FALSE, FALSE, 5); 2390 _("Block"), G_CALLBACK(block_unblock_cb),
2388 gtk_box_pack_end(GTK_BOX(bbox), cancel, FALSE, FALSE, 5); 2391 _("Cancel"), G_CALLBACK(destroy_block_data_cb));
2389 2392 }
2390 label = gtk_label_new(_("Add")); 2393
2391 gtk_box_pack_start(GTK_BOX(topbox), label, FALSE, FALSE, 5); 2394 g_free(primary);
2392 gtk_box_pack_start(GTK_BOX(topbox), p->entry, FALSE, FALSE, 5); 2395 g_free(secondary);
2393 /* And the boxes in the box */
2394 gtk_box_pack_start(GTK_BOX(vbox), topbox, TRUE, TRUE, 5);
2395 gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 5);
2396 topbox=gtk_hbox_new(FALSE, 5);
2397 gtk_box_pack_start(GTK_BOX(topbox), vbox, FALSE, FALSE, 5);
2398
2399
2400 /* Handle closes right */
2401 g_signal_connect(G_OBJECT(p->window), "destroy", G_CALLBACK(destroy_dialog), p->window);
2402 g_signal_connect(G_OBJECT(cancel), "clicked", G_CALLBACK(destroy_dialog), p->window);
2403 g_signal_connect(G_OBJECT(add), "clicked", G_CALLBACK(do_add_perm), p);
2404 g_signal_connect(G_OBJECT(p->entry), "activate", G_CALLBACK(do_add_perm), p);
2405
2406 /* Finish up */
2407 if (permit)
2408 gtk_window_set_title(GTK_WINDOW(p->window), _("Add Permit"));
2409 else
2410 gtk_window_set_title(GTK_WINDOW(p->window), _("Add Deny"));
2411 gtk_window_set_focus(GTK_WINDOW(p->window), p->entry);
2412 gtk_container_add(GTK_CONTAINER(p->window), topbox);
2413 gtk_widget_realize(p->window);
2414
2415 gtk_widget_show_all(p->window);
2416 } 2396 }
2417 2397
2418 2398
2419 /*------------------------------------------------------------------------*/ 2399 /*------------------------------------------------------------------------*/
2420 /* Functions Called To Add A Log */ 2400 /* Functions Called To Add A Log */