diff -r 41a52fb8d3b6 -r 8ce3b7c451f1 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