add a bunch of documentation
add updateIconTitle
This commit is contained in:
parent
8b041e2f5c
commit
b0149ef3fd
1 changed files with 131 additions and 58 deletions
189
src/client.hh
189
src/client.hh
|
@ -13,70 +13,93 @@ extern "C" {
|
||||||
|
|
||||||
namespace ob {
|
namespace ob {
|
||||||
|
|
||||||
|
//! Maintains the state of a client window.
|
||||||
|
/*!
|
||||||
|
OBClient maintains the state of a client window. The state consists of the
|
||||||
|
hints that the application sets on the window, such as the title, or window
|
||||||
|
gravity.
|
||||||
|
<p>
|
||||||
|
OBClient also manages client messages for the client window. When the
|
||||||
|
application (or any application) requests something to be changed for the
|
||||||
|
client, it will call the ActionHandler (for client messages) or update the
|
||||||
|
class' member variables and call whatever is nessary to complete the
|
||||||
|
change (such as causing a redraw of the titlebar after the title is changed).
|
||||||
|
*/
|
||||||
class OBClient {
|
class OBClient {
|
||||||
public:
|
public:
|
||||||
enum Max { Max_None,
|
//! Possible window types
|
||||||
Max_Horz,
|
enum WindowType { Type_Desktop, //!< A desktop (bottom-most window)
|
||||||
Max_Vert,
|
Type_Dock, //!< A dock bar/panel window
|
||||||
Max_Full };
|
Type_Toolbar, //!< A toolbar window, pulled off an app
|
||||||
|
Type_Menu, //!< A sticky menu from an app
|
||||||
enum WindowType { Type_Desktop,
|
Type_Utility, //!< A small utility window such as a palette
|
||||||
Type_Dock,
|
Type_Splash, //!< A splash screen window
|
||||||
Type_Toolbar,
|
Type_Dialog, //!< A dialog window
|
||||||
Type_Menu,
|
Type_Normal //!< A normal application window
|
||||||
Type_Utility,
|
|
||||||
Type_Splash,
|
|
||||||
Type_Dialog,
|
|
||||||
Type_Normal };
|
|
||||||
|
|
||||||
enum MwmFlags { MwmFlag_Functions = 1 << 0,
|
|
||||||
MwmFlag_Decorations = 1 << 1 };
|
|
||||||
|
|
||||||
enum MwmFunctions { MwmFunc_All = 1 << 0,
|
|
||||||
MwmFunc_Resize = 1 << 1,
|
|
||||||
MwmFunc_Move = 1 << 2,
|
|
||||||
MwmFunc_Iconify = 1 << 3,
|
|
||||||
MwmFunc_Maximize = 1 << 4
|
|
||||||
//MwmFunc_Close = 1 << 5
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum MemDecorations { MwmDecor_All = 1 << 0,
|
//! Possible flags for MWM Hints (defined by Motif 2.0)
|
||||||
MwmDecor_Border = 1 << 1,
|
enum MwmFlags { MwmFlag_Functions = 1 << 0, //!< The MMW Hints define funcs
|
||||||
MwmDecor_Handle = 1 << 2,
|
MwmFlag_Decorations = 1 << 1 //!< The MWM Hints define decor
|
||||||
MwmDecor_Title = 1 << 3,
|
};
|
||||||
//MwmDecor_Menu = 1 << 4,
|
|
||||||
MwmDecor_Iconify = 1 << 5,
|
|
||||||
MwmDecor_Maximize = 1 << 6 };
|
|
||||||
|
|
||||||
// the things the user can do to the client window
|
//! Possible functions for MWM Hints (defined by Motif 2.0)
|
||||||
enum Function { Func_Resize = 1 << 0,
|
enum MwmFunctions { MwmFunc_All = 1 << 0, //!< All functions
|
||||||
Func_Move = 1 << 1,
|
MwmFunc_Resize = 1 << 1, //!< Allow resizing
|
||||||
Func_Iconify = 1 << 2,
|
MwmFunc_Move = 1 << 2, //!< Allow moving
|
||||||
Func_Maximize = 1 << 3,
|
MwmFunc_Iconify = 1 << 3, //!< Allow to be iconfied
|
||||||
Func_Close = 1 << 4 };
|
MwmFunc_Maximize = 1 << 4 //!< Allow to be maximized
|
||||||
|
//MwmFunc_Close = 1 << 5 //!< Allow to be closed
|
||||||
|
};
|
||||||
|
|
||||||
|
//! Possible decorations for MWM Hints (defined by Motif 2.0)
|
||||||
|
enum MemDecorations { MwmDecor_All = 1 << 0, //!< All decorations
|
||||||
|
MwmDecor_Border = 1 << 1, //!< Show a border
|
||||||
|
MwmDecor_Handle = 1 << 2, //!< Show a handle (bottom)
|
||||||
|
MwmDecor_Title = 1 << 3, //!< Show a titlebar
|
||||||
|
//MwmDecor_Menu = 1 << 4, //!< Show a menu
|
||||||
|
MwmDecor_Iconify = 1 << 5, //!< Show an iconify button
|
||||||
|
MwmDecor_Maximize = 1 << 6 //!< Show a maximize button
|
||||||
|
};
|
||||||
|
|
||||||
|
//! The things the user can do to the client window
|
||||||
|
enum Function { Func_Resize = 1 << 0, //!< Allow resizing
|
||||||
|
Func_Move = 1 << 1, //!< Allow moving
|
||||||
|
Func_Iconify = 1 << 2, //!< Allow to be iconified
|
||||||
|
Func_Maximize = 1 << 3, //!< Allow to be maximized
|
||||||
|
Func_Close = 1 << 4 //!< Allow to be closed
|
||||||
|
};
|
||||||
|
//! Holds a bitmask of OBClient::Function values
|
||||||
typedef unsigned char FunctionFlags;
|
typedef unsigned char FunctionFlags;
|
||||||
|
|
||||||
// the decorations the client window wants to be displayed on it
|
//! The decorations the client window wants to be displayed on it
|
||||||
enum Decoration { Decor_Titlebar = 1 << 0,
|
enum Decoration { Decor_Titlebar = 1 << 0, //!< Display a titlebar
|
||||||
Decor_Handle = 1 << 1,
|
Decor_Handle = 1 << 1, //!< Display a handle (bottom)
|
||||||
Decor_Border = 1 << 2,
|
Decor_Border = 1 << 2, //!< Display a border
|
||||||
Decor_Iconify = 1 << 3,
|
Decor_Iconify = 1 << 3, //!< Display an iconify button
|
||||||
Decor_Maximize = 1 << 4,
|
Decor_Maximize = 1 << 4, //!< Display a maximize button
|
||||||
Decor_Close = 1 << 5 };
|
Decor_Close = 1 << 5 //!< Display a close button
|
||||||
|
};
|
||||||
|
//! Holds a bitmask of OBClient::Decoration values
|
||||||
typedef unsigned char DecorationFlags;
|
typedef unsigned char DecorationFlags;
|
||||||
|
|
||||||
// this structure only contains 3 elements... the Motif 2.0 structure
|
//! The MWM Hints as retrieved from the window property
|
||||||
// contains 5... we only need the first 3... so that is all we will define
|
/*!
|
||||||
|
This structure only contains 3 elements, even though the Motif 2.0
|
||||||
|
structure contains 5. We only use the first 3, so that is all gets defined.
|
||||||
|
*/
|
||||||
typedef struct MwmHints {
|
typedef struct MwmHints {
|
||||||
|
//! The number of elements in the OBClient::MwmHints struct
|
||||||
static const unsigned int elements = 3;
|
static const unsigned int elements = 3;
|
||||||
unsigned long flags;
|
unsigned long flags; //!< A bitmask of OBClient::MwmFlags values
|
||||||
unsigned long functions;
|
unsigned long functions; //!< A bitmask of OBClient::MwmFunctions values
|
||||||
unsigned long decorations;
|
unsigned long decorations;//!< A bitmask of OBClient::MwmDecorations values
|
||||||
};
|
};
|
||||||
|
|
||||||
enum StateAction { State_Remove = 0, // _NET_WM_STATE_REMOVE
|
//! Possible actions that can be made with the _NET_WM_STATE client message
|
||||||
State_Add, // _NET_WM_STATE_ADD
|
enum StateAction { State_Remove = 0, //!< _NET_WM_STATE_REMOVE
|
||||||
State_Toggle // _NET_WM_STATE_TOGGLE
|
State_Add, //!< _NET_WM_STATE_ADD
|
||||||
|
State_Toggle //!< _NET_WM_STATE_TOGGLE
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -114,12 +137,42 @@ private:
|
||||||
*/
|
*/
|
||||||
int _border_width;
|
int _border_width;
|
||||||
|
|
||||||
// size bounds
|
//! The minimum width of the client window
|
||||||
// if min > max, then the window is not resizable
|
/*!
|
||||||
int _min_x, _min_y; // minumum size
|
If the min is > the max, then the window is not resizable
|
||||||
int _max_x, _max_y; // maximum size
|
*/
|
||||||
int _inc_x, _inc_y; // resize increments
|
int _min_x;
|
||||||
int _base_x, _base_y; // base size
|
//! The minimum height of the client window
|
||||||
|
/*!
|
||||||
|
If the min is > the max, then the window is not resizable
|
||||||
|
*/
|
||||||
|
int _min_y;
|
||||||
|
//! The maximum width of the client window
|
||||||
|
/*!
|
||||||
|
If the min is > the max, then the window is not resizable
|
||||||
|
*/
|
||||||
|
int _max_x;
|
||||||
|
//! The maximum height of the client window
|
||||||
|
/*!
|
||||||
|
If the min is > the max, then the window is not resizable
|
||||||
|
*/
|
||||||
|
int _max_y;
|
||||||
|
//! The size of increments to resize the client window by (for the width)
|
||||||
|
int _inc_x;
|
||||||
|
//! The size of increments to resize the client window by (for the height)
|
||||||
|
int _inc_y;
|
||||||
|
//! The base width of the client window
|
||||||
|
/*!
|
||||||
|
This value should be subtracted from the window's actual width when
|
||||||
|
displaying its size to the user, or working with its min/max width
|
||||||
|
*/
|
||||||
|
int _base_x;
|
||||||
|
//! The base height of the client window
|
||||||
|
/*!
|
||||||
|
This value should be subtracted from the window's actual height when
|
||||||
|
displaying its size to the user, or working with its min/max height
|
||||||
|
*/
|
||||||
|
int _base_y;
|
||||||
|
|
||||||
//! Where to place the decorated window in relation to the undecorated window
|
//! Where to place the decorated window in relation to the undecorated window
|
||||||
int _gravity;
|
int _gravity;
|
||||||
|
@ -172,23 +225,43 @@ private:
|
||||||
*/
|
*/
|
||||||
FunctionFlags _functions;
|
FunctionFlags _functions;
|
||||||
|
|
||||||
|
//! Retrieves the desktop hint's value and sets OBClient::_desktop
|
||||||
void getDesktop();
|
void getDesktop();
|
||||||
|
//! Retrieves the window's type and sets OBClient::_type
|
||||||
void getType();
|
void getType();
|
||||||
|
//! Gets the MWM Hints and adjusts OBClient::_functions and
|
||||||
|
//! OBClient::_decorations
|
||||||
void getMwmHints();
|
void getMwmHints();
|
||||||
|
//! Gets the position and size of the window and sets OBClient::_area
|
||||||
void getArea();
|
void getArea();
|
||||||
|
//! Gets the net_state hint and sets the boolean flags for any states set in
|
||||||
|
//! the hint
|
||||||
void getState();
|
void getState();
|
||||||
|
//! Determines if the window uses the Shape extension and sets
|
||||||
|
//! OBClient::_shaped
|
||||||
void getShaped();
|
void getShaped();
|
||||||
|
|
||||||
|
//! Sets the wm_state to the specified value
|
||||||
void setWMState(long state);
|
void setWMState(long state);
|
||||||
|
//! Sends the window to the specified desktop
|
||||||
void setDesktop(long desktop);
|
void setDesktop(long desktop);
|
||||||
|
//! Adjusts the window's net_state
|
||||||
void setState(StateAction action, long data1, long data2);
|
void setState(StateAction action, long data1, long data2);
|
||||||
|
|
||||||
|
//! Update the protocols that the window supports and adjusts things if they
|
||||||
|
//! change
|
||||||
void updateProtocols();
|
void updateProtocols();
|
||||||
|
//! Updates the WMNormalHints and adjusts things if they change
|
||||||
void updateNormalHints();
|
void updateNormalHints();
|
||||||
|
//! Updates the WMHints and adjusts things if they change
|
||||||
void updateWMHints();
|
void updateWMHints();
|
||||||
// XXX: updateTransientFor();
|
//! Updates the window's title
|
||||||
void updateTitle();
|
void updateTitle();
|
||||||
|
//! Updates the window's icon title
|
||||||
|
void updateIconTitle();
|
||||||
|
//! Updates the window's application name and class
|
||||||
void updateClass();
|
void updateClass();
|
||||||
|
// XXX: updateTransientFor();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
OBClient(Window window);
|
OBClient(Window window);
|
||||||
|
|
Loading…
Reference in a new issue