comparison src/aim.c @ 3630:9682c0e022c6

[gaim-migrate @ 3753] Yeah this will probably break a lot of shit knowing my luck. But hey, I really don't care what people thnk. committer: Tailor Script <tailor@pidgin.im>
author Rob Flynn <gaim@robflynn.com>
date Fri, 11 Oct 2002 03:14:01 +0000
parents cd938f18f3f8
children f09193608fd3
comparison
equal deleted inserted replaced
3629:afc5bb164c5a 3630:9682c0e022c6
21 21
22 #ifdef HAVE_CONFIG_H 22 #ifdef HAVE_CONFIG_H
23 #include <config.h> 23 #include <config.h>
24 #endif 24 #endif
25 #ifdef GAIM_PLUGINS 25 #ifdef GAIM_PLUGINS
26 #ifndef _WIN32
26 #include <dlfcn.h> 27 #include <dlfcn.h>
28 #endif
27 #endif /* GAIM_PLUGINS */ 29 #endif /* GAIM_PLUGINS */
28 #include <gtk/gtk.h> 30 #include <gtk/gtk.h>
31 #ifdef _WIN32
32 #include <winsock.h>
33 #else
29 #include <gdk/gdkx.h> 34 #include <gdk/gdkx.h>
30 #include <gdk/gdk.h>
31 #include <unistd.h> 35 #include <unistd.h>
32 #include <sys/types.h>
33 #include <sys/socket.h> 36 #include <sys/socket.h>
34 #include <sys/stat.h>
35 #include <netinet/in.h> 37 #include <netinet/in.h>
36 #include <arpa/inet.h> 38 #include <arpa/inet.h>
37 #include <errno.h>
38 #include <sys/un.h> 39 #include <sys/un.h>
39 #include <sys/wait.h> 40 #include <sys/wait.h>
41 #endif /* _WIN32 */
42 #include <gdk/gdk.h>
43 #include <sys/types.h>
44 #include <sys/stat.h>
45 #include <errno.h>
40 #include <stdio.h> 46 #include <stdio.h>
41 #include <string.h> 47 #include <string.h>
42 #include <stdarg.h> 48 #include <stdarg.h>
43 #include <stdlib.h> 49 #include <stdlib.h>
44 #include <ctype.h> 50 #include <ctype.h>
49 #include <signal.h> 55 #include <signal.h>
50 #endif 56 #endif
51 #include "locale.h" 57 #include "locale.h"
52 #include "gtkspell.h" 58 #include "gtkspell.h"
53 #include <getopt.h> 59 #include <getopt.h>
60 #ifdef _WIN32
61 #include "win32dep.h"
62 #endif
54 63
55 static gchar *aspell_cmd[] = { "aspell", "--sug-mode=fast","-a", NULL }; 64 static gchar *aspell_cmd[] = { "aspell", "--sug-mode=fast","-a", NULL };
56 static gchar *ispell_cmd[] = { "ispell", "-a", NULL }; 65 static gchar *ispell_cmd[] = { "ispell", "-a", NULL };
57 66
58 static GtkWidget *name; 67 static GtkWidget *name;
70 79
71 int opt_away = 0; 80 int opt_away = 0;
72 char *opt_away_arg = NULL; 81 char *opt_away_arg = NULL;
73 char *opt_rcfile_arg = NULL; 82 char *opt_rcfile_arg = NULL;
74 int opt_debug = 0; 83 int opt_debug = 0;
84 #ifdef _WIN32
85 int opt_gdebug = 0;
86 #endif
75 87
76 #if HAVE_SIGNAL_H 88 #if HAVE_SIGNAL_H
77 /* 89 /*
78 * Lists of signals we wish to catch and those we wish to ignore. 90 * Lists of signals we wish to catch and those we wish to ignore.
79 * Each list terminated with -1 91 * Each list terminated with -1
241 gtk_window_present(GTK_WINDOW(mainwindow)); 253 gtk_window_present(GTK_WINDOW(mainwindow));
242 return; 254 return;
243 } 255 }
244 256
245 mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); 257 mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
258
246 gtk_window_set_wmclass(GTK_WINDOW(mainwindow), "login", "Gaim"); 259 gtk_window_set_wmclass(GTK_WINDOW(mainwindow), "login", "Gaim");
247 gtk_window_set_policy(GTK_WINDOW(mainwindow), FALSE, FALSE, TRUE); 260 gtk_window_set_policy(GTK_WINDOW(mainwindow), FALSE, FALSE, TRUE);
248 gtk_signal_connect(GTK_OBJECT(mainwindow), "delete_event", 261 gtk_signal_connect(GTK_OBJECT(mainwindow), "delete_event",
249 GTK_SIGNAL_FUNC(cancel_logon), mainwindow); 262 GTK_SIGNAL_FUNC(cancel_logon), mainwindow);
250 gtk_window_set_title(GTK_WINDOW(mainwindow), _("Gaim - Login")); 263 gtk_window_set_title(GTK_WINDOW(mainwindow), _("Gaim - Login"));
425 exit(0); 438 exit(0);
426 } 439 }
427 } 440 }
428 #endif 441 #endif
429 442
443 #ifndef _WIN32
430 static gboolean socket_readable(GIOChannel *source, GIOCondition cond, gpointer ud) 444 static gboolean socket_readable(GIOChannel *source, GIOCondition cond, gpointer ud)
431 { 445 {
432 guchar type; 446 guchar type;
433 guchar subtype; 447 guchar subtype;
434 guint32 len; 448 guint32 len;
478 char name[256]; 492 char name[256];
479 GList *icons = NULL; 493 GList *icons = NULL;
480 GdkPixbuf *icon = NULL; 494 GdkPixbuf *icon = NULL;
481 495
482 /* use the nice PNG icon for all the windows */ 496 /* use the nice PNG icon for all the windows */
483 icon = gdk_pixbuf_new_from_file(DATADIR "/pixmaps/gaim.png",NULL); 497 icon = gdk_pixbuf_new_from_file(DATADIR G_DIR_SEPARATOR_S "pixmaps" G_DIR_SEPARATOR_S "gaim.png",NULL);
484 if (icon) { 498 if (icon) {
485 icons = g_list_append(icons,icon); 499 icons = g_list_append(icons,icon);
486 gtk_window_set_default_icon_list(icons); 500 gtk_window_set_default_icon_list(icons);
487 g_object_unref(G_OBJECT(icon)); 501 g_object_unref(G_OBJECT(icon));
488 } else { 502 } else {
489 debug_printf("Failed to load icon from %s/pixmaps/gaim.png\n",DATADIR); 503 debug_printf("Failed to load icon from %s" G_DIR_SEPARATOR_S "pixmaps" G_DIR_SEPARATOR_S "gaim.png\n",DATADIR);
490 } 504 }
491 505
492 g_snprintf(name, sizeof(name), "%s/gaim_%s.%d", g_get_tmp_dir(), g_get_user_name(), gaim_session); 506 g_snprintf(name, sizeof(name), "%s" G_DIR_SEPARATOR_S "gaim_%s.%d", g_get_tmp_dir(), g_get_user_name(), gaim_session);
493 507
494 UI_fd = gaim_connect_to_session(0); 508 UI_fd = gaim_connect_to_session(0);
495 if (UI_fd < 0) 509 if (UI_fd < 0)
496 return 1; 510 return 1;
497 511
498 channel = g_io_channel_unix_new(UI_fd); 512 channel = g_io_channel_unix_new(UI_fd);
499 g_io_add_watch(channel, G_IO_IN | G_IO_HUP | G_IO_ERR, socket_readable, NULL); 513 g_io_add_watch(channel, G_IO_IN | G_IO_HUP | G_IO_ERR, socket_readable, NULL);
500 return 0; 514 return 0;
501 } 515 }
516 #endif /* _WIN32 */
502 517
503 static void set_first_user(char *name) 518 static void set_first_user(char *name)
504 { 519 {
505 struct aim_user *u; 520 struct aim_user *u;
506 521
516 aim_users = g_slist_prepend(aim_users, u); 531 aim_users = g_slist_prepend(aim_users, u);
517 } 532 }
518 save_prefs(); 533 save_prefs();
519 } 534 }
520 535
536 #ifdef _WIN32
537 /* WIN32 print and log handlers */
538
539 static void gaim_dummy_print( const gchar* string ) {
540 return;
541 }
542
543 static void gaim_dummy_log_handler (const gchar *domain,
544 GLogLevelFlags flags,
545 const gchar *msg,
546 gpointer user_data) {
547 return;
548 }
549
550 static void gaim_log_handler (const gchar *domain,
551 GLogLevelFlags flags,
552 const gchar *msg,
553 gpointer user_data) {
554 debug_printf("%s - %s\n", domain, msg);
555 g_log_default_handler(domain, flags, msg, user_data);
556 }
557 #endif
558
521 /* FUCKING GET ME A TOWEL! */ 559 /* FUCKING GET ME A TOWEL! */
560 #ifdef _WIN32
561 int gaim_main(int argc, char *argv[])
562 #else
522 int main(int argc, char *argv[]) 563 int main(int argc, char *argv[])
564 #endif
523 { 565 {
524 int opt_acct = 0, opt_help = 0, opt_version = 0, opt_login = 0, opt_nologin = 0, do_login_ret = -1; 566 int opt_acct = 0, opt_help = 0, opt_version = 0, opt_login = 0, opt_nologin = 0, do_login_ret = -1;
525 char *opt_user_arg = NULL, *opt_login_arg = NULL; 567 char *opt_user_arg = NULL, *opt_login_arg = NULL;
526 #if HAVE_SIGNAL_H 568 #if HAVE_SIGNAL_H
527 int sig_indx; /* for setting up signal catching */ 569 int sig_indx; /* for setting up signal catching */
670 gtk_set_locale(); 712 gtk_set_locale();
671 gtk_init(&argc, &argv); 713 gtk_init(&argc, &argv);
672 714
673 /* scan command-line options */ 715 /* scan command-line options */
674 opterr = 1; 716 opterr = 1;
675 while ((opt = getopt_long(argc, argv, "adhu:f:vn", long_options, NULL)) != -1) { 717 while ((opt = getopt_long(argc, argv,
718 #ifndef _WIN32
719 "adhu:f:vn",
720 #else
721 "adghu:f:vn",
722 #endif
723 long_options, NULL)) != -1) {
676 switch (opt) { 724 switch (opt) {
677 case 'u': /* set user */ 725 case 'u': /* set user */
678 opt_user = 1; 726 opt_user = 1;
679 opt_user_arg = g_strdup(optarg); 727 opt_user_arg = g_strdup(optarg);
680 break; 728 break;
694 opt_help = 1; 742 opt_help = 1;
695 break; 743 break;
696 case 'n': /* don't autologin */ 744 case 'n': /* don't autologin */
697 opt_nologin = 1; 745 opt_nologin = 1;
698 break; 746 break;
747 #ifdef _WIN32
748 case 'g': /* debug GTK and GLIB */
749 opt_gdebug = 1;
750 break;
751 #endif
699 case '?': 752 case '?':
700 default: 753 default:
701 show_usage(1, argv[0]); 754 show_usage(1, argv[0]);
702 return 0; 755 return 0;
703 break; 756 break;
704 } 757 }
705 } 758 }
706 759
760 #ifdef _WIN32
761 /* We don't want a console window.. */
762 /*
763 * Any calls to the glib logging functions, result in a call to AllocConsole().
764 * ME and 98 will in such cases produce a console window (2000 not), despite
765 * being built as a windows app rather than a console app. So we should either
766 * ignore messages by setting dummy log handlers, or redirect messages.
767 * This requires setting handlers for all domains (any lib which uses g_logging).
768 */
769
770 g_log_set_handler ("Gdk", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
771 (opt_gdebug ? gaim_log_handler : gaim_dummy_log_handler),
772 NULL);
773 g_log_set_handler ("Gtk", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
774 (opt_gdebug ? gaim_log_handler : gaim_dummy_log_handler),
775 NULL);
776 g_log_set_handler ("GLib", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
777 (opt_gdebug ? gaim_log_handler : gaim_dummy_log_handler),
778 NULL);
779 g_log_set_handler ("GModule", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
780 (opt_gdebug ? gaim_log_handler : gaim_dummy_log_handler),
781 NULL);
782 g_log_set_handler ("GLib-GObject", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
783 (opt_gdebug ? gaim_log_handler : gaim_dummy_log_handler),
784 NULL);
785 g_log_set_handler ("GThread", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
786 (opt_gdebug ? gaim_log_handler : gaim_dummy_log_handler),
787 NULL);
788
789 /* g_print also makes a call to AllocConsole(), therefore a handler needs to be
790 set here aswell */
791 if(!opt_debug)
792 g_set_print_handler( gaim_dummy_print );
793
794 #endif
795
707 /* show help message */ 796 /* show help message */
708 if (opt_help) { 797 if (opt_help) {
709 show_usage(0, argv[0]); 798 show_usage(0, argv[0]);
710 return 0; 799 return 0;
711 } 800 }
718 #if GAIM_PLUGINS || USE_PERL 807 #if GAIM_PLUGINS || USE_PERL
719 gaim_probe_plugins(); 808 gaim_probe_plugins();
720 #endif 809 #endif
721 load_prefs(); 810 load_prefs();
722 core_main(); 811 core_main();
812 #ifndef _WIN32
723 ui_main(); 813 ui_main();
814 #endif
724 815
725 /* set the default username */ 816 /* set the default username */
726 if (opt_user_arg != NULL) { 817 if (opt_user_arg != NULL) {
727 set_first_user(opt_user_arg); 818 set_first_user(opt_user_arg);
728 g_free(opt_user_arg); 819 g_free(opt_user_arg);
729 opt_user_arg = NULL; 820 opt_user_arg = NULL;
730 } 821 }
731 822
732 if (misc_options & OPT_MISC_DEBUG) 823 if (misc_options & OPT_MISC_DEBUG)
733 show_debug(); 824 show_debug();
825 #ifndef _WIN32
734 /*If ispell fails to start, try using aspell in ispell compatibitity mode. 826 /*If ispell fails to start, try using aspell in ispell compatibitity mode.
735 Gabber does this the same way -- lorien420@myrealbox.com*/ 827 Gabber does this the same way -- lorien420@myrealbox.com*/
736 if (convo_options & OPT_CONVO_CHECK_SPELLING){ 828 if (convo_options & OPT_CONVO_CHECK_SPELLING){
737 if (gtkspell_start(NULL, ispell_cmd)<0){ 829 if (gtkspell_start(NULL, ispell_cmd)<0){
738 debug_printf("gtkspell failed to start when using ispell\n"); 830 debug_printf("gtkspell failed to start when using ispell\n");
742 debug_printf("gtkspell started with aspell\n"); 834 debug_printf("gtkspell started with aspell\n");
743 } else { 835 } else {
744 debug_printf("gtkspell started with ispell\n"); 836 debug_printf("gtkspell started with ispell\n");
745 } 837 }
746 } 838 }
747 839 #endif
748 static_proto_init(); 840 static_proto_init();
749 841
750 /* deal with --login */ 842 /* deal with --login */
751 if (opt_login) { 843 if (opt_login) {
752 do_login_ret = do_auto_login(opt_login_arg); 844 do_login_ret = do_auto_login(opt_login_arg);
761 853
762 if (opt_acct) { 854 if (opt_acct) {
763 account_editor(NULL, NULL); 855 account_editor(NULL, NULL);
764 } else if ((do_login_ret == -1) && !connections) 856 } else if ((do_login_ret == -1) && !connections)
765 show_login(); 857 show_login();
858 #ifdef _WIN32
859 /* Various win32 initializations */
860 wgaim_init();
861 #endif
766 862
767 gtk_main(); 863 gtk_main();
768 864 #ifndef _WIN32
769 if (convo_options & OPT_CONVO_CHECK_SPELLING) 865 if (convo_options & OPT_CONVO_CHECK_SPELLING)
770 gtkspell_stop(); 866 gtkspell_stop();
867 #endif
771 core_quit(); 868 core_quit();
772 /* don't need ui_quit here because ui doesn't create anything */ 869 /* don't need ui_quit here because ui doesn't create anything */
773 870
774 return 0; 871 return 0;
775 872