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


Copyright © 2007 TrolltechTrademarks
TQt 3.3.8