src/dialogs.c

changeset 3757
b05070850821
parent 3753
e7aa1447d839
child 3767
3454f74eb9d1
equal deleted inserted replaced
3756:fd68683a6c26 3757:b05070850821
383 destroy_dialog(NULL, icondlg); 383 destroy_dialog(NULL, icondlg);
384 icondlg = NULL; 384 icondlg = NULL;
385 } 385 }
386 } 386 }
387 387
388 static void do_warn(GtkWidget *widget, struct warning *w) 388 static void do_warn(GtkWidget *widget, gint resp, struct warning *w)
389 { 389 {
390 serv_warn(w->gc, w->who, (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w->anon))) ? 1 : 0); 390 if (resp == GTK_RESPONSE_OK)
391 serv_warn(w->gc, w->who, (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w->anon))) ? 1 : 0);
391 392
392 destroy_dialog(NULL, w->window); 393 destroy_dialog(NULL, w->window);
393 }
394
395 static void free_warn_data(GtkObject *obj, struct warning *w)
396 {
397 g_free(w); 394 g_free(w);
398 } 395 }
399 396
400 void show_warn_dialog(struct gaim_connection *gc, char *who) 397 void show_warn_dialog(struct gaim_connection *gc, char *who)
401 { 398 {
402 GtkWidget *cancel; 399 char *filename = g_build_filename(DATADIR, "pixmaps", "gaim", "dialogs", "gaim_warning.png", NULL);
403 GtkWidget *warn; 400 char *labeltext;
401 GtkWidget *hbox, *vbox;
404 GtkWidget *label; 402 GtkWidget *label;
405 GtkWidget *vbox; 403 GtkWidget *img = gtk_image_new_from_file(filename);
406 GtkWidget *bbox; 404 struct conversation *c = find_conversation(who);
407 GtkWidget *frame;
408 GtkWidget *fbox;
409 char buf[128];
410 405
411 struct warning *w = g_new0(struct warning, 1); 406 struct warning *w = g_new0(struct warning, 1);
412 w->who = who; 407 w->who = who;
413 w->gc = gc; 408 w->gc = gc;
414 409
415 GAIM_DIALOG(w->window); 410 g_free(filename);
411 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
412
413 w->window = gtk_dialog_new_with_buttons("", GTK_WINDOW(c->window), GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, "_Warn", GTK_RESPONSE_OK, NULL);
414 gtk_dialog_set_default_response (GTK_DIALOG(w->window), GTK_RESPONSE_OK);
415 g_signal_connect(G_OBJECT(w->window), "response", G_CALLBACK(do_warn), w);
416
417 gtk_container_set_border_width (GTK_CONTAINER(w->window), 6);
418 gtk_window_set_resizable(GTK_WINDOW(w->window), FALSE);
419 gtk_dialog_set_has_separator(GTK_DIALOG(w->window), FALSE);
420 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(w->window)->vbox), 12);
421 gtk_container_set_border_width (GTK_CONTAINER(GTK_DIALOG(w->window)->vbox), 6);
422
423 hbox = gtk_hbox_new(FALSE, 12);
424 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(w->window)->vbox), hbox);
425 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
426
427 vbox = gtk_vbox_new(FALSE, 0);
428 gtk_container_add(GTK_CONTAINER(hbox), vbox);
429 labeltext = g_strdup_printf(_("<span weight=\"bold\" size=\"larger\">Warn %s?</span>\n\n"
430 "This will increase %s's warning level and he or she will be subject to harsher rate limiting.\n"), who, who);
431 label = gtk_label_new(NULL);
432 gtk_label_set_markup(GTK_LABEL(label), labeltext);
433 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
434 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
435 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
436 g_free(labeltext);
437
438 w->anon = gtk_check_button_new_with_mnemonic(_("Warn _anonymously?"));
439 gtk_box_pack_start(GTK_BOX(vbox), w->anon, FALSE, FALSE, 0);
440
441 hbox = gtk_hbox_new(FALSE, 6);
442 gtk_container_add(GTK_CONTAINER(vbox), hbox);
443 img = gtk_image_new_from_stock(GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_MENU);
444 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
445 labeltext = _("<b>Anonymous warnings are less severe.</b>");
446 /* labeltext = _("Anonymous warnings are less severe."); */
447 label = gtk_label_new(NULL);
448 gtk_label_set_markup(GTK_LABEL(label), labeltext);
449 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
450 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
451
416 dialogwindows = g_list_prepend(dialogwindows, w->window); 452 dialogwindows = g_list_prepend(dialogwindows, w->window);
417 gtk_window_set_wmclass(GTK_WINDOW(w->window), "warning", "Gaim"); 453 gtk_widget_show_all(w->window);
418 gtk_window_set_policy(GTK_WINDOW(w->window), FALSE, FALSE, TRUE);
419 gtk_window_set_title(GTK_WINDOW(w->window), _("Gaim - Warn user?"));
420 gtk_container_set_border_width(GTK_CONTAINER(w->window), 5);
421 gtk_signal_connect(GTK_OBJECT(w->window), "delete_event",
422 GTK_SIGNAL_FUNC(destroy_dialog), w->window);
423 gtk_signal_connect(GTK_OBJECT(w->window), "delete_event", GTK_SIGNAL_FUNC(free_warn_data), w);
424 gtk_widget_realize(w->window);
425
426 fbox = gtk_vbox_new(FALSE, 5);
427 gtk_container_add(GTK_CONTAINER(w->window), fbox);
428 gtk_widget_show(fbox);
429
430 frame = gtk_frame_new(_("Warn"));
431 gtk_box_pack_start(GTK_BOX(fbox), frame, FALSE, FALSE, 5);
432 gtk_widget_show(frame);
433
434 vbox = gtk_vbox_new(FALSE, 5);
435 gtk_container_add(GTK_CONTAINER(frame), vbox);
436 gtk_widget_show(vbox);
437
438 g_snprintf(buf, 127, _("Do you really want to warn %s?"), who);
439 label = gtk_label_new(buf);
440 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5);
441 gtk_widget_show(label);
442
443 w->anon = gtk_check_button_new_with_label(_("Warn anonymously?"));
444 gtk_box_pack_start(GTK_BOX(vbox), w->anon, TRUE, TRUE, 5);
445 gtk_widget_show(w->anon);
446
447 label = gtk_label_new(_("Anonymous warnings are less harsh."));
448 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5);
449 gtk_widget_show(label);
450
451 bbox = gtk_hbox_new(TRUE, 10);
452 gtk_box_pack_start(GTK_BOX(fbox), bbox, FALSE, FALSE, 5);
453 gtk_widget_show(bbox);
454
455 cancel = picture_button(w->window, _("Cancel"), cancel_xpm);
456 gtk_box_pack_end(GTK_BOX(bbox), cancel, FALSE, FALSE, 5);
457 gtk_signal_connect(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), w->window);
458
459 warn = picture_button(w->window, _("Warn"), warn_xpm);
460 gtk_box_pack_end(GTK_BOX(bbox), warn, FALSE, FALSE, 5);
461 gtk_signal_connect(GTK_OBJECT(warn), "clicked", GTK_SIGNAL_FUNC(do_warn), w);
462
463 gtk_widget_show(w->window);
464 } 454 }
465 455
466 void do_remove_buddy(struct buddy *b) 456 void do_remove_buddy(struct buddy *b)
467 { 457 {
468 struct group *g = find_group_by_buddy(b->gc, b->name); 458 struct group *g = find_group_by_buddy(b->gc, b->name);

mercurial