X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=inline;f=src%2Fclient.hh;h=a8d21458898deb4e9c433dead6e2a497ec4a677a;hb=781495e2eafd9dfe5592a2f5cefb905743208175;hp=ff119faf746b12961bbfb296b1de8fdc1576f3f3;hpb=4ef15148365c223b8e810611a10dc27dc5fba355;p=chaz%2Fopenbox
diff --git a/src/client.hh b/src/client.hh
index ff119faf..a8d21458 100644
--- a/src/client.hh
+++ b/src/client.hh
@@ -29,6 +29,11 @@ namespace ob {
class Frame;
class Screen;
+struct Icon {
+ unsigned long w, h;
+ unsigned long *data;
+};
+
//! The MWM Hints as retrieved from the window property
/*!
This structure only contains 3 elements, even though the Motif 2.0
@@ -136,22 +141,17 @@ public:
enum Decoration { Decor_Titlebar = 1 << 0, //!< Display a titlebar
Decor_Handle = 1 << 1, //!< Display a handle (bottom)
Decor_Border = 1 << 2, //!< Display a border
- Decor_Iconify = 1 << 3, //!< Display an iconify button
- Decor_Maximize = 1 << 4, //!< Display a maximize button
+ Decor_Icon = 1 << 3, //!< Display the window's icon
+ Decor_Iconify = 1 << 4, //!< Display an iconify button
+ Decor_Maximize = 1 << 5, //!< Display a maximize button
//! Display a button to toggle the window's placement on
//! all desktops
- Decor_AllDesktops = 1 << 5,
- Decor_Close = 1 << 6 //!< Display a close button
+ Decor_AllDesktops = 1 << 6,
+ Decor_Close = 1 << 7 //!< Display a close button
};
//! Holds a bitmask of Client::Decoration values
typedef unsigned char DecorationFlags;
- //! Possible actions that can be made with the _NET_WM_STATE client message
- enum StateAction { State_Remove = 0, //!< _NET_WM_STATE_REMOVE
- State_Add, //!< _NET_WM_STATE_ADD
- State_Toggle //!< _NET_WM_STATE_TOGGLE
- };
-
//! The event mask to grab on client windows
static const long event_mask = PropertyChangeMask | FocusChangeMask |
StructureNotifyMask;
@@ -313,6 +313,8 @@ private:
//! The window should be underneath other windows of the same type
bool _below;
+ //! The layer in which the window will be stacked, windows in lower layers
+ //! are always below windows in higher layers.
StackLayer _layer;
//! A bitmask of values in the Client::Decoration enum
@@ -335,6 +337,14 @@ private:
*/
FunctionFlags _functions;
+ //! Icons for the client as specified on the client window
+ Icon *_icons;
+ //! The number of icons in _icons
+ int _nicons;
+
+ Pixmap _pixmap_icon;
+ Pixmap _pixmap_icon_mask;
+
//! Retrieves the window's initial gravity
void getGravity();
//! Retrieves the desktop hint's value and sets Client::_desktop
@@ -369,7 +379,7 @@ private:
Client::applyStartupState is used to do the same things during the mapping
process.
*/
- void setState(StateAction action, long data1, long data2);
+ void setState(Atom action, long data1, long data2);
//! Sends the window to the specified desktop
void setDesktop(unsigned int desktop);
@@ -399,6 +409,10 @@ private:
void updateStrut();
//! Updates the window's transient status, and any parents of it
void updateTransientFor();
+ //! Updates the window's icons
+ void updateIcons();
+ //! Updates the window's kwm icon
+ void updateKwmIcon();
//! Change the client's state hints to match the class' data
void changeState();
@@ -419,6 +433,10 @@ private:
//! the topmost node (the window you're starting with).
Client *Client::searchModalTree(Client *node, Client *skip);
+ //! Recursively searches the client 'tree' for a focused client, always skips
+ //! the topmost node (the window you're starting with).
+ Client *Client::searchFocusTree(Client *node, Client *skip);
+
//! Fires the urgent callbacks which lets the user do what they want with
//! urgent windows
void fireUrgent();
@@ -460,8 +478,11 @@ private:
/*!
@param x The X coordinate to move to.
@param y The Y coordinate to move to.
+ @param final true if this is the final move, false if there are more move
+ events coming. The client is not notified of the move when
+ final is false.
*/
- void internal_move(int x, int y);
+ void internal_move(int x, int y, bool final = true);
//! Internal version of the Client::resize function
/*!
This also maintains things like the client's minsize, and size increments.
@@ -496,16 +517,14 @@ private:
void applyStartupState();
public:
-#ifndef SWIG
//! Constructs a new Client object around a specified window id
/*!
-BB @param window The window id that the Client class should handle
+ @param window The window id that the Client class should handle
@param screen The screen on which the window resides
*/
Client(int screen, Window window);
//! Destroys the Client object
virtual ~Client();
-#endif
//! Returns the screen on which the clien resides
inline int screen() const { return _screen; }
@@ -592,7 +611,7 @@ BB @param window The window id that the Client class should handle
inline bool skipPager() const { return _skip_pager; }
//! The window should not be displayed by taskbars
inline bool skipTaskbar() const { return _skip_taskbar; }
- //! Returns if the window is shaded
+ //! Returns if the window is shaded
/*!
When the window is shaded, only its titlebar is visible.
*/
@@ -622,19 +641,47 @@ BB @param window The window id that the Client class should handle
const otk::Size &logicalSize() const { return _logical_size; }
//! Returns the position and size of the client relative to the root window
+ /*!
+ Note that this value is *not* the size and position of the window's
+ frame, though the position will often line up.
+ If you want the frame's area, use Frame::area() instead.
+ */
inline const otk::Rect &area() const { return _area; }
//! Returns the client's strut definition
inline const otk::Strut &strut() const { return _strut; }
+ //! Returns an icon for the window
+ /*!
+ The icon chosen will be the smallest icon available that is still bigger or
+ equal to the specified Size.
+ If none that meet the requirements is found, the largest icon that is
+ smaller than the specified size will be returned.
+ */
+ const Icon *icon(const otk::Size &s) const;
+
+ //! Returns the pixmap for the pixmap icon specified on the window (or None)
+ /*!
+ The icon given by Client::icon should take precedence over this icon/mask.
+ */
+ Pixmap pixmapIcon() const { return _pixmap_icon; }
+ //! Returns the mask for the pixmap icon specified on the window (or None)
+ /*!
+ The icon given by Client::icon should take precedence over this icon/mask.
+ */
+ Pixmap pixmapIconMask() const { return _pixmap_icon_mask; }
+
//! Move the window (actually, its frame) to a position.
/*!
This moves the window so that the top-left corner of its frame will be at
the position specified.
@param x The X coordinate to move to.
@param y The Y coordinate to move to.
+ @param final true if this is the final move, false if there are more move
+ events coming. The client is not notified of the move when
+ final is false.
*/
- void move(int x, int y);
+ void move(int x, int y, bool final = true);
//! Resizes the client window, anchoring it in a given corner
/*!