# HG changeset patch # User Daniel Atallah # Date 1179033998 0 # Node ID c3add818a46ca0460550a3219e47c8a4d04acd05 # Parent 1ae4c1a45750ee0657d69957d1e95e17b1e3d875 Don't stop all windows from flashing when any Windows Pidgin window is focused. I also noticed that we were registering a callback for the focus-in-event for each flash start and never unregistering it, so this fixes that too. Fixes #554. diff -r 1ae4c1a45750 -r c3add818a46c pidgin/win32/gtkwin32dep.c --- a/pidgin/win32/gtkwin32dep.c Sat May 12 20:34:56 2007 +0000 +++ b/pidgin/win32/gtkwin32dep.c Sun May 13 05:26:38 2007 +0000 @@ -251,7 +251,13 @@ static gboolean stop_flashing(GtkWidget *widget, GdkEventFocus *event, gpointer data) { GtkWindow *window = data; + gpointer handler_id; + winpidgin_window_flash(window, FALSE); + + if ((handler_id = g_object_get_data(G_OBJECT(window), "flash_stop_handler_id"))) + g_signal_handler_disconnect(G_OBJECT(window), (gulong) GPOINTER_TO_UINT(handler_id)); + return FALSE; } @@ -275,12 +281,11 @@ memset(&info, 0, sizeof(FLASHWINFO)); info.cbSize = sizeof(FLASHWINFO); info.hwnd = GDK_WINDOW_HWND(gdkwin); - if (flash) - info.dwFlags = FLASHW_ALL | FLASHW_TIMERNOFG; - else + if (flash) { + info.dwFlags = FLASHW_ALL | FLASHW_TIMER; + } else info.dwFlags = FLASHW_STOP; info.dwTimeout = 0; - info.dwTimeout = 0; MyFlashWindowEx(&info); } else @@ -314,8 +319,11 @@ winpidgin_window_flash(window, TRUE); /* Stop flashing when window receives focus */ - g_signal_connect(G_OBJECT(window), "focus-in-event", - G_CALLBACK(stop_flashing), window); + if (g_object_get_data(G_OBJECT(window), "flash_stop_handler_id") == NULL) { + gulong handler_id = g_signal_connect(G_OBJECT(window), "focus-in-event", + G_CALLBACK(stop_flashing), window); + g_object_set_data(G_OBJECT(window), "flash_stop_handler_id", GUINT_TO_POINTER(handler_id)); + } } static gboolean