diff options
Diffstat (limited to 'src/qtraylabel.h')
-rw-r--r-- | src/qtraylabel.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/qtraylabel.h b/src/qtraylabel.h new file mode 100644 index 0000000..1ae83bc --- /dev/null +++ b/src/qtraylabel.h @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2004 Girish Ramakrishnan All Rights Reserved. + * + * This 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 software 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 software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +// $Id: qtraylabel.h,v 1.21 2005/06/21 10:04:36 cs19713 Exp $ + +#ifndef _QTRAYLABEL_H +#define _QTRAYLABEL_H + +#include <qlabel.h> +#include <qstring.h> +#include <qstringlist.h> +#include <qpixmap.h> +#include <qtimer.h> +#include <qtextstream.h> +#include <qsettings.h> +#include <qevent.h> +#include <qsize.h> + +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/Xatom.h> + +#include <sys/types.h> +#include <unistd.h> + +class QMouseEvent; +class QDragEnterEvent; +class QPoint; + +class QTrayLabel : public QLabel +{ + Q_OBJECT + +public: + QTrayLabel(Window w, QWidget* p = 0, const QString& text = QString::null); + QTrayLabel(const QStringList& argv, pid_t pid, QWidget* parent = 0); + virtual ~QTrayLabel(); + + // Accessors + Window dockedWindow(void) const { return mDockedWindow; } + int balloonTimeout(void) const { return mBalloonTimeout; } + bool isSkippingTaskbar(void) const { return mSkippingTaskbar; } + bool isWithdrawn(void) const { return mWithdrawn; } + bool isDockWhenMinimized(void) const { return mDockWhenMinimized; } + + QString appName(void) const { return mProgName[0]; } + virtual void setAppName(const QString& prog) { mProgName[0] = prog; } + QString appClass(void) const { return mClass; } + QString appTitle(void) const { return mTitle; } + QPixmap appIcon(void) const { return mAppIcon; } + + // Pass on all events through this interface + bool x11EventFilter(XEvent * event); + + // Session Management + virtual bool saveState(QSettings& settings); + virtual bool restoreState(QSettings& settings); + +public slots: + void dock(void); // puts us in the system tray + void undock(void); // removes us from the system tray + void map(void); // maps the window that we are docking + void withdraw(void); // withdraws the window that we are docking + void toggleShow(void) // convenience slot + { if (mWithdrawn) map(); else withdraw(); } + void close(void); // close the docked window + void setTrayIcon(const QString& icon); // sets custom icon + + // and some property setters + virtual void setSkipTaskbar(bool skip); // skip the taskbar + virtual void setBalloonTimeout(int msecs) { mBalloonTimeout = msecs; } + virtual void setDockWhenMinimized(bool dwm) { mDockWhenMinimized = dwm; } + +protected slots: + void scanClients(void); // scans existing client connections + +signals: + void clicked(const ButtonState&, const QPoint&); + void docked(QTrayLabel *); // emitted when we get docked + void docked(void); // emitted when we get docked + void undocked(QTrayLabel *); // emitted when we get undocked + void undocked(void); // emitted when we get undock + // window are monitoring dies + void sysTrayDestroyed(void); // emitted when the system tray disappears + +protected: + // reimplement these event handlers in subclass as needed + virtual void mouseReleaseEvent(QMouseEvent *event); + virtual void dragEnterEvent(QDragEnterEvent *event); + + // the events that follow are events of the docked window (NOT QTrayLabel) + virtual void updateIcon(void); // updates the icon + virtual void updateTitle(void); // sets the tooltip + virtual void balloonText(void); // balloons text + virtual void obscureEvent(void) { } + virtual void mapEvent(void) { } + virtual void focusLostEvent(void) { } + virtual void unmapEvent(void) { } + virtual void minimizeEvent(void); + virtual void destroyEvent(void); + + // needs to return if we can unsubscribe for root + virtual bool canUnsubscribeFromRoot(void) { return true; } + // needs to return if we can dock a candidate window + virtual bool canDockWindow(Window) { return true; } + virtual void processDead(void) { } + + void propertyChangeEvent(Atom); + void setDockedWindow(Window w); // set docked window to anything you want + +private slots: + void realityCheck(void); + void showOnAllDesktops(void); + void toggleDockWhenMinimized(void) + { mDockWhenMinimized = !mDockWhenMinimized; } + void skipTaskbar(void); + +private: + // Helpers + void initialize(void); + void handleTitleChange(void); + void handleIconChange(void); + const char *me(void) const; + + // Member variables + long mDesktop; // desktop on which the window is being shown + QLabel *mBalloon; // tooltip text simulator + QString mCustomIcon; // CustomIcon of the docked application + Window mDockedWindow; // the window which is being docked + int mBalloonTimeout; + bool mDocked, mWithdrawn, mSkippingTaskbar; + bool mDockWhenMinimized; + + QString mTitle, mClass; // Title and hint of mDockedWindow + QPixmap mAppIcon; // The current app icon (may not be same as pixmap()) + XSizeHints mSizeHint; // SizeHint of mDockedWindow + + QTimer mRealityMonitor; // Helps us sync up with reality + QStringList mProgName; // The program whose window we are docking + pid_t mPid; // The PID of program whose window we are docking + + Window mSysTray; // System tray window id +}; + +#endif // _QTRAYLABEL_H |