qwindowsystem_qws.h Include File

Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |

# qwindowsystem_qws.h

This is the verbatim text of the qwindowsystem_qws.h include file. It is provided only for illustration; the copyright remains with Trolltech.

    /****************************************************************************
    ** $Id: qt/qwindowsystem_qws.h   3.3.8   edited Jan 11 14:38 $
    **
    ** Definition of TQt/FB central server classes
    **
    ** Created : 991025
    **
    ** Copyright (C) 1992-2007 Trolltech ASA.  All rights reserved.
    **
    ** This file is part of the kernel module of the TQt GUI Toolkit.
    **
    ** This file may be used under the terms of the GNU General Public
    ** License versions 2.0 or 3.0 as published by the Free Software
    ** Foundation and appearing in the file LICENSE.GPL included in the
    ** packaging of this file. Alternatively you may (at your option) use any
    ** later version of the GNU General Public License if such license has
    ** been publicly approved by Trolltech ASA (or its successors, if any)
    ** and the KDE Free TQt Foundation.
    **
    ** Please review the following information to ensure GNU General
    ** Public Licensing requirements will be met:
    ** http://trolltech.com/products/qt/licenses/licensing/opensource/.
    ** If you are unsure which license is appropriate for your use, please
    ** review the following information:
    ** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
    ** or contact the sales department at sales@trolltech.com.
    **
    ** Licensees holding valid TQt Commercial licenses may use this file in
    ** accordance with the TQt Commercial License Agreement provided with
    ** the Software.
    **
    ** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
    ** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
    ** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
    ** herein.
    **
    **********************************************************************/

    #ifndef TQWINDOWSYSTEM_QWS_H
    #define TQWINDOWSYSTEM_QWS_H

    #ifndef QT_H
    #include "qwssocket_qws.h"
    #include "ntqmap.h"
    #include "ntqdatetime.h"
    #include "ntqptrlist.h"
    #include "ntqimage.h"

    #include "qwsproperty_qws.h"
    #include "qwscommand_qws.h"
    #include "qwsevent_qws.h"
    #endif // QT_H

    #include "qkbd_qws.h"

    struct SWCursorData;
    class TQWSCursor;
    class TQWSClient;
    class TQWSRegionManager;
    class TQGfx;
    class TQWSServerData;

    class TQWSInternalWindowInfo
    {

    public:

        int winid;
        unsigned int clientid;
        TQString name;   // Corresponds to TQObject name of top-level widget

    };

    struct TQWSWindowData;

    class TQWSScreenSaver
    {
    public:
        virtual ~TQWSScreenSaver();
        virtual void restore()=0;
        virtual bool save(int level)=0;
    };

    class TQWSWindow
    {
        friend class TQWSServer;
    public:
        TQWSWindow(int i, TQWSClient* client);
        ~TQWSWindow();

        int winId() const { return id; }
        const TQString &name() const { return rgnName; }
        const TQString &caption() const { return rgnCaption; }
        TQWSClient* client() const { return c; }
        TQRegion requested() const { return requested_region; }
        TQRegion allocation() const { return allocated_region; }
        bool isVisible() const { return !requested_region.isEmpty(); }
        bool isPartiallyObscured() const { return requested_region!=allocated_region; }
        bool isFullyObscured() const { return allocated_region.isEmpty(); }

        void raise();
        void lower();
        void show();
        void hide();
        void setActiveWindow();

    private:
        bool hidden() const { return requested_region.isEmpty(); }
        bool forClient(const TQWSClient* cl) const { return cl==c; }

        void setName( const TQString &n );
        void setCaption( const TQString &c );

        void addAllocation( TQWSRegionManager *, const TQRegion & );
        void removeAllocation( TQWSRegionManager *, const TQRegion & );

        int  allocationIndex() const { return alloc_region_idx; }
        void setAllocationIndex( int i ) { alloc_region_idx = i; modified = true; }
        void updateAllocation();

        void setNeedAck( bool n ) { needAck = n; }

        void focus(bool get);
        int focusPriority() const { return last_focus_time; }
        void operation( TQWSWindowOperationEvent::Operation o );
        void shuttingDown() { last_focus_time=0; }

    private:
        int id;
        TQString rgnName;
        TQString rgnCaption;
        int alloc_region_idx;
        bool modified;
        bool needAck;
        bool onTop;
        TQWSClient* c;
        TQRegion requested_region;
        TQRegion allocated_region;
        TQRegion exposed;
        int last_focus_time;
        TQWSWindowData *d;
    };

    #ifndef TQT_NO_SOUND
    class TQWSSoundServer;
    #ifdef QT_USE_OLD_QWS_SOUND
    class TQWSSoundServerData;

    class TQWSSoundServer : public TQObject {
        TQ_OBJECT
    public:
        TQWSSoundServer(TQObject* parent);
        ~TQWSSoundServer();
        void playFile(const TQString& filename);
    private slots:
        void feedDevice(int fd);
    private:
        TQWSSoundServerData* d;
    };
    #endif
    #endif

    /*********************************************************************
     *
     * Class: TQWSServer
     *
     *********************************************************************/

    class TQWSMouseHandler;
    struct TQWSCommandStruct;

    #ifndef TQT_NO_QWS_MULTIPROCESS
    class TQWSServer : public TQWSServerSocket
    #else
    class TQWSServer : public TQObject
    #endif
    {
        friend class TQCopChannel;
        friend class TQWSMouseHandler;
        friend class TQWSWindow;
        friend class TQWSDisplay;
        friend class TQWSInputMethod;
        TQ_OBJECT

    public:
        TQWSServer( int flags = 0, TQObject *parent=0, const char *name=0 );
        ~TQWSServer();
        enum ServerFlags { DisableKeyboard = 0x01,
    		       DisableMouse = 0x02 };

        enum GUIMode { NoGui = false, NormalGUI = true, Server };

        static void sendKeyEvent(int unicode, int keycode, int modifiers, bool isPress,
    			     bool autoRepeat);
        static void processKeyEvent(int unicode, int keycode, int modifiers, bool isPress,
    				bool autoRepeat);

    #ifndef TQT_NO_QWS_IM
        enum IMState { IMStart, IMCompose, IMEnd };

        void sendIMEvent( IMState state, const TQString& txt, int cpos, int selLen );
    #endif

    #ifndef TQT_NO_QWS_KEYBOARD
        typedef struct KeyMap {
    	int  key_code;
    	ushort unicode;
    	ushort shift_unicode;
    	ushort ctrl_unicode;
        };

        typedef struct KeyOverride {
    	ushort scan_code;
    	KeyMap map;
        };

        static const KeyMap *keyMap();

        static void setOverrideKeys( const KeyOverride* );

        class KeyboardFilter
        {
        public:
    	virtual bool filter(int unicode, int keycode, int modifiers,
    			    bool isPress, bool autoRepeat)=0;
        };

        static void setKeyboardFilter( KeyboardFilter *f );
    #endif
    #ifndef TQT_NO_QWS_IM
        static void setCurrentInputMethod( TQWSInputMethod *im );
        static void resetInputMethod();
        static void setMicroFocus( int x, int y );
    #endif

        static void setDefaultMouse( const char * );
        static void setDefaultKeyboard( const char * );
        static void setMaxWindowRect(const TQRect&);
        static void sendMouseEvent(const TQPoint& pos, int state);

        static void setDesktopBackground( const TQImage &img );
        static void setDesktopBackground( const TQColor & );
        static TQWSMouseHandler *mouseHandler();
        static void setMouseHandler(TQWSMouseHandler*);
    #ifndef TQT_NO_QWS_KEYBOARD
        static TQWSKeyboardHandler* keyboardHandler();
        static void setKeyboardHandler(TQWSKeyboardHandler* kh);
    #endif
        TQWSWindow *windowAt( const TQPoint& pos );

        // For debugging only at this time
        const TQPtrList<TQWSWindow> &clientWindows() { return windows; }

        void openMouse();
        void closeMouse();
    #ifndef TQT_NO_QWS_KEYBOARD
        void openKeyboard();
        void closeKeyboard();
    #endif

        static void setScreenSaver(TQWSScreenSaver*);
        static void setScreenSaverIntervals(int* ms);
        static void setScreenSaverInterval(int);
        static bool screenSaverActive();
        static void screenSaverActivate(bool);

        // the following are internal.
        void refresh();
        void refresh(TQRegion &);

        void enablePainting(bool);
        static void processEventQueue();
        static TQPtrList<TQWSInternalWindowInfo> * windowList();

        void sendPropertyNotifyEvent( int property, int state );
    #ifndef TQT_NO_QWS_PROPERTIES
        TQWSPropertyManager *manager() {
    	return &propertyManager;
        }
    #endif

        static TQPoint mousePosition;

        static void startup( int flags );
        static void closedown();

        static void beginDisplayReconfigure();
        static void endDisplayReconfigure();

    #ifndef TQT_NO_QWS_CURSOR
        static void setCursorVisible( bool );
        static bool isCursorVisible();
    #endif

        enum WindowEvent { Create=0x0001, Destroy=0x0002, Hide=0x0004, Show=0x0008,
    		       Raise=0x0010, Lower=0x0020, Geometry=0x0040, Active = 0x0080,
    		       Name=0x0100 };

    signals:
        void windowEvent( TQWSWindow *w, TQWSServer::WindowEvent e );

    #ifndef TQT_NO_COP
        void newChannel( const TQString& channel);
        void removedChannel(const TQString& channel);

    #endif
    private:
    #ifndef TQT_NO_COP
        static void sendTQCopEvent( TQWSClient *c, const TQCString &ch,
    			       const TQCString &msg, const TQByteArray &data,
    			       bool response = false );
    #endif
        void move_region( const TQWSRegionMoveCommand * );
        void set_altitude( const TQWSChangeAltitudeCommand * );
        void request_focus( const TQWSRequestFocusCommand * );
        void request_region( int, TQRegion );
        void destroy_region( const TQWSRegionDestroyCommand * );
        void name_region( const TQWSRegionNameCommand * );
        void set_identity( const TQWSIdentifyCommand * );
    #ifndef TQT_NO_QWS_IM
        void set_micro_focus( const TQWSSetMicroFocusCommand * );
        void reset_im( const TQWSResetIMCommand * );
        static void sendKeyEventUnfiltered(int unicode, int keycode,
    				       int modifiers, bool isPress,
    				       bool autoRepeat);

    #endif
        static void emergency_cleanup();

        static TQColor *bgColor;
        static TQImage *bgImage;

        void sendMaxWindowRectEvents();
    #ifndef TQT_NO_QWS_MULTIPROCESS
        void newConnection( int socket );
    #endif
        void invokeIdentify( const TQWSIdentifyCommand *cmd, TQWSClient *client );
        void invokeCreate( TQWSCreateCommand *cmd, TQWSClient *client );
        void invokeRegionName( const TQWSRegionNameCommand *cmd, TQWSClient *client );
        void invokeRegion( TQWSRegionCommand *cmd, TQWSClient *client );
        void invokeRegionMove( const TQWSRegionMoveCommand *cmd, TQWSClient *client );
        void invokeRegionDestroy( const TQWSRegionDestroyCommand *cmd, TQWSClient *client );
        void invokeSetAltitude( const TQWSChangeAltitudeCommand *cmd, TQWSClient *client );
    #ifndef TQT_NO_QWS_PROPERTIES
        void invokeAddProperty( TQWSAddPropertyCommand *cmd );
        void invokeSetProperty( TQWSSetPropertyCommand *cmd );
        void invokeRemoveProperty( TQWSRemovePropertyCommand *cmd );
        void invokeGetProperty( TQWSGetPropertyCommand *cmd, TQWSClient *client );
    #endif //TQT_NO_QWS_PROPERTIES
        void invokeSetSelectionOwner( TQWSSetSelectionOwnerCommand *cmd );
        void invokeConvertSelection( TQWSConvertSelectionCommand *cmd );
        void invokeSetFocus( const TQWSRequestFocusCommand *cmd, TQWSClient *client );

        void initIO();
        void setFocus( TQWSWindow*, bool gain );
    #ifndef TQT_NO_QWS_CURSOR
        void invokeDefineCursor( TQWSDefineCursorCommand *cmd, TQWSClient *client );
        void invokeSelectCursor( TQWSSelectCursorCommand *cmd, TQWSClient *client );
    #endif
        void invokeGrabMouse( TQWSGrabMouseCommand *cmd, TQWSClient *client );
        void invokeGrabKeyboard( TQWSGrabKeyboardCommand *cmd, TQWSClient *client );
    #ifndef TQT_NO_SOUND
        void invokePlaySound( TQWSPlaySoundCommand *cmd, TQWSClient *client );
    #endif
    #ifndef TQT_NO_COP
        void invokeRegisterChannel( TQWSQCopRegisterChannelCommand *cmd,
    				TQWSClient *client );
        void invokeTQCopSend( TQWSQCopSendCommand *cmd, TQWSClient *client );
    #endif
        void invokeRepaintRegion( TQWSRepaintRegionCommand *cmd,
    			      TQWSClient *client );
    #ifndef TQT_NO_QWS_IM
            void invokeSetMicroFocus( const TQWSSetMicroFocusCommand *cmd,
                                    TQWSClient *client );
            void invokeResetIM( const TQWSResetIMCommand *cmd,
                                    TQWSClient *client );
    #endif

        TQWSMouseHandler* newMouseHandler(const TQString& spec);
        void openDisplay();
        void closeDisplay();

        void showCursor();
        void hideCursor();
        void initializeCursor();
        void paintServerRegion();
        void paintBackground( const TQRegion & );
        void clearRegion( const TQRegion &r, const TQColor &c );
        void refreshBackground();
        void resetGfx();

    private slots:
    #ifndef TQT_NO_QWS_MULTIPROCESS
        void clientClosed();
        void doClient();
        void deleteWindowsLater();
    #endif

        void screenSaverWake();
        void screenSaverSleep();
        void screenSaverTimeout();

    private:
        void disconnectClient( TQWSClient * );
        void screenSave(int level);
        void doClient( TQWSClient * );
        typedef TQMapIterator<int,TQWSClient*> ClientIterator;
        typedef TQMap<int,TQWSClient*> ClientMap;
        void releaseMouse(TQWSWindow* w);
        void releaseKeyboard(TQWSWindow* w);
        void updateClientCursorPos();

        uchar* sharedram;
        int ramlen;

        TQGfx *gfx;

        ClientMap client;
    #ifndef TQT_NO_QWS_PROPERTIES
        TQWSPropertyManager propertyManager;
    #endif
        struct SelectionOwner {
    	int windowid;
    	struct Time {
    	    void set( int h, int m, int s, int s2 ) {
    		hour = h; minute = m; sec = s; ms = s2;
    	    }
    	    int hour, minute, sec, ms;
    	} time;
        } selectionOwner;
        TQTime timer;
        TQWSServerData* d;
        int* screensaverinterval;

        TQWSWindow *focusw;
        TQWSWindow *mouseGrabber;
        bool mouseGrabbing;
        int swidth, sheight, sdepth;
    #ifndef TQT_NO_QWS_CURSOR
        bool haveviscurs;
        TQWSCursor *cursor;	    // cursor currently shown
        TQWSCursor *nextCursor;  // cursor to show once grabbing is off
    #endif
        TQRegion screenRegion;   // the entire display region
        TQRegion serverRegion;
        TQRegion dirtyBackground;
        bool disablePainting;
        TQPtrList<TQWSMouseHandler> mousehandlers;
    #ifndef TQT_NO_QWS_KEYBOARD
        TQPtrList<TQWSKeyboardHandler> keyboardhandlers;
    #endif

        TQPtrList<TQWSCommandStruct> commandQueue;
        TQWSRegionManager *rgnMan;

        // Window management
        TQPtrList<TQWSWindow> windows; // first=topmost
        TQWSWindow* newWindow(int id, TQWSClient* client);
        TQWSWindow* findWindow(int windowid, TQWSClient* client);
        void moveWindowRegion(TQWSWindow*, int dx, int dy );
        TQRegion setWindowRegion(TQWSWindow*, TQRegion r );
        void raiseWindow( TQWSWindow *, int = 0);
        void lowerWindow( TQWSWindow *, int = -1);
        void exposeRegion( TQRegion , int index = 0 );
        void notifyModified( TQWSWindow *active = 0 );
        void syncRegions( TQWSWindow *active = 0 );

        void setCursor(TQWSCursor *curs);

        // multimedia
    #ifndef TQT_NO_SOUND
        TQWSSoundServer *soundserver;
    #endif
    #ifndef TQT_NO_COP
        TQMap<TQString, TQPtrList<TQWSClient> > channels;
    #endif
    #ifndef TQT_NO_QWS_IM
        bool microF;
        int microX;
        int microY;
    #endif
    };

    extern TQWSServer *qwsServer; //there can be only one

    #ifndef TQT_NO_QWS_IM
        class TQWSInputMethod
        {
        public:
    	TQWSInputMethod();
    	virtual ~TQWSInputMethod();
    	virtual bool filter(int unicode, int keycode, int modifiers,
    			    bool isPress, bool autoRepeat)=0;
    	virtual void reset();
    	virtual void setMicroFocus( int x, int y );
    	virtual void setFont( const TQFont& );
        protected:
    	void sendIMEvent( TQWSServer::IMState, const TQString& txt, int cpos, int selLen = 0 );
    	//void sendKeyEvent( int unicode, int keycode, int modifiers,
    	//		    bool isPress, bool autoRepeat);
        };

    inline void TQWSInputMethod::sendIMEvent( TQWSServer::IMState state, const TQString &txt, int cpos, int selLen )
    {
        qwsServer->sendIMEvent( state, txt, cpos, selLen );

    }

    #endif

    /*********************************************************************
     *
     * Class: TQWSClient
     *
     *********************************************************************/

    struct TQWSMouseEvent;

    typedef TQMap<int, TQWSCursor*> TQWSCursorMap;

    class TQWSClient : public TQObject
    {
        TQ_OBJECT
    public:
        TQWSClient( TQObject* parent, int socket, int id );
        ~TQWSClient();

        int socket() const;

        void setIdentity(const TQString&);
        TQString identity() const { return id; }

        void sendEvent( TQWSEvent* event );
        void sendConnectedEvent( const char *display_spec );
        void sendMaxWindowRectEvent();
        void sendRegionModifyEvent( int winid, TQRegion exposed, bool ack );
        void sendFocusEvent( int winid, bool get );
        void sendPropertyNotifyEvent( int property, int state );
        void sendPropertyReplyEvent( int property, int len, char *data );
        void sendSelectionClearEvent( int windowid );
        void sendSelectionRequestEvent( TQWSConvertSelectionCommand *cmd, int windowid );
        TQWSCommand* readMoreCommand();

        int clientId() const { return cid; }

        TQWSCursorMap cursors;	// cursors defined by this client
    signals:
        void connectionClosed();
        void readyRead();
    private slots:
        void closeHandler();
        void errorHandler( int );
    private:
        int s; // XXX csocket->d->socket->socket() is this value
    #ifndef TQT_NO_QWS_MULTIPROCESS
        TQWSSocket *csocket;
    #endif
        TQWSCommand* command;
        uint isClosed : 1;
        TQString id;
        int cid;
    };

    #endif // TQWINDOWSYSTEM_QWS_H