comparison src/gtkblist.c @ 12115:e9790eb93216

[gaim-migrate @ 14415] quoth charkins: " This patch has a few small fixes for the visibility stuff in gtkblist.c. First, tracking of the ICONIFIED state of the blist was removed. This was intended to allow the blist to "remember" if it was minimized between restarts. Unfortunately, this is not possible because the ICONIFIED state gets set when the blist is on a different desktop with many window managers. Second, while talking about the ICONIFIED issue on #gtk@GIMPNet, muntyan_ asked about a bug where the blist would get shown on an account re-connect with 1.5.0. Luke mentioned something about this with cvs as well. This patch introduces a check in gaim_gtk_blist_show() to prevent the window from being shown if it already exists and is visible. Third, sadrul pointed me to a one-line fix for the missing blist on startup. I added a second line to make sure the blist restores its proper size as well. Finally, when the last visibility manager is removed, gaim will now minimize the blist if it was previously hidden, rather than showing it. This could prevent a race condition with out-of-process applets, preventing gaim from maintaining the visibility state properly between restarts. This was 'cvs diff'ed against the last available anon cvs from Friday. Hopefully it'll apply cleanly." it did. committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Wed, 16 Nov 2005 17:55:26 +0000
parents 46fcc0765187
children e75ef7aa913e
comparison
equal deleted inserted replaced
12114:2cbb5993c819 12115:e9790eb93216
166 166
167 static gboolean gtk_blist_window_state_cb(GtkWidget *w, GdkEventWindowState *event, gpointer data) 167 static gboolean gtk_blist_window_state_cb(GtkWidget *w, GdkEventWindowState *event, gpointer data)
168 { 168 {
169 if(event->changed_mask & GDK_WINDOW_STATE_WITHDRAWN) { 169 if(event->changed_mask & GDK_WINDOW_STATE_WITHDRAWN) {
170 if(event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) 170 if(event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN)
171 gaim_prefs_set_bool("/gaim/gtk/blist/list_visible", FALSE);
172 else
173 gaim_prefs_set_bool("/gaim/gtk/blist/list_visible", TRUE);
174 }
175
176 if(event->changed_mask & GDK_WINDOW_STATE_ICONIFIED) {
177 if(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)
178 gaim_prefs_set_bool("/gaim/gtk/blist/list_visible", FALSE); 171 gaim_prefs_set_bool("/gaim/gtk/blist/list_visible", FALSE);
179 else 172 else
180 gaim_prefs_set_bool("/gaim/gtk/blist/list_visible", TRUE); 173 gaim_prefs_set_bool("/gaim/gtk/blist/list_visible", TRUE);
181 } 174 }
182 175
3299 {"text/plain", 0, DRAG_TEXT}}; 3292 {"text/plain", 0, DRAG_TEXT}};
3300 GtkTargetEntry ste[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW}, 3293 GtkTargetEntry ste[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW},
3301 {"application/x-im-contact", 0, DRAG_BUDDY}, 3294 {"application/x-im-contact", 0, DRAG_BUDDY},
3302 {"text/x-vcard", 0, DRAG_VCARD }}; 3295 {"text/x-vcard", 0, DRAG_VCARD }};
3303 if (gtkblist && gtkblist->window) { 3296 if (gtkblist && gtkblist->window) {
3304 gaim_blist_set_visible(gaim_prefs_get_bool("/gaim/gtk/blist/list_visible")); 3297 if(!GTK_WIDGET_VISIBLE(gtkblist->window))
3298 gaim_blist_set_visible(gaim_prefs_get_bool("/gaim/gtk/blist/list_visible"));
3305 return; 3299 return;
3306 } 3300 }
3307 3301
3308 gtkblist = GAIM_GTK_BLIST(list); 3302 gtkblist = GAIM_GTK_BLIST(list);
3309 3303
4008 static void gaim_gtk_blist_set_visible(GaimBuddyList *list, gboolean show) 4002 static void gaim_gtk_blist_set_visible(GaimBuddyList *list, gboolean show)
4009 { 4003 {
4010 if (!(gtkblist && gtkblist->window)) 4004 if (!(gtkblist && gtkblist->window))
4011 return; 4005 return;
4012 4006
4013 //gaim_prefs_set_bool("/gaim/gtk/blist/list_visible", show);
4014
4015 if (show) { 4007 if (show) {
4016 if(!GAIM_WINDOW_ICONIFIED(gtkblist->window) && !GTK_WIDGET_VISIBLE(gtkblist->window)) 4008 if(!GAIM_WINDOW_ICONIFIED(gtkblist->window) && !GTK_WIDGET_VISIBLE(gtkblist->window))
4017 gaim_signal_emit(gaim_gtk_blist_get_handle(), "gtkblist-unhiding", gtkblist); 4009 gaim_signal_emit(gaim_gtk_blist_get_handle(), "gtkblist-unhiding", gtkblist);
4018 gaim_gtk_blist_restore_position(); 4010 gaim_gtk_blist_restore_position();
4019 gtk_window_present(GTK_WINDOW(gtkblist->window)); 4011 gtk_window_present(GTK_WINDOW(gtkblist->window));
4020 } else { 4012 } else {
4021 if(visibility_manager_count) { 4013 if(visibility_manager_count) {
4022 gaim_signal_emit(gaim_gtk_blist_get_handle(), "gtkblist-hiding", gtkblist); 4014 gaim_signal_emit(gaim_gtk_blist_get_handle(), "gtkblist-hiding", gtkblist);
4023 gtk_widget_hide(gtkblist->window); 4015 gtk_widget_hide(gtkblist->window);
4024 } else { 4016 } else {
4017 gaim_gtk_blist_restore_position();
4018 gtk_widget_show_all(GTK_WIDGET(gtkblist->window));
4025 gtk_window_iconify(GTK_WINDOW(gtkblist->window)); 4019 gtk_window_iconify(GTK_WINDOW(gtkblist->window));
4026 } 4020 }
4027 } 4021 }
4028 } 4022 }
4029 4023
4665 gaim_gtk_blist_visibility_manager_remove() 4659 gaim_gtk_blist_visibility_manager_remove()
4666 { 4660 {
4667 if (visibility_manager_count) 4661 if (visibility_manager_count)
4668 visibility_manager_count--; 4662 visibility_manager_count--;
4669 if (!visibility_manager_count) 4663 if (!visibility_manager_count)
4670 gaim_blist_set_visible(TRUE); 4664 gaim_blist_set_visible(gaim_prefs_get_bool("/gaim/gtk/blist/list_visible"));
4671 } 4665 }
4672 4666
4673 4667
4674 static GaimBlistUiOps blist_ui_ops = 4668 static GaimBlistUiOps blist_ui_ops =
4675 { 4669 {