Thomas Reitelbach wrote: > Can you please try the attached wharf.cpp and recompile? > Please report if this one works for you. At least for me this one fixes the > problem.
Ok, that didn't worked but the following patch against cvs version of wharf.cpp works. Nice small systray icon, nice background. Have fun with it (hope it works with all qt versions). Sönke
--- wharf.cpp.cvs 2004-08-26 22:26:54.000000000 +0200 +++ wharf.cpp 2004-08-26 22:33:51.000000000 +0200 @@ -620,6 +620,11 @@ m_nNewMsg = 0; m_bStatusInvisible = false; resize(24,24); + setBackgroundMode(X11ParentRelative); + setBackgroundOrigin(ParentOrigin); + resize(22,22); + setMinimumSize(22,22); + #ifdef USE_KDE KWin::setSystemTrayWindowFor( winId(), _mainwin ? _mainwin->topLevelWidget()->winId() : qt_xrootwin() ); setBackgroundMode(X11ParentRelative); @@ -628,6 +633,22 @@ char buffer[128]; XEvent ev; + WId win = winId(); // get the window + XWMHints *hints; // hints + XClassHint classhint; // class hints + classhint.res_name = "licq"; // res_name + classhint.res_class = "Wharf"; // res_class + XSetClassHint(dsp, win, &classhint); // set the class hints + hints = XGetWMHints(dsp, win); // init hints + hints->initial_state = WithdrawnState; + hints->icon_x = 0; + hints->icon_y = 0; + hints->icon_window = winId(); + hints->window_group = win; // set the window hint + hints->flags = WindowGroupHint | IconWindowHint | IconPositionHint | StateHint; // set the window group hint + XSetWMHints(dsp, win, hints); // set the window hints for WM to use. + XFree( hints ); + snprintf(buffer, sizeof(buffer), "_NET_SYSTEM_TRAY_S%d", x11Screen()); Atom a = XInternAtom(dsp, buffer, False); Window systray = XGetSelectionOwner(dsp, a);
// -*- c-basic-offset: 2 -*- /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ // written by Graham Roff <[EMAIL PROTECTED]> // KDE support by Dirk Mueller <[EMAIL PROTECTED]> #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "xpm/iconOnline.xpm" #include "xpm/iconOffline.xpm" #include "xpm/iconAway.xpm" #include "xpm/iconFFC.xpm" #include "xpm/iconNA.xpm" #include "xpm/iconDND.xpm" #include "xpm/iconInvisible.xpm" #include "xpm/iconOccupied.xpm" #include "xpm/iconBack-64.xpm" #include "xpm/iconMask-64.xpm" #include "xpm/iconBack-48.xpm" #include "xpm/iconMask-48.xpm" #include "xpm/iconDigits.h" #include <stdio.h> #include <qpainter.h> #include <qfile.h> #ifdef USE_KDE #include <kwin.h> #include <kpopupmenu.h> #include <kdeversion.h> #endif #include "wharf.h" #include "mainwin.h" #include "licq_user.h" #include "ewidgets.h" #include <X11/Xlib.h> #include <X11/Xutil.h> #undef Status #undef Bool #undef None #undef KeyPress #undef KeyRelease #undef FocusIn #undef FocusOut //#define DEBUG_WHARF #define SYSTEM_TRAY_REQUEST_DOCK 0 /* Constructs a WharfIcon widget. */ IconManager::IconManager(CMainWindow *_mainwin, QPopupMenu *_menu, QWidget *parent) : QWidget(parent, "LicqWharf", WType_TopLevel) { setCaption("LicqWharf"); m_nNewMsg = m_nSysMsg = 0; wharfIcon = NULL; mainwin = _mainwin; menu = _menu; } void IconManager::X11Init() { // set the hints #ifndef USE_KDE Display *dsp = x11Display(); // get the display WId win = winId(); // get the window XWMHints *hints; // hints XClassHint classhint; // class hints classhint.res_name = "licq"; // res_name classhint.res_class = "Wharf"; // res_class XSetClassHint(dsp, win, &classhint); // set the class hints hints = XGetWMHints(dsp, win); // init hints hints->initial_state = WithdrawnState; hints->icon_x = 0; hints->icon_y = 0; hints->icon_window = wharfIcon->winId(); hints->window_group = win; // set the window hint hints->flags = WindowGroupHint | IconWindowHint | IconPositionHint | StateHint; // set the window group hint XSetWMHints(dsp, win, hints); // set the window hints for WM to use. XFree( hints ); char buffer[128]; XEvent ev; snprintf(buffer, sizeof(buffer), "_NET_SYSTEM_TRAY_S%d", x11Screen()); Atom a = XInternAtom(dsp, buffer, False); Window systray = XGetSelectionOwner(dsp, a); memset(&ev, 0, sizeof(ev)); ev.xclient.type = ClientMessage; ev.xclient.window = systray; ev.xclient.message_type = XInternAtom(dsp, "_NET_SYSTEM_TRAY_OPCODE", False); ev.xclient.format = 32; ev.xclient.data.l[0] = CurrentTime; ev.xclient.data.l[1] = SYSTEM_TRAY_REQUEST_DOCK; ev.xclient.data.l[2] = winId(); ev.xclient.data.l[3] = 0; ev.xclient.data.l[4] = 0; XSendEvent(dsp, systray, False, NoEventMask, &ev); XSync(dsp, False); #endif resize (wharfIcon->width(), wharfIcon->height()); setMask(*wharfIcon->vis->mask()); show(); } IconManager::~IconManager() { // Ensure that our main window is visible when the dock gets disabled: if (mainwin != NULL) mainwin->show(); delete wharfIcon; // clean up behind us the prevent segfaults gMainWindow->licqIcon = NULL; } void IconManager::closeEvent( QCloseEvent* e) { e->ignore(); } void IconManager::mousePressEvent( QMouseEvent *e ) { #ifdef DEBUG_WHARF printf("icon press\n"); #endif switch(e->button()) { case LeftButton: if (mainwin->isVisible()) mainwin->hide(); else { mainwin->show(); mainwin->raise(); } break; case MidButton: mainwin->callMsgFunction(); break; case RightButton: menu->popup(e->globalPos()); break; default: break; } //wharfIcon->mousePressEvent(e); } void IconManager::paintEvent( QPaintEvent * ) { #ifdef DEBUG_WHARF printf("icon paint\n"); #endif QPainter painter(this); painter.drawPixmap(0, 0, *wharfIcon->vis); painter.end(); } //=====IconManager_Default=================================================== IconManager_Default::IconManager_Default(CMainWindow *_mainwin, QPopupMenu *_menu, bool _bFortyEight, QWidget *parent ) : IconManager(_mainwin, _menu, parent) { m_bFortyEight = _bFortyEight; if (m_bFortyEight) { pix = new QPixmap((const char **)iconBack_48_xpm); QBitmap b; b = QPixmap((const char **)iconMask_48_xpm); pix->setMask(b); wharfIcon = new WharfIcon(pix, this); } else { pix = new QPixmap((const char **)iconBack_64_xpm); QBitmap b; b = QPixmap((const char **)iconMask_64_xpm); pix->setMask(b); wharfIcon = new WharfIcon(pix, this); } X11Init(); } IconManager_Default::~IconManager_Default() { delete pix; } //-----CMainWindow::setDockIconStatus------------------------------------------- void IconManager_Default::SetDockIconStatus() { QPixmap m; ICQOwner *o = gUserManager.FetchOwner(LOCK_R); switch (o->Status()) { case ICQ_STATUS_ONLINE: m = QPixmap((const char **)iconOnline_xpm); break; case ICQ_STATUS_AWAY: m = QPixmap((const char **)iconAway_xpm); break; case ICQ_STATUS_NA: m = QPixmap((const char **)iconNA_xpm); break; case ICQ_STATUS_OCCUPIED: m = QPixmap((const char **)iconOccupied_xpm); break; case ICQ_STATUS_DND: m = QPixmap((const char **)iconDND_xpm); break; case ICQ_STATUS_FREEFORCHAT: m = QPixmap((const char **)iconFFC_xpm); break; case ICQ_STATUS_OFFLINE: m = QPixmap((const char **)iconOffline_xpm); break; } if (o->StatusInvisible()) m = QPixmap((const char **)iconInvisible_xpm); gUserManager.DropOwner(); QPainter painter(wharfIcon->vis); if (!m_bFortyEight) { painter.drawPixmap(0, 44, m); // Draw the little icon if no new messages if (m_nNewMsg == 0 && m_nSysMsg == 0) { QPixmap *p = GetDockIconStatusIcon(); painter.fillRect(31, 6, 27, 16, QColor(0,0,0)); if (p != NULL) { int w = p->width() > 27 ? 27 : p->width(); int h = p->height() > 16 ? 16 : p->height(); int x = 45 - (w / 2); int y = 14 - (h / 2); painter.drawPixmap(x, y, *p, 0, 0, w, h); } } } else painter.drawPixmap(0, 27, m); painter.end(); wharfIcon->repaint(false); repaint(false); } //-----IconManager_Default::GetDockIconStatusIcon---------------------------- QPixmap *IconManager_Default::GetDockIconStatusIcon() { ICQOwner *o = gUserManager.FetchOwner(LOCK_R); unsigned long s = o->Status(); gUserManager.DropOwner(); switch (s) { case ICQ_STATUS_ONLINE: return &mainwin->pmOnline; case ICQ_STATUS_AWAY: return &mainwin->pmAway; case ICQ_STATUS_NA: return &mainwin->pmNa; case ICQ_STATUS_OCCUPIED: return &mainwin->pmOccupied; case ICQ_STATUS_DND: return &mainwin->pmDnd; case ICQ_STATUS_FREEFORCHAT: return &mainwin->pmChat; case ICQ_STATUS_OFFLINE: return &mainwin->pmOffline; } return NULL; } //-----IconManager_Default::setDockIconMsg----------------------------------- void IconManager_Default::SetDockIconMsg(unsigned short nNewMsg, unsigned short nSysMsg) { QPainter p(wharfIcon->vis); unsigned short d1, d10; m_nNewMsg = nNewMsg; m_nSysMsg = nSysMsg; // set the new msg digits if (nNewMsg > 99) { d1 = 9; d10 = 9; } else { d1 = nNewMsg % 10; d10 = (nNewMsg - d1) / 10; } if (!m_bFortyEight) { p.drawPixmap(44, 26, iconDigits[d10]); p.drawPixmap(50, 26, iconDigits[d1]); } else { p.drawPixmap(44, 9, iconDigits[d10]); p.drawPixmap(50, 9, iconDigits[d1]); } // set the system msg digits if (nSysMsg > 99) { d1 = 9; d10 = 9; } else { d1 = nSysMsg % 10; d10 = (nSysMsg - d1) / 10; } if (!m_bFortyEight) { p.drawPixmap(44, 38, iconDigits[d10]); p.drawPixmap(50, 38, iconDigits[d1]); } else { p.drawPixmap(44, 21, iconDigits[d10]); p.drawPixmap(50, 21, iconDigits[d1]); } if (!m_bFortyEight) { // Draw the little icon now QPixmap *m = NULL; if (nSysMsg > 0 || nNewMsg > 0) m = &mainwin->pmMessage; else m = GetDockIconStatusIcon(); p.fillRect(31, 6, 27, 16, QColor(0,0,0)); if (m != NULL) { int w = m->width() > 27 ? 27 : m->width(); int h = m->height() > 16 ? 16 : m->height(); int x = 45 - (w / 2); int y = 14 - (h / 2); p.drawPixmap(x, y, *m, 0, 0, w, h); } } p.end(); wharfIcon->repaint(false); repaint(false); } //=====IconManager_Themed=================================================== IconManager_Themed::IconManager_Themed(CMainWindow *_mainwin, QPopupMenu *_menu, const char *theme, QWidget *parent) : IconManager(_mainwin, _menu, parent) { pixNoMessages = pixBothMessages = pixRegularMessages = pixSystemMessages = NULL; pixOnline = pixOffline = pixAway = pixNA = pixOccupied = pixDND = pixInvisible = pixFFC = NULL; SetTheme(theme); wharfIcon = new WharfIcon(pixNoMessages, this); X11Init(); } void IconManager_Themed::SetTheme(const char *theme) { m_szTheme = theme; // Delete old pixmaps delete pixNoMessages; delete pixBothMessages; delete pixRegularMessages; delete pixSystemMessages; delete pixOnline; delete pixOffline; delete pixAway; delete pixNA; delete pixOccupied; delete pixDND; delete pixFFC; delete pixInvisible; // Open the config file and read it char temp[MAX_FILENAME_LEN]; QString baseDockDir; if (theme[0] == '/') { baseDockDir = theme; if (baseDockDir[baseDockDir.length() - 1] != '/') baseDockDir += QString("/"); } else baseDockDir.sprintf("%s%sdock.%s/", SHARE_DIR, QTGUI_DIR, theme); char filename[MAX_FILENAME_LEN]; snprintf(filename, MAX_FILENAME_LEN, "%s%s.dock", QFile::encodeName(baseDockDir).data(), theme); filename[MAX_FILENAME_LEN - 1] = '\0'; CIniFile dockFile(INI_FxWARN); if (!dockFile.LoadFile(filename)) { WarnUser(NULL, tr("Unable to load dock theme file\n(%1)\n:%2") .arg(filename).arg(strerror(dockFile.Error()))); pixBothMessages = pixRegularMessages = pixSystemMessages = NULL; pixOnline = pixOffline = pixAway = pixNA = pixOccupied = pixDND = pixInvisible = pixFFC = NULL; pixNoMessages = new QPixmap(48, 48); return; } dockFile.SetSection("background"); // No messages dockFile.ReadStr("NoMessages", temp); pixNoMessages = new QPixmap(baseDockDir + QString(temp)); if (pixNoMessages->isNull()) WarnUser(NULL, tr("Unable to load dock theme image\n%1").arg(baseDockDir)); dockFile.ReadStr("NoMessagesMask", temp, "none"); if (strcmp(temp, "none") != 0) pixNoMessages->setMask(QBitmap(baseDockDir + QString(temp))); // Regular messages dockFile.ReadStr("RegularMessages", temp); pixRegularMessages = new QPixmap(baseDockDir + QString(temp)); if (pixRegularMessages->isNull()) WarnUser(NULL, tr("Unable to load dock theme image\n%1").arg(baseDockDir)); dockFile.ReadStr("RegularMessagesMask", temp, "none"); if (strcmp(temp, "none") != 0) pixRegularMessages->setMask(QBitmap(baseDockDir + QString(temp))); // System messages dockFile.ReadStr("SystemMessages", temp); pixSystemMessages = new QPixmap(baseDockDir + QString(temp)); if (pixSystemMessages->isNull()) WarnUser(NULL, tr("Unable to load dock theme image\n%1").arg(baseDockDir)); dockFile.ReadStr("SystemMessagesMask", temp, "none"); if (strcmp(temp, "none") != 0) pixSystemMessages->setMask(QBitmap(baseDockDir + QString(temp))); // Both messages dockFile.ReadStr("BothMessages", temp); pixBothMessages = new QPixmap(baseDockDir + QString(temp)); if (pixBothMessages->isNull()) WarnUser(NULL, tr("Unable to load dock theme image\n%1").arg(baseDockDir)); dockFile.ReadStr("BothMessagesMask", temp, "none"); if (strcmp(temp, "none") != 0) pixBothMessages->setMask(QBitmap(baseDockDir + QString(temp))); // Status icons pixOnline = pixOffline = pixAway = pixNA = pixOccupied = pixDND = pixInvisible = pixFFC = NULL; dockFile.SetFlags(0); if (dockFile.SetSection("status")) { dockFile.SetFlags(INI_FxWARN); // Online dockFile.ReadStr("Online", temp, "none"); if (strcmp(temp, "none") != 0) pixOnline = new QPixmap(baseDockDir + QString(temp)); // Offline dockFile.ReadStr("Offline", temp, "none"); if (strcmp(temp, "none") != 0) pixOffline = new QPixmap(baseDockDir + QString(temp)); // Away dockFile.ReadStr("Away", temp, "none"); if (strcmp(temp, "none") != 0) pixAway = new QPixmap(baseDockDir + QString(temp)); // NA dockFile.ReadStr("NA", temp, "none"); if (strcmp(temp, "none") != 0) pixNA = new QPixmap(baseDockDir + QString(temp)); // Occupied dockFile.ReadStr("Occupied", temp, "none"); if (strcmp(temp, "none") != 0) pixOccupied = new QPixmap(baseDockDir + QString(temp)); // DND dockFile.ReadStr("DND", temp, "none"); if (strcmp(temp, "none") != 0) pixDND = new QPixmap(baseDockDir + QString(temp)); // Invisible dockFile.ReadStr("Invisible", temp, "none"); if (strcmp(temp, "none") != 0) pixInvisible = new QPixmap(baseDockDir + QString(temp)); // FFC dockFile.ReadStr("FFC", temp, "none"); if (strcmp(temp, "none") != 0) pixFFC = new QPixmap(baseDockDir + QString(temp)); dockFile.ReadStr("Mask", temp, "none"); if (strcmp(temp, "none") != 0) { QBitmap mask(baseDockDir + QString(temp)); if (pixOnline != NULL) pixOnline->setMask(mask); if (pixOffline != NULL) pixOffline->setMask(mask); if (pixAway != NULL) pixAway->setMask(mask); if (pixNA != NULL) pixNA->setMask(mask); if (pixOccupied != NULL) pixOccupied->setMask(mask); if (pixDND != NULL) pixDND->setMask(mask); if (pixInvisible != NULL) pixInvisible->setMask(mask); if (pixFFC != NULL) pixFFC->setMask(mask); } } dockFile.CloseFile(); if (wharfIcon != NULL) { QPixmap *p = NULL; if (m_nNewMsg > 0 && m_nSysMsg > 0) p = pixBothMessages; else if (m_nNewMsg > 0) p = pixRegularMessages; else if (m_nSysMsg > 0) p = pixSystemMessages; else p = pixNoMessages; wharfIcon->Set(p); SetDockIconStatus(); setMask(*wharfIcon->vis->mask()); wharfIcon->repaint(false); repaint(false); } } IconManager_Themed::~IconManager_Themed() { delete pixNoMessages; delete pixBothMessages; delete pixRegularMessages; delete pixSystemMessages; delete pixOnline; delete pixOffline; delete pixAway; delete pixNA; delete pixOccupied; delete pixDND; delete pixFFC; delete pixInvisible; } //-----CMainWindow::setDockIconStatus------------------------------------------- void IconManager_Themed::SetDockIconStatus() { QPixmap *p = NULL; ICQOwner *o = gUserManager.FetchOwner(LOCK_R); switch (o->Status()) { case ICQ_STATUS_ONLINE: p = pixOnline; break; case ICQ_STATUS_AWAY: p = pixAway; break; case ICQ_STATUS_NA: p = pixNA; break; case ICQ_STATUS_OCCUPIED: p = pixOccupied; break; case ICQ_STATUS_DND: p = pixDND; break; case ICQ_STATUS_FREEFORCHAT: p = pixFFC; break; case ICQ_STATUS_OFFLINE: p = pixOffline; break; } if (o->StatusInvisible()) p = pixInvisible; gUserManager.DropOwner(); if (p != NULL) { QPainter painter(wharfIcon->vis); painter.drawPixmap(0, 0, *p); painter.end(); } wharfIcon->repaint(false); repaint(false); } //-----IconManager_Themed::setDockIconMsg----------------------------------- void IconManager_Themed::SetDockIconMsg(unsigned short nNewMsg, unsigned short nSysMsg) { QPixmap *p = NULL; if (nNewMsg > 0 && nSysMsg > 0) { if (!(m_nNewMsg > 0 && m_nSysMsg > 0)) p = pixBothMessages; } else if (nNewMsg > 0) { if (!(m_nNewMsg > 0) || m_nSysMsg > 0) p = pixRegularMessages; } else if (nSysMsg > 0) { if (!(m_nSysMsg > 0) || m_nNewMsg > 0) p = pixSystemMessages; } else { if (!(m_nNewMsg == 0 && m_nSysMsg == 0)) p = pixNoMessages; } if (p != NULL) { wharfIcon->Set(p); SetDockIconStatus(); setMask(*wharfIcon->vis->mask()); wharfIcon->repaint(false); repaint(false); } m_nNewMsg = nNewMsg; m_nSysMsg = nSysMsg; } //============================================================================= IconManager_KDEStyle::IconManager_KDEStyle(CMainWindow *_mainwin, QPopupMenu *_menu, QWidget *parent ) : IconManager(_mainwin, _menu, parent) { m_timerToggle = false; m_ownerStatus = 0; m_nSysMsg = 0; m_nNewMsg = 0; m_bStatusInvisible = false; resize(24,24); setBackgroundMode(X11ParentRelative); setBackgroundOrigin(ParentOrigin); resize(22,22); setMinimumSize(22,22); #ifdef USE_KDE KWin::setSystemTrayWindowFor( winId(), _mainwin ? _mainwin->topLevelWidget()->winId() : qt_xrootwin() ); setBackgroundMode(X11ParentRelative); #else Display *dsp = x11Display(); // get the display char buffer[128]; XEvent ev; WId win = winId(); // get the window XWMHints *hints; // hints XClassHint classhint; // class hints classhint.res_name = "licq"; // res_name classhint.res_class = "Wharf"; // res_class XSetClassHint(dsp, win, &classhint); // set the class hints hints = XGetWMHints(dsp, win); // init hints hints->initial_state = WithdrawnState; hints->icon_x = 0; hints->icon_y = 0; hints->icon_window = winId(); hints->window_group = win; // set the window hint hints->flags = WindowGroupHint | IconWindowHint | IconPositionHint | StateHint; // set the window group hint XSetWMHints(dsp, win, hints); // set the window hints for WM to use. XFree( hints ); snprintf(buffer, sizeof(buffer), "_NET_SYSTEM_TRAY_S%d", x11Screen()); Atom a = XInternAtom(dsp, buffer, False); Window systray = XGetSelectionOwner(dsp, a); memset(&ev, 0, sizeof(ev)); ev.xclient.type = ClientMessage; ev.xclient.window = systray; ev.xclient.message_type = XInternAtom(dsp, "_NET_SYSTEM_TRAY_OPCODE", False); ev.xclient.format = 32; ev.xclient.data.l[0] = CurrentTime; ev.xclient.data.l[1] = SYSTEM_TRAY_REQUEST_DOCK; ev.xclient.data.l[2] = winId(); ev.xclient.data.l[3] = 0; ev.xclient.data.l[4] = 0; XSendEvent(dsp, systray, False, NoEventMask, &ev); XSync(dsp, False); #endif show(); } IconManager_KDEStyle::~IconManager_KDEStyle() { } void IconManager_KDEStyle::SetDockIconStatus() { //TODO make general for all plugins ICQOwner *o = gUserManager.FetchOwner(LOCK_R); m_statusIcon = CMainWindow::iconForStatus(o->StatusFull()); m_ownerStatus = o->Status(); m_bStatusInvisible = o->StatusInvisible(); gUserManager.DropOwner(); updateTooltip(); repaint(); } void IconManager_KDEStyle::SetDockIconMsg(unsigned short nNewMsg, unsigned short nSysMsg) { m_nNewMsg = nNewMsg; m_nSysMsg = nSysMsg; killTimers(); if(m_nNewMsg + m_nSysMsg) { m_eventIcon = mainwin->pmMessage; startTimer(500); } else m_eventIcon = QPixmap(); updateTooltip(); repaint(); } void IconManager_KDEStyle::timerEvent(QTimerEvent* e) { m_timerToggle = !m_timerToggle; repaint(); } void IconManager_KDEStyle::paintEvent( QPaintEvent *e) { QPainter p(this); if(m_timerToggle && !m_eventIcon.isNull()) p.drawPixmap((width()-m_eventIcon.width())/2, (height()-m_eventIcon.height())/2, m_eventIcon); else p.drawPixmap((width()-m_statusIcon.width())/2, (height()-m_statusIcon.height())/2, m_statusIcon); } void IconManager_KDEStyle::mousePressEvent( QMouseEvent *e ) { switch(e->button()) { case LeftButton: if(mainwin->isVisible()) mainwin->hide(); else { mainwin->show(); #ifdef USE_KDE KWin::setOnDesktop(mainwin->winId(), KWin::currentDesktop()); #if !KDE_IS_VERSION(3,1,94) mainwin->raise(); #endif #else mainwin->raise(); #endif } break; default: IconManager::mousePressEvent(e); break; } } void IconManager_KDEStyle::updateTooltip() { QToolTip::remove(this); QString s = QString("<nobr>") + QString(ICQUser::StatusToStatusStr(m_ownerStatus, m_bStatusInvisible)) + QString("</nobr>"); if(m_nSysMsg) s += tr("<br><b>%1 system messages</b>").arg(m_nSysMsg); if(m_nNewMsg > 1) s += tr("<br>%1 msgs").arg(m_nNewMsg); else if(m_nNewMsg) s += tr("<br>1 msg"); s += tr("<br>Left click - Show main window" "<br>Middle click - Show next message" "<br>Right click - System menu"); QToolTip::add(this, s); } //=====WharfIcon============================================================= WharfIcon::WharfIcon(QPixmap *p, QWidget *parent) : QWidget(parent, "WharfIcon") { vis = NULL; Set(p); QToolTip::add(this, tr("Left click - Show main window\n" "Middle click - Show next message\n" "Right click - System menu")); show(); } void WharfIcon::Set(QPixmap *pix) { delete vis; vis = new QPixmap(*pix); resize(vis->width(), vis->height()); setMask(*vis->mask()); } WharfIcon::~WharfIcon() { delete vis; } void WharfIcon::mousePressEvent( QMouseEvent *e ) { #ifdef DEBUG_WHARF printf("wharf press\n"); #endif ((IconManager *)parent())->mousePressEvent(e); } void WharfIcon::paintEvent( QPaintEvent * ) { #ifdef DEBUG_WHARF printf("wharf paint\n"); #endif QPainter painter(this); painter.drawPixmap(0, 0, *vis); painter.end(); }