| 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; |