/* * $Id$ * * KWin client button tooltip support module * * Copyright (c) 2001 * Karol Szwed * * Uses portions of QToolTip code * Copyright (c) TrollTech AS * * Since Qt installs its own internal event filter when using * a QToolTip, kwin doesn't obtain the necessary events and hence * focus problems and loss of window frames occur if they are used * for kwin styles. Thus, this small class implements a bare subset * of QToolTip designed especially for kwin client buttons without * installing any event filters that confuse kwin. * * For all normal clients, simply use the KWinButton class instead * of QButton, which will use a KWinToolTip internally. Other clients * which rely on QToolButton or QWidget for client buttons may use the * KWinToolButton and KWinWidgetButton classes to automatically take * care of tooltips. * */ #ifndef _KWIN_BUTTON_H #define _KWIN_BUTTON_H #include #include #include namespace KWinInternal { class KWinToolTip: public QLabel { Q_OBJECT public: KWinToolTip( QWidget* parent, const QString& tip ); ~KWinToolTip(); void setTipText( const QString& tip ); void enterTip(); void leaveTip(); private slots: void showTip(); void hideTip(); private: void positionTip(); QTimer showTimer; QTimer hideTimer; QWidget* btn; }; class KWinButton: public QButton { Q_OBJECT public: KWinButton( QWidget *parent, const char *name, const QString& tip ); ~KWinButton(); void setTipText(const QString& newTip); protected: /* Ensure you call these event handlers from derived classes */ void enterEvent(QEvent *); void leaveEvent(QEvent *); void mousePressEvent( QMouseEvent* e ); private: KWinToolTip* buttonTip; }; class KWinToolButton: public QToolButton { Q_OBJECT public: KWinToolButton( QWidget *parent, const char *name, const QString& tip ); ~KWinToolButton(); void setTipText(const QString& newTip); protected: /* Ensure you call these event handlers from derived classes */ void enterEvent(QEvent *); void leaveEvent(QEvent *); void mousePressEvent( QMouseEvent* e ); private: KWinToolTip* buttonTip; }; class KWinWidgetButton: public QWidget { Q_OBJECT public: KWinWidgetButton( QWidget *parent, const char *name, WFlags f, const QString& tip ); ~KWinWidgetButton(); void setTipText(const QString& newTip); protected: /* Ensure you call these event handlers from derived classes */ void enterEvent(QEvent *); void leaveEvent(QEvent *); void mousePressEvent( QMouseEvent* e ); private: KWinToolTip* buttonTip; }; }; #endif // vim: ts=4