| 172 return FALSE; |
172 return FALSE; |
| 173 } |
173 } |
| 174 |
174 |
| 175 static gboolean gtk_blist_window_state_cb(GtkWidget *w, GdkEventWindowState *event, gpointer data) |
175 static gboolean gtk_blist_window_state_cb(GtkWidget *w, GdkEventWindowState *event, gpointer data) |
| 176 { |
176 { |
| |
177 #if GTK_CHECK_VERSION(2,2,0) |
| 177 if(event->changed_mask & GDK_WINDOW_STATE_WITHDRAWN) { |
178 if(event->changed_mask & GDK_WINDOW_STATE_WITHDRAWN) { |
| 178 if(event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) |
179 if(event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) |
| 179 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", FALSE); |
180 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", FALSE); |
| 180 else { |
181 else { |
| 181 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", TRUE); |
182 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", TRUE); |
| 193 /* Refresh gtkblist if un-iconifying */ |
194 /* Refresh gtkblist if un-iconifying */ |
| 194 if (event->changed_mask & GDK_WINDOW_STATE_ICONIFIED){ |
195 if (event->changed_mask & GDK_WINDOW_STATE_ICONIFIED){ |
| 195 if (!(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)) |
196 if (!(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)) |
| 196 pidgin_blist_refresh_timer(purple_get_blist()); |
197 pidgin_blist_refresh_timer(purple_get_blist()); |
| 197 } |
198 } |
| |
199 #else |
| |
200 /* At least gtk+ 2.0.6 does not properly set the change_mask when unsetting a |
| |
201 * GdkWindowState flag. To work around, the window state will be explicitly |
| |
202 * queried on these older versions of gtk+. See pidgin ticket #739. |
| |
203 */ |
| |
204 GdkWindowState new_window_state = gdk_window_get_state(G_OBJECT(gtkblist->window->window)); |
| |
205 |
| |
206 if(new_window_state & GDK_WINDOW_STATE_WITHDRAWN) { |
| |
207 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", FALSE); |
| |
208 } else { |
| |
209 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", TRUE); |
| |
210 pidgin_blist_refresh_timer(purple_get_blist()); |
| |
211 } |
| |
212 |
| |
213 if(new_window_state & GDK_WINDOW_STATE_MAXIMIZED) |
| |
214 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_maximized", TRUE); |
| |
215 else |
| |
216 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_maximized", FALSE); |
| |
217 |
| |
218 if (!(new_window_state & GDK_WINDOW_STATE_ICONIFIED)) |
| |
219 pidgin_blist_refresh_timer(purple_get_blist()); |
| |
220 #endif |
| 198 |
221 |
| 199 return FALSE; |
222 return FALSE; |
| 200 } |
223 } |
| 201 |
224 |
| 202 static gboolean gtk_blist_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data) |
225 static gboolean gtk_blist_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data) |