console/gntrequest.c

changeset 15715
8c0cd13f4af3
parent 14752
963fd36fc2ae
equal deleted inserted replaced
15714:59a1acdd2c7b 15715:8c0cd13f4af3
32 #include <gntline.h> 32 #include <gntline.h>
33 #include <gnttree.h> 33 #include <gnttree.h>
34 34
35 #include "gntgaim.h" 35 #include "gntgaim.h"
36 #include "gntrequest.h" 36 #include "gntrequest.h"
37 #include "util.c"
38
39 typedef struct
40 {
41 void *user_data;
42 GntWidget *entry, *dialog;
43 GCallback *cbs;
44 } GaimGntFileRequest;
37 45
38 static GntWidget * 46 static GntWidget *
39 setup_request_window(const char *title, const char *primary, 47 setup_request_window(const char *title, const char *primary,
40 const char *secondary, GaimRequestType type) 48 const char *secondary, GaimRequestType type)
41 { 49 {
508 gnt_widget_show(window); 516 gnt_widget_show(window);
509 517
510 return window; 518 return window;
511 } 519 }
512 520
521 static void
522 file_cancel_cb(GntWidget *wid, gpointer fq)
523 {
524 GaimGntFileRequest *data = fq;
525 if (data->cbs[1] != NULL)
526 ((GaimRequestFileCb)data->cbs[1])(data->user_data, NULL);
527
528 gaim_request_close(GAIM_REQUEST_FILE, data->dialog);
529 }
530
531 static void
532 file_ok_cb(GntWidget *wid, gpointer fq)
533 {
534 GaimGntFileRequest *data = fq;
535 if (data->cbs[0] != NULL)
536 ((GaimRequestFileCb)data->cbs[0])(data->user_data, gnt_entry_get_text(GNT_ENTRY(data->entry)));
537
538 gaim_request_close(GAIM_REQUEST_FILE, data->dialog);
539 }
540
541 static void
542 file_request_destroy(GaimGntFileRequest *data)
543 {
544 g_free(data->cbs);
545 g_free(data);
546 }
547
548 static void *
549 gg_request_file(const char *title, const char *filename,
550 gboolean savedialog,
551 GCallback ok_cb, GCallback cancel_cb,
552 void *user_data)
553 {
554 GntWidget *window = gnt_vbox_new(FALSE);
555 GntWidget *entry, *hbox, *button;
556 GaimGntFileRequest *data = g_new0(GaimGntFileRequest, 1);
557
558 data->user_data = user_data;
559 data->cbs = g_new0(GCallback, 2);
560 data->cbs[0] = ok_cb;
561 data->cbs[1] = cancel_cb;
562 data->dialog = window;
563 data->entry = entry = gnt_entry_new(g_strconcat(gaim_home_dir(), G_DIR_SEPARATOR_S, filename, NULL));
564 gnt_widget_set_size(entry, 30, 1);
565 gnt_box_set_toplevel(GNT_BOX(window), TRUE);
566 gnt_box_set_title(GNT_BOX(window), title ? title : (savedialog ? _("Save File...") : _("Open File...")));
567 #if 0
568 /* After the string freeze */
569 gnt_box_add_widget(GNT_BOX(window), gnt_label_new(_("Please enter a full path for a file")));
570 #endif
571 gnt_box_add_widget(GNT_BOX(window), entry);
572
573 hbox = gnt_hbox_new(TRUE);
574 gnt_box_set_alignment(GNT_BOX(hbox), GNT_ALIGN_MID);
575
576 button = gnt_button_new(_("Cancel"));
577 g_signal_connect(G_OBJECT(button), "activate",
578 G_CALLBACK(file_cancel_cb), data);
579 gnt_box_add_widget(GNT_BOX(hbox), button);
580
581 button = gnt_button_new(_("OK"));
582 g_signal_connect(G_OBJECT(button), "activate",
583 G_CALLBACK(file_ok_cb), data);
584 gnt_box_add_widget(GNT_BOX(hbox), button);
585
586 gnt_box_add_widget(GNT_BOX(window), hbox);
587
588 g_signal_connect_swapped(G_OBJECT(window), "destroy",
589 G_CALLBACK(file_request_destroy), data);
590
591 gnt_widget_show(window);
592
593 return window;
594 }
595
513 static GaimRequestUiOps uiops = 596 static GaimRequestUiOps uiops =
514 { 597 {
515 .request_input = gg_request_input, 598 .request_input = gg_request_input,
516 .close_request = gg_close_request, 599 .close_request = gg_close_request,
517 .request_choice = gg_request_choice, 600 .request_choice = gg_request_choice,
518 .request_action = gg_request_action, 601 .request_action = gg_request_action,
519 .request_fields = gg_request_fields, 602 .request_fields = gg_request_fields,
520 .request_file = NULL, /* No plans for these */ 603 .request_file = gg_request_file,
521 .request_folder = NULL 604 .request_folder = NULL /* No plans for this */
522 }; 605 };
523 606
524 GaimRequestUiOps *gg_request_get_ui_ops() 607 GaimRequestUiOps *gg_request_get_ui_ops()
525 { 608 {
526 return &uiops; 609 return &uiops;

mercurial