src/gtkblist.c

changeset 11709
da6e9cd5f6d9
parent 11692
30e8a4a1b965
child 11719
2d62fa2e2d76
equal deleted inserted replaced
11708:47593a05096e 11709:da6e9cd5f6d9
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
3851 3848
3852 if (show) { 3849 if (show) {
3853 gaim_gtk_blist_restore_position(); 3850 gaim_gtk_blist_restore_position();
3854 gtk_window_present(GTK_WINDOW(gtkblist->window)); 3851 gtk_window_present(GTK_WINDOW(gtkblist->window));
3855 } else { 3852 } else {
3856 if (!gaim_connections_get_all() || docklet_count) { 3853 gtk_window_iconify(GTK_WINDOW(gtkblist->window));
3857 #ifdef _WIN32
3858 wgaim_systray_minimize(gtkblist->window);
3859 #endif
3860 gtk_widget_hide(gtkblist->window);
3861 } else {
3862 gtk_window_iconify(GTK_WINDOW(gtkblist->window));
3863 }
3864 } 3854 }
3865 } 3855 }
3866 3856
3867 static GList * 3857 static GList *
3868 groups_tree(void) 3858 groups_tree(void)
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,

mercurial