diff options
Diffstat (limited to 'kdecore/netwm.h')
-rw-r--r-- | kdecore/netwm.h | 1471 |
1 files changed, 0 insertions, 1471 deletions
diff --git a/kdecore/netwm.h b/kdecore/netwm.h deleted file mode 100644 index cc39ada1d..000000000 --- a/kdecore/netwm.h +++ /dev/null @@ -1,1471 +0,0 @@ -/* - - Copyright (c) 2000 Troll Tech AS - Copyright (c) 2003 Lubos Lunak <l.lunak@kde.org> - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - - -#ifndef __net_wm_h -#define __net_wm_h - -#include "kdelibs_export.h" -#include <tqwidget.h> -#ifdef Q_WS_X11 -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#include <X11/Xatom.h> - -#include "netwm_def.h" - -// forward declaration -struct NETRootInfoPrivate; -struct NETWinInfoPrivate; -template <class Z> class NETRArray; - - -/** - Common API for root window properties/protocols. - - The NETRootInfo class provides a common API for clients and window managers - to set/read/change properties on the root window as defined by the NET Window - Manager Specification.. - - @author Bradley T. Hughes <bhughes@trolltech.com> - @see NET - @see NETWinInfo - @see KWin - **/ - -class KDECORE_EXPORT NETRootInfo : public NET { -public: - /** - Indexes for the properties array. - @since 3.2 - **/ - // update also NETRootInfoPrivate::properties[] size when extending this - enum { PROTOCOLS, WINDOW_TYPES, STATES, PROTOCOLS2, ACTIONS, - PROPERTIES_SIZE }; - - /** - Window Managers should use this constructor to create a NETRootInfo object, - which will be used to set/update information stored on the rootWindow. - The application role is automatically set to WindowManager - when using this constructor. - - @param display An X11 Display struct. - - @param supportWindow The Window id of the supportWindow. The supportWindow - must be created by the window manager as a child of the rootWindow. The - supportWindow must not be destroyed until the Window Manager exits. - - @param wmName A string which should be the window manager's name (ie. "KWin" - or "Blackbox"). - - @param properties An array of elements listing all properties and protocols - the window manager supports. The elements contain OR'ed values of constants - from the NET base class, in the following order: [0]= NET::Property, - [1]= NET::WindowTypeMask (not NET::WindowType!), [2]= NET::State, - [3]= NET::Property2, [4]= NET::Action. - In future versions, the list may be extended. In case you pass less elements, - the missing ones will be replaced with default values. - - @param properties_size The number of elements in the properties array. - - @param screen For Window Managers that support multiple screen (ie. - "multiheaded") displays, the screen number may be explicitly defined. If - this argument is omitted, the default screen will be used. - - @param doActivate true to activate the window - - @since 3.2 - **/ - NETRootInfo(Display *display, Window supportWindow, const char *wmName, - const unsigned long properties[], int properties_size, - int screen = -1, bool doActivate = true); - - /** - @deprecated - This constructor differs from the above one only in the way it accepts - the list of supported properties. The properties argument is equivalent - to the first element of the properties array in the above constructor. - **/ - NETRootInfo(Display *display, Window supportWindow, const char *wmName, - unsigned long properties, int screen = -1, bool doActivate = true) KDE_DEPRECATED; - - /** - Clients should use this constructor to create a NETRootInfo object, which - will be used to query information set on the root window. The application - role is automatically set to Client when using this constructor. - - @param display An X11 Display struct. - - @param properties An array of elements listing all protocols the client - is interested in. The elements contain OR'ed values of constants - from the NET base class, in the following order: [0]= NET::Property, - [1]= NET::Property2. - - @param properties_size The number of elements in the properties array. - - @param screen For Clients that support multiple screen (ie. "multiheaded") - displays, the screen number may be explicitly defined. If this argument is - omitted, the default screen will be used. - - @param doActivate true to activate the window - - @since 3.2 - **/ - NETRootInfo(Display *display, const unsigned long properties[], int properties_size, - int screen = -1, bool doActivate = true); - - /** - This constructor differs from the above one only in the way it accepts - the list of supported properties. The properties argument is equivalent - to the first element of the properties array in the above constructor, - and therefore you cannot read all root window properties using it. - **/ - NETRootInfo(Display *display, unsigned long properties, int screen = -1, - bool doActivate = true); - - /** - Creates a shared copy of the specified NETRootInfo object. - - @param rootinfo the NETRootInfo object to copy - **/ - NETRootInfo(const NETRootInfo &rootinfo); - - /** - Destroys the NETRootInfo object. - **/ - virtual ~NETRootInfo(); - - /** - Returns the X11 Display struct used. - - @return the X11 Display - **/ - Display *x11Display() const; - - /** - Returns the Window id of the rootWindow. - - @return the id of the root window - **/ - Window rootWindow() const; - - /** - Returns the Window id of the supportWindow. - - @return the id of the support window - **/ - Window supportWindow() const; - - /** - Returns the name of the Window Manager. - - @return the name of the window manager - **/ - const char *wmName() const; - - /** - Returns the screenNumber. - - @return the screen number - **/ - int screenNumber() const; - - /** - Returns true if the given property is supported by the window - manager. Note that for Client mode, NET::Supported needs - to be passed in the properties argument for this to work. - @since 3.2 - **/ - bool isSupported( NET::Property property ) const; - /** - @overload - @since 3.2 - **/ - bool isSupported( NET::Property2 property ) const; - /** - @overload - @since 3.2 - **/ - bool isSupported( NET::WindowType type ) const; - /** - @overload - @since 3.2 - **/ - bool isSupported( NET::State state ) const; - - /** - @overload - @since 3.2 - **/ - bool isSupported( NET::Action action ) const; - - /** - In the Window Manager mode, this is equivalent to the properties - argument passed to the constructor. In the Client mode, if - NET::Supported was passed in the properties argument, the returned - value is array of all protocols and properties supported - by the Window Manager. The elements of the array are the same - as they would be passed to the Window Manager mode constructor, - the size is the maximum array size the constructor accepts. - - @since 3.2 - **/ - const unsigned long* supportedProperties() const; - - /** - Returns the properties argument passed to the constructor. - The size is the maximum array size the constructor accepts. - - @since 3.2 - **/ - // KDE4 better name? - const unsigned long* passedProperties() const; - - /** - @deprecated - - Returns an OR'ed list of protocols passed to the constructor. - For the constructor used by Window Managers, this is equivalent - to the first element of the properties argument, for the constructor - for Clients, it's the properties argument. - - Clients willing to find out all properties and protocols supported - by the WindowManager should use supportedProperties(). - - @return an OR'ed list of protocols - - @see NET::Property - **/ - unsigned long supported() const KDE_DEPRECATED; - - /** - Returns an array of Window id's, which contain all managed windows. - - @return the array of Window id's - - @see clientListCount() - **/ - const Window *clientList() const; - - /** - Returns the number of managed windows in clientList array. - - @return the number of managed windows in the clientList array - - @see clientList() - **/ - int clientListCount() const; - - /** - Returns an array of Window id's, which contain all managed windows in - stacking order. - - @return the array of Window id's in stacking order - - @see clientListStackingCount() - **/ - const Window *clientListStacking() const; - - /** - Returns the number of managed windows in the clientListStacking array. - - @return the number of Window id's in the client list - - @see clientListStacking() - **/ - int clientListStackingCount() const; - - /** - Returns an array of Window id's, which contain all KDE system tray windows. - - @return the array of Window id's of system tray windows - - @see kdeSystemTrayWindowsCount() - **/ - const Window *kdeSystemTrayWindows() const; - - /** - Returns the number of windows in the kdeSystemTrayWindows array. - - @return the number of Window id's in the system tray list - - @see kdeSystemTrayWindows() - **/ - int kdeSystemTrayWindowsCount() const; - - /** - Returns the desktop geometry size. - - The desktop argument is ignored. Early drafts of the NET WM - Specification were unclear about the semantics of this property. - - @param desktop the number of the desktop - - @return the size of the desktop - **/ - NETSize desktopGeometry(int desktop) const; - - /** - Returns the viewport of the specified desktop. - - @param desktop the number of the desktop - - @return the position of the desktop's viewport - **/ - NETPoint desktopViewport(int desktop) const; - - /** - Returns the workArea for the specified desktop. - - @param desktop the number of the desktop - - @return the size of the work area - **/ - NETRect workArea(int desktop) const; - - /** - Returns the name for the specified desktop. - - @param desktop the number of the desktop - - @return the name of the desktop - **/ - const char *desktopName(int desktop) const; - - /** - Returns an array of Window id's, which contain the virtual root windows. - - @return the array of Window id's - - @see virtualRootsCount() - **/ - const Window *virtualRoots( ) const; - - /** - Returns the number of window in the virtualRoots array. - - @return the number of Window id's in the virtual root array - - @see virtualRoots() - **/ - int virtualRootsCount() const; - - /** - Returns the desktop layout orientation. - **/ - NET::Orientation desktopLayoutOrientation() const; - - /** - Returns the desktop layout number of columns and rows. Note that - either may be 0 (see _NET_DESKTOP_LAYOUT). - **/ - TQSize desktopLayoutColumnsRows() const; - - /** - Returns the desktop layout starting corner. - **/ - NET::DesktopLayoutCorner desktopLayoutCorner() const; - - /** - Returns the number of desktops. - - @return the number of desktops - **/ - int numberOfDesktops() const; - - /** - Returns the current desktop. - - @return the number of the current desktop - **/ - int currentDesktop() const; - - /** - Returns the active (focused) window. - - @return the id of the active window - **/ - Window activeWindow() const; - - /** - Window Managers must call this after creating the NETRootInfo object, and - before using any other method in the class. This method sets initial data - on the root window and does other post-construction duties. - - Clients must also call this after creating the object to do an initial - data read/update. - **/ - void activate(); - - /** - Sets the list of managed windows on the Root/Desktop window. - - @param windows The array of Window id's - - @param count The number of windows in the array - **/ - // KDE4 'const Window*', also in the others below - void setClientList(Window *windows, unsigned int count); - - /** - Sets the list of managed windows in stacking order on the Root/Desktop - window. - - @param windows The array of Window id's - - @param count The number of windows in the array. - **/ - void setClientListStacking(Window *windows, unsigned int count); - - /** - Sets the list of KDE system tray windows on the root window. - - @param windows The array of window id's - - @param count The number of windows in the array. - **/ - void setKDESystemTrayWindows(Window *windows, unsigned int count); - - /** - Sets the current desktop to the specified desktop. - - @param desktop the number of the desktop - **/ - void setCurrentDesktop(int desktop); - - /** - Sets the desktop geometry to the specified geometry. - - The desktop argument is ignored. Early drafts of the NET WM - Specification were unclear about the semantics of this property. - - @param desktop the number of the desktop - - @param geometry the new size of the desktop - **/ - void setDesktopGeometry(int desktop, const NETSize &geometry); - - /** - Sets the viewport for the current desktop to the specified point. - - @param desktop the number of the desktop - - @param viewport the new position of the desktop's viewport - **/ - void setDesktopViewport(int desktop, const NETPoint &viewport); - - /** - Sets the number of desktops the the specified number. - - @param numberOfDesktops the number of desktops - **/ - void setNumberOfDesktops(int numberOfDesktops); - - /** - Sets the name of the specified desktop. - - @param desktop the number of the desktop - - @param desktopName the new name of the desktop - **/ - void setDesktopName(int desktop, const char *desktopName); - - /** - Requests that the specified window becomes the active (focused) one. - - @param window the id of the new active window - @param src whether the request comes from normal application - or from a pager or similar tool - @param timestamp X server timestamp of the user action that - caused the request - @param active_window active window of the requesting application, if any - - @since 3.2 - **/ - void setActiveWindow(Window window, NET::RequestSource src, - Time timestamp, Window active_window); - - /** - Sets the active (focused) window the specified window. This should - be used only in the window manager mode. - - @param window the if of the new active window - **/ - void setActiveWindow(Window window); - - /** - Sets the workarea for the specified desktop - - @param desktop the number of the desktop - - @param workArea the new work area of the desktop - **/ - void setWorkArea(int desktop, const NETRect &workArea); - - /** - Sets the list of virtual root windows on the root window. - - @param windows The array of Window id's - - @param count The number of windows in the array. - **/ - void setVirtualRoots(Window *windows, unsigned int count); - - /** - Sets the desktop layout. This is set by the pager. When setting, the pager must - own the _NET_DESKTOP_LAYOUT_Sn manager selection. See _NET_DESKTOP_LAYOUT for details. - **/ - void setDesktopLayout(NET::Orientation orientation, int columns, int rows, - NET::DesktopLayoutCorner corner); - - /** - * Sets the _NET_SHOWING_DESKTOP status (whether desktop is being shown). - * @since 3.5 - */ - void setShowingDesktop( bool showing ); - /** - * Returns the status of _NET_SHOWING_DESKTOP. - * @since 3.5 - */ - bool showingDesktop() const; - - /** - Assignment operator. Ensures that the shared data reference counts are - correct. - **/ - const NETRootInfo &operator=(const NETRootInfo &rootinfo); - - /** - Clients (such as pagers/taskbars) that wish to close a window should call - this function. This will send a request to the Window Manager, which - usually can usually decide how to react to such requests. - - @param window the id of the window to close - **/ - void closeWindowRequest(Window window); - - /** - Clients (such as pagers/taskbars) that wish to start a WMMoveResize - (where the window manager controls the resize/movement, - i.e. _NET_WM_MOVERESIZE) should call this function. - This will send a request to the Window Manager. - - @param window The client window that would be resized/moved. - - @param x_root X position of the cursor relative to the root window. - - @param y_root Y position of the cursor relative to the root window. - - @param direction One of NET::Direction (see base class documentation for - a description of the different directions). - **/ - void moveResizeRequest(Window window, int x_root, int y_root, - Direction direction); - - /** - Clients (such as pagers/taskbars) that wish to move/resize a window - using WM2MoveResizeWindow (_NET_MOVERESIZE_WINDOW) should call this function. - This will send a request to the Window Manager. See _NET_MOVERESIZE_WINDOW - description for details. - - @param window The client window that would be resized/moved. - @param flags Flags specifying the operation (see _NET_MOVERESIZE_WINDOW description) - @param x Requested X position for the window - @param y Requested Y position for the window - @param width Requested width for the window - @param height Requested height for the window - - @since 3.2 - **/ - void moveResizeWindowRequest(Window window, int flags, int x, int y, int width, int height ); - - /** - Sends the _NET_RESTACK_WINDOW request. - @since 3.3 - **/ - void restackRequest(Window window, RequestSource source, Window above, int detail, Time timestamp); - /** - @obsolete - @since 3.2 - **/ - void restackRequest(Window window, Window above, int detail); - - /** - This function takes the passed XEvent and returns an OR'ed list of - NETRootInfo properties that have changed in the properties argument. - The new information will be read immediately by the class. - The elements of the properties argument are as they would be passed - to the constructor, if the array is not large enough, - changed properties that don't fit in it won't be listed there - (they'll be updated in the class though). - - @param event the event - @param properties properties that changed - @param properties_size size of the passed properties array - @since 3.2 - - **/ - void event( XEvent* event, unsigned long* properties, int properties_size ); - - /** - This function takes the passed XEvent and returns an OR'ed list of - NETRootInfo properties that have changed. The new information will be - read immediately by the class. This overloaded version returns - only a single mask, and therefore cannot check state of all properties - like the other variant. - - @param event the event - - @return the properties - **/ - unsigned long event(XEvent *event); - - -protected: - /** - A Client should subclass NETRootInfo and reimplement this function when - it wants to know when a window has been added. - - @param window the id of the window to add - **/ - virtual void addClient(Window window) { Q_UNUSED(window); } - - /** - A Client should subclass NETRootInfo and reimplement this function when - it wants to know when a window has been removed. - - @param window the id of the window to remove - **/ - virtual void removeClient(Window window) { Q_UNUSED(window); } - - /** - A Client should subclass NETRootInfo and reimplement this function when - it wants to know when a system tray window has been added. This is a KDE 2.0 - extension. - - @param window the id of the window to add - **/ - virtual void addSystemTrayWin(Window window) { Q_UNUSED(window); } - - /** - A Client should subclass NETRootInfo and reimplement this function when - it wants to know when a system tray window has been removed. This is a KDE 2.0 - extension. - - @param window the id of the window to remove - **/ - virtual void removeSystemTrayWin(Window window) { Q_UNUSED(window); } - - /** - A Window Manager should subclass NETRootInfo and reimplement this function - when it wants to know when a Client made a request to change the number - of desktops. - - @param numberOfDesktops the new number of desktops - **/ - virtual void changeNumberOfDesktops(int numberOfDesktops) { Q_UNUSED(numberOfDesktops); } - - /** - A Window Manager should subclass NETRootInfo and reimplement this function - when it wants to know when a Client made a request to change the specified - desktop geometry. - - @param desktop the number of the desktop - - @param geom the new size - **/ - virtual void changeDesktopGeometry(int desktop, const NETSize &geom) { Q_UNUSED(desktop); Q_UNUSED(geom); } - - /** - A Window Manager should subclass NETRootInfo and reimplement this function - when it wants to know when a Client made a request to change the specified - desktop viewport. - - @param desktop the number of the desktop - - @param viewport the new position of the viewport - **/ - virtual void changeDesktopViewport(int desktop, const NETPoint &viewport) { Q_UNUSED(desktop); Q_UNUSED(viewport); } - - /** - A Window Manager should subclass NETRootInfo and reimplement this function - when it wants to know when a Client made a request to change the current - desktop. - - @param desktop the number of the desktop - **/ - virtual void changeCurrentDesktop(int desktop) { Q_UNUSED(desktop); } - - /** - @deprecated Use NETRootInfo2::changeActiveWindow() instead. - A Window Manager should subclass NETRootInfo and reimplement this function - when it wants to know when a Client made a request to change the active - (focused) window. The changeActiveWindow() method in NETRootInfo2 - should be used instead. - - @param window the id of the window to activate - **/ - virtual KDE_DEPRECATED void changeActiveWindow(Window window) { Q_UNUSED(window); } - - /** - A Window Manager should subclass NETRootInfo and reimplement this function - when it wants to know when a Client made a request to close a window. - - @param window the id of the window to close - **/ - virtual void closeWindow(Window window) { Q_UNUSED(window); } - - /** - A Window Manager should subclass NETRootInfo and reimplement this function - when it wants to know when a Client made a request to start a move/resize. - - @param window The window that wants to move/resize - - @param x_root X position of the cursor relative to the root window. - - @param y_root Y position of the cursor relative to the root window. - - @param direction One of NET::Direction (see base class documentation for - a description of the different directions). - **/ - virtual void moveResize(Window window, int x_root, int y_root, - unsigned long direction) { Q_UNUSED(window); Q_UNUSED(x_root); Q_UNUSED(y_root); Q_UNUSED(direction); } - - -private: - void update( const unsigned long[] ); - void setSupported(); - void setDefaultProperties(); - void updateSupportedProperties( Atom atom ); - Role role; - -protected: - virtual void virtual_hook( int id, void* data ); -private: - NETRootInfoPrivate *p; - friend class NETRootInfo2; - friend class NETRootInfo3; -}; - -/** - This class is an extension of the NETRootInfo class, and exists solely - for binary compatibility reasons (adds new virtual methods). Simply - use it instead of NETRootInfo and override also the added virtual methods. - @since 3.2 -*/ -class KDECORE_EXPORT NETRootInfo2 - : public NETRootInfo -{ -public: - NETRootInfo2(Display *display, Window supportWindow, const char *wmName, - unsigned long properties[], int properties_size, - int screen = -1, bool doActivate = true); - /** - * @since 3.5 - */ - NETRootInfo2(Display *display, const unsigned long properties[], int properties_size, - int screen = -1, bool doActivate = true); - /** - Sends a ping with the given timestamp to the window, using - the _NET_WM_PING protocol. - */ - void sendPing( Window window, Time timestamp ); -protected: - friend class NETRootInfo; - /** - A Window Manager should subclass NETRootInfo2 and reimplement this function - when it wants to receive replies to the _NET_WM_PING protocol. - @param window the window from which the reply came - @param timestamp timestamp of the ping - */ - virtual void gotPing( Window window, Time timestamp ) { Q_UNUSED(window); Q_UNUSED(timestamp); } - /** - A Window Manager should subclass NETRootInfo2 and reimplement this function - when it wants to know when a Client made a request to change the active - (focused) window. - - @param window the id of the window to activate - @param src the source from which the request came - @param timestamp the timestamp of the user action causing this request - @param active_window active window of the requesting application, if any - **/ - virtual void changeActiveWindow(Window window,NET::RequestSource src, - Time timestamp, Window active_window ) { Q_UNUSED(window); Q_UNUSED(src); Q_UNUSED(timestamp); Q_UNUSED(active_window);} - /** - A Window Manager should subclass NETRootInfo2 and reimplement this function - when it wants to know when a Client made a request to restack a window. - See _NET_RESTACK_WINDOW for details. - - @param window the id of the window to restack - @param above other window in the restack request - @param detail restack detail - **/ - virtual void restackWindow(Window window, Window above, int detail) { Q_UNUSED(window); Q_UNUSED(above); Q_UNUSED(detail); } - - /** - A Window Manager should subclass NETRootInfo2 and reimplement this function - when it wants to know when a pager made a request to move/resize a window. - See _NET_MOVERESIZE_WINDOW for details. - - @param window the id of the window to more/resize - @param flags Flags specifying the operation (see _NET_MOVERESIZE_WINDOW description) - @param x Requested X position for the window - @param y Requested Y position for the window - @param width Requested width for the window - @param height Requested height for the window - **/ - virtual void moveResizeWindow(Window window, int flags, int x, int y, int width, int height) { Q_UNUSED(window); Q_UNUSED(flags); Q_UNUSED(x); Q_UNUSED(y); Q_UNUSED(width); Q_UNUSED(height); } - -// no private data, use NETRootInfoPrivate -}; - -/** - This class is an extension of the NETRootInfo class, and exists solely - for binary compatibility reasons (adds new virtual methods). Simply - use it instead of NETRootInfo and override also the added virtual methods. - @since 3.3 -*/ -class KDECORE_EXPORT NETRootInfo3 - : public NETRootInfo2 -{ -public: - NETRootInfo3(Display *display, Window supportWindow, const char *wmName, - unsigned long properties[], int properties_size, - int screen = -1, bool doActivate = true); - /** - * @since 3.5 - */ - NETRootInfo3(Display *display, const unsigned long properties[], int properties_size, - int screen = -1, bool doActivate = true); - /** - Sends a take activity message with the given timestamp to the window, using - the _NET_WM_TAKE_ACTIVITY protocol (see the WM spec for details). - @param window the window to which the message should be sent - @param timestamp timestamp of the message - @param flags arbitrary flags - */ - void takeActivity( Window window, Time timestamp, long flags ); -protected: - friend class NETRootInfo; - /** - A Window Manager should subclass NETRootInfo3 and reimplement this function - when it wants to know when a Client made a request to restack a window. - See _NET_RESTACK_WINDOW for details. - - @param window the id of the window to restack - @param source the source of the request - @param above other window in the restack request - @param detail restack detail - @param timestamp the timestamp of the request - **/ - virtual void restackWindow(Window window, RequestSource source, - Window above, int detail, Time timestamp) { Q_UNUSED(window); Q_UNUSED(source); Q_UNUSED(above); Q_UNUSED(detail); Q_UNUSED(timestamp); } - /** - A Window Manager should subclass NETRootInfo3 and reimplement this function - when it wants to receive replies to the _NET_WM_TAKE_ACTIVITY protocol. - @param window the window from which the reply came - @param timestamp timestamp of the ping - @param flags flags passed in the original message - */ - virtual void gotTakeActivity(Window window, Time timestamp, long flags ) { Q_UNUSED(window); Q_UNUSED(timestamp); Q_UNUSED(flags); } -// no private data, use NETRootInfoPrivate -}; - -/** - This class is an extension of the NETRootInfo class, and exists solely - for binary compatibility reasons (adds new virtual methods). Simply - use it instead of NETRootInfo and override also the added virtual methods. - @since 3.5 -*/ -class KDECORE_EXPORT NETRootInfo4 - : public NETRootInfo3 -{ -public: - NETRootInfo4(Display *display, Window supportWindow, const char *wmName, - unsigned long properties[], int properties_size, - int screen = -1, bool doActivate = true); - NETRootInfo4(Display *display, const unsigned long properties[], int properties_size, - int screen = -1, bool doActivate = true); - -protected: - friend class NETRootInfo; - /** - A Window Manager should subclass NETRootInfo2 and reimplement this function - when it wants to know when a pager made a request to change showing the desktop. - See _NET_SHOWING_DESKTOP for details. - - @param showing whether to activate the showing desktop mode - **/ - virtual void changeShowingDesktop(bool showing) { Q_UNUSED(showing); } -// no private data, use NETRootInfoPrivate -}; - -/** - Common API for application window properties/protocols. - - The NETWinInfo class provides a common API for clients and window managers to - set/read/change properties on an application window as defined by the NET - Window Manager Specification. - - @author Bradley T. Hughes <bhughes@trolltech.com> - @see NET - @see NETRootInfo - @see KWin - @see http://www.freedesktop.org/standards/wm-spec/ - **/ - -class KDECORE_EXPORT NETWinInfo : public NET { -public: - /** - Indexes for the properties array. - @since 3.2 - **/ - // update also NETWinInfoPrivate::properties[] size when extending this - enum { PROTOCOLS, PROTOCOLS2, - PROPERTIES_SIZE }; - /** - Create a NETWinInfo object, which will be used to set/read/change - information stored on an application window. - - @param display An X11 Display struct. - - @param window The Window id of the application window. - - @param rootWindow The Window id of the root window. - - @param properties An array of elements listing all properties the client - is interested in.The elements contain OR'ed values of constants - from the NET base class, in the following order: [0]= NET::Property, - [1]= NET::Property2. - In future versions, the list may be extended. In case you pass less elements, - the missing ones will be replaced with default values. - - @param properties_size The number of elements in the properties array. - - @param role Select the application role. If this argument is omitted, - the role will default to Client. - - @since 3.2 - **/ - NETWinInfo(Display *display, Window window, Window rootWindow, - const unsigned long properties[], int properties_size, - Role role = Client); - - /** - This constructor differs from the above one only in the way it accepts - the list of properties the client is interested in. The properties argument - is equivalent to the first element of the properties array - in the above constructor. - **/ - NETWinInfo(Display *display, Window window, - Window rootWindow, unsigned long properties, - Role role = Client); - - /** - Creates a shared copy of the specified NETWinInfo object. - - @param wininfo the NETWinInfo to copy - **/ - NETWinInfo(const NETWinInfo & wininfo); - - /** - Destroys the NETWinInfo object. - **/ - virtual ~NETWinInfo(); - - /** - Assignment operator. Ensures that the shared data reference counts are - correct. - **/ - const NETWinInfo &operator=(const NETWinInfo &wintinfo); - - /** - Returns true if the window has any window type set, even if the type - itself is not known to this implementation. Presence of a window type - as specified by the NETWM spec is considered as the window supporting - this specification. - @since 3.2 - @return true if the window has support for the NETWM spec - **/ - bool hasNETSupport() const; - - /** - Returns the properties argument passed to the constructor. - The size is the maximum array size the constructor accepts. - - @since 3.2 - **/ - // KDE4 better name? - const unsigned long* passedProperties() const; - - /** - @deprecated - - Returns an OR'ed list of protocols passed to the constructor. - - @return an OR'ed list of protocols - - @see NET::Property - **/ - unsigned long properties() const KDE_DEPRECATED; - - /** - Returns the icon geometry. - - @return the geometry of the icon - **/ - NETRect iconGeometry() const; - - /** - Returns the state of the window (see the NET base class documentation for a - description of the various states). - - @return the state of the window - **/ - unsigned long state() const; - - /** - Returns the extended (partial) strut specified by this client. - See _NET_WM_STRUT_PARTIAL in the spec. - **/ - NETExtendedStrut extendedStrut() const; - - /** - @deprecated use strutPartial() - Returns the strut specified by this client. - - @return the strut of the window - **/ - NETStrut strut() const; - - /** - Returns the window type for this client (see the NET base class - documentation for a description of the various window types). - Since clients may specify several windows types for a window - in order to support backwards compatibility and extensions - not available in the NETWM spec, you should specify all - window types you application supports (see the NET::WindowTypeMask - mask values for various window types). This method will - return the first window type that is listed in the supported types, - or NET::Unknown if none of the window types is supported. - - @return the type of the window - @since 3.2 - **/ - WindowType windowType( unsigned long supported_types ) const; - - /** - @deprecated - Returns the window type for this client (see the NET base class - documentation for a description of the various window types). - - @return the type of the window - **/ - WindowType windowType() const KDE_DEPRECATED; - - /** - Returns the name of the window in UTF-8 format. - - @return the name of the window - **/ - const char *name() const; - - /** - Returns the visible name as set by the window manager in UTF-8 format. - - @return the visible name of the window - **/ - const char *visibleName() const; - - /** - Returns the iconic name of the window in UTF-8 format. Note that this has - nothing to do with icons, but it's for "iconic" - representations of the window (taskbars etc.), that should be shown - when the window is in iconic state. See description of _NET_WM_ICON_NAME - for details. - - @return the iconic name - **/ - const char *iconName() const; - - /** - Returns the visible iconic name as set by the window manager in UTF-8 format. - Note that this has nothing to do with icons, but it's for "iconic" - representations of the window (taskbars etc.), that should be shown - when the window is in iconic state. See description of _NET_WM_VISIBLE_ICON_NAME - for details. - - @return the visible iconic name - **/ - const char *visibleIconName() const; - - /** - Returns the desktop where the window is residing. - - @return the number of the window's desktop - - @see OnAllDesktops() - **/ - int desktop() const; - - /** - Returns the process id for the client window. - - @return the process id of the window - **/ - int pid() const; - - /** - Returns whether or not this client handles icons. - - @return true if this client handles icons, false otherwise - **/ - Bool handledIcons() const; - - /** - Returns a Window id, telling the window manager which window we are - representing. - - @return the window id - **/ - Window kdeSystemTrayWinFor() const; - - /** - Returns the mapping state for the window (see the NET base class - documentation for a description of mapping state). - - @return the mapping state - **/ - MappingState mappingState() const; - - /** - Set icons for the application window. If replace is True, then - the specified icon is defined to be the only icon. If replace is False, - then the specified icon is added to a list of icons. - - @param icon the new icon - - @param replace true to replace, false to append to the list of icons - **/ - void setIcon(NETIcon icon, Bool replace = True); - - /** - Set the icon geometry for the application window. - - @param geometry the new icon geometry - **/ - void setIconGeometry(NETRect geometry); - - /** - Set the extended (partial) strut for the application window. - - @param extended_strut the new strut - **/ - void setExtendedStrut(const NETExtendedStrut& extended_strut ); - - /** - @deprecated use setExtendedStrut() - Set the strut for the application window. - - @param strut the new strut - **/ - void setStrut(NETStrut strut); - - /** - Set the state for the application window (see the NET base class documentation - for a description of window state). Note that the constructor needs to be - passed NET::WMState in properties even if it's only used for setting the state - without reading it. - - @param state the name state - - @param mask the mask for the state - **/ - void setState(unsigned long state, unsigned long mask); - - /** - Sets the window type for this client (see the NET base class - documentation for a description of the various window types). - - @param type the window type - **/ - void setWindowType(WindowType type); - - /** - Sets the name for the application window. - - @param name the new name of the window - **/ - void setName(const char *name); - - /** - For Window Managers only: set the visible name ( i.e. xterm, xterm <2>, - xterm <3>, ... ) - - @param visibleName the new visible name - **/ - void setVisibleName(const char *visibleName); - - /** - Sets the iconic name for the application window. - - @param name the new iconic name - **/ - void setIconName(const char *name); - - /** - For Window Managers only: set the visible iconic name ( i.e. xterm, xterm <2>, - xterm <3>, ... ) - - @param name the new visible iconic name - **/ - void setVisibleIconName(const char *name); - - /** - Set which window the desktop is (should be) on. - - @param desktop the number of the new desktop - - @see OnAllDesktops() - **/ - void setDesktop(int desktop); - - /** - Set the application window's process id. - - @param pid the window's process id - **/ - void setPid(int pid); - - /** - Set whether this application window handles icons. - - @param handled true if the window handles icons, false otherwise - **/ - void setHandledIcons(Bool handled); - - /** - Set which window we are representing as a system tray window. - - @param window the window that is represented by the system tray icon - **/ - void setKDESystemTrayWinFor(Window window); - - /** - Set the frame decoration strut, i.e. the width of the decoration borders. - - @param strut the new strut - @since 3.5 - **/ - void setFrameExtents(NETStrut strut); - - /** - Set the frame decoration strut. This is a KDE 2.0 extension to aid in - writing pager applications. - - @param strut the new strut - **/ - void setKDEFrameStrut(NETStrut strut); - - /** - Returns an icon. If width and height are passed, the icon returned will be - the closest it can find (the next biggest). If width and height are omitted, - then the largest icon in the list is returned. - - @param width the preferred width for the icon, -1 to ignore - - @param height the preferred height for the icon, -1 to ignore - - @return the icon - **/ - NETIcon icon(int width = -1, int height = -1) const; - - /* - * Sets user timestamp @p time on the window (property _NET_WM_USER_TIME). - * The timestamp is expressed as XServer time. If a window - * is shown with user timestamp older than the time of the last - * user action, it won't be activated after being shown, with the special - * value 0 meaning not to activate the window after being shown. - * @since 3.2 - */ - void setUserTime( Time time ); - - /** - * Returns the time of last user action on the window, or -1 if not set. - * @since 3.2 - */ - Time userTime() const; - - /* - * Sets the startup notification id @p id on the window. - * @since 3.2 - */ - void setStartupId( const char* startup_id ); - - /** - * Returns the startup notification id of the window. - * @since 3.2 - */ - const char* startupId() const; - - /** - * Sets actions that the window manager allows for the window. - * @since 3.2 - */ - void setAllowedActions( unsigned long actions ); - - /** - * Returns actions that the window manager allows for the window. - * @since 3.2 - */ - unsigned long allowedActions() const; - - /* - * Returns the WM_TRANSIENT_FOR property for the window, i.e. the mainwindow - * for this window. - * @since 3.2 - */ - Window transientFor() const; - - /** - * Returns the leader window for the group the window is in, if any. - * @since 3.2 - */ - Window groupLeader() const; - - /** - * Returns the class component of the window class for the window - * (i.e. WM_CLASS property). - * @since 3.3 - */ - const char* windowClassClass() const; - - /** - * Returns the name component of the window class for the window - * (i.e. WM_CLASS property). - * @since 3.3 - */ - const char* windowClassName() const; - - /** - * Returns the window role for the window (i.e. WM_WINDOW_ROLE property). - * @since 3.3 - */ - const char* windowRole() const; - - /** - * Returns the client machine for the window (i.e. WM_CLIENT_MACHINE property). - * @since 3.3 - */ - const char* clientMachine() const; - - /** - Places the window frame geometry in frame, and the application window - geometry in window. Both geometries are relative to the root window. - - @param frame the geometry for the frame - - @param window the geometry for the window - **/ - void kdeGeometry(NETRect &frame, NETRect &window); - - /** - This function takes the passed XEvent and returns an OR'ed list of - NETWinInfo properties that have changed in the properties argument. - The new information will be read immediately by the class. - The elements of the properties argument are as they would be passed - to the constructor, if the array is not large enough, - changed properties that don't fit in it won't be listed there - (they'll be updated in the class though). - - @param event the event - @param properties properties that changed - @param properties_size size of the passed properties array - @since 3.2 - - **/ - void event( XEvent* event, unsigned long* properties, int properties_size ); - - /** - This function takes the pass XEvent and returns an OR'ed list of NETWinInfo - properties that have changed. The new information will be read - immediately by the class. This overloaded version returns - only a single mask, and therefore cannot check state of all properties - like the other variant. - - @param event the event - - @return the properties - **/ - unsigned long event(XEvent *event); - - /** - Sentinel value to indicate that the client wishes to be visible on - all desktops. - - @return the value to be on all desktops - **/ - static const int OnAllDesktops; - - -protected: - /** - A Window Manager should subclass NETWinInfo and reimplement this function when - it wants to know when a Client made a request to change desktops (ie. move to - another desktop). - - @param desktop the number of the desktop - **/ - virtual void changeDesktop(int desktop) { Q_UNUSED(desktop); } - - /** - A Window Manager should subclass NETWinInfo and reimplement this function when - it wants to know when a Client made a request to change state (ie. to - Shade / Unshade). - - @param state the new state - - @param mask the mask for the state - **/ - virtual void changeState(unsigned long state, unsigned long mask) { Q_UNUSED(state); Q_UNUSED(mask); } - -private: - void update( const unsigned long[] ); - void updateWMState(); - void setIconInternal(NETRArray<NETIcon>& icons, int& icon_count, Atom property, NETIcon icon, Bool replace); - NETIcon iconInternal(NETRArray<NETIcon>& icons, int icon_count, int width, int height) const; - Role role; - -protected: - virtual void virtual_hook( int id, void* data ); -private: - NETWinInfoPrivate *p; -}; - - -//#define KWIN_FOCUS - -#endif -#endif // __net_wm_h |