Mercurial > pidgin
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 { |