Sun, 17 Oct 2004 23:55:49 +0000
[gaim-migrate @ 11141]
Two things:
a. Added Enter as a gtk_binding to GtkIMHtml. This fixes everything.
Input methods now work. The "Enter sends" and "Ctrl-Enter sends" preferences
were removed and defaulted to yes and no respectively, BUT, in a very super-cool
turn of events, you can now add your own bindings to .gtkrc to make WHATEVER
YOU WANT send. Awesome. Someone should use g_signal_accumulator_true_handled
or something to make profiles and away messages able to insert newlines.
b. Removed "Use multi-colored screennames in chats," defaulted to yes, and
wrote a nifty algorithm to automatically adjust the colors to accomodate the
background (see http://gaim.sf.net/sean/porn-chat.png). People should play
around and tweak it a bit. The algorithm takes into consideration the
luminosity of the current background and the base hue to use for the screenname
in generating the new colors. Note that it does this while maintaining the hues.
Someone should optimize this so it skips over the floating point arithmatic when
the background color is white.
| 4489 | 1 | /* |
| 2 | * gaim | |
| 3 | * | |
| 8046 | 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. | |
| 4489 | 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 | ||
| 9791 | 24 | #include "internal.h" |
| 25 | #include "gtkgaim.h" | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
26 | |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
27 | #include "account.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
28 | #include "conversation.h" |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
29 | #include "core.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
30 | #include "debug.h" |
| 8273 | 31 | #include "eventloop.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
32 | #include "ft.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
33 | #include "log.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
34 | #include "notify.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
35 | #include "prefs.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
36 | #include "prpl.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
37 | #include "pounce.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
38 | #include "sound.h" |
|
6106
1dc08be40f0a
[gaim-migrate @ 6567]
Mark Doliner <markdoliner@pidgin.im>
parents:
6065
diff
changeset
|
39 | #include "status.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
40 | #include "util.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
41 | |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
42 | #include "gtkaccount.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
43 | #include "gtkblist.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
44 | #include "gtkconn.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
45 | #include "gtkconv.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
46 | #include "gtkdebug.h" |
|
9709
2e73f176cc80
[gaim-migrate @ 10570]
Mark Doliner <markdoliner@pidgin.im>
parents:
9609
diff
changeset
|
47 | #include "gtkdialogs.h" |
| 8273 | 48 | #include "gtkeventloop.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
49 | #include "gtkft.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
50 | #include "gtknotify.h" |
|
7966
7f1fff2ed1b7
[gaim-migrate @ 8643]
Christian Hammond <chipx86@chipx86.com>
parents:
7956
diff
changeset
|
51 | #include "gtkplugin.h" |
|
5875
493a921c0378
[gaim-migrate @ 6307]
Christian Hammond <chipx86@chipx86.com>
parents:
5874
diff
changeset
|
52 | #include "gtkpounce.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
53 | #include "gtkprefs.h" |
|
6371
e92b66ee5518
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6313
diff
changeset
|
54 | #include "gtkprivacy.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
55 | #include "gtkrequest.h" |
| 8113 | 56 | #include "gtkroomlist.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
57 | #include "gtksound.h" |
|
5943
8a052155157a
[gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents:
5909
diff
changeset
|
58 | #include "gtkutils.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
59 | #include "stock.h" |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
60 | |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
61 | #if HAVE_SIGNAL_H |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
62 | # include <signal.h> |
| 4489 | 63 | #endif |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
64 | |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
65 | #include <getopt.h> |
|
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5866
diff
changeset
|
66 | |
|
7168
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
67 | #ifdef HAVE_STARTUP_NOTIFICATION |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
68 | # define SN_API_NOT_YET_FROZEN |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
69 | # include <libsn/sn-launchee.h> |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
70 | # include <gdk/gdkx.h> |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
71 | #endif |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
72 | |
| 4489 | 73 | static GtkWidget *name; |
| 74 | static GtkWidget *pass; | |
| 75 | ||
|
7168
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
76 | #ifdef HAVE_STARTUP_NOTIFICATION |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
77 | static SnLauncheeContext *sn_context = NULL; |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
78 | static SnDisplay *sn_display = NULL; |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
79 | #endif |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
80 | |
| 4489 | 81 | GtkWidget *mainwindow = NULL; |
| 82 | ||
| 83 | int opt_away = 0; | |
| 4687 | 84 | int docklet_count = 0; |
| 4489 | 85 | char *opt_away_arg = NULL; |
| 86 | int opt_debug = 0; | |
| 87 | ||
| 88 | #if HAVE_SIGNAL_H | |
| 89 | /* | |
| 90 | * Lists of signals we wish to catch and those we wish to ignore. | |
| 91 | * Each list terminated with -1 | |
| 92 | */ | |
| 93 | static int catch_sig_list[] = { | |
| 94 | SIGSEGV, | |
| 95 | SIGHUP, | |
| 96 | SIGINT, | |
| 97 | SIGTERM, | |
| 98 | SIGQUIT, | |
| 99 | SIGCHLD, | |
| 100 | -1 | |
| 101 | }; | |
| 102 | ||
| 103 | static int ignore_sig_list[] = { | |
| 104 | SIGPIPE, | |
| 105 | -1 | |
| 106 | }; | |
| 107 | #endif | |
| 108 | ||
| 4561 | 109 | static guint snd_tmout = 0; |
| 4489 | 110 | static gboolean sound_timeout(gpointer data) |
| 111 | { | |
| 5684 | 112 | gaim_gtk_sound_set_login_mute(FALSE); |
| 4561 | 113 | snd_tmout = 0; |
| 4489 | 114 | return FALSE; |
| 115 | } | |
| 116 | ||
| 117 | /* we need to do this for Oscar because serv_login only starts the login | |
| 118 | * process, it doesn't end there. gaim_setup will be called later from | |
| 119 | * oscar.c, after the buddy list is made and serv_finish_login is called */ | |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
120 | void gaim_setup(GaimConnection *gc) |
| 4489 | 121 | { |
|
8947
6ae7b4a840f1
[gaim-migrate @ 9719]
Mark Doliner <markdoliner@pidgin.im>
parents:
8905
diff
changeset
|
122 | if (gaim_prefs_get_bool("/gaim/gtk/sound/enabled/login")) { |
|
6ae7b4a840f1
[gaim-migrate @ 9719]
Mark Doliner <markdoliner@pidgin.im>
parents:
8905
diff
changeset
|
123 | if (snd_tmout) |
| 4561 | 124 | g_source_remove(snd_tmout); |
| 5684 | 125 | gaim_gtk_sound_set_login_mute(TRUE); |
| 8273 | 126 | snd_tmout = gaim_timeout_add(10000, sound_timeout, NULL); |
| 4489 | 127 | } |
| 128 | } | |
| 129 | ||
| 130 | static gboolean domiddleclick(GtkWidget *w, GdkEventButton *event, gpointer null) | |
| 131 | { | |
| 132 | if (event->button != 2) | |
| 133 | return FALSE; | |
| 134 | ||
|
5780
c2388268514e
[gaim-migrate @ 6205]
Christian Hammond <chipx86@chipx86.com>
parents:
5766
diff
changeset
|
135 | gaim_accounts_auto_login(GAIM_GTK_UI); |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
136 | |
| 4489 | 137 | return TRUE; |
| 138 | } | |
| 139 | ||
| 140 | static void dologin(GtkWidget *widget, GtkWidget *w) | |
| 141 | { | |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
142 | GaimAccount *account; |
| 8136 | 143 | GtkWidget *item; |
| 4489 | 144 | const char *password = gtk_entry_get_text(GTK_ENTRY(pass)); |
| 145 | ||
| 8136 | 146 | item = gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(GTK_OPTION_MENU(name)))); |
| 147 | account = g_object_get_data(G_OBJECT(item), "account"); | |
| 4489 | 148 | |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
149 | if (!account) { |
| 8136 | 150 | gaim_notify_error(NULL, NULL, _("Please create an account."), NULL); |
| 151 | return; | |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
152 | } |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
153 | |
|
6036
285e48913c72
[gaim-migrate @ 6486]
Mark Doliner <markdoliner@pidgin.im>
parents:
6019
diff
changeset
|
154 | gaim_account_set_password(account, (*password != '\0') ? password : NULL); |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
155 | |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
156 | gaim_account_connect(account); |
| 4489 | 157 | } |
| 158 | ||
| 159 | /* <name> is a comma-separated list of names, or NULL | |
| 160 | if NULL and there is at least one user defined in .gaimrc, try to login. | |
| 161 | if not NULL, parse <name> into separate strings, look up each one in | |
| 162 | .gaimrc and, if it's there, try to login. | |
| 163 | returns: 0 if successful | |
| 164 | -1 if no user was found that had a saved password | |
| 165 | */ | |
| 166 | static int dologin_named(char *name) | |
| 167 | { | |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
168 | GaimAccount *account; |
| 4489 | 169 | char **names, **n; |
| 170 | int retval = -1; | |
| 171 | ||
| 172 | if (name !=NULL) { /* list of names given */ | |
| 173 | names = g_strsplit(name, ",", 32); | |
| 174 | for (n = names; *n != NULL; n++) { | |
| 7132 | 175 | account = gaim_accounts_find(*n, NULL); |
| 4491 | 176 | if (account) { /* found a user */ |
|
6231
48e5eff01f7a
[gaim-migrate @ 6724]
Mark Doliner <markdoliner@pidgin.im>
parents:
6179
diff
changeset
|
177 | retval = 0; |
|
48e5eff01f7a
[gaim-migrate @ 6724]
Mark Doliner <markdoliner@pidgin.im>
parents:
6179
diff
changeset
|
178 | gaim_account_connect(account); |
| 4489 | 179 | } |
| 180 | } | |
| 181 | g_strfreev(names); | |
| 182 | } else { /* no name given, use default */ | |
|
5580
a5a3e6dfb409
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5573
diff
changeset
|
183 | account = (GaimAccount *)gaim_accounts_get_all()->data; |
|
6231
48e5eff01f7a
[gaim-migrate @ 6724]
Mark Doliner <markdoliner@pidgin.im>
parents:
6179
diff
changeset
|
184 | retval = 0; |
|
48e5eff01f7a
[gaim-migrate @ 6724]
Mark Doliner <markdoliner@pidgin.im>
parents:
6179
diff
changeset
|
185 | gaim_account_connect(account); |
| 4489 | 186 | } |
| 187 | ||
| 188 | return retval; | |
| 189 | } | |
| 190 | ||
| 191 | ||
| 8136 | 192 | static void combo_changed(GtkWidget *menu, GaimAccount *account, gpointer data) |
| 4489 | 193 | { |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
194 | if (account && gaim_account_get_remember_password(account)) { |
| 4491 | 195 | gtk_entry_set_text(GTK_ENTRY(pass), account->password); |
| 4489 | 196 | } else { |
| 197 | gtk_entry_set_text(GTK_ENTRY(pass), ""); | |
| 198 | } | |
| 199 | } | |
| 200 | ||
| 201 | ||
| 202 | static void login_window_closed(GtkWidget *w, GdkEvent *ev, gpointer d) | |
| 203 | { | |
| 204 | if(docklet_count) { | |
|
4880
d161e86c25e9
[gaim-migrate @ 5210]
Herman Bloggs <herman@bluedigits.com>
parents:
4800
diff
changeset
|
205 | #ifdef _WIN32 |
| 4489 | 206 | wgaim_systray_minimize(mainwindow); |
| 207 | #endif | |
| 208 | gtk_widget_hide(mainwindow); | |
| 209 | } else | |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
210 | gaim_core_quit(); |
| 4489 | 211 | } |
| 212 | ||
| 213 | void show_login() | |
| 214 | { | |
| 215 | GtkWidget *image; | |
| 216 | GtkWidget *vbox; | |
| 217 | GtkWidget *button; | |
| 218 | GtkWidget *hbox; | |
| 219 | GtkWidget *label; | |
| 220 | GtkWidget *vbox2; | |
| 221 | ||
| 222 | /* Do we already have a main window opened? If so, bring it back, baby... ribs... yeah */ | |
| 223 | if (mainwindow) { | |
|
10023
6b0014040323
[gaim-migrate @ 10955]
Mark Doliner <markdoliner@pidgin.im>
parents:
9971
diff
changeset
|
224 | gtk_window_present(GTK_WINDOW(mainwindow)); |
|
6b0014040323
[gaim-migrate @ 10955]
Mark Doliner <markdoliner@pidgin.im>
parents:
9971
diff
changeset
|
225 | return; |
| 4489 | 226 | } |
| 227 | ||
| 228 | mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
| 229 | ||
| 230 | gtk_window_set_role(GTK_WINDOW(mainwindow), "login"); | |
| 4635 | 231 | gtk_window_set_resizable(GTK_WINDOW(mainwindow), FALSE); |
| 4703 | 232 | gtk_window_set_title(GTK_WINDOW(mainwindow), _("Login")); |
| 4489 | 233 | gtk_container_set_border_width(GTK_CONTAINER(mainwindow), 5); |
| 234 | g_signal_connect(G_OBJECT(mainwindow), "delete_event", | |
| 235 | G_CALLBACK(login_window_closed), mainwindow); | |
| 236 | ||
| 237 | vbox = gtk_vbox_new(FALSE, 0); | |
| 238 | gtk_container_add(GTK_CONTAINER(mainwindow), vbox); | |
| 239 | ||
|
5024
3b5412e4b483
[gaim-migrate @ 5361]
Robert McQueen <robot101@debian.org>
parents:
4978
diff
changeset
|
240 | image = gtk_image_new_from_stock(GAIM_STOCK_LOGO, gtk_icon_size_from_name(GAIM_ICON_SIZE_LOGO)); |
| 4489 | 241 | gtk_box_pack_start(GTK_BOX(vbox), image, FALSE, FALSE, 0); |
| 242 | ||
| 243 | vbox2 = gtk_vbox_new(FALSE, 0); | |
| 244 | gtk_container_set_border_width(GTK_CONTAINER(vbox2), 5); | |
| 245 | ||
| 8136 | 246 | /* why isn't there a gtk_label_new_with_markup? */ |
| 247 | label = gtk_label_new(NULL); | |
|
8878
32bd261f99e0
[gaim-migrate @ 9647]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8839
diff
changeset
|
248 | gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("<b>_Account:</b>")); |
| 4489 | 249 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
| 250 | gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 0); | |
| 251 | ||
| 8136 | 252 | name = gaim_gtk_account_option_menu_new(NULL, TRUE, G_CALLBACK(combo_changed), NULL, NULL); |
|
8241
bc4a25b4140d
[gaim-migrate @ 8964]
Padraig O'Briain <padraigob@users.sourceforge.net>
parents:
8136
diff
changeset
|
253 | gtk_label_set_mnemonic_widget(GTK_LABEL(label), name); |
| 8136 | 254 | |
| 4489 | 255 | gtk_box_pack_start(GTK_BOX(vbox2), name, FALSE, TRUE, 0); |
| 256 | gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, TRUE, 0); | |
| 257 | ||
| 258 | vbox2 = gtk_vbox_new(FALSE, 0); | |
| 259 | gtk_container_set_border_width(GTK_CONTAINER(vbox2), 5); | |
| 260 | ||
| 8136 | 261 | label = gtk_label_new(NULL); |
|
8878
32bd261f99e0
[gaim-migrate @ 9647]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8839
diff
changeset
|
262 | gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("<b>_Password:</b>")); |
| 4489 | 263 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
| 264 | gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 0); | |
| 265 | ||
| 266 | pass = gtk_entry_new(); | |
|
8241
bc4a25b4140d
[gaim-migrate @ 8964]
Padraig O'Briain <padraigob@users.sourceforge.net>
parents:
8136
diff
changeset
|
267 | gtk_label_set_mnemonic_widget(GTK_LABEL(label), pass); |
| 4489 | 268 | gtk_entry_set_visibility(GTK_ENTRY(pass), FALSE); |
| 269 | g_signal_connect(G_OBJECT(pass), "activate", | |
|
6109
44e5eb92b617
[gaim-migrate @ 6571]
Mark Doliner <markdoliner@pidgin.im>
parents:
6106
diff
changeset
|
270 | G_CALLBACK(dologin), mainwindow); |
| 4489 | 271 | gtk_box_pack_start(GTK_BOX(vbox2), pass, FALSE, TRUE, 0); |
| 272 | gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, TRUE, 0); | |
| 273 | ||
| 274 | /* Now for the button box */ | |
| 275 | hbox = gtk_hbox_new(TRUE, 0); | |
| 276 | gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 5); | |
| 277 | ||
| 278 | /* And now for the buttons */ | |
|
9901
e3ddc1643441
[gaim-migrate @ 10793]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
279 | button = gaim_pixbuf_button_from_stock(_("A_ccounts"), GAIM_STOCK_ACCOUNTS, GAIM_BUTTON_VERTICAL); |
| 4489 | 280 | gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
| 281 | g_signal_connect(G_OBJECT(button), "clicked", | |
|
6119
5b4c66789a8c
[gaim-migrate @ 6588]
Christian Hammond <chipx86@chipx86.com>
parents:
6109
diff
changeset
|
282 | G_CALLBACK(gaim_gtk_accounts_window_show), mainwindow); |
| 4489 | 283 | gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
| 284 | ||
|
9901
e3ddc1643441
[gaim-migrate @ 10793]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
285 | button = gaim_pixbuf_button_from_stock(_("P_references"), GTK_STOCK_PREFERENCES, GAIM_BUTTON_VERTICAL); |
| 4489 | 286 | gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
| 287 | g_signal_connect(G_OBJECT(button), "clicked", | |
|
5530
ba1ad464b56f
[gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents:
5492
diff
changeset
|
288 | G_CALLBACK(gaim_gtk_prefs_show), mainwindow); |
| 4489 | 289 | gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
| 290 | ||
|
8878
32bd261f99e0
[gaim-migrate @ 9647]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8839
diff
changeset
|
291 | button = gaim_pixbuf_button_from_stock(_("_Sign on"), GAIM_STOCK_SIGN_ON, GAIM_BUTTON_VERTICAL); |
| 4489 | 292 | gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
| 293 | g_signal_connect(G_OBJECT(button), "clicked", | |
| 294 | G_CALLBACK(dologin), mainwindow); | |
| 295 | g_signal_connect(G_OBJECT(button), "button-press-event", G_CALLBACK(domiddleclick), NULL); | |
| 296 | gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
| 297 | ||
| 298 | /* Now grab the focus that we need */ | |
|
5580
a5a3e6dfb409
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5573
diff
changeset
|
299 | if (gaim_accounts_get_all()) { |
|
a5a3e6dfb409
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5573
diff
changeset
|
300 | GaimAccount *account = gaim_accounts_get_all()->data; |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
301 | |
|
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
302 | if (gaim_account_get_remember_password(account)) { |
| 8136 | 303 | combo_changed(NULL, account, NULL); |
| 4489 | 304 | gtk_widget_grab_focus(button); |
| 305 | } else { | |
| 306 | gtk_widget_grab_focus(pass); | |
| 307 | } | |
| 308 | } else { | |
| 8136 | 309 | gaim_gtk_accounts_window_show(); |
| 310 | gtk_widget_grab_focus(button); | |
| 4489 | 311 | } |
| 312 | ||
| 313 | /* And raise the curtain! */ | |
| 314 | gtk_widget_show_all(mainwindow); | |
| 315 | ||
| 316 | } | |
| 317 | ||
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
318 | static void |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
319 | clean_pid(void) |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
320 | { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
321 | #ifndef _WIN32 |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
322 | int status; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
323 | pid_t pid; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
324 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
325 | do { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
326 | pid = waitpid(-1, &status, WNOHANG); |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
327 | } while (pid != 0 && pid != (pid_t)-1); |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
328 | if(pid == (pid_t)-1 && errno != ECHILD) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
329 | char errmsg[BUFSIZ]; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
330 | snprintf(errmsg, BUFSIZ, "Warning: waitpid() returned %d", pid); |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
331 | perror(errmsg); |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
332 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
333 | #endif |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
334 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7102
diff
changeset
|
335 | |
| 4489 | 336 | #if HAVE_SIGNAL_H |
| 337 | void sighandler(int sig) | |
| 338 | { | |
| 339 | switch (sig) { | |
| 340 | case SIGHUP: | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
341 | gaim_debug(GAIM_DEBUG_WARNING, "sighandler", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
342 | "Caught signal %d\n", sig); |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
343 | gaim_connections_disconnect_all(); |
| 4489 | 344 | break; |
| 345 | case SIGSEGV: | |
| 346 | #ifndef DEBUG | |
| 347 | fprintf(stderr, "Gaim has segfaulted and attempted to dump a core file.\n" | |
| 348 | "This is a bug in the software and has happened through\n" | |
| 349 | "no fault of your own.\n\n" | |
| 350 | "It is possible that this bug is already fixed in CVS.\n" | |
| 5747 | 351 | "If you can reproduce the crash, please notify the gaim\n" |
| 352 | "maintainers by reporting a bug at\n" | |
| 6383 | 353 | GAIM_WEBSITE "bug.php\n\n" |
| 4489 | 354 | "Please make sure to specify what you were doing at the time,\n" |
| 355 | "and post the backtrace from the core file. If you do not know\n" | |
| 356 | "how to get the backtrace, please get instructions at\n" | |
| 6383 | 357 | GAIM_WEBSITE "gdb.php. If you need further\n" |
| 4489 | 358 | "assistance, please IM either RobFlynn or SeanEgn and\n" |
| 359 | "they can help you.\n"); | |
| 360 | #else | |
| 8452 | 361 | fprintf(stderr, "Hi, user. We need to talk.\n" |
| 362 | "I think something's gone wrong here. It's probably my fault.\n" | |
| 363 | "No, really, it's not you... it's me... no no no, I think we get along well\n" | |
| 364 | "it's just that.... well, I want to see other people. I... what?!? NO! I haven't\n" | |
| 365 | "been cheating on you!! How many times do you want me to tell you?! And for the\n" | |
| 366 | "last time, it's just a rash!\n"); | |
| 4703 | 367 | /*g_on_error_query (g_get_prgname());*/ |
| 4489 | 368 | #endif |
| 369 | abort(); | |
| 370 | break; | |
| 371 | case SIGCHLD: | |
| 372 | clean_pid(); | |
| 373 | #if HAVE_SIGNAL_H | |
| 374 | signal(SIGCHLD, sighandler); /* restore signal catching on this one! */ | |
| 375 | #endif | |
| 376 | break; | |
| 377 | default: | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
378 | gaim_debug(GAIM_DEBUG_WARNING, "sighandler", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
379 | "Caught signal %d\n", sig); |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
380 | gaim_connections_disconnect_all(); |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
381 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
382 | gaim_plugins_unload_all(); |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
383 | |
| 4489 | 384 | if (gtk_main_level()) |
| 385 | gtk_main_quit(); | |
| 386 | exit(0); | |
| 387 | } | |
| 388 | } | |
| 389 | #endif | |
| 390 | ||
| 391 | static int ui_main() | |
| 392 | { | |
| 393 | #ifndef _WIN32 | |
| 394 | GList *icons = NULL; | |
| 395 | GdkPixbuf *icon = NULL; | |
| 396 | char *icon_path; | |
| 397 | #endif | |
|
4978
a9b21b98aa1f
[gaim-migrate @ 5313]
Robert McQueen <robot101@debian.org>
parents:
4957
diff
changeset
|
398 | |
| 4489 | 399 | if (current_smiley_theme == NULL) { |
| 400 | smiley_theme_probe(); | |
| 401 | if (smiley_themes) { | |
| 402 | struct smiley_theme *smile = smiley_themes->data; | |
| 403 | load_smiley_theme(smile->path, TRUE); | |
| 404 | } | |
| 405 | } | |
| 406 | ||
| 5422 | 407 | gaim_gtk_blist_setup_sort_methods(); |
| 4489 | 408 | |
| 409 | #ifndef _WIN32 | |
| 410 | /* use the nice PNG icon for all the windows */ | |
|
5024
3b5412e4b483
[gaim-migrate @ 5361]
Robert McQueen <robot101@debian.org>
parents:
4978
diff
changeset
|
411 | icon_path = g_build_filename(DATADIR, "pixmaps", "gaim", "icons", "online.png", NULL); |
| 4489 | 412 | icon = gdk_pixbuf_new_from_file(icon_path, NULL); |
| 413 | g_free(icon_path); | |
| 414 | if (icon) { | |
| 415 | icons = g_list_append(icons,icon); | |
| 416 | gtk_window_set_default_icon_list(icons); | |
| 417 | g_object_unref(G_OBJECT(icon)); | |
|
4978
a9b21b98aa1f
[gaim-migrate @ 5313]
Robert McQueen <robot101@debian.org>
parents:
4957
diff
changeset
|
418 | g_list_free(icons); |
| 4489 | 419 | } else { |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
420 | gaim_debug(GAIM_DEBUG_ERROR, "ui_main", |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
421 | "Failed to load the default window icon!\n"); |
| 4489 | 422 | } |
| 423 | #endif | |
|
4978
a9b21b98aa1f
[gaim-migrate @ 5313]
Robert McQueen <robot101@debian.org>
parents:
4957
diff
changeset
|
424 | |
| 4489 | 425 | return 0; |
| 426 | } | |
| 427 | ||
|
9971
8291bafb0025
[gaim-migrate @ 10882]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
428 | static void set_first_user(const char *name) |
| 4489 | 429 | { |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
430 | GaimAccount *account; |
| 4489 | 431 | |
| 7132 | 432 | account = gaim_accounts_find(name, NULL); |
| 4489 | 433 | |
|
5580
a5a3e6dfb409
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5573
diff
changeset
|
434 | /* Place it as the first user. */ |
|
9971
8291bafb0025
[gaim-migrate @ 10882]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
435 | if (account != NULL) |
|
8291bafb0025
[gaim-migrate @ 10882]
Daniel Atallah <datallah@pidgin.im>
parents:
9944
diff
changeset
|
436 | gaim_accounts_reorder(account, 0); |
| 4489 | 437 | } |
| 438 | ||
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
439 | static void |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
440 | debug_init(void) |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
441 | { |
|
7035
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7015
diff
changeset
|
442 | gaim_debug_set_ui_ops(gaim_gtk_debug_get_ui_ops()); |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
443 | gaim_gtk_debug_init(); |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
444 | } |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
445 | |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
446 | static void |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
447 | gaim_gtk_ui_init(void) |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
448 | { |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
449 | /* Set the UI operation structures. */ |
|
7015
bea9111282b3
[gaim-migrate @ 7578]
Christian Hammond <chipx86@chipx86.com>
parents:
6890
diff
changeset
|
450 | gaim_accounts_set_ui_ops(gaim_gtk_accounts_get_ui_ops()); |
|
7035
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7015
diff
changeset
|
451 | gaim_conversations_set_win_ui_ops(gaim_gtk_conversations_get_win_ui_ops()); |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7015
diff
changeset
|
452 | gaim_xfers_set_ui_ops(gaim_gtk_xfers_get_ui_ops()); |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7015
diff
changeset
|
453 | gaim_blist_set_ui_ops(gaim_gtk_blist_get_ui_ops()); |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7015
diff
changeset
|
454 | gaim_notify_set_ui_ops(gaim_gtk_notify_get_ui_ops()); |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7015
diff
changeset
|
455 | gaim_privacy_set_ui_ops(gaim_gtk_privacy_get_ui_ops()); |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7015
diff
changeset
|
456 | gaim_request_set_ui_ops(gaim_gtk_request_get_ui_ops()); |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7015
diff
changeset
|
457 | gaim_sound_set_ui_ops(gaim_gtk_sound_get_ui_ops()); |
|
7538
b20dbe9222e2
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7521
diff
changeset
|
458 | gaim_connections_set_ui_ops(gaim_gtk_connections_get_ui_ops()); |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
459 | |
|
7538
b20dbe9222e2
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7521
diff
changeset
|
460 | gaim_gtk_stock_init(); |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
461 | gaim_gtk_prefs_init(); |
| 9609 | 462 | gaim_gtk_account_init(); |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
463 | gaim_gtk_blist_init(); |
|
7035
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7015
diff
changeset
|
464 | gaim_gtk_conversations_init(); |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
465 | gaim_gtk_pounces_init(); |
|
6371
e92b66ee5518
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6313
diff
changeset
|
466 | gaim_gtk_privacy_init(); |
|
6263
6fec763a314c
[gaim-migrate @ 6760]
Christian Hammond <chipx86@chipx86.com>
parents:
6231
diff
changeset
|
467 | gaim_gtk_xfers_init(); |
| 8113 | 468 | gaim_gtk_roomlist_init(); |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
469 | } |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
470 | |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
471 | static void |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
472 | gaim_gtk_quit(void) |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
473 | { |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
474 | /* XXX? */ |
|
9594
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
475 | /* YYY is there an XXX here? */ |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
476 | |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
477 | /* captain's log, stardate... */ |
|
7475
987384816492
[gaim-migrate @ 8088]
Mark Doliner <markdoliner@pidgin.im>
parents:
7438
diff
changeset
|
478 | /* LOG system_log(log_quit, NULL, NULL, OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); */ |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
479 | |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
480 | #ifdef USE_SM |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
481 | /* unplug */ |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
482 | session_end(); |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
483 | #endif |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
484 | |
|
7966
7f1fff2ed1b7
[gaim-migrate @ 8643]
Christian Hammond <chipx86@chipx86.com>
parents:
7956
diff
changeset
|
485 | /* Save the plugins we have loaded for next time. */ |
|
7f1fff2ed1b7
[gaim-migrate @ 8643]
Christian Hammond <chipx86@chipx86.com>
parents:
7956
diff
changeset
|
486 | gaim_gtk_plugins_save(); |
|
7f1fff2ed1b7
[gaim-migrate @ 8643]
Christian Hammond <chipx86@chipx86.com>
parents:
7956
diff
changeset
|
487 | |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
488 | /* and end it all... */ |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
489 | gtk_main_quit(); |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
490 | } |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
491 | |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
492 | static GaimCoreUiOps core_ops = |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
493 | { |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
494 | gaim_gtk_prefs_init, |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
495 | debug_init, |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
496 | gaim_gtk_ui_init, |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
497 | gaim_gtk_quit |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
498 | }; |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
499 | |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
500 | static GaimCoreUiOps * |
|
7035
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7015
diff
changeset
|
501 | gaim_gtk_core_get_ui_ops(void) |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
502 | { |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
503 | return &core_ops; |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
504 | } |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
505 | |
|
7102
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
506 | static void |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
507 | show_usage(int mode, const char *name) |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
508 | { |
|
7724
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
509 | char *text=NULL; |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
510 | |
|
7102
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
511 | switch (mode) { |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
512 | case 0: /* full help text */ |
|
7724
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
513 | text=g_strdup_printf(_("Gaim %s\n" |
|
7102
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
514 | "Usage: %s [OPTION]...\n\n" |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
515 | " -a, --acct display account editor window\n" |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
516 | " -w, --away[=MESG] make away on signon (optional argument MESG specifies\n" |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
517 | " name of away message to use)\n" |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
518 | " -l, --login[=NAME] automatically login (optional argument NAME specifies\n" |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
519 | " account(s) to use, seperated by commas)\n" |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
520 | " -n, --loginwin don't automatically login; show login window\n" |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
521 | " -u, --user=NAME use account NAME\n" |
| 8596 | 522 | " -c, --config=DIR use DIR for config files\n" |
|
7102
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
523 | " -d, --debug print debugging messages to stdout\n" |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
524 | " -v, --version display the current version and exit\n" |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
525 | " -h, --help display this help and exit\n"), VERSION, name); |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
526 | break; |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
527 | case 1: /* short message */ |
|
7724
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
528 | text=g_strdup_printf(_("Gaim %s. Try `%s -h' for more information.\n"), VERSION, name); |
|
7102
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
529 | break; |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
530 | } |
|
7724
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
531 | |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
532 | if(text) { |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
533 | char *text_conv; |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
534 | GError *error=NULL; |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
535 | |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
536 | /* tries to convert 'text' to users locale */ |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
537 | text_conv=g_locale_from_utf8(text,-1,NULL,NULL,&error); |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
538 | if(text_conv) { |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
539 | puts(text_conv); |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
540 | g_free(text_conv); |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
541 | } |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
542 | /* use 'text' as a fallback */ |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
543 | else { |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
544 | g_warning("%s\n", error->message); |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
545 | g_error_free(error); |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
546 | puts(text); |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
547 | } |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
548 | g_free(text); |
|
c03cfedb10f3
[gaim-migrate @ 8369]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7600
diff
changeset
|
549 | } |
|
7102
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
550 | } |
|
c7d1679cf704
[gaim-migrate @ 7667]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
551 | |
|
7168
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
552 | #ifdef HAVE_STARTUP_NOTIFICATION |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
553 | static void |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
554 | sn_error_trap_push(SnDisplay *display, Display *xdisplay) |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
555 | { |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
556 | gdk_error_trap_push(); |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
557 | } |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
558 | |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
559 | static void |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
560 | sn_error_trap_pop(SnDisplay *display, Display *xdisplay) |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
561 | { |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
562 | gdk_error_trap_pop(); |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
563 | } |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
564 | |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
565 | static void |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
566 | startup_notification_complete(void) |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
567 | { |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
568 | Display *xdisplay; |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
569 | |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
570 | xdisplay = GDK_DISPLAY(); |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
571 | sn_display = sn_display_new(xdisplay, |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
572 | sn_error_trap_push, |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
573 | sn_error_trap_pop); |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
574 | sn_context = |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
575 | sn_launchee_context_new_from_environment(sn_display, |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
576 | DefaultScreen(xdisplay)); |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
577 | |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
578 | if (sn_context != NULL) |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
579 | { |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
580 | sn_launchee_context_complete(sn_context); |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
581 | sn_launchee_context_unref(sn_context); |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
582 | |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
583 | sn_display_unref(sn_display); |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
584 | } |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
585 | } |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
586 | #endif /* HAVE_STARTUP_NOTIFICATION */ |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
587 | |
| 4489 | 588 | /* FUCKING GET ME A TOWEL! */ |
| 589 | #ifdef _WIN32 | |
|
6890
7833463f1b73
[gaim-migrate @ 7436]
Herman Bloggs <herman@bluedigits.com>
parents:
6816
diff
changeset
|
590 | int gaim_main(HINSTANCE hint, int argc, char *argv[]) |
| 4489 | 591 | #else |
| 592 | int main(int argc, char *argv[]) | |
| 593 | #endif | |
| 594 | { | |
| 595 | int opt_acct = 0, opt_help = 0, opt_version = 0, opt_login = 0, opt_nologin = 0, dologin_ret = -1; | |
| 596 | char *opt_user_arg = NULL, *opt_login_arg = NULL; | |
| 8601 | 597 | char *opt_session_arg = NULL, *opt_config_dir_arg = NULL; |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
598 | char *plugin_search_paths[3]; |
| 4489 | 599 | #if HAVE_SIGNAL_H |
| 600 | int sig_indx; /* for setting up signal catching */ | |
| 601 | sigset_t sigset; | |
| 602 | void (*prev_sig_disp)(); | |
| 603 | #endif | |
| 604 | int opt, opt_user = 0; | |
| 605 | int i; | |
|
7438
5a0c68e306b8
[gaim-migrate @ 8043]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7431
diff
changeset
|
606 | gboolean gui_check; |
|
9594
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
607 | gchar *gaimrc, *accountsxml; |
| 4489 | 608 | |
| 609 | struct option long_options[] = { | |
| 610 | {"acct", no_argument, NULL, 'a'}, | |
| 611 | /*{"away", optional_argument, NULL, 'w'}, */ | |
| 612 | {"help", no_argument, NULL, 'h'}, | |
| 613 | /*{"login", optional_argument, NULL, 'l'}, */ | |
| 614 | {"loginwin", no_argument, NULL, 'n'}, | |
| 615 | {"user", required_argument, NULL, 'u'}, | |
| 8596 | 616 | {"config", required_argument, NULL, 'c'}, |
| 4489 | 617 | {"debug", no_argument, NULL, 'd'}, |
| 618 | {"version", no_argument, NULL, 'v'}, | |
| 619 | {"session", required_argument, NULL, 's'}, | |
| 620 | {0, 0, 0, 0} | |
| 621 | }; | |
| 622 | ||
| 623 | #ifdef DEBUG | |
| 624 | opt_debug = 1; | |
| 625 | #endif | |
| 626 | #ifdef ENABLE_NLS | |
| 627 | bindtextdomain(PACKAGE, LOCALEDIR); | |
| 628 | bind_textdomain_codeset(PACKAGE, "UTF-8"); | |
| 629 | textdomain(PACKAGE); | |
| 630 | #endif | |
| 631 | ||
| 632 | #if HAVE_SIGNAL_H | |
| 633 | /* Let's not violate any PLA's!!!! */ | |
| 634 | /* jseymour: whatever the fsck that means */ | |
| 635 | /* Robot101: for some reason things like gdm like to block * | |
| 636 | * useful signals like SIGCHLD, so we unblock all the ones we * | |
| 637 | * declare a handler for. thanks JSeymour and Vann. */ | |
| 638 | if (sigemptyset(&sigset)) { | |
| 639 | char errmsg[BUFSIZ]; | |
|
5435
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5422
diff
changeset
|
640 | snprintf(errmsg, BUFSIZ, "Warning: couldn't initialise empty signal set"); |
| 4489 | 641 | perror(errmsg); |
| 642 | } | |
| 643 | for(sig_indx = 0; catch_sig_list[sig_indx] != -1; ++sig_indx) { | |
| 644 | if((prev_sig_disp = signal(catch_sig_list[sig_indx], sighandler)) == SIG_ERR) { | |
| 645 | char errmsg[BUFSIZ]; | |
|
5435
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5422
diff
changeset
|
646 | snprintf(errmsg, BUFSIZ, "Warning: couldn't set signal %d for catching", |
| 4489 | 647 | catch_sig_list[sig_indx]); |
| 648 | perror(errmsg); | |
| 649 | } | |
| 650 | if(sigaddset(&sigset, catch_sig_list[sig_indx])) { | |
| 651 | char errmsg[BUFSIZ]; | |
|
5435
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5422
diff
changeset
|
652 | snprintf(errmsg, BUFSIZ, "Warning: couldn't include signal %d for unblocking", |
| 4489 | 653 | catch_sig_list[sig_indx]); |
| 654 | perror(errmsg); | |
| 655 | } | |
| 656 | } | |
| 657 | for(sig_indx = 0; ignore_sig_list[sig_indx] != -1; ++sig_indx) { | |
| 658 | if((prev_sig_disp = signal(ignore_sig_list[sig_indx], SIG_IGN)) == SIG_ERR) { | |
| 659 | char errmsg[BUFSIZ]; | |
|
5435
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5422
diff
changeset
|
660 | snprintf(errmsg, BUFSIZ, "Warning: couldn't set signal %d to ignore", |
| 4489 | 661 | ignore_sig_list[sig_indx]); |
| 662 | perror(errmsg); | |
| 663 | } | |
| 664 | } | |
| 665 | ||
| 666 | if (sigprocmask(SIG_UNBLOCK, &sigset, NULL)) { | |
| 667 | char errmsg[BUFSIZ]; | |
|
5435
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5422
diff
changeset
|
668 | snprintf(errmsg, BUFSIZ, "Warning: couldn't unblock signals"); |
| 4489 | 669 | perror(errmsg); |
| 670 | } | |
| 671 | #endif | |
| 672 | ||
| 673 | for (i = 0; i < argc; i++) { | |
| 674 | /* --login option */ | |
| 675 | if (strstr(argv[i], "--l") == argv[i]) { | |
| 676 | char *equals; | |
| 677 | opt_login = 1; | |
| 678 | if ((equals = strchr(argv[i], '=')) != NULL) { | |
| 679 | /* --login=NAME */ | |
| 680 | opt_login_arg = g_strdup(equals + 1); | |
| 681 | if (strlen(opt_login_arg) == 0) { | |
| 682 | g_free(opt_login_arg); | |
| 683 | opt_login_arg = NULL; | |
| 684 | } | |
| 685 | } else if (i + 1 < argc && argv[i + 1][0] != '-') { | |
| 686 | /* --login NAME */ | |
| 687 | opt_login_arg = g_strdup(argv[i + 1]); | |
| 688 | strcpy(argv[i + 1], " "); | |
| 689 | } | |
| 690 | strcpy(argv[i], " "); | |
| 691 | } | |
| 692 | /* -l option */ | |
| 693 | else if (strstr(argv[i], "-l") == argv[i]) { | |
| 694 | opt_login = 1; | |
| 695 | if (strlen(argv[i]) > 2) { | |
| 696 | /* -lNAME */ | |
| 697 | opt_login_arg = g_strdup(argv[i] + 2); | |
| 698 | } else if (i + 1 < argc && argv[i + 1][0] != '-') { | |
| 699 | /* -l NAME */ | |
| 700 | opt_login_arg = g_strdup(argv[i + 1]); | |
| 701 | strcpy(argv[i + 1], " "); | |
| 702 | } | |
| 703 | strcpy(argv[i], " "); | |
| 704 | } | |
| 705 | /* --away option */ | |
| 706 | else if (strstr(argv[i], "--aw") == argv[i]) { | |
| 707 | char *equals; | |
| 708 | opt_away = 1; | |
| 709 | if ((equals = strchr(argv[i], '=')) != NULL) { | |
| 710 | /* --away=MESG */ | |
| 711 | opt_away_arg = g_strdup(equals + 1); | |
| 712 | if (strlen(opt_away_arg) == 0) { | |
| 713 | g_free(opt_away_arg); | |
| 714 | opt_away_arg = NULL; | |
| 715 | } | |
| 716 | } else if (i + 1 < argc && argv[i + 1][0] != '-') { | |
| 717 | /* --away MESG */ | |
| 718 | opt_away_arg = g_strdup(argv[i + 1]); | |
| 719 | strcpy(argv[i + 1], " "); | |
| 720 | } | |
| 721 | strcpy(argv[i], " "); | |
| 722 | } | |
| 723 | /* -w option */ | |
| 724 | else if (strstr(argv[i], "-w") == argv[i]) { | |
| 725 | opt_away = 1; | |
| 726 | if (strlen(argv[i]) > 2) { | |
| 727 | /* -wMESG */ | |
| 728 | opt_away_arg = g_strdup(argv[i] + 2); | |
| 729 | } else if (i + 1 < argc && argv[i + 1][0] != '-') { | |
| 730 | /* -w MESG */ | |
| 731 | opt_away_arg = g_strdup(argv[i + 1]); | |
| 732 | strcpy(argv[i + 1], " "); | |
| 733 | } | |
| 734 | strcpy(argv[i], " "); | |
| 735 | } | |
| 736 | } | |
| 737 | /* | |
| 738 | if (opt_login) { | |
| 739 | printf ("--login given with arg %s\n", | |
| 740 | opt_login_arg ? opt_login_arg : "NULL"); | |
| 741 | exit(0); | |
| 742 | } | |
| 743 | */ | |
| 744 | ||
|
7538
b20dbe9222e2
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7521
diff
changeset
|
745 | gui_check = gtk_init_check(&argc, &argv); |
| 4489 | 746 | |
| 747 | /* scan command-line options */ | |
| 748 | opterr = 1; | |
| 749 | while ((opt = getopt_long(argc, argv, | |
| 750 | #ifndef _WIN32 | |
| 8596 | 751 | "adhu:c:vns:", |
| 4489 | 752 | #else |
| 8596 | 753 | "adhu:c:vn", |
| 4489 | 754 | #endif |
| 755 | long_options, NULL)) != -1) { | |
| 756 | switch (opt) { | |
| 757 | case 'u': /* set user */ | |
| 758 | opt_user = 1; | |
| 759 | opt_user_arg = g_strdup(optarg); | |
| 760 | break; | |
| 761 | case 'a': /* account editor */ | |
| 762 | opt_acct = 1; | |
| 763 | break; | |
| 764 | case 'd': /* debug */ | |
| 765 | opt_debug = 1; | |
| 766 | break; | |
| 8596 | 767 | case 'c': /* use specified config dir */ |
| 768 | set_gaim_user_dir(optarg); | |
| 8601 | 769 | opt_config_dir_arg = g_strdup(optarg); |
| 4489 | 770 | break; |
| 771 | case 's': /* use existing session ID */ | |
| 772 | opt_session_arg = g_strdup(optarg); | |
| 773 | break; | |
| 774 | case 'v': /* version */ | |
| 775 | opt_version = 1; | |
| 776 | break; | |
| 777 | case 'h': /* help */ | |
| 778 | opt_help = 1; | |
| 779 | break; | |
| 780 | case 'n': /* don't autologin */ | |
| 781 | opt_nologin = 1; | |
| 782 | break; | |
| 783 | case '?': | |
| 784 | default: | |
| 785 | show_usage(1, argv[0]); | |
| 786 | return 0; | |
| 787 | break; | |
| 788 | } | |
| 789 | } | |
| 790 | ||
| 791 | /* show help message */ | |
| 792 | if (opt_help) { | |
| 793 | show_usage(0, argv[0]); | |
| 794 | return 0; | |
| 795 | } | |
| 796 | /* show version message */ | |
| 797 | if (opt_version) { | |
| 798 | printf("Gaim %s\n",VERSION); | |
| 799 | return 0; | |
| 800 | } | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
801 | |
|
7538
b20dbe9222e2
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7521
diff
changeset
|
802 | if (!gui_check) { |
|
b20dbe9222e2
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7521
diff
changeset
|
803 | char *display = gdk_get_display(); |
|
b20dbe9222e2
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7521
diff
changeset
|
804 | |
|
b20dbe9222e2
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7521
diff
changeset
|
805 | g_warning("cannot open display: %s", display ? display : "unset"); |
|
b20dbe9222e2
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7521
diff
changeset
|
806 | g_free(display); |
|
b20dbe9222e2
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7521
diff
changeset
|
807 | |
|
b20dbe9222e2
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7521
diff
changeset
|
808 | return 1; |
|
7438
5a0c68e306b8
[gaim-migrate @ 8043]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
7431
diff
changeset
|
809 | } |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
810 | |
|
7521
b07353bb8707
[gaim-migrate @ 8134]
Herman Bloggs <herman@bluedigits.com>
parents:
7501
diff
changeset
|
811 | #ifdef _WIN32 |
|
b07353bb8707
[gaim-migrate @ 8134]
Herman Bloggs <herman@bluedigits.com>
parents:
7501
diff
changeset
|
812 | wgaim_init(hint); |
|
b07353bb8707
[gaim-migrate @ 8134]
Herman Bloggs <herman@bluedigits.com>
parents:
7501
diff
changeset
|
813 | #endif |
|
7035
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7015
diff
changeset
|
814 | gaim_core_set_ui_ops(gaim_gtk_core_get_ui_ops()); |
| 8273 | 815 | gaim_eventloop_set_ui_ops(gaim_gtk_eventloop_get_ui_ops()); |
|
6179
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
816 | |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
817 | if (!gaim_core_init(GAIM_GTK_UI)) { |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
818 | fprintf(stderr, |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
819 | "Initialization of the Gaim core failed. Dumping core.\n" |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
820 | "Please report this!\n"); |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
821 | abort(); |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
822 | } |
|
4df73df94250
[gaim-migrate @ 6664]
Christian Hammond <chipx86@chipx86.com>
parents:
6119
diff
changeset
|
823 | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
824 | plugin_search_paths[0] = LIBDIR; |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
825 | plugin_search_paths[1] = gaim_user_dir(); |
|
7600
279abfe7721f
[gaim-migrate @ 8222]
Herman Bloggs <herman@bluedigits.com>
parents:
7538
diff
changeset
|
826 | plugin_search_paths[2] = g_build_filename(gaim_user_dir(), "plugins", NULL); |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
827 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
828 | gaim_plugins_set_search_paths(sizeof(plugin_search_paths) / |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
829 | sizeof(*plugin_search_paths), |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
830 | plugin_search_paths); |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
831 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
832 | g_free(plugin_search_paths[2]); |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
833 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
834 | gaim_plugins_probe(NULL); |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5032
diff
changeset
|
835 | |
|
9594
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
836 | /* XXX - Remove this check. Maybe in 2005. --KingAnt, 25 Jul 2004 */ |
|
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
837 | gaimrc = g_build_filename(gaim_home_dir(), ".gaimrc", NULL); |
|
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
838 | accountsxml = g_build_filename(gaim_user_dir(), "accounts.xml", NULL); |
|
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
839 | if (g_file_test(gaimrc, G_FILE_TEST_EXISTS) && |
|
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
840 | !g_file_test(accountsxml, G_FILE_TEST_EXISTS)) { |
|
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
841 | gaim_notify_error(NULL, NULL, _("Unable to load preferences"), _("Gaim was not able to load your preferences because they are stored in an old format that is no longer used. Please reconfigure your settings using the Preferences window.")); |
|
5665
0115e8068f51
[gaim-migrate @ 6081]
Christian Hammond <chipx86@chipx86.com>
parents:
5642
diff
changeset
|
842 | } |
|
9594
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
843 | g_free(gaimrc); |
|
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
844 | g_free(accountsxml); |
|
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
845 | |
|
7a1f902b9494
[gaim-migrate @ 10437]
Mark Doliner <markdoliner@pidgin.im>
parents:
9300
diff
changeset
|
846 | gaim_accounts_load(); |
|
5665
0115e8068f51
[gaim-migrate @ 6081]
Christian Hammond <chipx86@chipx86.com>
parents:
5642
diff
changeset
|
847 | |
| 8839 | 848 | gaim_set_blist(gaim_blist_new()); |
| 849 | gaim_blist_load(); | |
| 850 | ||
| 851 | gaim_prefs_load(); | |
| 852 | ||
|
8900
14f4b7ae958e
[gaim-migrate @ 9669]
Mark Doliner <markdoliner@pidgin.im>
parents:
8878
diff
changeset
|
853 | gaim_prefs_update_old(); |
|
8905
cedfa637389f
[gaim-migrate @ 9674]
Mark Doliner <markdoliner@pidgin.im>
parents:
8900
diff
changeset
|
854 | gaim_gtk_prefs_update_old(); |
| 6693 | 855 | |
| 5838 | 856 | /* load plugins we had when we quit */ |
|
5949
bb7cbf02dda9
[gaim-migrate @ 6393]
Christian Hammond <chipx86@chipx86.com>
parents:
5943
diff
changeset
|
857 | gaim_plugins_load_saved("/gaim/gtk/plugins/loaded"); |
|
5665
0115e8068f51
[gaim-migrate @ 6081]
Christian Hammond <chipx86@chipx86.com>
parents:
5642
diff
changeset
|
858 | |
|
5866
5caedbcd1bb7
[gaim-migrate @ 6297]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
859 | gaim_pounces_load(); |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9901
diff
changeset
|
860 | gaim_statuses_load(); |
|
5581
646cda748437
[gaim-migrate @ 5985]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
861 | |
| 4489 | 862 | ui_main(); |
| 863 | ||
| 864 | #ifdef USE_SM | |
| 8601 | 865 | session_init(argv[0], opt_session_arg, opt_config_dir_arg); |
| 4489 | 866 | #endif |
| 867 | if (opt_session_arg != NULL) { | |
| 868 | g_free(opt_session_arg); | |
| 869 | opt_session_arg = NULL; | |
| 8601 | 870 | } |
| 871 | ||
| 872 | if (opt_config_dir_arg != NULL) { | |
| 873 | g_free(opt_config_dir_arg); | |
| 874 | opt_config_dir_arg = NULL; | |
| 875 | } | |
| 4489 | 876 | |
| 877 | /* set the default username */ | |
| 878 | if (opt_user_arg != NULL) { | |
| 879 | set_first_user(opt_user_arg); | |
| 880 | g_free(opt_user_arg); | |
| 881 | opt_user_arg = NULL; | |
| 882 | } | |
| 883 | ||
| 5535 | 884 | if (gaim_prefs_get_bool("/gaim/gtk/debug/enabled")) |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
885 | gaim_gtk_debug_window_show(); |
| 4489 | 886 | |
| 887 | /* deal with --login */ | |
| 888 | if (opt_login) { | |
| 889 | dologin_ret = dologin_named(opt_login_arg); | |
| 890 | if (opt_login_arg != NULL) { | |
| 891 | g_free(opt_login_arg); | |
| 892 | opt_login_arg = NULL; | |
| 893 | } | |
| 894 | } | |
| 895 | ||
|
5859
e9e5fb0bbfe9
[gaim-migrate @ 6290]
Christian Hammond <chipx86@chipx86.com>
parents:
5858
diff
changeset
|
896 | if (!opt_acct && !opt_nologin) |
|
5780
c2388268514e
[gaim-migrate @ 6205]
Christian Hammond <chipx86@chipx86.com>
parents:
5766
diff
changeset
|
897 | gaim_accounts_auto_login(GAIM_GTK_UI); |
| 4489 | 898 | |
| 899 | if (opt_acct) { | |
|
6119
5b4c66789a8c
[gaim-migrate @ 6588]
Christian Hammond <chipx86@chipx86.com>
parents:
6109
diff
changeset
|
900 | gaim_gtk_accounts_window_show(); |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5549
diff
changeset
|
901 | } else if ((dologin_ret == -1) && !gaim_connections_get_all()) |
| 4489 | 902 | show_login(); |
| 903 | ||
|
7168
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
904 | #ifdef HAVE_STARTUP_NOTIFICATION |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
905 | startup_notification_complete(); |
|
be126508bdb8
[gaim-migrate @ 7735]
Christian Hammond <chipx86@chipx86.com>
parents:
7150
diff
changeset
|
906 | #endif |
| 4489 | 907 | gtk_main(); |
| 5684 | 908 | gaim_sound_shutdown(); |
| 4489 | 909 | #ifdef _WIN32 |
| 910 | wgaim_cleanup(); | |
| 911 | #endif | |
| 9300 | 912 | |
| 913 | ||
| 4489 | 914 | return 0; |
| 915 | ||
| 916 | } |