Hi! Since version 3.1 KDE includes KPassivePopup, a "dialog-like popup that displays messages without interrupting the user". The patch uses this class to notify the user when someone on his notify list goes online.
Two issues remain: 1. Make it configurable? Perhaps not really needed, since by using the notify list the user already decided that he wants to be notified. 2. Logging in: When multiple user which are on the notify list are online while logging into icq, multiple popups are shown simultaneously.
diff -ur licq-20030730/plugins/qt-gui/src/mainwin.cpp licq-20030730-jm/plugins/qt-gui/src/mainwin.cpp --- licq-20030730/plugins/qt-gui/src/mainwin.cpp 2003-07-10 07:48:07.000000000 +0200 +++ licq-20030730-jm/plugins/qt-gui/src/mainwin.cpp 2003-08-04 16:42:46.000000000 +0200 @@ -27,6 +27,9 @@ #include <kwin.h> #include <kiconloader.h> #include <kurl.h> +#if KDE_VERSION >= 310 +#include <kpassivepopup.h> +#endif #else #include <qapplication.h> #endif @@ -1385,8 +1388,27 @@ } if(sig->SubSignal() == USER_STATUS && sig->Argument() == 1) + { userView->AnimationOnline(szId, nPPID); +#if defined(USE_KDE) && (KDE_VERSION >= 310) + // User on notify list went online -> show popup at systray icon + if (licqIcon && u->OnlineNotify()) + { + QTextCodec *codec = UserCodec::codecForICQUser(u); + QString alias = codec->toUnicode(u->GetAlias()); + // Escape HTML + alias.replace(QChar('&'), "&"); + alias.replace(QChar('<'), "<"); + alias.replace(QChar('>'), ">"); + + QString msg(tr("<b>%1</b> is online").arg(alias)); + QPixmap px = iconForStatus(u->StatusFull()); + KPassivePopup::message("Licq", msg, px, licqIcon, NULL, 4000); + } +#endif + } + // Update their floaty CUserView *v = CUserView::FindFloaty(szId, nPPID);
ciao Jörg