Wed, 21 Dec 2005 18:43:39 +0000
[gaim-migrate @ 14935]
Jason LeBrun wrote to gaim-devel:
"I have found a small quirk in the way gdk_pixbuf_loader works. When you
are using it without signalling, the proper way to use it is to call
gdk_pixbuf_loader_close *before* calling gdk_pixbuf_loader_get_animation
or gdk_pixbuf_loader_get_pixbuf. The call to gdk_pixbuf_loader_close
signals that no more writes will be occuring.
In particular, this affects images that are less than 1k in size. If
gdk_pixbuf_loader_close is not called before _get_animation, the loader
will not return anything unless it has received more than 1k of data
(the file type sniffing buffer size) or it has been closed.
So, the proper order of calls for loaders in the gtk*.c code is:
gdk_pixbuf_loader_new();
gdk_pixbuf_loader_write();
gdk_pixbuf_loader_close();
gdk_pixbuf_loader_get_animation();"
I know we fixed a bug by changing this in one place. I've gone through and updated the rest.
| 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" | |
| 49 | #include "gtkeventloop.h" | |
| 50 | #include "gtkft.h" | |
| 12024 | 51 | #include "gtkmedia.h" |
|
11907
de3ea77afe3c
[gaim-migrate @ 14198]
Evan Schoenberg <evands@pidgin.im>
parents:
11906
diff
changeset
|
52 | #include "gtkidle.h" |
| 10302 | 53 | #include "gtknotify.h" |
| 54 | #include "gtkplugin.h" | |
| 55 | #include "gtkpounce.h" | |
| 56 | #include "gtkprefs.h" | |
| 57 | #include "gtkprivacy.h" | |
| 58 | #include "gtkrequest.h" | |
| 59 | #include "gtkroomlist.h" | |
|
10574
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
60 | #include "gtksavedstatuses.h" |
|
12246
7af1ef3b1cc4
[gaim-migrate @ 14548]
Mark Doliner <markdoliner@pidgin.im>
parents:
12202
diff
changeset
|
61 | #include "gtksession.h" |
| 10302 | 62 | #include "gtksound.h" |
|
11525
1d06283bdcc9
[gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents:
11520
diff
changeset
|
63 | #include "gtkthemes.h" |
| 10302 | 64 | #include "gtkutils.h" |
| 65 | #include "gtkstock.h" | |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11403
diff
changeset
|
66 | #include "gtkwhiteboard.h" |
| 10302 | 67 | |
| 68 | #if HAVE_SIGNAL_H | |
| 69 | # include <signal.h> | |
| 70 | #endif | |
| 71 | ||
| 72 | #include <getopt.h> | |
| 73 | ||
| 74 | #ifdef HAVE_STARTUP_NOTIFICATION | |
| 75 | # define SN_API_NOT_YET_FROZEN | |
| 76 | # include <libsn/sn-launchee.h> | |
| 77 | # include <gdk/gdkx.h> | |
| 78 | #endif | |
| 79 | ||
|
12572
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
80 | #ifdef _WIN32 |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
81 | # include "wspell.h" |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
82 | #endif |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
83 | |
|
11055
e564996853bf
[gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11033
diff
changeset
|
84 | |
|
e564996853bf
[gaim-migrate @ 12996]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11033
diff
changeset
|
85 | |
| 10302 | 86 | #ifdef HAVE_STARTUP_NOTIFICATION |
| 87 | static SnLauncheeContext *sn_context = NULL; | |
| 88 | static SnDisplay *sn_display = NULL; | |
| 89 | #endif | |
| 90 | ||
| 91 | #if HAVE_SIGNAL_H | |
| 92 | /* | |
| 93 | * Lists of signals we wish to catch and those we wish to ignore. | |
| 94 | * Each list terminated with -1 | |
| 95 | */ | |
| 96 | static int catch_sig_list[] = { | |
| 97 | SIGSEGV, | |
| 98 | SIGHUP, | |
| 99 | SIGINT, | |
| 100 | SIGTERM, | |
| 101 | SIGQUIT, | |
| 102 | SIGCHLD, | |
| 103 | -1 | |
| 104 | }; | |
| 105 | ||
| 106 | static int ignore_sig_list[] = { | |
| 107 | SIGPIPE, | |
| 108 | -1 | |
| 109 | }; | |
| 110 | #endif | |
| 111 | ||
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
112 | static int |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
113 | dologin_named(const char *name) |
| 10302 | 114 | { |
| 115 | GaimAccount *account; | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
116 | char **names; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
117 | int i; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
118 | int ret = -1; |
| 10302 | 119 | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
120 | if (name != NULL) { /* list of names given */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
121 | names = g_strsplit(name, ",", 64); |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
122 | for (i = 0; names[i] != NULL; i++) { |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
123 | account = gaim_accounts_find(names[i], NULL); |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
124 | if (account != NULL) { /* found a user */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
125 | ret = 0; |
|
10738
63ca8277c234
[gaim-migrate @ 12340]
Mark Doliner <markdoliner@pidgin.im>
parents:
10638
diff
changeset
|
126 | gaim_account_connect(account); |
| 10302 | 127 | } |
| 128 | } | |
| 129 | g_strfreev(names); | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
130 | } else { /* no name given, use the first account */ |
|
11520
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
131 | GList *accounts; |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
132 | |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
133 | accounts = gaim_accounts_get_all(); |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
134 | if (accounts != NULL) |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
135 | { |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
136 | account = (GaimAccount *)accounts->data; |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
137 | ret = 0; |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
138 | gaim_account_connect(account); |
|
61d34ca357f2
[gaim-migrate @ 13765]
Mark Doliner <markdoliner@pidgin.im>
parents:
11475
diff
changeset
|
139 | } |
| 10302 | 140 | } |
| 141 | ||
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
142 | return ret; |
| 10302 | 143 | } |
| 144 | ||
| 10333 | 145 | #if HAVE_SIGNAL_H |
| 10302 | 146 | static void |
| 147 | clean_pid(void) | |
| 148 | { | |
| 149 | int status; | |
| 150 | pid_t pid; | |
| 151 | ||
| 152 | do { | |
| 153 | pid = waitpid(-1, &status, WNOHANG); | |
| 154 | } while (pid != 0 && pid != (pid_t)-1); | |
|
10334
11feb68437a8
[gaim-migrate @ 11541]
Mark Doliner <markdoliner@pidgin.im>
parents:
10333
diff
changeset
|
155 | |
|
11feb68437a8
[gaim-migrate @ 11541]
Mark Doliner <markdoliner@pidgin.im>
parents:
10333
diff
changeset
|
156 | if ((pid == (pid_t) - 1) && (errno != ECHILD)) { |
| 10302 | 157 | char errmsg[BUFSIZ]; |
| 158 | snprintf(errmsg, BUFSIZ, "Warning: waitpid() returned %d", pid); | |
| 159 | perror(errmsg); | |
| 160 | } | |
| 161 | } | |
| 162 | ||
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
163 | char *segfault_message; |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
164 | |
|
10871
c0282a4f2250
[gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents:
10819
diff
changeset
|
165 | static void |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
166 | sighandler(int sig) |
| 10302 | 167 | { |
| 168 | switch (sig) { | |
| 169 | case SIGHUP: | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
170 | gaim_debug_warning("sighandler", "Caught signal %d\n", sig); |
| 10302 | 171 | gaim_connections_disconnect_all(); |
| 172 | break; | |
| 173 | case SIGSEGV: | |
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
174 | fprintf(stderr, segfault_message); |
| 10302 | 175 | abort(); |
| 176 | break; | |
| 177 | case SIGCHLD: | |
| 178 | clean_pid(); | |
| 179 | signal(SIGCHLD, sighandler); /* restore signal catching on this one! */ | |
| 180 | break; | |
| 181 | default: | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
182 | gaim_debug_warning("sighandler", "Caught signal %d\n", sig); |
| 10302 | 183 | gaim_connections_disconnect_all(); |
| 184 | ||
| 185 | gaim_plugins_unload_all(); | |
| 186 | ||
| 187 | if (gtk_main_level()) | |
| 188 | gtk_main_quit(); | |
| 189 | exit(0); | |
| 190 | } | |
| 191 | } | |
| 192 | #endif | |
| 193 | ||
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
194 | static int |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
195 | ui_main() |
| 10302 | 196 | { |
| 197 | #ifndef _WIN32 | |
| 198 | GList *icons = NULL; | |
| 199 | GdkPixbuf *icon = NULL; | |
| 200 | char *icon_path; | |
| 201 | #endif | |
| 202 | ||
|
11525
1d06283bdcc9
[gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents:
11520
diff
changeset
|
203 | gaim_gtkthemes_init(); |
| 10302 | 204 | |
| 205 | gaim_gtk_blist_setup_sort_methods(); | |
| 206 | ||
| 207 | #ifndef _WIN32 | |
| 208 | /* use the nice PNG icon for all the windows */ | |
| 209 | icon_path = g_build_filename(DATADIR, "pixmaps", "gaim", "icons", "online.png", NULL); | |
| 210 | icon = gdk_pixbuf_new_from_file(icon_path, NULL); | |
| 211 | g_free(icon_path); | |
| 212 | if (icon) { | |
| 213 | icons = g_list_append(icons,icon); | |
| 214 | gtk_window_set_default_icon_list(icons); | |
| 215 | g_object_unref(G_OBJECT(icon)); | |
| 216 | g_list_free(icons); | |
| 217 | } else { | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
218 | gaim_debug_error("ui_main", |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
219 | "Failed to load the default window icon!\n"); |
| 10302 | 220 | } |
| 221 | #endif | |
| 222 | ||
| 223 | return 0; | |
| 224 | } | |
| 225 | ||
| 226 | static void | |
| 227 | debug_init(void) | |
| 228 | { | |
| 229 | gaim_debug_set_ui_ops(gaim_gtk_debug_get_ui_ops()); | |
| 230 | gaim_gtk_debug_init(); | |
| 231 | } | |
| 232 | ||
| 233 | static void | |
| 234 | gaim_gtk_ui_init(void) | |
| 235 | { | |
| 236 | /* Set the UI operation structures. */ | |
| 237 | gaim_accounts_set_ui_ops(gaim_gtk_accounts_get_ui_ops()); | |
| 238 | gaim_xfers_set_ui_ops(gaim_gtk_xfers_get_ui_ops()); | |
| 239 | gaim_blist_set_ui_ops(gaim_gtk_blist_get_ui_ops()); | |
| 240 | gaim_notify_set_ui_ops(gaim_gtk_notify_get_ui_ops()); | |
| 241 | gaim_privacy_set_ui_ops(gaim_gtk_privacy_get_ui_ops()); | |
| 242 | gaim_request_set_ui_ops(gaim_gtk_request_get_ui_ops()); | |
| 243 | gaim_sound_set_ui_ops(gaim_gtk_sound_get_ui_ops()); | |
| 244 | 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
|
245 | 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
|
246 | #ifdef USE_SCREENSAVER |
|
4eee92ead973
[gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
12246
diff
changeset
|
247 | gaim_idle_set_ui_ops(gaim_gtk_idle_get_ui_ops()); |
|
4eee92ead973
[gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
12246
diff
changeset
|
248 | #endif |
| 10302 | 249 | |
| 250 | gaim_gtk_stock_init(); | |
| 251 | gaim_gtk_prefs_init(); | |
| 252 | gaim_gtk_account_init(); | |
| 253 | gaim_gtk_blist_init(); | |
|
10574
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
254 | gaim_gtk_status_init(); |
| 10302 | 255 | gaim_gtk_conversations_init(); |
| 256 | gaim_gtk_pounces_init(); | |
| 257 | gaim_gtk_privacy_init(); | |
| 258 | gaim_gtk_xfers_init(); | |
| 259 | gaim_gtk_roomlist_init(); | |
|
12030
5eb5053d2447
[gaim-migrate @ 14323]
Daniel Atallah <datallah@pidgin.im>
parents:
12024
diff
changeset
|
260 | #ifdef HAVE_VV |
| 12024 | 261 | gaim_gtk_media_init(); |
| 262 | #endif | |
| 10302 | 263 | } |
| 264 | ||
| 265 | static void | |
| 266 | gaim_gtk_quit(void) | |
| 267 | { | |
| 268 | #ifdef USE_SM | |
| 269 | /* unplug */ | |
|
12246
7af1ef3b1cc4
[gaim-migrate @ 14548]
Mark Doliner <markdoliner@pidgin.im>
parents:
12202
diff
changeset
|
270 | gaim_gtk_session_end(); |
| 10302 | 271 | #endif |
| 272 | ||
| 273 | /* Save the plugins we have loaded for next time. */ | |
| 274 | gaim_gtk_plugins_save(); | |
| 275 | ||
|
10574
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
276 | /* Uninit */ |
|
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
277 | gaim_gtk_conversations_uninit(); |
|
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
278 | gaim_gtk_status_uninit(); |
|
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
279 | gaim_gtk_blist_uninit(); |
|
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
280 | gaim_gtk_account_uninit(); |
| 11010 | 281 | gaim_gtk_xfers_uninit(); |
| 11033 | 282 | gaim_gtk_debug_uninit(); |
|
10574
5abb2931b6ff
[gaim-migrate @ 11966]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10448
diff
changeset
|
283 | |
| 10302 | 284 | /* and end it all... */ |
| 285 | gtk_main_quit(); | |
| 286 | } | |
| 287 | ||
| 288 | static GaimCoreUiOps core_ops = | |
| 289 | { | |
| 290 | gaim_gtk_prefs_init, | |
| 291 | debug_init, | |
| 292 | gaim_gtk_ui_init, | |
| 293 | gaim_gtk_quit | |
| 294 | }; | |
| 295 | ||
| 296 | static GaimCoreUiOps * | |
| 297 | gaim_gtk_core_get_ui_ops(void) | |
| 298 | { | |
| 299 | return &core_ops; | |
| 300 | } | |
| 301 | ||
| 302 | static void | |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
303 | show_usage(const char *name, gboolean terse) |
| 10302 | 304 | { |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
305 | char *text; |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
306 | char *text_conv; |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
307 | GError *error = NULL; |
| 10302 | 308 | |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
309 | if (terse) { |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
310 | 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
|
311 | } else { |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
312 | text = g_strdup_printf(_("Gaim %s\n" |
| 10302 | 313 | "Usage: %s [OPTION]...\n\n" |
| 314 | " -c, --config=DIR use DIR for config files\n" | |
| 315 | " -d, --debug print debugging messages to stdout\n" | |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
316 | " -h, --help display this help and exit\n" |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
317 | " -n, --nologin don't automatically login\n" |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
318 | " -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
|
319 | " account(s) to use, separated by commas)\n" |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
320 | " -v, --version display the current version and exit\n"), VERSION, name); |
| 10302 | 321 | } |
| 322 | ||
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
323 | /* tries to convert 'text' to users locale */ |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
324 | text_conv = g_locale_from_utf8(text, -1, NULL, NULL, &error); |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
325 | if (text_conv != NULL) { |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
326 | puts(text_conv); |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
327 | g_free(text_conv); |
| 10302 | 328 | } |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
329 | /* use 'text' as a fallback */ |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
330 | else { |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
331 | g_warning("%s\n", error->message); |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
332 | g_error_free(error); |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
333 | puts(text); |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
334 | } |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
335 | g_free(text); |
| 10302 | 336 | } |
| 337 | ||
| 338 | #ifdef HAVE_STARTUP_NOTIFICATION | |
| 339 | static void | |
| 340 | sn_error_trap_push(SnDisplay *display, Display *xdisplay) | |
| 341 | { | |
| 342 | gdk_error_trap_push(); | |
| 343 | } | |
| 344 | ||
| 345 | static void | |
| 346 | sn_error_trap_pop(SnDisplay *display, Display *xdisplay) | |
| 347 | { | |
| 348 | gdk_error_trap_pop(); | |
| 349 | } | |
| 350 | ||
| 351 | static void | |
| 352 | startup_notification_complete(void) | |
| 353 | { | |
| 354 | Display *xdisplay; | |
| 355 | ||
| 356 | xdisplay = GDK_DISPLAY(); | |
| 357 | sn_display = sn_display_new(xdisplay, | |
| 358 | sn_error_trap_push, | |
| 359 | sn_error_trap_pop); | |
| 360 | sn_context = | |
| 361 | sn_launchee_context_new_from_environment(sn_display, | |
| 362 | DefaultScreen(xdisplay)); | |
| 363 | ||
| 364 | if (sn_context != NULL) | |
| 365 | { | |
| 366 | sn_launchee_context_complete(sn_context); | |
| 367 | sn_launchee_context_unref(sn_context); | |
| 368 | ||
| 369 | sn_display_unref(sn_display); | |
| 370 | } | |
| 371 | } | |
| 372 | #endif /* HAVE_STARTUP_NOTIFICATION */ | |
| 373 | ||
| 374 | #ifndef _WIN32 | |
| 375 | static char *gaim_find_binary_location(void *symbol, void *data) | |
| 376 | { | |
| 377 | static char *fullname = NULL; | |
| 378 | static gboolean first = TRUE; | |
| 379 | ||
| 380 | char *argv0 = data; | |
| 381 | struct stat st; | |
| 382 | char *basebuf, *linkbuf, *fullbuf; | |
| 383 | ||
| 384 | if (!first) | |
| 385 | /* We've already been through this. */ | |
| 386 | return strdup(fullname); | |
| 387 | ||
| 388 | first = FALSE; | |
| 389 | ||
| 390 | if (!argv0) | |
| 391 | return NULL; | |
| 392 | ||
| 393 | ||
| 394 | basebuf = g_find_program_in_path(argv0); | |
| 395 | ||
| 396 | /* But we still need to deal with symbolic links */ | |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10581
diff
changeset
|
397 | g_lstat(basebuf, &st); |
| 10302 | 398 | while ((st.st_mode & S_IFLNK) == S_IFLNK) { |
| 399 | linkbuf = g_malloc(1024); | |
| 400 | readlink(basebuf, linkbuf, 1024); | |
| 401 | if (linkbuf[0] == G_DIR_SEPARATOR) { | |
| 402 | /* an absolute path */ | |
| 403 | fullbuf = g_strdup(linkbuf); | |
| 404 | } else { | |
| 405 | char *dirbuf = g_path_get_dirname(basebuf); | |
| 406 | /* a relative path */ | |
| 407 | fullbuf = g_strdup_printf("%s%s%s", | |
| 408 | dirbuf, G_DIR_SEPARATOR_S, | |
| 409 | linkbuf); | |
| 410 | g_free(dirbuf); | |
| 411 | } | |
| 412 | /* There's no memory leak here. Really! */ | |
| 413 | g_free(linkbuf); | |
| 414 | g_free(basebuf); | |
| 415 | basebuf = fullbuf; | |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10581
diff
changeset
|
416 | g_lstat(basebuf, &st); |
| 10302 | 417 | } |
| 418 | ||
| 419 | fullname = basebuf; | |
| 420 | return strdup(fullname); | |
| 421 | } | |
| 422 | #endif /* #ifndef _WIN32 */ | |
| 423 | ||
| 424 | /* FUCKING GET ME A TOWEL! */ | |
| 425 | #ifdef _WIN32 | |
| 426 | int gaim_main(HINSTANCE hint, int argc, char *argv[]) | |
| 427 | #else | |
| 428 | int main(int argc, char *argv[]) | |
| 429 | #endif | |
| 430 | { | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
431 | gboolean opt_help = FALSE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
432 | gboolean opt_login = FALSE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
433 | gboolean opt_nologin = FALSE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
434 | gboolean opt_version = FALSE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
435 | char *opt_config_dir_arg = NULL; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
436 | char *opt_login_arg = NULL; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
437 | char *opt_session_arg = NULL; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
438 | int dologin_ret = -1; |
|
10447
887380ec66f5
[gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
439 | char *search_path; |
| 10302 | 440 | #if HAVE_SIGNAL_H |
| 441 | int sig_indx; /* for setting up signal catching */ | |
| 442 | sigset_t sigset; | |
|
12409
d89ccce310aa
[gaim-migrate @ 14716]
Richard Laager <rlaager@pidgin.im>
parents:
12342
diff
changeset
|
443 | RETSIGTYPE (*prev_sig_disp)(int); |
| 10302 | 444 | #endif |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
445 | int opt; |
| 10302 | 446 | gboolean gui_check; |
|
10307
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
447 | gboolean debug_enabled; |
|
10334
11feb68437a8
[gaim-migrate @ 11541]
Mark Doliner <markdoliner@pidgin.im>
parents:
10333
diff
changeset
|
448 | #if HAVE_SIGNAL_H |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
449 | char errmsg[BUFSIZ]; |
|
10334
11feb68437a8
[gaim-migrate @ 11541]
Mark Doliner <markdoliner@pidgin.im>
parents:
10333
diff
changeset
|
450 | #endif |
| 10302 | 451 | |
| 452 | struct option long_options[] = { | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
453 | {"config", required_argument, NULL, 'c'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
454 | {"debug", no_argument, NULL, 'd'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
455 | {"help", no_argument, NULL, 'h'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
456 | {"login", optional_argument, NULL, 'l'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
457 | {"nologin", no_argument, NULL, 'n'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
458 | {"session", required_argument, NULL, 's'}, |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
459 | {"version", no_argument, NULL, 'v'}, |
| 10302 | 460 | {0, 0, 0, 0} |
| 461 | }; | |
| 462 | ||
| 463 | #ifdef DEBUG | |
|
10307
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
464 | debug_enabled = TRUE; |
|
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
465 | #else |
|
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
466 | debug_enabled = FALSE; |
| 10302 | 467 | #endif |
|
10307
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
468 | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12572
diff
changeset
|
469 | #ifdef GAIM_FATAL_ASSERTS |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12572
diff
changeset
|
470 | /* Make g_return_... functions fatal. */ |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12572
diff
changeset
|
471 | g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL); |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12572
diff
changeset
|
472 | #endif |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12572
diff
changeset
|
473 | |
| 10302 | 474 | #ifndef _WIN32 |
| 475 | br_set_locate_fallback_func(gaim_find_binary_location, argv[0]); | |
| 476 | #endif | |
| 477 | #ifdef ENABLE_NLS | |
| 478 | bindtextdomain(PACKAGE, LOCALEDIR); | |
| 479 | bind_textdomain_codeset(PACKAGE, "UTF-8"); | |
| 480 | textdomain(PACKAGE); | |
| 481 | #endif | |
| 482 | ||
|
11080
0578003800d0
[gaim-migrate @ 13092]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11067
diff
changeset
|
483 | |
| 10302 | 484 | #if HAVE_SIGNAL_H |
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
485 | |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
486 | #ifndef DEBUG |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
487 | /* We translate this here in case the crash breaks gettext. */ |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
488 | segfault_message = g_strdup(_( |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
489 | "Gaim has segfaulted and attempted to dump a core file.\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
490 | "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
|
491 | "no fault of your own.\n\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
492 | "It is possible that this bug is already fixed in CVS.\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
493 | "If you can reproduce the crash, please notify the gaim\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
494 | "developers by reporting a bug at\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
495 | GAIM_WEBSITE "bug.php\n\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
496 | "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
|
497 | "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
|
498 | "how to get the backtrace, please read the instructions at\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
499 | GAIM_WEBSITE "gdb.php. If you need further\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
500 | "assistance, please IM either SeanEgn or LSchiere (via AIM).\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
501 | "Contact information for Sean and Luke on other protocols is at\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
502 | GAIM_WEBSITE "contactinfo.php.\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
503 | )); |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
504 | #else |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
505 | /* Don't mark this for translation. */ |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
506 | segfault_message = g_strdup( |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
507 | "Hi, user. We need to talk.\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
508 | "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
|
509 | "No, really, it's not you... it's me... no no no, I think we get along well\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
510 | "it's just that.... well, I want to see other people. I... what?!? NO! I haven't\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
511 | "been cheating on you!! How many times do you want me to tell you?! And for the\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
512 | "last time, it's just a rash!\n" |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
513 | ); |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
514 | #endif |
|
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
515 | |
| 10302 | 516 | /* Let's not violate any PLA's!!!! */ |
| 517 | /* jseymour: whatever the fsck that means */ | |
| 518 | /* Robot101: for some reason things like gdm like to block * | |
| 519 | * useful signals like SIGCHLD, so we unblock all the ones we * | |
| 520 | * declare a handler for. thanks JSeymour and Vann. */ | |
| 521 | if (sigemptyset(&sigset)) { | |
| 522 | snprintf(errmsg, BUFSIZ, "Warning: couldn't initialise empty signal set"); | |
| 523 | perror(errmsg); | |
| 524 | } | |
| 525 | for(sig_indx = 0; catch_sig_list[sig_indx] != -1; ++sig_indx) { | |
| 526 | if((prev_sig_disp = signal(catch_sig_list[sig_indx], sighandler)) == SIG_ERR) { | |
| 527 | snprintf(errmsg, BUFSIZ, "Warning: couldn't set signal %d for catching", | |
| 528 | catch_sig_list[sig_indx]); | |
| 529 | perror(errmsg); | |
| 530 | } | |
| 531 | if(sigaddset(&sigset, catch_sig_list[sig_indx])) { | |
| 532 | snprintf(errmsg, BUFSIZ, "Warning: couldn't include signal %d for unblocking", | |
| 533 | catch_sig_list[sig_indx]); | |
| 534 | perror(errmsg); | |
| 535 | } | |
| 536 | } | |
| 537 | for(sig_indx = 0; ignore_sig_list[sig_indx] != -1; ++sig_indx) { | |
| 538 | if((prev_sig_disp = signal(ignore_sig_list[sig_indx], SIG_IGN)) == SIG_ERR) { | |
| 539 | snprintf(errmsg, BUFSIZ, "Warning: couldn't set signal %d to ignore", | |
| 540 | ignore_sig_list[sig_indx]); | |
| 541 | perror(errmsg); | |
| 542 | } | |
| 543 | } | |
| 544 | ||
| 545 | if (sigprocmask(SIG_UNBLOCK, &sigset, NULL)) { | |
| 546 | snprintf(errmsg, BUFSIZ, "Warning: couldn't unblock signals"); | |
| 547 | perror(errmsg); | |
|
10307
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
548 | } |
| 10302 | 549 | #endif |
| 550 | ||
| 551 | /* scan command-line options */ | |
| 552 | opterr = 1; | |
| 553 | while ((opt = getopt_long(argc, argv, | |
| 554 | #ifndef _WIN32 | |
|
11795
ab7b200b552e
[gaim-migrate @ 14086]
Richard Laager <rlaager@pidgin.im>
parents:
11785
diff
changeset
|
555 | "c:dhnl::s:v", |
| 10302 | 556 | #else |
|
11795
ab7b200b552e
[gaim-migrate @ 14086]
Richard Laager <rlaager@pidgin.im>
parents:
11785
diff
changeset
|
557 | "c:dhnl::v", |
| 10302 | 558 | #endif |
| 559 | long_options, NULL)) != -1) { | |
| 560 | switch (opt) { | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
561 | case 'c': /* config dir */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
562 | g_free(opt_config_dir_arg); |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
563 | opt_config_dir_arg = g_strdup(optarg); |
| 10302 | 564 | break; |
| 565 | case 'd': /* debug */ | |
|
10307
f3ba80364053
[gaim-migrate @ 11497]
Mark Doliner <markdoliner@pidgin.im>
parents:
10306
diff
changeset
|
566 | debug_enabled = TRUE; |
| 10302 | 567 | break; |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
568 | case 'h': /* help */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
569 | opt_help = TRUE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
570 | break; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
571 | case 'n': /* no autologin */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
572 | opt_nologin = TRUE; |
| 10302 | 573 | break; |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
574 | case 'l': /* login, option username */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
575 | opt_login = TRUE; |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
576 | g_free(opt_login_arg); |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
577 | if (optarg != NULL) |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
578 | opt_login_arg = g_strdup(optarg); |
| 10302 | 579 | break; |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
580 | case 's': /* use existing session ID */ |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
581 | g_free(opt_session_arg); |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
582 | opt_session_arg = g_strdup(optarg); |
|
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
583 | break; |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
584 | case 'v': /* version */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
585 | opt_version = TRUE; |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
586 | break; |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
587 | case '?': /* show terse help */ |
| 10302 | 588 | default: |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
589 | show_usage(argv[0], TRUE); |
| 10302 | 590 | return 0; |
| 591 | break; | |
| 592 | } | |
| 593 | } | |
| 594 | ||
| 595 | /* show help message */ | |
| 596 | if (opt_help) { | |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
597 | show_usage(argv[0], FALSE); |
| 10302 | 598 | return 0; |
| 599 | } | |
| 600 | /* show version message */ | |
| 601 | if (opt_version) { | |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
602 | printf("Gaim %s\n", VERSION); |
| 10302 | 603 | return 0; |
| 604 | } | |
| 605 | ||
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
606 | /* set a user-specified config directory */ |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
607 | if (opt_config_dir_arg != NULL) { |
|
10871
c0282a4f2250
[gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents:
10819
diff
changeset
|
608 | gaim_util_set_user_dir(opt_config_dir_arg); |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
609 | } |
|
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
610 | |
|
10448
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
611 | /* |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
612 | * We're done piddling around with command line arguments. |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
613 | * Fire up this baby. |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
614 | */ |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
615 | |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
616 | gaim_debug_set_enabled(debug_enabled); |
|
4415ffba12e9
[gaim-migrate @ 11713]
Mark Doliner <markdoliner@pidgin.im>
parents:
10447
diff
changeset
|
617 | |
| 10302 | 618 | #ifdef _WIN32 |
|
10323
f4a013ac9e7c
[gaim-migrate @ 11530]
Mark Doliner <markdoliner@pidgin.im>
parents:
10322
diff
changeset
|
619 | wgaim_init(hint); |
| 10302 | 620 | #endif |
|
11067
b6353889a9ba
[gaim-migrate @ 13048]
Piotr Zielinski <zielaj@users.sourceforge.net>
parents:
11055
diff
changeset
|
621 | |
|
12572
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
622 | 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
|
623 | gtk_rc_add_default_file(search_path); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
624 | g_free(search_path); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
625 | |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
626 | |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
627 | gui_check = gtk_init_check(&argc, &argv); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
628 | if (!gui_check) { |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
629 | char *display = gdk_get_display(); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
630 | |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
631 | printf("Gaim %s\n", VERSION); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
632 | |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
633 | g_warning("cannot open display: %s", display ? display : "unset"); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
634 | g_free(display); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
635 | |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
636 | return 1; |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
637 | } |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
638 | |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
639 | #ifdef _WIN32 |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
640 | /** TODO: Move this to a wgaim_gtk_init() if we need such a thing */ |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
641 | wgaim_gtkspell_init(); |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
642 | #endif |
|
a71b6aef215b
[gaim-migrate @ 14891]
Daniel Atallah <datallah@pidgin.im>
parents:
12562
diff
changeset
|
643 | |
| 10302 | 644 | gaim_core_set_ui_ops(gaim_gtk_core_get_ui_ops()); |
| 645 | gaim_eventloop_set_ui_ops(gaim_gtk_eventloop_get_ui_ops()); | |
| 646 | ||
|
12342
da61b726d595
[gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12272
diff
changeset
|
647 | /* |
|
da61b726d595
[gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12272
diff
changeset
|
648 | * Set plugin search directories. Give priority to the plugins |
|
da61b726d595
[gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12272
diff
changeset
|
649 | * in user's home directory. |
|
da61b726d595
[gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12272
diff
changeset
|
650 | */ |
|
10447
887380ec66f5
[gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
651 | search_path = g_build_filename(gaim_user_dir(), "plugins", NULL); |
|
887380ec66f5
[gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
652 | gaim_plugins_add_search_path(search_path); |
|
887380ec66f5
[gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
653 | g_free(search_path); |
|
12342
da61b726d595
[gaim-migrate @ 14646]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12272
diff
changeset
|
654 | gaim_plugins_add_search_path(LIBDIR); |
|
10447
887380ec66f5
[gaim-migrate @ 11712]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
655 | |
| 10302 | 656 | if (!gaim_core_init(GAIM_GTK_UI)) { |
| 657 | fprintf(stderr, | |
| 658 | "Initialization of the Gaim core failed. Dumping core.\n" | |
| 659 | "Please report this!\n"); | |
| 660 | abort(); | |
| 661 | } | |
| 662 | ||
|
10428
940d15803cad
[gaim-migrate @ 11680]
Mark Doliner <markdoliner@pidgin.im>
parents:
10425
diff
changeset
|
663 | /* TODO: Move blist loading into gaim_blist_init() */ |
| 10302 | 664 | gaim_set_blist(gaim_blist_new()); |
| 665 | gaim_blist_load(); | |
| 666 | ||
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
667 | /* TODO: Move prefs loading into gaim_prefs_init() */ |
| 10302 | 668 | gaim_prefs_load(); |
| 669 | gaim_prefs_update_old(); | |
| 670 | gaim_gtk_prefs_update_old(); | |
| 671 | ||
| 672 | /* load plugins we had when we quit */ | |
| 673 | gaim_plugins_load_saved("/gaim/gtk/plugins/loaded"); | |
| 674 | ||
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10428
diff
changeset
|
675 | /* TODO: Move pounces loading into gaim_pounces_init() */ |
| 10302 | 676 | gaim_pounces_load(); |
| 677 | ||
| 678 | ui_main(); | |
| 679 | ||
| 680 | #ifdef USE_SM | |
|
12246
7af1ef3b1cc4
[gaim-migrate @ 14548]
Mark Doliner <markdoliner@pidgin.im>
parents:
12202
diff
changeset
|
681 | gaim_gtk_session_init(argv[0], opt_session_arg, opt_config_dir_arg); |
| 10302 | 682 | #endif |
| 683 | if (opt_session_arg != NULL) { | |
| 684 | g_free(opt_session_arg); | |
| 685 | opt_session_arg = NULL; | |
| 686 | } | |
| 687 | if (opt_config_dir_arg != NULL) { | |
| 688 | g_free(opt_config_dir_arg); | |
| 689 | opt_config_dir_arg = NULL; | |
| 690 | } | |
| 691 | ||
|
12011
85a627679414
[gaim-migrate @ 14304]
Mark Doliner <markdoliner@pidgin.im>
parents:
11928
diff
changeset
|
692 | /* |
|
85a627679414
[gaim-migrate @ 14304]
Mark Doliner <markdoliner@pidgin.im>
parents:
11928
diff
changeset
|
693 | * 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
|
694 | * user feels warm and fuzzy (not cold and prickley). |
|
85a627679414
[gaim-migrate @ 14304]
Mark Doliner <markdoliner@pidgin.im>
parents:
11928
diff
changeset
|
695 | */ |
|
85a627679414
[gaim-migrate @ 14304]
Mark Doliner <markdoliner@pidgin.im>
parents:
11928
diff
changeset
|
696 | gaim_blist_show(); |
|
85a627679414
[gaim-migrate @ 14304]
Mark Doliner <markdoliner@pidgin.im>
parents:
11928
diff
changeset
|
697 | |
| 10302 | 698 | if (gaim_prefs_get_bool("/gaim/gtk/debug/enabled")) |
| 699 | gaim_gtk_debug_window_show(); | |
| 700 | ||
| 701 | if (opt_login) { | |
| 702 | dologin_ret = dologin_named(opt_login_arg); | |
| 703 | if (opt_login_arg != NULL) { | |
| 704 | g_free(opt_login_arg); | |
| 705 | opt_login_arg = NULL; | |
| 706 | } | |
| 707 | } | |
| 708 | ||
|
11806
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
709 | if (opt_nologin) |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
710 | { |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
711 | /* Set all accounts to "offline" */ |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
712 | GaimSavedStatus *saved_status; |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
713 | saved_status = gaim_savedstatus_find(_("Default")); |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
714 | if (saved_status == NULL) |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
715 | saved_status = gaim_savedstatus_new(_("Default"), GAIM_STATUS_OFFLINE); |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
716 | else |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
717 | gaim_savedstatus_set_type(saved_status, GAIM_STATUS_OFFLINE); |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
718 | gaim_savedstatus_activate(saved_status); |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
719 | } |
|
269e9f78cf89
[gaim-migrate @ 14097]
Mark Doliner <markdoliner@pidgin.im>
parents:
11795
diff
changeset
|
720 | else |
|
10738
63ca8277c234
[gaim-migrate @ 12340]
Mark Doliner <markdoliner@pidgin.im>
parents:
10638
diff
changeset
|
721 | { |
|
11348
b8938b189d61
[gaim-migrate @ 13565]
Mark Doliner <markdoliner@pidgin.im>
parents:
11277
diff
changeset
|
722 | /* Everything is good to go--sign on already */ |
|
b8938b189d61
[gaim-migrate @ 13565]
Mark Doliner <markdoliner@pidgin.im>
parents:
11277
diff
changeset
|
723 | gaim_accounts_restore_previous_statuses(); |
|
10738
63ca8277c234
[gaim-migrate @ 12340]
Mark Doliner <markdoliner@pidgin.im>
parents:
10638
diff
changeset
|
724 | } |
| 10302 | 725 | |
|
11785
2a8d26ec03ce
[gaim-migrate @ 14076]
Mark Doliner <markdoliner@pidgin.im>
parents:
11673
diff
changeset
|
726 | if (gaim_accounts_get_all_active() == NULL) |
|
11403
e7e7ed37dc51
[gaim-migrate @ 13638]
Mark Doliner <markdoliner@pidgin.im>
parents:
11348
diff
changeset
|
727 | { |
| 10302 | 728 | gaim_gtk_accounts_window_show(); |
| 10315 | 729 | } |
| 10302 | 730 | |
| 731 | #ifdef HAVE_STARTUP_NOTIFICATION | |
| 732 | startup_notification_complete(); | |
| 733 | #endif | |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
734 | |
| 10302 | 735 | gtk_main(); |
|
10320
f5b0f5cf8562
[gaim-migrate @ 11527]
Mark Doliner <markdoliner@pidgin.im>
parents:
10317
diff
changeset
|
736 | |
|
12562
adbcee61068b
[gaim-migrate @ 14881]
Daniel Atallah <datallah@pidgin.im>
parents:
12556
diff
changeset
|
737 | #if HAVE_SIGNAL_H |
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
738 | g_free(segfault_message); |
|
12562
adbcee61068b
[gaim-migrate @ 14881]
Daniel Atallah <datallah@pidgin.im>
parents:
12556
diff
changeset
|
739 | #endif |
|
12556
f4d4e4e3a825
[gaim-migrate @ 14875]
Richard Laager <rlaager@pidgin.im>
parents:
12409
diff
changeset
|
740 | |
| 10302 | 741 | #ifdef _WIN32 |
| 742 | wgaim_cleanup(); | |
| 743 | #endif | |
| 744 | ||
| 745 | return 0; | |
| 746 | } |