| 153 * Callbacks * |
153 * Callbacks * |
| 154 ***************************************************/ |
154 ***************************************************/ |
| 155 |
155 |
| 156 static gboolean gtk_blist_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data) |
156 static gboolean gtk_blist_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data) |
| 157 { |
157 { |
| 158 if (docklet_count) |
158 gaim_core_quit(); |
| 159 gaim_blist_set_visible(FALSE); |
|
| 160 else |
|
| 161 gaim_core_quit(); |
|
| 162 |
159 |
| 163 /* we handle everything, event should not propogate further */ |
160 /* we handle everything, event should not propogate further */ |
| 164 return TRUE; |
161 return TRUE; |
| 165 } |
162 } |
| 166 |
163 |
| 3155 {"text/plain", 0, DRAG_TEXT}}; |
3152 {"text/plain", 0, DRAG_TEXT}}; |
| 3156 GtkTargetEntry ste[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW}, |
3153 GtkTargetEntry ste[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW}, |
| 3157 {"application/x-im-contact", 0, DRAG_BUDDY}, |
3154 {"application/x-im-contact", 0, DRAG_BUDDY}, |
| 3158 {"text/x-vcard", 0, DRAG_VCARD }}; |
3155 {"text/x-vcard", 0, DRAG_VCARD }}; |
| 3159 if (gtkblist && gtkblist->window) { |
3156 if (gtkblist && gtkblist->window) { |
| 3160 if (gaim_prefs_get_bool("/gaim/gtk/blist/list_visible") || docklet_count == 0) |
3157 if (gaim_prefs_get_bool("/gaim/gtk/blist/list_visible")) |
| 3161 gtk_widget_show(gtkblist->window); |
3158 gtk_widget_show(gtkblist->window); |
| 3162 return; |
3159 return; |
| 3163 } |
3160 } |
| 3164 |
3161 |
| 3165 gtkblist = GAIM_GTK_BLIST(list); |
3162 gtkblist = GAIM_GTK_BLIST(list); |
| 3170 |
3167 |
| 3171 gtkblist->vbox = gtk_vbox_new(FALSE, 0); |
3168 gtkblist->vbox = gtk_vbox_new(FALSE, 0); |
| 3172 gtk_widget_show(gtkblist->vbox); |
3169 gtk_widget_show(gtkblist->vbox); |
| 3173 gtk_container_add(GTK_CONTAINER(gtkblist->window), gtkblist->vbox); |
3170 gtk_container_add(GTK_CONTAINER(gtkblist->window), gtkblist->vbox); |
| 3174 |
3171 |
| 3175 g_signal_connect(G_OBJECT(gtkblist->window), "delete_event", G_CALLBACK(gtk_blist_delete_cb), NULL); |
3172 g_signal_connect_after(G_OBJECT(gtkblist->window), "delete_event", G_CALLBACK(gtk_blist_delete_cb), NULL); |
| 3176 g_signal_connect(G_OBJECT(gtkblist->window), "configure_event", G_CALLBACK(gtk_blist_configure_cb), NULL); |
3173 g_signal_connect(G_OBJECT(gtkblist->window), "configure_event", G_CALLBACK(gtk_blist_configure_cb), NULL); |
| 3177 g_signal_connect(G_OBJECT(gtkblist->window), "visibility_notify_event", G_CALLBACK(gtk_blist_visibility_cb), NULL); |
3174 g_signal_connect(G_OBJECT(gtkblist->window), "visibility_notify_event", G_CALLBACK(gtk_blist_visibility_cb), NULL); |
| 3178 gtk_widget_add_events(gtkblist->window, GDK_VISIBILITY_NOTIFY_MASK); |
3175 gtk_widget_add_events(gtkblist->window, GDK_VISIBILITY_NOTIFY_MASK); |
| 3179 |
3176 |
| 3180 /******************************* Menu bar *************************************/ |
3177 /******************************* Menu bar *************************************/ |
| 3306 /* Update some dynamic things */ |
3303 /* Update some dynamic things */ |
| 3307 update_menu_bar(gtkblist); |
3304 update_menu_bar(gtkblist); |
| 3308 gaim_gtk_blist_update_plugin_actions(); |
3305 gaim_gtk_blist_update_plugin_actions(); |
| 3309 |
3306 |
| 3310 /* OK... let's show this bad boy. */ |
3307 /* OK... let's show this bad boy. */ |
| 3311 if (gaim_prefs_get_bool("/gaim/gtk/blist/list_visible") || docklet_count == 0) { |
3308 if (gaim_prefs_get_bool("/gaim/gtk/blist/list_visible")) { |
| 3312 gaim_gtk_blist_refresh(list); |
3309 gaim_gtk_blist_refresh(list); |
| 3313 gaim_gtk_blist_restore_position(); |
3310 gaim_gtk_blist_restore_position(); |
| 3314 gtk_widget_show(gtkblist->window); |
3311 gtk_widget_show(gtkblist->window); |
| 3315 } |
3312 } |
| 3316 |
3313 |
| 4473 gaim_request_input(NULL, _("Add Group"), NULL, |
4463 gaim_request_input(NULL, _("Add Group"), NULL, |
| 4474 _("Please enter the name of the group to be added."), |
4464 _("Please enter the name of the group to be added."), |
| 4475 NULL, FALSE, FALSE, NULL, |
4465 NULL, FALSE, FALSE, NULL, |
| 4476 _("Add"), G_CALLBACK(add_group_cb), |
4466 _("Add"), G_CALLBACK(add_group_cb), |
| 4477 _("Cancel"), NULL, NULL); |
4467 _("Cancel"), NULL, NULL); |
| 4478 } |
|
| 4479 |
|
| 4480 void gaim_gtk_blist_docklet_toggle() { |
|
| 4481 /* Useful for the docklet plugin and also for the win32 tray icon*/ |
|
| 4482 /* This is called when one of those is clicked--it will show/hide the |
|
| 4483 buddy list/login window--depending on which is active */ |
|
| 4484 if (gtkblist && gtkblist->window) { |
|
| 4485 if (GTK_WIDGET_VISIBLE(gtkblist->window)) { |
|
| 4486 gaim_blist_set_visible(GAIM_WINDOW_ICONIFIED(gtkblist->window) || gaim_gtk_blist_obscured); |
|
| 4487 } else { |
|
| 4488 #if _WIN32 |
|
| 4489 wgaim_systray_maximize(gtkblist->window); |
|
| 4490 #endif |
|
| 4491 gaim_blist_set_visible(TRUE); |
|
| 4492 } |
|
| 4493 } else { |
|
| 4494 /* we're logging in or something... do nothing */ |
|
| 4495 /* or should I make the blist? */ |
|
| 4496 gaim_debug_warning("gtkblist", |
|
| 4497 "docklet_toggle called with gaim_connections_get_all() " |
|
| 4498 "but no blist!\n"); |
|
| 4499 } |
|
| 4500 } |
|
| 4501 |
|
| 4502 void gaim_gtk_blist_docklet_add() |
|
| 4503 { |
|
| 4504 docklet_count++; |
|
| 4505 } |
|
| 4506 |
|
| 4507 void gaim_gtk_blist_docklet_remove() |
|
| 4508 { |
|
| 4509 docklet_count--; |
|
| 4510 if (!docklet_count) { |
|
| 4511 gaim_blist_set_visible(TRUE); |
|
| 4512 } |
|
| 4513 } |
4468 } |
| 4514 |
4469 |
| 4515 static GaimBlistUiOps blist_ui_ops = |
4470 static GaimBlistUiOps blist_ui_ops = |
| 4516 { |
4471 { |
| 4517 gaim_gtk_blist_new_list, |
4472 gaim_gtk_blist_new_list, |