kwin/kwinbutton.h

119 lines
2.6 KiB
C++

/*
* $Id$
*
* KWin client button tooltip support module
*
* Copyright (c) 2001
* Karol Szwed <gallium@kde.org>
*
* 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 <qlabel.h>
#include <qtimer.h>
#include <qtoolbutton.h>
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