pidgin/gtkblist.c

changeset 18347
b80fbc607f57
parent 18314
4e4e7aa803b3
child 18372
9eee190f0584
equal deleted inserted replaced
18346:8a6dfdd516d4 18347:b80fbc607f57
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)

mercurial