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