Sat, 18 Nov 2006 05:30:57 +0000
[gaim-migrate @ 17774]
The data for "plugin_action" is set with a destructor function. So freeing it
twice would cause a crash. The reason it's not crashing is, the children of the
container are not the menuitems, but GtkAccelLabel (or some such thing). So all
we are doing is freeing null. Also, when the menu is destroyed, all the
menuitems are also destroyed anyway. So get rid of the unrequired loop.
Also, isdigit expects a character, not a string.
| 10302 | 1 | /* |
| 2 | * gaim | |
| 3 | * | |
| 4 | * Gaim is the legal property of its developers, whose names are too numerous | |
| 5 | * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 6 | * source distribution. | |
| 7 | * | |
| 8 | * This program is free software; you can redistribute it and/or modify | |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 12 | * | |
| 13 | * This program is distributed in the hope that it will be useful, | |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | * GNU General Public License for more details. | |
| 17 | * | |
| 18 | * You should have received a copy of the GNU General Public License | |
| 19 | * along with this program; if not, write to the Free Software | |
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 21 | * | |
| 22 | */ | |
| 23 | ||
| 24 | #include "internal.h" | |
| 25 | #include "gtkgaim.h" | |
| 26 | ||
| 27 | #include "account.h" | |
| 28 | #include "conversation.h" | |
| 29 | #include "core.h" | |
| 30 | #include "debug.h" | |
| 31 | #include "eventloop.h" | |
| 32 | #include "ft.h" | |
| 33 | #include "log.h" | |
| 34 | #include "notify.h" | |
| 35 | #include "prefs.h" | |
| 36 | #include "prpl.h" | |
| 37 | #include "pounce.h" | |
| 38 | #include "sound.h" | |
| 39 | #include "status.h" | |
| 40 | #include "util.h" | |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11403
diff
changeset
|
41 | #include "whiteboard.h" |
| 10302 | 42 | |
| 43 | #include "gtkaccount.h" | |
| 44 | #include "gtkblist.h" | |
| 45 | #include "gtkconn.h" | |
| 46 | #include "gtkconv.h" | |
| 47 | #include "gtkdebug.h" | |
| 48 | #include "gtkdialogs.h" | |
| 14743 | 49 | #include "gtkdocklet.h" |
| 10302 | 50 | #include "gtkeventloop.h" |
| 51 | #include "gtkft.h" | |
|
11907
de3ea77afe3c
[gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
11906
diff
changeset
|
52 | #include "gtkidle.h" |
|
12838
5c6f36abeee8
[gaim-migrate @ 15186]
Richard Laager <rlaager@pidgin.im>
parents:
12670
diff
changeset
|
53 | #include "gtklog.h" |
| 10302 | 54 | #include "gtknotify.h" |
| 55 | #include "gtkplugin.h" | |
| 56 | #include "gtkpounce.h" | |
| 57 | #include "gtkprefs.h" | |
| 58 | #include "gtkprivacy.h" | |
| 59 | #include "gtkrequest.h" | |
| 60 | #include "gtkroomlist.h" | |
|
10574
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
61 | #include "gtksavedstatuses.h" |
|
12246
7af1ef3b1cc4
[gaim-migrate @ 14548]
Mark Doliner <markdoliner@pidgin.im>
parents:
12202
diff
changeset
|
62 | #include "gtksession.h" |
| 10302 | 63 | #include "gtksound.h" |
|
11525
1d06283bdcc9
[gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents:
11520
diff
changeset
|
64 | #include "gtkthemes.h" |
| 10302 | 65 | #include "gtkutils.h" |
|
14253
b63ebf84c42b
This is a hand-crafted commit to migrate across subversion revisions
Ethan Blanton <elb@pidgin.im>
parents:
14207
diff
changeset
|
66 | #include "gaimstock.h" |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11403
diff
changeset
|
67 | #include "gtkwhiteboard.h" |
| 10302 | 68 | |
|
13428
78687459c64b
[gaim-migrate @ 15802]
Daniel Atallah <datallah@pidgin.im>
parents:
13322
diff
changeset
|
69 | #ifdef HAVE_SIGNAL_H |
| 10302 | 70 | # include <signal.h> |
| 71 | #endif | |
| 72 | ||
| 73 | #include <getopt.h> | |
| 74 | ||
| 75 | #ifdef HAVE_STARTUP_NOTIFICATION | |
| 76 | # define SN_API_NOT_YET_FROZEN | |
| 77 | # include <libsn/sn-launchee.h> | |
| 78 | # include <gdk/gdkx.h> | |
| 79 | #endif | |
| 80 | ||
|
11055
e564996853bf
[gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11033
diff
changeset
|
81 | |
|
e564996853bf
[gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11033
diff
changeset
|
82 | |
| 10302 | 83 | #ifdef HAVE_STARTUP_NOTIFICATION |
| 84 | static SnLauncheeContext *sn_context = NULL; | |
| 85 | static SnDisplay *sn_display = NULL; | |
| 86 | #endif | |
| 87 | ||
|
13428
78687459c64b
[gaim-migrate @ 15802]
Daniel Atallah <datallah@pidgin.im>
parents:
13322
diff
changeset
|
88 | #ifdef HAVE_SIGNAL_H |
|
14542
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
89 | |
| 10302 | 90 | /* |
| 91 | * Lists of signals we wish to catch and those we wish to ignore. | |
| 92 | * Each list terminated with -1 | |
| 93 | */ | |
| 94 | static int catch_sig_list[] = { | |
| 95 | SIGSEGV, | |
| 96 | SIGHUP, | |
| 97 | SIGINT, | |
| 98 | SIGTERM, | |
| 99 | SIGQUIT, | |
| 100 | SIGCHLD, | |
| 14595 | 101 | SIGALRM, |
| 10302 | 102 | -1 |
| 103 | }; | |
| 104 | ||
| 105 | static int ignore_sig_list[] = { | |
| 106 | SIGPIPE, | |
| 107 | -1 | |
| 108 | }; | |
| 109 | #endif | |
| 110 | ||
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
111 | static int |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
112 | dologin_named(const char *name) |
| 10302 | 113 | { |
| 114 | GaimAccount *account; | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
115 | char **names; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
116 | int i; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
117 | int ret = -1; |
| 10302 | 118 | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
119 | if (name != NULL) { /* list of names given */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
120 | names = g_strsplit(name, ",", 64); |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
121 | for (i = 0; names[i] != NULL; i++) { |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
122 | account = gaim_accounts_find(names[i], NULL); |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
123 | if (account != NULL) { /* found a user */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
124 | ret = 0; |
|
10738
63ca8277c234
[gaim-migrate @ 12340]
Mark Doliner <markdoliner@pidgin.im>
parents:
10638
diff
changeset
|
125 | gaim_account_connect(account); |
| 10302 | 126 | } |
| 127 | } | |
| 128 | g_strfreev(names); | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
129 | } else { /* no name given, use the first account */ |
|
11520
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
130 | GList *accounts; |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
131 | |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
132 | accounts = gaim_accounts_get_all(); |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
133 | if (accounts != NULL) |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
134 | { |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
135 | account = (GaimAccount *)accounts->data; |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
136 | ret = 0; |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
137 | gaim_account_connect(account); |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
138 | } |
| 10302 | 139 | } |
| 140 | ||
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
141 | return ret; |
| 10302 | 142 | } |
| 143 | ||
|
13428
78687459c64b
[gaim-migrate @ 15802]
Daniel Atallah <datallah@pidgin.im>
parents:
13322
diff
changeset
|
144 | #ifdef HAVE_SIGNAL_H |
|
14542
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
145 | static void sighandler(int sig); |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
146 | |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
147 | /** |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
148 | * Reap all our dead children. Sometimes Gaim forks off a separate |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
149 | * process to do some stuff. When that process exits we are |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
150 | * informed about it so that we can call waitpid() and let it |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
151 | * stop being a zombie. |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
152 | * |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
153 | * We used to do this immediately when our signal handler was |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
154 | * called, but because of GStreamer we now wait one second before |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
155 | * reaping anything. Why? For some reason GStreamer fork()s |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
156 | * during their initialization process. I don't understand why... |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
157 | * but they do it, and there's nothing we can do about it. |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
158 | * |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
159 | * Anyway, so then GStreamer waits for its child to die and then |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
160 | * it continues with the initialization process. This means that |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
161 | * we have a race condition where GStreamer is waitpid()ing for its |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
162 | * child to die and we're catching the SIGCHLD signal. If GStreamer |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
163 | * is awarded the zombied process then everything is ok. But if Gaim |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
164 | * reaps the zombie process then the GStreamer initialization sequence |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
165 | * fails. |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
166 | * |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
167 | * So the ugly solution is to wait a second to give GStreamer time to |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
168 | * reap that bad boy. |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
169 | * |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
170 | * GStreamer 0.10.10 and newer have a gst_register_fork_set_enabled() |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
171 | * function that can be called by applications to disable forking |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
172 | * during initialization. But it's not in 0.10.0, so we shouldn't |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
173 | * use it. |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
174 | */ |
| 14595 | 175 | static void |
| 176 | clean_pid() | |
| 10302 | 177 | { |
| 178 | int status; | |
| 179 | pid_t pid; | |
| 180 | ||
| 181 | do { | |
| 182 | pid = waitpid(-1, &status, WNOHANG); | |
| 183 | } while (pid != 0 && pid != (pid_t)-1); | |
|
10334
11feb68437a8
[gaim-migrate @ 11541]
Mark Doliner <markdoliner@pidgin.im>
parents:
10333
diff
changeset
|
184 | |
|
11feb68437a8
[gaim-migrate @ 11541]
Mark Doliner <markdoliner@pidgin.im>
parents:
10333
diff
changeset
|
185 | if ((pid == (pid_t) - 1) && (errno != ECHILD)) { |
| 10302 | 186 | char errmsg[BUFSIZ]; |
| 187 | snprintf(errmsg, BUFSIZ, "Warning: waitpid() returned %d", pid); | |
| 188 | perror(errmsg); | |
| 189 | } | |
|
14542
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
190 | |
|
7c1dd9601f1d
[gaim-migrate @ 17199]
Mark Doliner <markdoliner@pidgin.im>
parents:
14323
diff
changeset
|
191 | /* Restore signal catching */ |
| 14595 | 192 | signal(SIGALRM, sighandler); |
| 10302 | 193 | } |
| 194 | ||
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
195 | char *segfault_message; |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
196 | |
|
10871
c0282a4f2250
[gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents:
10819
diff
changeset
|
197 | static void |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
198 | sighandler(int sig) |
| 10302 | 199 | { |
| 200 | switch (sig) { | |
| 201 | case SIGHUP: | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
202 | gaim_debug_warning("sighandler", "Caught signal %d\n", sig); |
| 10302 | 203 | gaim_connections_disconnect_all(); |
| 204 | break; | |
| 205 | case SIGSEGV: | |
|
13215
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
206 | fprintf(stderr, "%s", segfault_message); |
| 10302 | 207 | abort(); |
| 208 | break; | |
| 209 | case SIGCHLD: | |
| 14595 | 210 | /* Restore signal catching */ |
| 211 | signal(SIGCHLD, sighandler); | |
| 212 | alarm(1); | |
| 213 | break; | |
| 214 | case SIGALRM: | |
| 215 | clean_pid(); | |
| 10302 | 216 | break; |
| 217 | default: | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
218 | gaim_debug_warning("sighandler", "Caught signal %d\n", sig); |
| 10302 | 219 | gaim_connections_disconnect_all(); |
| 220 | ||
| 221 | gaim_plugins_unload_all(); | |
| 222 | ||
| 223 | if (gtk_main_level()) | |
| 224 | gtk_main_quit(); | |
| 225 | exit(0); | |
| 226 | } | |
| 227 | } | |
| 228 | #endif | |
| 229 | ||
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
230 | static int |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
231 | ui_main() |
| 10302 | 232 | { |
| 233 | #ifndef _WIN32 | |
| 234 | GList *icons = NULL; | |
| 235 | GdkPixbuf *icon = NULL; | |
| 236 | char *icon_path; | |
| 237 | #endif | |
| 238 | ||
|
11525
1d06283bdcc9
[gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents:
11520
diff
changeset
|
239 | gaim_gtkthemes_init(); |
| 10302 | 240 | |
| 241 | gaim_gtk_blist_setup_sort_methods(); | |
| 242 | ||
| 243 | #ifndef _WIN32 | |
| 244 | /* use the nice PNG icon for all the windows */ | |
| 245 | icon_path = g_build_filename(DATADIR, "pixmaps", "gaim", "icons", "online.png", NULL); | |
| 246 | icon = gdk_pixbuf_new_from_file(icon_path, NULL); | |
| 247 | g_free(icon_path); | |
| 248 | if (icon) { | |
| 249 | icons = g_list_append(icons,icon); | |
| 250 | gtk_window_set_default_icon_list(icons); | |
| 251 | g_object_unref(G_OBJECT(icon)); | |
| 252 | g_list_free(icons); | |
| 253 | } else { | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
254 | gaim_debug_error("ui_main", |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
255 | "Failed to load the default window icon!\n"); |
| 10302 | 256 | } |
| 257 | #endif | |
| 258 | ||
| 259 | return 0; | |
| 260 | } | |
| 261 | ||
| 262 | static void | |
| 263 | debug_init(void) | |
| 264 | { | |
| 265 | gaim_debug_set_ui_ops(gaim_gtk_debug_get_ui_ops()); | |
| 266 | gaim_gtk_debug_init(); | |
| 267 | } | |
| 268 | ||
| 269 | static void | |
| 270 | gaim_gtk_ui_init(void) | |
| 271 | { | |
| 272 | /* Set the UI operation structures. */ | |
| 273 | gaim_accounts_set_ui_ops(gaim_gtk_accounts_get_ui_ops()); | |
| 274 | gaim_xfers_set_ui_ops(gaim_gtk_xfers_get_ui_ops()); | |
| 275 | gaim_blist_set_ui_ops(gaim_gtk_blist_get_ui_ops()); | |
| 276 | gaim_notify_set_ui_ops(gaim_gtk_notify_get_ui_ops()); | |
| 277 | gaim_privacy_set_ui_ops(gaim_gtk_privacy_get_ui_ops()); | |
| 278 | gaim_request_set_ui_ops(gaim_gtk_request_get_ui_ops()); | |
| 279 | gaim_sound_set_ui_ops(gaim_gtk_sound_get_ui_ops()); | |
| 280 | gaim_connections_set_ui_ops(gaim_gtk_connections_get_ui_ops()); | |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11403
diff
changeset
|
281 | gaim_whiteboard_set_ui_ops(gaim_gtk_whiteboard_get_ui_ops()); |
|
12272
4eee92ead973
[gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
12246
diff
changeset
|
282 | #ifdef USE_SCREENSAVER |
|
4eee92ead973
[gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
12246
diff
changeset
|
283 | gaim_idle_set_ui_ops(gaim_gtk_idle_get_ui_ops()); |
|
4eee92ead973
[gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
12246
diff
changeset
|
284 | #endif |
| 10302 | 285 | |
| 286 | gaim_gtk_stock_init(); | |
| 287 | gaim_gtk_account_init(); | |
|
13014
fa17f785b6fe
[gaim-migrate @ 15367]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
288 | gaim_gtk_connection_init(); |
| 10302 | 289 | gaim_gtk_blist_init(); |
|
10574
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
290 | gaim_gtk_status_init(); |
| 10302 | 291 | gaim_gtk_conversations_init(); |
| 292 | gaim_gtk_pounces_init(); | |
| 293 | gaim_gtk_privacy_init(); | |
| 294 | gaim_gtk_xfers_init(); | |
| 295 | gaim_gtk_roomlist_init(); | |
|
12838
5c6f36abeee8
[gaim-migrate @ 15186]
Richard Laager <rlaager@pidgin.im>
parents:
12670
diff
changeset
|
296 | gaim_gtk_log_init(); |
| 10302 | 297 | } |
| 298 | ||
| 299 | static void | |
| 300 | gaim_gtk_quit(void) | |
| 301 | { | |
| 302 | #ifdef USE_SM | |
| 303 | /* unplug */ | |
|
12246
7af1ef3b1cc4
[gaim-migrate @ 14548]
Mark Doliner <markdoliner@pidgin.im>
parents:
12202
diff
changeset
|
304 | gaim_gtk_session_end(); |
| 10302 | 305 | #endif |
| 306 | ||
| 307 | /* Save the plugins we have loaded for next time. */ | |
| 308 | gaim_gtk_plugins_save(); | |
| 309 | ||
|
10574
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
310 | /* Uninit */ |
|
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
311 | gaim_gtk_conversations_uninit(); |
|
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
312 | gaim_gtk_status_uninit(); |
|
14985
7449fd0206bb
[gaim-migrate @ 17695]
Mark Doliner <markdoliner@pidgin.im>
parents:
14762
diff
changeset
|
313 | gaim_gtk_docklet_uninit(); |
|
10574
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
314 | gaim_gtk_blist_uninit(); |
|
13014
fa17f785b6fe
[gaim-migrate @ 15367]
Mark Doliner <markdoliner@pidgin.im>
parents:
12857
diff
changeset
|
315 | gaim_gtk_connection_uninit(); |
|
10574
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
316 | gaim_gtk_account_uninit(); |
| 11010 | 317 | gaim_gtk_xfers_uninit(); |
| 11033 | 318 | gaim_gtk_debug_uninit(); |
|
10574
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
319 | |
| 10302 | 320 | /* and end it all... */ |
| 321 | gtk_main_quit(); | |
| 322 | } | |
| 323 | ||
| 324 | static GaimCoreUiOps core_ops = | |
| 325 | { | |
| 326 | gaim_gtk_prefs_init, | |
| 327 | debug_init, | |
| 328 | gaim_gtk_ui_init, | |
| 329 | gaim_gtk_quit | |
| 330 | }; | |
| 331 | ||
| 332 | static GaimCoreUiOps * | |
| 333 | gaim_gtk_core_get_ui_ops(void) | |
| 334 | { | |
| 335 | return &core_ops; | |
| 336 | } | |
| 337 | ||
| 338 | static void | |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
339 | show_usage(const char *name, gboolean terse) |
| 10302 | 340 | { |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
341 | char *text; |
|
12846
93ff2d8dd1e7
[gaim-migrate @ 15194]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12838
diff
changeset
|
342 | |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
343 | if (terse) { |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
344 | text = g_strdup_printf(_("Gaim %s. Try `%s -h' for more information.\n"), VERSION, name); |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
345 | } else { |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
346 | text = g_strdup_printf(_("Gaim %s\n" |
| 10302 | 347 | "Usage: %s [OPTION]...\n\n" |
| 348 | " -c, --config=DIR use DIR for config files\n" | |
| 349 | " -d, --debug print debugging messages to stdout\n" | |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
350 | " -h, --help display this help and exit\n" |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
351 | " -n, --nologin don't automatically login\n" |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
352 | " -l, --login[=NAME] automatically login (optional argument NAME specifies\n" |
|
11673
6171cf0386a5
[gaim-migrate @ 13959]
Michael Carlson <corfe83@users.sourceforge.net>
parents:
11581
diff
changeset
|
353 | " account(s) to use, separated by commas)\n" |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
354 | " -v, --version display the current version and exit\n"), VERSION, name); |
| 10302 | 355 | } |
| 356 | ||
|
13090
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13024
diff
changeset
|
357 | gaim_print_utf8_to_console(stdout, text); |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
358 | g_free(text); |
| 10302 | 359 | } |
| 360 | ||
| 361 | #ifdef HAVE_STARTUP_NOTIFICATION | |
| 362 | static void | |
| 363 | sn_error_trap_push(SnDisplay *display, Display *xdisplay) | |
| 364 | { | |
| 365 | gdk_error_trap_push(); | |
| 366 | } | |
| 367 | ||
| 368 | static void | |
| 369 | sn_error_trap_pop(SnDisplay *display, Display *xdisplay) | |
| 370 | { | |
| 371 | gdk_error_trap_pop(); | |
| 372 | } | |
| 373 | ||
| 374 | static void | |
| 375 | startup_notification_complete(void) | |
| 376 | { | |
| 377 | Display *xdisplay; | |
| 378 | ||
| 379 | xdisplay = GDK_DISPLAY(); | |
| 380 | sn_display = sn_display_new(xdisplay, | |
| 381 | sn_error_trap_push, | |
| 382 | sn_error_trap_pop); | |
| 383 | sn_context = | |
| 384 | sn_launchee_context_new_from_environment(sn_display, | |
| 385 | DefaultScreen(xdisplay)); | |
| 386 | ||
| 387 | if (sn_context != NULL) | |
| 388 | { | |
| 389 | sn_launchee_context_complete(sn_context); | |
| 390 | sn_launchee_context_unref(sn_context); | |
| 391 | ||
| 392 | sn_display_unref(sn_display); | |
| 393 | } | |
| 394 | } | |
| 395 | #endif /* HAVE_STARTUP_NOTIFICATION */ | |
| 396 | ||
| 397 | #ifndef _WIN32 | |
| 398 | static char *gaim_find_binary_location(void *symbol, void *data) | |
| 399 | { | |
| 400 | static char *fullname = NULL; | |
| 401 | static gboolean first = TRUE; | |
| 402 | ||
| 403 | char *argv0 = data; | |
| 404 | struct stat st; | |
| 405 | char *basebuf, *linkbuf, *fullbuf; | |
| 406 | ||
| 407 | if (!first) | |
| 408 | /* We've already been through this. */ | |
| 409 | return strdup(fullname); | |
| 410 | ||
| 411 | first = FALSE; | |
| 412 | ||
| 413 | if (!argv0) | |
| 414 | return NULL; | |
| 415 | ||
| 416 | ||
| 417 | basebuf = g_find_program_in_path(argv0); | |
| 418 | ||
| 419 | /* But we still need to deal with symbolic links */ | |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10581
diff
changeset
|
420 | g_lstat(basebuf, &st); |
| 10302 | 421 | while ((st.st_mode & S_IFLNK) == S_IFLNK) { |
|
13106
cb7461d56b5e
[gaim-migrate @ 15467]
Richard Laager <rlaager@pidgin.im>
parents:
13094
diff
changeset
|
422 | int written; |
| 10302 | 423 | linkbuf = g_malloc(1024); |
|
13106
cb7461d56b5e
[gaim-migrate @ 15467]
Richard Laager <rlaager@pidgin.im>
parents:
13094
diff
changeset
|
424 | written = readlink(basebuf, linkbuf, 1024 - 1); |
|
cb7461d56b5e
[gaim-migrate @ 15467]
Richard Laager <rlaager@pidgin.im>
parents:
13094
diff
changeset
|
425 | if (written == -1) |
|
cb7461d56b5e
[gaim-migrate @ 15467]
Richard Laager <rlaager@pidgin.im>
parents:
13094
diff
changeset
|
426 | { |
|
cb7461d56b5e
[gaim-migrate @ 15467]
Richard Laager <rlaager@pidgin.im>
parents:
13094
diff
changeset
|
427 | /* This really shouldn't happen, but do we |
|
cb7461d56b5e
[gaim-migrate @ 15467]
Richard Laager <rlaager@pidgin.im>
parents:
13094
diff
changeset
|
428 | * need something better here? */ |
|
cb7461d56b5e
[gaim-migrate @ 15467]
Richard Laager <rlaager@pidgin.im>
parents:
13094
diff
changeset
|
429 | g_free(linkbuf); |
|
cb7461d56b5e
[gaim-migrate @ 15467]
Richard Laager <rlaager@pidgin.im>
parents:
13094
diff
changeset
|
430 | continue; |
|
cb7461d56b5e
[gaim-migrate @ 15467]
Richard Laager <rlaager@pidgin.im>
parents:
13094
diff
changeset
|
431 | } |
|
cb7461d56b5e
[gaim-migrate @ 15467]
Richard Laager <rlaager@pidgin.im>
parents:
13094
diff
changeset
|
432 | linkbuf[written] = '\0'; |
| 10302 | 433 | if (linkbuf[0] == G_DIR_SEPARATOR) { |
| 434 | /* an absolute path */ | |
| 435 | fullbuf = g_strdup(linkbuf); | |
| 436 | } else { | |
| 437 | char *dirbuf = g_path_get_dirname(basebuf); | |
| 438 | /* a relative path */ | |
| 439 | fullbuf = g_strdup_printf("%s%s%s", | |
| 440 | dirbuf, G_DIR_SEPARATOR_S, | |
| 441 | linkbuf); | |
| 442 | g_free(dirbuf); | |
| 443 | } | |
| 444 | /* There's no memory leak here. Really! */ | |
| 445 | g_free(linkbuf); | |
| 446 | g_free(basebuf); | |
| 447 | basebuf = fullbuf; | |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10581
diff
changeset
|
448 | g_lstat(basebuf, &st); |
| 10302 | 449 | } |
| 450 | ||
| 451 | fullname = basebuf; | |
| 452 | return strdup(fullname); | |
| 453 | } | |
| 454 | #endif /* #ifndef _WIN32 */ | |
| 455 | ||
| 456 | /* FUCKING GET ME A TOWEL! */ | |
| 457 | #ifdef _WIN32 | |
| 458 | int gaim_main(HINSTANCE hint, int argc, char *argv[]) | |
| 459 | #else | |
| 460 | int main(int argc, char *argv[]) | |
| 461 | #endif | |
| 462 | { | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
463 | gboolean opt_help = FALSE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
464 | gboolean opt_login = FALSE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
465 | gboolean opt_nologin = FALSE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
466 | gboolean opt_version = FALSE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
467 | char *opt_config_dir_arg = NULL; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
468 | char *opt_login_arg = NULL; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
469 | char *opt_session_arg = NULL; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
470 | int dologin_ret = -1; |
|
10447
887380ec66f5
[gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
471 | char *search_path; |
| 13835 | 472 | GList *accounts; |
|
13428
78687459c64b
[gaim-migrate @ 15802]
Daniel Atallah <datallah@pidgin.im>
parents:
13322
diff
changeset
|
473 | #ifdef HAVE_SIGNAL_H |
| 10302 | 474 | int sig_indx; /* for setting up signal catching */ |
| 475 | sigset_t sigset; | |
|
12409
d89ccce310aa
[gaim-migrate @ 14716]
Richard Laager <rlaager@pidgin.im>
parents:
12342
diff
changeset
|
476 | RETSIGTYPE (*prev_sig_disp)(int); |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
477 | char errmsg[BUFSIZ]; |
|
13215
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
478 | #ifndef DEBUG |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
479 | char *segfault_message_tmp; |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
480 | GError *error = NULL; |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
481 | #endif |
|
10334
11feb68437a8
[gaim-migrate @ 11541]
Mark Doliner <markdoliner@pidgin.im>
parents:
10333
diff
changeset
|
482 | #endif |
|
14636
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14623
diff
changeset
|
483 | int opt; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14623
diff
changeset
|
484 | gboolean gui_check; |
|
5306c329992c
[gaim-migrate @ 17298]
Daniel Atallah <datallah@pidgin.im>
parents:
14623
diff
changeset
|
485 | gboolean debug_enabled; |
| 10302 | 486 | |
| 487 | struct option long_options[] = { | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
488 | {"config", required_argument, NULL, 'c'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
489 | {"debug", no_argument, NULL, 'd'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
490 | {"help", no_argument, NULL, 'h'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
491 | {"login", optional_argument, NULL, 'l'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
492 | {"nologin", no_argument, NULL, 'n'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
493 | {"session", required_argument, NULL, 's'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
494 | {"version", no_argument, NULL, 'v'}, |
| 10302 | 495 | {0, 0, 0, 0} |
| 496 | }; | |
| 497 | ||
| 498 | #ifdef DEBUG | |
|
10307
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
499 | debug_enabled = TRUE; |
|
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
500 | #else |
|
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
501 | debug_enabled = FALSE; |
| 10302 | 502 | #endif |
|
10307
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
503 | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12572
diff
changeset
|
504 | #ifdef GAIM_FATAL_ASSERTS |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12572
diff
changeset
|
505 | /* Make g_return_... functions fatal. */ |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12572
diff
changeset
|
506 | g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12572
diff
changeset
|
507 | #endif |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12572
diff
changeset
|
508 | |
| 10302 | 509 | #ifndef _WIN32 |
| 510 | br_set_locate_fallback_func(gaim_find_binary_location, argv[0]); | |
| 511 | #endif | |
| 512 | #ifdef ENABLE_NLS | |
| 513 | bindtextdomain(PACKAGE, LOCALEDIR); | |
| 514 | bind_textdomain_codeset(PACKAGE, "UTF-8"); | |
| 515 | textdomain(PACKAGE); | |
| 516 | #endif | |
| 517 | ||
|
13090
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13024
diff
changeset
|
518 | #ifdef HAVE_SETLOCALE |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13024
diff
changeset
|
519 | /* Locale initialization is not complete here. See gtk_init_check() */ |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13024
diff
changeset
|
520 | setlocale(LC_ALL, ""); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13024
diff
changeset
|
521 | #endif |
|
11080
0578003800d0
[gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11067
diff
changeset
|
522 | |
|
13428
78687459c64b
[gaim-migrate @ 15802]
Daniel Atallah <datallah@pidgin.im>
parents:
13322
diff
changeset
|
523 | #ifdef HAVE_SIGNAL_H |
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
524 | |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
525 | #ifndef DEBUG |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
526 | /* We translate this here in case the crash breaks gettext. */ |
|
13215
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
527 | segfault_message_tmp = g_strdup_printf(_( |
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
528 | "Gaim has segfaulted and attempted to dump a core file.\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
529 | "This is a bug in the software and has happened through\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
530 | "no fault of your own.\n\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
531 | "If you can reproduce the crash, please notify the gaim\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
532 | "developers by reporting a bug at\n" |
|
13090
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13024
diff
changeset
|
533 | "%sbug.php\n\n" |
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
534 | "Please make sure to specify what you were doing at the time\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
535 | "and post the backtrace from the core file. If you do not know\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
536 | "how to get the backtrace, please read the instructions at\n" |
|
13215
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
537 | "%sgdb.php\n\n" |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
538 | "If you need further assistance, please IM either SeanEgn or \n" |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
539 | "LSchiere (via AIM). Contact information for Sean and Luke \n" |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
540 | "on other protocols is at\n" |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
541 | "%scontactinfo.php\n"), |
|
13090
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13024
diff
changeset
|
542 | GAIM_WEBSITE, GAIM_WEBSITE, GAIM_WEBSITE |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13024
diff
changeset
|
543 | ); |
|
13587
fb0245a7ccab
[gaim-migrate @ 15971]
Daniel Atallah <datallah@pidgin.im>
parents:
13429
diff
changeset
|
544 | |
|
13215
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
545 | /* we have to convert the message (UTF-8 to console |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
546 | charset) early because after a segmentation fault |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
547 | it's not a good practice to allocate memory */ |
|
13587
fb0245a7ccab
[gaim-migrate @ 15971]
Daniel Atallah <datallah@pidgin.im>
parents:
13429
diff
changeset
|
548 | segfault_message = g_locale_from_utf8(segfault_message_tmp, |
|
13215
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
549 | -1, NULL, NULL, &error); |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
550 | if (segfault_message != NULL) { |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
551 | g_free(segfault_message_tmp); |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
552 | } |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
553 | else { |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
554 | /* use 'segfault_message_tmp' (UTF-8) as a fallback */ |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
555 | g_warning("%s\n", error->message); |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
556 | g_error_free(error); |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
557 | segfault_message = segfault_message_tmp; |
|
c3e72e316531
[gaim-migrate @ 15578]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13111
diff
changeset
|
558 | } |
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
559 | #else |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
560 | /* Don't mark this for translation. */ |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
561 | segfault_message = g_strdup( |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
562 | "Hi, user. We need to talk.\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
563 | "I think something's gone wrong here. It's probably my fault.\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
564 | "No, really, it's not you... it's me... no no no, I think we get along well\n" |
| 12670 | 565 | "it's just that.... well, I want to see other people. I... what?!? NO! I \n" |
| 566 | "haven't been cheating on you!! How many times do you want me to tell you?! And\n" | |
| 567 | "for the last time, it's just a rash!\n" | |
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
568 | ); |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
569 | #endif |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
570 | |
| 10302 | 571 | /* Let's not violate any PLA's!!!! */ |
| 572 | /* jseymour: whatever the fsck that means */ | |
| 573 | /* Robot101: for some reason things like gdm like to block * | |
| 574 | * useful signals like SIGCHLD, so we unblock all the ones we * | |
| 575 | * declare a handler for. thanks JSeymour and Vann. */ | |
| 576 | if (sigemptyset(&sigset)) { | |
| 577 | snprintf(errmsg, BUFSIZ, "Warning: couldn't initialise empty signal set"); | |
| 578 | perror(errmsg); | |
| 579 | } | |
| 580 | for(sig_indx = 0; catch_sig_list[sig_indx] != -1; ++sig_indx) { | |
| 581 | if((prev_sig_disp = signal(catch_sig_list[sig_indx], sighandler)) == SIG_ERR) { | |
| 582 | snprintf(errmsg, BUFSIZ, "Warning: couldn't set signal %d for catching", | |
| 583 | catch_sig_list[sig_indx]); | |
| 584 | perror(errmsg); | |
| 585 | } | |
| 586 | if(sigaddset(&sigset, catch_sig_list[sig_indx])) { | |
| 587 | snprintf(errmsg, BUFSIZ, "Warning: couldn't include signal %d for unblocking", | |
| 588 | catch_sig_list[sig_indx]); | |
| 589 | perror(errmsg); | |
| 590 | } | |
| 591 | } | |
| 592 | for(sig_indx = 0; ignore_sig_list[sig_indx] != -1; ++sig_indx) { | |
| 593 | if((prev_sig_disp = signal(ignore_sig_list[sig_indx], SIG_IGN)) == SIG_ERR) { | |
| 594 | snprintf(errmsg, BUFSIZ, "Warning: couldn't set signal %d to ignore", | |
| 595 | ignore_sig_list[sig_indx]); | |
| 596 | perror(errmsg); | |
| 597 | } | |
| 598 | } | |
| 599 | ||
| 600 | if (sigprocmask(SIG_UNBLOCK, &sigset, NULL)) { | |
| 601 | snprintf(errmsg, BUFSIZ, "Warning: couldn't unblock signals"); | |
| 602 | perror(errmsg); | |
|
10307
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
603 | } |
| 10302 | 604 | #endif |
| 605 | ||
| 606 | /* scan command-line options */ | |
| 607 | opterr = 1; | |
| 608 | while ((opt = getopt_long(argc, argv, | |
| 609 | #ifndef _WIN32 | |
|
11795
ab7b200b552e
[gaim-migrate @ 14086]
Richard Laager <rlaager@pidgin.im>
parents:
11785
diff
changeset
|
610 | "c:dhnl::s:v", |
| 10302 | 611 | #else |
|
11795
ab7b200b552e
[gaim-migrate @ 14086]
Richard Laager <rlaager@pidgin.im>
parents:
11785
diff
changeset
|
612 | "c:dhnl::v", |
| 10302 | 613 | #endif |
| 614 | long_options, NULL)) != -1) { | |
| 615 | switch (opt) { | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
616 | case 'c': /* config dir */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
617 | g_free(opt_config_dir_arg); |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
618 | opt_config_dir_arg = g_strdup(optarg); |
| 10302 | 619 | break; |
| 620 | case 'd': /* debug */ | |
|
10307
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
621 | debug_enabled = TRUE; |
| 10302 | 622 | break; |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
623 | case 'h': /* help */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
624 | opt_help = TRUE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
625 | break; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
626 | case 'n': /* no autologin */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
627 | opt_nologin = TRUE; |
| 10302 | 628 | break; |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
629 | case 'l': /* login, option username */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
630 | opt_login = TRUE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
631 | g_free(opt_login_arg); |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
632 | if (optarg != NULL) |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
633 | opt_login_arg = g_strdup(optarg); |
| 10302 | 634 | break; |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
635 | case 's': /* use existing session ID */ |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
636 | g_free(opt_session_arg); |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
637 | opt_session_arg = g_strdup(optarg); |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
638 | break; |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
639 | case 'v': /* version */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
640 | opt_version = TRUE; |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
641 | break; |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
642 | case '?': /* show terse help */ |
| 10302 | 643 | default: |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
644 | show_usage(argv[0], TRUE); |
| 10302 | 645 | return 0; |
| 646 | break; | |
| 647 | } | |
| 648 | } | |
| 649 | ||
| 650 | /* show help message */ | |
| 651 | if (opt_help) { | |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
652 | show_usage(argv[0], FALSE); |
| 10302 | 653 | return 0; |
| 654 | } | |
| 655 | /* show version message */ | |
| 656 | if (opt_version) { | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
657 | printf("Gaim %s\n", VERSION); |
| 10302 | 658 | return 0; |
| 659 | } | |
| 660 | ||
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
661 | /* set a user-specified config directory */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
662 | if (opt_config_dir_arg != NULL) { |
|
10871
c0282a4f2250
[gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents:
10819
diff
changeset
|
663 | gaim_util_set_user_dir(opt_config_dir_arg); |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
664 | } |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
665 | |
|
10448
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
666 | /* |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
667 | * We're done piddling around with command line arguments. |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
668 | * Fire up this baby. |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
669 | */ |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
670 | |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
671 | gaim_debug_set_enabled(debug_enabled); |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
672 | |
|
11067
b6353889a9ba
[gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11055
diff
changeset
|
673 | |
|
12572
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
674 | search_path = g_build_filename(gaim_user_dir(), "gtkrc-2.0", NULL); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
675 | gtk_rc_add_default_file(search_path); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
676 | g_free(search_path); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
677 | |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
678 | gui_check = gtk_init_check(&argc, &argv); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
679 | if (!gui_check) { |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
680 | char *display = gdk_get_display(); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
681 | |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
682 | printf("Gaim %s\n", VERSION); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
683 | |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
684 | g_warning("cannot open display: %s", display ? display : "unset"); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
685 | g_free(display); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
686 | |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
687 | return 1; |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
688 | } |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
689 | |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
690 | #ifdef _WIN32 |
|
14286
9ff15ceacd34
[gaim-migrate @ 16905]
Daniel Atallah <datallah@pidgin.im>
parents:
14253
diff
changeset
|
691 | gtkwgaim_init(hint); |
|
12572
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
692 | #endif |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
693 | |
| 10302 | 694 | gaim_core_set_ui_ops(gaim_gtk_core_get_ui_ops()); |
| 695 | gaim_eventloop_set_ui_ops(gaim_gtk_eventloop_get_ui_ops()); | |
| 696 | ||
|
12342
da61b726d595
[gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12272
diff
changeset
|
697 | /* |
|
da61b726d595
[gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12272
diff
changeset
|
698 | * Set plugin search directories. Give priority to the plugins |
|
da61b726d595
[gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12272
diff
changeset
|
699 | * in user's home directory. |
|
da61b726d595
[gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12272
diff
changeset
|
700 | */ |
|
10447
887380ec66f5
[gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
701 | search_path = g_build_filename(gaim_user_dir(), "plugins", NULL); |
|
887380ec66f5
[gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
702 | gaim_plugins_add_search_path(search_path); |
|
887380ec66f5
[gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
703 | g_free(search_path); |
|
12342
da61b726d595
[gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12272
diff
changeset
|
704 | gaim_plugins_add_search_path(LIBDIR); |
|
10447
887380ec66f5
[gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
705 | |
| 10302 | 706 | if (!gaim_core_init(GAIM_GTK_UI)) { |
| 707 | fprintf(stderr, | |
| 708 | "Initialization of the Gaim core failed. Dumping core.\n" | |
| 709 | "Please report this!\n"); | |
| 710 | abort(); | |
| 711 | } | |
| 712 | ||
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10425
diff
changeset
|
713 | /* TODO: Move blist loading into gaim_blist_init() */ |
| 10302 | 714 | gaim_set_blist(gaim_blist_new()); |
| 715 | gaim_blist_load(); | |
| 716 | ||
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
717 | /* TODO: Move prefs loading into gaim_prefs_init() */ |
|
13429
66dcc68fe69e
[gaim-migrate @ 15803]
Daniel Atallah <datallah@pidgin.im>
parents:
13428
diff
changeset
|
718 | gaim_prefs_load(); |
|
66dcc68fe69e
[gaim-migrate @ 15803]
Daniel Atallah <datallah@pidgin.im>
parents:
13428
diff
changeset
|
719 | gaim_prefs_update_old(); |
| 10302 | 720 | gaim_gtk_prefs_update_old(); |
| 721 | ||
| 722 | /* load plugins we had when we quit */ | |
| 723 | gaim_plugins_load_saved("/gaim/gtk/plugins/loaded"); | |
| 14743 | 724 | gaim_gtk_docklet_init(); |
| 10302 | 725 | |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
726 | /* TODO: Move pounces loading into gaim_pounces_init() */ |
| 10302 | 727 | gaim_pounces_load(); |
| 728 | ||
| 15052 | 729 | |
| 730 | /* HACK BY SEANEGAN: | |
| 731 | * We've renamed prpl-oscar to prpl-aim and prpl-icq, accordingly. | |
| 732 | * Let's do that change right here... after everything's loaded, but | |
| 733 | * before anything has happened | |
| 734 | */ | |
| 735 | for (accounts = gaim_accounts_get_all(); accounts != NULL; accounts = accounts->next) { | |
| 736 | GaimAccount *account = accounts->data; | |
| 737 | if (!strcmp(gaim_account_get_protocol_id(account), "prpl-oscar")) { | |
|
15057
909e807e3070
[gaim-migrate @ 17774]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15052
diff
changeset
|
738 | if (isdigit(*gaim_account_get_username(account))) |
| 15052 | 739 | gaim_account_set_protocol_id(account, "prpl-icq"); |
| 740 | else | |
| 741 | gaim_account_set_protocol_id(account, "prpl-aim"); | |
| 742 | } | |
| 743 | } | |
| 744 | ||
| 10302 | 745 | ui_main(); |
| 746 | ||
| 747 | #ifdef USE_SM | |
|
12246
7af1ef3b1cc4
[gaim-migrate @ 14548]
Mark Doliner <markdoliner@pidgin.im>
parents:
12202
diff
changeset
|
748 | gaim_gtk_session_init(argv[0], opt_session_arg, opt_config_dir_arg); |
| 10302 | 749 | #endif |
| 750 | if (opt_session_arg != NULL) { | |
| 751 | g_free(opt_session_arg); | |
| 752 | opt_session_arg = NULL; | |
| 753 | } | |
| 754 | if (opt_config_dir_arg != NULL) { | |
| 755 | g_free(opt_config_dir_arg); | |
| 756 | opt_config_dir_arg = NULL; | |
| 757 | } | |
| 758 | ||
|
12011
85a627679414
[gaim-migrate @ 14304]
Mark Doliner <markdoliner@pidgin.im>
parents:
11928
diff
changeset
|
759 | /* |
|
85a627679414
[gaim-migrate @ 14304]
Mark Doliner <markdoliner@pidgin.im>
parents:
11928
diff
changeset
|
760 | * We want to show the blist early in the init process so the |
|
85a627679414
[gaim-migrate @ 14304]
Mark Doliner <markdoliner@pidgin.im>
parents:
11928
diff
changeset
|
761 | * user feels warm and fuzzy (not cold and prickley). |
|
85a627679414
[gaim-migrate @ 14304]
Mark Doliner <markdoliner@pidgin.im>
parents:
11928
diff
changeset
|
762 | */ |
|
85a627679414
[gaim-migrate @ 14304]
Mark Doliner <markdoliner@pidgin.im>
parents:
11928
diff
changeset
|
763 | gaim_blist_show(); |
|
85a627679414
[gaim-migrate @ 14304]
Mark Doliner <markdoliner@pidgin.im>
parents:
11928
diff
changeset
|
764 | |
| 10302 | 765 | if (gaim_prefs_get_bool("/gaim/gtk/debug/enabled")) |
| 766 | gaim_gtk_debug_window_show(); | |
| 767 | ||
| 768 | if (opt_login) { | |
| 769 | dologin_ret = dologin_named(opt_login_arg); | |
| 770 | if (opt_login_arg != NULL) { | |
| 771 | g_free(opt_login_arg); | |
| 772 | opt_login_arg = NULL; | |
| 773 | } | |
| 774 | } | |
| 775 | ||
|
11806
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
776 | if (opt_nologin) |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
777 | { |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
778 | /* Set all accounts to "offline" */ |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
779 | GaimSavedStatus *saved_status; |
|
13111
31caa48825f7
[gaim-migrate @ 15472]
Mark Doliner <markdoliner@pidgin.im>
parents:
13106
diff
changeset
|
780 | |
|
31caa48825f7
[gaim-migrate @ 15472]
Mark Doliner <markdoliner@pidgin.im>
parents:
13106
diff
changeset
|
781 | /* If we've used this type+message before, lookup the transient status */ |
|
13245
3c026039efc5
[gaim-migrate @ 15610]
Mark Doliner <markdoliner@pidgin.im>
parents:
13215
diff
changeset
|
782 | saved_status = gaim_savedstatus_find_transient_by_type_and_message( |
|
13111
31caa48825f7
[gaim-migrate @ 15472]
Mark Doliner <markdoliner@pidgin.im>
parents:
13106
diff
changeset
|
783 | GAIM_STATUS_OFFLINE, NULL); |
|
31caa48825f7
[gaim-migrate @ 15472]
Mark Doliner <markdoliner@pidgin.im>
parents:
13106
diff
changeset
|
784 | |
|
31caa48825f7
[gaim-migrate @ 15472]
Mark Doliner <markdoliner@pidgin.im>
parents:
13106
diff
changeset
|
785 | /* If this type+message is unique then create a new transient saved status */ |
|
31caa48825f7
[gaim-migrate @ 15472]
Mark Doliner <markdoliner@pidgin.im>
parents:
13106
diff
changeset
|
786 | if (saved_status == NULL) |
|
31caa48825f7
[gaim-migrate @ 15472]
Mark Doliner <markdoliner@pidgin.im>
parents:
13106
diff
changeset
|
787 | saved_status = gaim_savedstatus_new(NULL, GAIM_STATUS_OFFLINE); |
|
31caa48825f7
[gaim-migrate @ 15472]
Mark Doliner <markdoliner@pidgin.im>
parents:
13106
diff
changeset
|
788 | |
|
31caa48825f7
[gaim-migrate @ 15472]
Mark Doliner <markdoliner@pidgin.im>
parents:
13106
diff
changeset
|
789 | /* Set the status for each account */ |
|
11806
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
790 | gaim_savedstatus_activate(saved_status); |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
791 | } |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
792 | else |
|
10738
63ca8277c234
[gaim-migrate @ 12340]
Mark Doliner <markdoliner@pidgin.im>
parents:
10638
diff
changeset
|
793 | { |
|
11348
b8938b189d61
[gaim-migrate @ 13565]
Mark Doliner <markdoliner@pidgin.im>
parents:
11277
diff
changeset
|
794 | /* Everything is good to go--sign on already */ |
|
12857
2e99b4a360fc
[gaim-migrate @ 15208]
Daniel Atallah <datallah@pidgin.im>
parents:
12846
diff
changeset
|
795 | if (!gaim_prefs_get_bool("/core/savedstatus/startup_current_status")) |
|
2e99b4a360fc
[gaim-migrate @ 15208]
Daniel Atallah <datallah@pidgin.im>
parents:
12846
diff
changeset
|
796 | gaim_savedstatus_activate(gaim_savedstatus_get_startup()); |
|
2e99b4a360fc
[gaim-migrate @ 15208]
Daniel Atallah <datallah@pidgin.im>
parents:
12846
diff
changeset
|
797 | gaim_accounts_restore_current_statuses(); |
|
10738
63ca8277c234
[gaim-migrate @ 12340]
Mark Doliner <markdoliner@pidgin.im>
parents:
10638
diff
changeset
|
798 | } |
| 10302 | 799 | |
| 13835 | 800 | if ((accounts = gaim_accounts_get_all_active()) == NULL) |
|
11403
e7e7ed37dc51
[gaim-migrate @ 13638]
Mark Doliner <markdoliner@pidgin.im>
parents:
11348
diff
changeset
|
801 | { |
| 10302 | 802 | gaim_gtk_accounts_window_show(); |
| 10315 | 803 | } |
| 13835 | 804 | else |
| 805 | { | |
| 806 | g_list_free(accounts); | |
| 807 | } | |
| 10302 | 808 | |
| 809 | #ifdef HAVE_STARTUP_NOTIFICATION | |
| 810 | startup_notification_complete(); | |
| 811 | #endif | |
|
14762
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14743
diff
changeset
|
812 | |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14743
diff
changeset
|
813 | #ifdef _WIN32 |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14743
diff
changeset
|
814 | gtkwgaim_post_init(); |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14743
diff
changeset
|
815 | #endif |
|
f494a5f12981
[gaim-migrate @ 17452]
Daniel Atallah <datallah@pidgin.im>
parents:
14743
diff
changeset
|
816 | |
| 10302 | 817 | gtk_main(); |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
818 | |
|
13428
78687459c64b
[gaim-migrate @ 15802]
Daniel Atallah <datallah@pidgin.im>
parents:
13322
diff
changeset
|
819 | #ifdef HAVE_SIGNAL_H |
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
820 | g_free(segfault_message); |
|
12562
adbcee61068b
[gaim-migrate @ 14881]
Daniel Atallah <datallah@pidgin.im>
parents:
12556
diff
changeset
|
821 | #endif |
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
822 | |
| 10302 | 823 | #ifdef _WIN32 |
|
14286
9ff15ceacd34
[gaim-migrate @ 16905]
Daniel Atallah <datallah@pidgin.im>
parents:
14253
diff
changeset
|
824 | gtkwgaim_cleanup(); |
| 10302 | 825 | #endif |
| 826 | ||
| 827 | return 0; | |
| 828 | } |