46 #include <QMouseEvent>
47 #include <QToolButton>
52 class KSystemTrayIconPrivate :
public QObject
54 class KSystemTrayIconPrivate
63 onAllDesktops =
false;
68 window->installEventFilter(
this );
73 ~KSystemTrayIconPrivate()
77 window->removeEventFilter(
this );
80 delete actionCollection;
85 void _k_slotNewFrame()
87 q->setIcon(QIcon(movie->currentPixmap()));
91 bool eventFilter(
QObject *obj, QEvent *ev)
93 if(ev->type() == QEvent::ActivationChange) {
94 dwTickCount = GetTickCount();
96 return QObject::eventFilter(obj, ev);
106 bool onAllDesktops : 1;
108 QPointer<QMovie> movie;
113 d( new KSystemTrayIconPrivate( this, parent ) )
120 d( new KSystemTrayIconPrivate( this, parent ) )
127 d( new KSystemTrayIconPrivate( this, parent ) )
134 d( new KSystemTrayIconPrivate( this, parent ) )
140 void KSystemTrayIcon::init(
QWidget* parent )
145 d->menu =
new KMenu( parent );
146 d->titleAction = d->menu->addTitle( qApp->windowIcon(), KGlobal::caption() );
147 d->menu->setTitle( KGlobal::mainComponent().aboutData()->programName() );
148 connect( d->menu, SIGNAL(aboutToShow()),
this, SLOT(contextMenuAboutToShow()) );
149 setContextMenu( d->menu );
155 QAction *action = d->actionCollection->addAction(
"minimizeRestore");
156 action->setText(
i18n(
"Minimize"));
157 connect( action, SIGNAL(triggered(
bool)),
this, SLOT(minimizeRestoreAction()) );
163 d->onAllDesktops =
false;
168 d->onAllDesktops =
false;
171 connect(
this, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
172 SLOT(activateOrHide(QSystemTrayIcon::ActivationReason)) );
186 void KSystemTrayIcon::contextMenuAboutToShow( )
192 d->menu->addSeparator();
193 QAction* action = d->actionCollection->action(
"minimizeRestore" );
197 d->menu->addAction( action );
204 d->menu->addAction( action );
212 QAction* action = d->actionCollection->action(
"minimizeRestore");
213 if ( d->window->isVisible() )
215 action->setText(
i18n(
"&Minimize") );
219 action->setText(
i18n(
"&Restore") );
227 void KSystemTrayIcon::minimizeRestoreAction()
231 bool restore = !( d->window->isVisible() );
232 minimizeRestore( restore );
236 void KSystemTrayIcon::maybeQuit()
239 QString query =
i18n(
"<qt>Are you sure you want to quit <b>%1</b>?</qt>",
242 i18n(
"Confirm Quit From System Tray"),
258 void KSystemTrayIcon::activateOrHide( QSystemTrayIcon::ActivationReason reasonCalled )
260 if ( reasonCalled != QSystemTrayIcon::Trigger )
274 if( GetTickCount() - d->dwTickCount < 300 ) {
276 minimizeRestore(
false );
278 minimizeRestore(
true );
280 #elif defined(Q_WS_X11)
289 minimizeRestore(
true );
294 while( it.hasPrevious() )
296 WId
id = it.previous();
297 if(
id == pw->winId() )
303 if( !info2.
geometry().intersects( pw->geometry()))
316 minimizeRestore(
false );
321 void KSystemTrayIcon::minimizeRestore(
bool restore )
329 if (d->onAllDesktops) {
334 pw->move(info.
geometry().topLeft());
356 return d->actionCollection;
362 const int iconWidth = cg.
readEntry(
"systrayIconWidth", 22);
368 activateOrHide( QSystemTrayIcon::Trigger );
373 if(
kapp != NULL &&
kapp->sessionSaving())
382 button->setDefaultAction(action);
388 return button->defaultAction();
399 connect(d->movie, SIGNAL(frameChanged(
int)),
this, SLOT(_k_slotNewFrame()));
400 d->movie->setCacheMode(QMovie::CacheAll);
408 #include "ksystemtrayicon.moc"