| 592 perl_timeout_handlers = g_list_append(perl_timeout_handlers, handler); |
593 perl_timeout_handlers = g_list_append(perl_timeout_handlers, handler); |
| 593 handler->iotag = gtk_timeout_add(timeout, (GtkFunction)perl_timeout, handler); |
594 handler->iotag = gtk_timeout_add(timeout, (GtkFunction)perl_timeout, handler); |
| 594 XSRETURN_EMPTY; |
595 XSRETURN_EMPTY; |
| 595 } |
596 } |
| 596 |
597 |
| 597 static GtkWidget *config = NULL; |
598 static GtkWidget *config = NULL; |
| 598 static GtkWidget *entry = NULL; |
|
| 599 |
599 |
| 600 static void cfdes(GtkWidget *m, gpointer n) { |
600 static void cfdes(GtkWidget *m, gpointer n) { |
| 601 if (config) gtk_widget_destroy(config); |
601 if (config) gtk_widget_destroy(config); |
| 602 config = NULL; |
602 config = NULL; |
| 603 } |
603 } |
| 604 |
604 |
| 605 static void do_load(GtkWidget *m, gpointer n) { |
605 static void do_load(GtkWidget *m, gpointer n) { |
| 606 char *file = gtk_entry_get_text(GTK_ENTRY(entry)); |
606 gchar* file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(config)); |
| 607 if (!file || !strlen(file)) { |
607 if (!file || !strlen(file)) { |
| 608 perl_end(); |
608 perl_end(); |
| 609 perl_init(); |
609 perl_init(); |
| 610 return; |
610 return; |
| 611 } |
611 } |
| |
612 |
| |
613 if (file_is_dir(file, config)) { |
| |
614 return; |
| |
615 } |
| |
616 |
| |
617 if (last_dir) { |
| |
618 g_free(last_dir); |
| |
619 } |
| |
620 last_dir = g_dirname(file); |
| |
621 |
| |
622 debug_printf("Loading perl script: %s\n", file); |
| |
623 |
| 612 perl_load_file(file); |
624 perl_load_file(file); |
| 613 gtk_widget_destroy(config); |
625 cfdes(config, NULL); |
| 614 } |
626 } |
| 615 |
627 |
| 616 void load_perl_script(GtkWidget *w, gpointer d) |
628 void load_perl_script(GtkWidget *w, gpointer d) |
| 617 { |
629 { |
| 618 GtkWidget *frame; |
630 char *buf, *temp; |
| 619 GtkWidget *vbox; |
|
| 620 GtkWidget *hbox; |
|
| 621 GtkWidget *label; |
|
| 622 GtkWidget *ok; |
|
| 623 GtkWidget *cancel; |
|
| 624 |
631 |
| 625 if (config) { |
632 if (config) { |
| 626 gtk_widget_show(config); |
633 gtk_widget_show(config); |
| |
634 gdk_window_raise(config->window); |
| 627 return; |
635 return; |
| 628 } |
636 } |
| 629 |
637 |
| 630 config = gtk_window_new(GTK_WINDOW_DIALOG); |
638 /* Below is basically stolen from plugins.c */ |
| 631 gtk_window_set_policy(GTK_WINDOW(config), TRUE, TRUE, FALSE); |
639 config = gtk_file_selection_new(_("Gaim - Select Perl Script")); |
| 632 gtk_window_set_wmclass(GTK_WINDOW(config), "perl_script", "Gaim"); |
640 |
| 633 gtk_window_set_title(GTK_WINDOW(config), "Gaim - Add Perl Script"); |
641 gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(config)); |
| 634 gtk_container_set_border_width(GTK_CONTAINER(config), 5); |
642 |
| 635 gtk_signal_connect(GTK_OBJECT(config), "destroy", GTK_SIGNAL_FUNC(cfdes), 0); |
643 if (!last_dir) { |
| 636 gtk_widget_realize(config); |
644 buf = g_strjoin(NULL, g_get_home_dir(), G_DIR_SEPARATOR_S, ".gaim", |
| 637 aol_icon(config->window); |
645 G_DIR_SEPARATOR_S, NULL); |
| 638 |
646 } else { |
| 639 frame = gtk_frame_new("Load Script"); |
647 buf = g_strconcat(last_dir, G_DIR_SEPARATOR_S, NULL); |
| 640 gtk_container_add(GTK_CONTAINER(config), frame); |
648 } |
| 641 gtk_widget_show(frame); |
649 |
| 642 |
650 gtk_file_selection_set_filename(GTK_FILE_SELECTION(config), buf); |
| 643 vbox = gtk_vbox_new(FALSE, 5); |
651 gtk_file_selection_complete(GTK_FILE_SELECTION(config), "*.pl"); |
| 644 gtk_container_add(GTK_CONTAINER(frame), vbox); |
652 gtk_signal_connect(GTK_OBJECT(config), "destroy", GTK_SIGNAL_FUNC(cfdes), |
| 645 gtk_widget_show(vbox); |
653 config); |
| 646 |
654 |
| 647 hbox = gtk_hbox_new(FALSE, 5); |
655 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(config)->ok_button), |
| 648 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 5); |
656 "clicked", GTK_SIGNAL_FUNC(do_load), NULL); |
| 649 gtk_widget_show(hbox); |
657 |
| 650 |
658 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(config)->cancel_button), |
| 651 label = gtk_label_new("File Name:"); |
659 "clicked", GTK_SIGNAL_FUNC(cfdes), NULL); |
| 652 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
660 |
| 653 gtk_widget_show(label); |
661 g_free(buf); |
| 654 |
|
| 655 entry = gtk_entry_new(); |
|
| 656 gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 5); |
|
| 657 gtk_signal_connect(GTK_OBJECT(entry), "activate", GTK_SIGNAL_FUNC(do_load), 0); |
|
| 658 gtk_widget_show(entry); |
|
| 659 |
|
| 660 hbox = gtk_hbox_new(TRUE, 10); |
|
| 661 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 5); |
|
| 662 gtk_widget_show(hbox); |
|
| 663 |
|
| 664 ok = picture_button(config, "Load", add_xpm); |
|
| 665 gtk_box_pack_start(GTK_BOX(hbox), ok, FALSE, FALSE, 5); |
|
| 666 gtk_signal_connect(GTK_OBJECT(ok), "clicked", GTK_SIGNAL_FUNC(do_load), 0); |
|
| 667 |
|
| 668 cancel = picture_button(config, "Cancel", cancel_xpm); |
|
| 669 gtk_box_pack_start(GTK_BOX(hbox), cancel, FALSE, FALSE, 5); |
|
| 670 gtk_signal_connect(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(cfdes), 0); |
|
| 671 |
|
| 672 gtk_widget_show(config); |
662 gtk_widget_show(config); |
| |
663 gdk_window_raise(config->window); |
| 673 } |
664 } |
| 674 |
665 |
| 675 extern void unload_perl_scripts(GtkWidget *w, gpointer d) |
666 extern void unload_perl_scripts(GtkWidget *w, gpointer d) |
| 676 { |
667 { |
| 677 perl_end(); |
668 perl_end(); |