| 124 gaim_gtk_sound_set_login_mute(TRUE); |
122 gaim_gtk_sound_set_login_mute(TRUE); |
| 125 snd_tmout = gaim_timeout_add(10000, sound_timeout, NULL); |
123 snd_tmout = gaim_timeout_add(10000, sound_timeout, NULL); |
| 126 } |
124 } |
| 127 } |
125 } |
| 128 |
126 |
| 129 static gboolean domiddleclick(GtkWidget *w, GdkEventButton *event, gpointer null) |
|
| 130 { |
|
| 131 if (event->button != 2) |
|
| 132 return FALSE; |
|
| 133 |
|
| 134 gaim_accounts_auto_login(GAIM_GTK_UI); |
|
| 135 |
|
| 136 return TRUE; |
|
| 137 } |
|
| 138 |
|
| 139 static void dologin(GtkWidget *widget, GtkWidget *w) |
|
| 140 { |
|
| 141 GaimAccount *account; |
|
| 142 GtkWidget *item; |
|
| 143 const char *password = gtk_entry_get_text(GTK_ENTRY(pass)); |
|
| 144 |
|
| 145 item = gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(GTK_OPTION_MENU(name)))); |
|
| 146 account = g_object_get_data(G_OBJECT(item), "account"); |
|
| 147 |
|
| 148 if (!account) { |
|
| 149 gaim_notify_error(NULL, NULL, _("Please create an account."), NULL); |
|
| 150 return; |
|
| 151 } |
|
| 152 |
|
| 153 gaim_account_set_password(account, (*password != '\0') ? password : NULL); |
|
| 154 |
|
| 155 gaim_account_connect(account); |
|
| 156 } |
|
| 157 |
|
| 158 /* <name> is a comma-separated list of names, or NULL |
|
| 159 if NULL and there is at least one user defined in .gaimrc, try to login. |
|
| 160 if not NULL, parse <name> into separate strings, look up each one in |
|
| 161 .gaimrc and, if it's there, try to login. |
|
| 162 returns: 0 if successful |
|
| 163 -1 if no user was found that had a saved password |
|
| 164 */ |
|
| 165 static int dologin_named(char *name) |
127 static int dologin_named(char *name) |
| 166 { |
128 { |
| 167 GaimAccount *account; |
129 GaimAccount *account; |
| 168 char **names, **n; |
130 char **names, **n; |
| 169 int retval = -1; |
131 int retval = -1; |
| 183 retval = 0; |
145 retval = 0; |
| 184 gaim_account_connect(account); |
146 gaim_account_connect(account); |
| 185 } |
147 } |
| 186 |
148 |
| 187 return retval; |
149 return retval; |
| 188 } |
|
| 189 |
|
| 190 |
|
| 191 static void combo_changed(GtkWidget *menu, GaimAccount *account, gpointer data) |
|
| 192 { |
|
| 193 if (account && gaim_account_get_remember_password(account)) { |
|
| 194 gtk_entry_set_text(GTK_ENTRY(pass), account->password); |
|
| 195 } else { |
|
| 196 gtk_entry_set_text(GTK_ENTRY(pass), ""); |
|
| 197 } |
|
| 198 } |
|
| 199 |
|
| 200 |
|
| 201 static void login_window_closed(GtkWidget *w, GdkEvent *ev, gpointer d) |
|
| 202 { |
|
| 203 if(docklet_count) { |
|
| 204 #ifdef _WIN32 |
|
| 205 wgaim_systray_minimize(mainwindow); |
|
| 206 #endif |
|
| 207 gtk_widget_hide(mainwindow); |
|
| 208 } else |
|
| 209 gaim_core_quit(); |
|
| 210 } |
|
| 211 |
|
| 212 void show_login() |
|
| 213 { |
|
| 214 GtkWidget *image; |
|
| 215 GtkWidget *vbox; |
|
| 216 GtkWidget *button; |
|
| 217 GtkWidget *hbox; |
|
| 218 GtkWidget *label; |
|
| 219 GtkWidget *vbox2; |
|
| 220 |
|
| 221 /* Do we already have a main window opened? If so, bring it back, baby... ribs... yeah */ |
|
| 222 if (mainwindow) { |
|
| 223 gtk_window_present(GTK_WINDOW(mainwindow)); |
|
| 224 return; |
|
| 225 } |
|
| 226 |
|
| 227 mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
|
| 228 |
|
| 229 gtk_window_set_role(GTK_WINDOW(mainwindow), "login"); |
|
| 230 gtk_window_set_resizable(GTK_WINDOW(mainwindow), FALSE); |
|
| 231 gtk_window_set_title(GTK_WINDOW(mainwindow), _("Login")); |
|
| 232 gtk_container_set_border_width(GTK_CONTAINER(mainwindow), 5); |
|
| 233 g_signal_connect(G_OBJECT(mainwindow), "delete_event", |
|
| 234 G_CALLBACK(login_window_closed), mainwindow); |
|
| 235 |
|
| 236 vbox = gtk_vbox_new(FALSE, 0); |
|
| 237 gtk_container_add(GTK_CONTAINER(mainwindow), vbox); |
|
| 238 |
|
| 239 image = gtk_image_new_from_stock(GAIM_STOCK_LOGO, gtk_icon_size_from_name(GAIM_ICON_SIZE_LOGO)); |
|
| 240 gtk_box_pack_start(GTK_BOX(vbox), image, FALSE, FALSE, 0); |
|
| 241 |
|
| 242 vbox2 = gtk_vbox_new(FALSE, 0); |
|
| 243 gtk_container_set_border_width(GTK_CONTAINER(vbox2), 5); |
|
| 244 |
|
| 245 /* why isn't there a gtk_label_new_with_markup? */ |
|
| 246 label = gtk_label_new(NULL); |
|
| 247 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("<b>_Account:</b>")); |
|
| 248 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
|
| 249 gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 0); |
|
| 250 |
|
| 251 name = gaim_gtk_account_option_menu_new(NULL, TRUE, G_CALLBACK(combo_changed), NULL, NULL); |
|
| 252 gtk_label_set_mnemonic_widget(GTK_LABEL(label), name); |
|
| 253 |
|
| 254 gtk_box_pack_start(GTK_BOX(vbox2), name, FALSE, TRUE, 0); |
|
| 255 gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, TRUE, 0); |
|
| 256 |
|
| 257 vbox2 = gtk_vbox_new(FALSE, 0); |
|
| 258 gtk_container_set_border_width(GTK_CONTAINER(vbox2), 5); |
|
| 259 |
|
| 260 label = gtk_label_new(NULL); |
|
| 261 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("<b>_Password:</b>")); |
|
| 262 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
|
| 263 gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 0); |
|
| 264 |
|
| 265 pass = gtk_entry_new(); |
|
| 266 gtk_label_set_mnemonic_widget(GTK_LABEL(label), pass); |
|
| 267 gtk_entry_set_visibility(GTK_ENTRY(pass), FALSE); |
|
| 268 g_signal_connect(G_OBJECT(pass), "activate", |
|
| 269 G_CALLBACK(dologin), mainwindow); |
|
| 270 gtk_box_pack_start(GTK_BOX(vbox2), pass, FALSE, TRUE, 0); |
|
| 271 gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, TRUE, 0); |
|
| 272 |
|
| 273 /* Now for the button box */ |
|
| 274 hbox = gtk_hbox_new(TRUE, 0); |
|
| 275 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 5); |
|
| 276 |
|
| 277 /* And now for the buttons */ |
|
| 278 button = gaim_pixbuf_button_from_stock(_("A_ccounts"), GAIM_STOCK_ACCOUNTS, GAIM_BUTTON_VERTICAL); |
|
| 279 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
|
| 280 g_signal_connect(G_OBJECT(button), "clicked", |
|
| 281 G_CALLBACK(gaim_gtk_accounts_window_show), mainwindow); |
|
| 282 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
|
| 283 |
|
| 284 button = gaim_pixbuf_button_from_stock(_("P_references"), GTK_STOCK_PREFERENCES, GAIM_BUTTON_VERTICAL); |
|
| 285 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
|
| 286 g_signal_connect(G_OBJECT(button), "clicked", |
|
| 287 G_CALLBACK(gaim_gtk_prefs_show), mainwindow); |
|
| 288 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
|
| 289 |
|
| 290 button = gaim_pixbuf_button_from_stock(_("_Log in"), GAIM_STOCK_SIGN_ON, GAIM_BUTTON_VERTICAL); |
|
| 291 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
|
| 292 g_signal_connect(G_OBJECT(button), "clicked", |
|
| 293 G_CALLBACK(dologin), mainwindow); |
|
| 294 g_signal_connect(G_OBJECT(button), "button-press-event", G_CALLBACK(domiddleclick), NULL); |
|
| 295 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
|
| 296 |
|
| 297 /* Now grab the focus that we need */ |
|
| 298 if (gaim_accounts_get_all()) { |
|
| 299 GaimAccount *account = gaim_accounts_get_all()->data; |
|
| 300 |
|
| 301 if (gaim_account_get_remember_password(account)) { |
|
| 302 combo_changed(NULL, account, NULL); |
|
| 303 gtk_widget_grab_focus(button); |
|
| 304 } else { |
|
| 305 gtk_widget_grab_focus(pass); |
|
| 306 } |
|
| 307 } else { |
|
| 308 gaim_gtk_accounts_window_show(); |
|
| 309 gtk_widget_grab_focus(button); |
|
| 310 } |
|
| 311 |
|
| 312 /* And raise the curtain! */ |
|
| 313 gtk_widget_show_all(mainwindow); |
|
| 314 |
|
| 315 } |
150 } |
| 316 |
151 |
| 317 static void |
152 static void |
| 318 clean_pid(void) |
153 clean_pid(void) |
| 319 { |
154 { |