2002-11-06 07:01:59 +00:00
|
|
|
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
|
|
|
|
#ifndef __client_hh
|
|
|
|
#define __client_hh
|
|
|
|
|
2002-11-07 09:02:26 +00:00
|
|
|
/*! @file client.hh
|
|
|
|
@brief The OBClient class maintains the state of a client window by handling
|
|
|
|
property changes on the window and some client messages
|
|
|
|
*/
|
|
|
|
|
2002-11-06 07:01:59 +00:00
|
|
|
extern "C" {
|
|
|
|
#include <X11/Xlib.h>
|
2002-11-10 05:54:12 +00:00
|
|
|
|
|
|
|
#ifdef SHAPE
|
|
|
|
#include <X11/extensions/shape.h>
|
|
|
|
#endif // SHAPE
|
2002-11-06 07:01:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
#include "otk/strut.hh"
|
|
|
|
#include "otk/rect.hh"
|
|
|
|
|
|
|
|
namespace ob {
|
|
|
|
|
2002-11-10 04:08:26 +00:00
|
|
|
class OBFrame;
|
|
|
|
|
2002-11-07 08:22:50 +00:00
|
|
|
//! 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).
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
class OBClient {
|
|
|
|
public:
|
2002-11-10 04:08:26 +00:00
|
|
|
|
|
|
|
//! The frame window which decorates around the client window
|
|
|
|
OBFrame *frame;
|
|
|
|
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Possible window types
|
|
|
|
enum WindowType { Type_Desktop, //!< A desktop (bottom-most window)
|
|
|
|
Type_Dock, //!< A dock bar/panel window
|
|
|
|
Type_Toolbar, //!< A toolbar window, pulled off an app
|
|
|
|
Type_Menu, //!< A sticky menu from an app
|
|
|
|
Type_Utility, //!< A small utility window such as a palette
|
|
|
|
Type_Splash, //!< A splash screen window
|
|
|
|
Type_Dialog, //!< A dialog window
|
|
|
|
Type_Normal //!< A normal application window
|
2002-11-06 11:44:15 +00:00
|
|
|
};
|
2002-11-06 07:01:59 +00:00
|
|
|
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Possible flags for MWM Hints (defined by Motif 2.0)
|
|
|
|
enum MwmFlags { MwmFlag_Functions = 1 << 0, //!< The MMW Hints define funcs
|
|
|
|
MwmFlag_Decorations = 1 << 1 //!< The MWM Hints define decor
|
|
|
|
};
|
|
|
|
|
|
|
|
//! Possible functions for MWM Hints (defined by Motif 2.0)
|
|
|
|
enum MwmFunctions { MwmFunc_All = 1 << 0, //!< All functions
|
|
|
|
MwmFunc_Resize = 1 << 1, //!< Allow resizing
|
|
|
|
MwmFunc_Move = 1 << 2, //!< Allow moving
|
|
|
|
MwmFunc_Iconify = 1 << 3, //!< Allow to be iconfied
|
|
|
|
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
|
2002-11-06 11:31:50 +00:00
|
|
|
typedef unsigned char FunctionFlags;
|
|
|
|
|
2002-11-07 08:22:50 +00:00
|
|
|
//! The decorations the client window wants to be displayed on it
|
|
|
|
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
|
2002-11-10 08:12:53 +00:00
|
|
|
Decor_Sticky = 1 << 5, //!< Display a sticky button
|
|
|
|
Decor_Close = 1 << 6 //!< Display a close button
|
2002-11-07 08:22:50 +00:00
|
|
|
};
|
|
|
|
//! Holds a bitmask of OBClient::Decoration values
|
2002-11-06 11:31:50 +00:00
|
|
|
typedef unsigned char DecorationFlags;
|
|
|
|
|
2002-11-07 08:22:50 +00:00
|
|
|
//! The MWM Hints as retrieved from the window property
|
|
|
|
/*!
|
|
|
|
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.
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
typedef struct MwmHints {
|
2002-11-07 08:22:50 +00:00
|
|
|
//! The number of elements in the OBClient::MwmHints struct
|
2002-11-06 11:44:15 +00:00
|
|
|
static const unsigned int elements = 3;
|
2002-11-07 08:22:50 +00:00
|
|
|
unsigned long flags; //!< A bitmask of OBClient::MwmFlags values
|
|
|
|
unsigned long functions; //!< A bitmask of OBClient::MwmFunctions values
|
|
|
|
unsigned long decorations;//!< A bitmask of OBClient::MwmDecorations values
|
2002-11-06 07:01:59 +00:00
|
|
|
};
|
|
|
|
|
2002-11-07 08:22:50 +00:00
|
|
|
//! 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
|
2002-11-06 07:01:59 +00:00
|
|
|
};
|
|
|
|
|
2002-11-10 04:08:26 +00:00
|
|
|
//! The event mask to grab on client windows
|
2002-11-11 11:25:40 +00:00
|
|
|
static const long event_mask = PropertyChangeMask | FocusChangeMask;
|
2002-11-10 04:08:26 +00:00
|
|
|
|
2002-11-11 11:25:40 +00:00
|
|
|
//! The number of unmap events to ignore on the window
|
|
|
|
int ignore_unmaps;
|
|
|
|
|
2002-11-06 07:01:59 +00:00
|
|
|
private:
|
2002-11-10 04:08:26 +00:00
|
|
|
//! The screen number on which the client resides
|
|
|
|
int _screen;
|
|
|
|
|
2002-11-06 08:09:03 +00:00
|
|
|
//! The actual window that this class is wrapping up
|
2002-11-06 07:01:59 +00:00
|
|
|
Window _window;
|
|
|
|
|
|
|
|
//! The id of the group the window belongs to
|
2002-11-06 08:08:16 +00:00
|
|
|
Window _group;
|
2002-11-06 07:01:59 +00:00
|
|
|
|
|
|
|
// XXX: transient_for, transients
|
|
|
|
|
|
|
|
//! The desktop on which the window resides (0xffffffff for all desktops)
|
2002-11-06 09:04:48 +00:00
|
|
|
unsigned long _desktop;
|
2002-11-06 07:01:59 +00:00
|
|
|
|
|
|
|
//! Normal window title
|
2002-11-06 08:08:16 +00:00
|
|
|
std::string _title; // XXX: Have to keep track if this string is Utf8 or not
|
2002-11-06 07:01:59 +00:00
|
|
|
//! Window title when iconifiged
|
|
|
|
std::string _icon_title;
|
|
|
|
|
|
|
|
//! The application that created the window
|
|
|
|
std::string _app_name;
|
|
|
|
//! The class of the window, can used for grouping
|
|
|
|
std::string _app_class;
|
|
|
|
|
|
|
|
//! The type of window (what its function is)
|
|
|
|
WindowType _type;
|
|
|
|
|
|
|
|
//! Position and size of the window (relative to the root window)
|
|
|
|
otk::Rect _area;
|
|
|
|
|
2002-11-06 10:05:56 +00:00
|
|
|
//! Width of the border on the window.
|
|
|
|
/*!
|
|
|
|
The window manager will set this to 0 while the window is being managed,
|
|
|
|
but needs to restore it afterwards, so it is saved here.
|
|
|
|
*/
|
|
|
|
int _border_width;
|
|
|
|
|
2002-11-07 08:22:50 +00:00
|
|
|
//! The minimum width of the client window
|
|
|
|
/*!
|
|
|
|
If the min is > the max, then the window is not resizable
|
|
|
|
*/
|
|
|
|
int _min_x;
|
|
|
|
//! 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;
|
2002-11-06 07:01:59 +00:00
|
|
|
|
|
|
|
//! Where to place the decorated window in relation to the undecorated window
|
|
|
|
int _gravity;
|
|
|
|
|
|
|
|
//! The state of the window, one of WithdrawnState, IconicState, or
|
|
|
|
//! NormalState
|
2002-11-06 09:04:48 +00:00
|
|
|
long _wmstate;
|
2002-11-06 07:01:59 +00:00
|
|
|
|
2002-11-06 09:19:53 +00:00
|
|
|
//! Was the window's position requested by the application? if not, we should
|
|
|
|
//! place the window ourselves when it first appears
|
|
|
|
bool _positioned;
|
|
|
|
|
2002-11-06 07:01:59 +00:00
|
|
|
//! Can the window receive input focus?
|
|
|
|
bool _can_focus;
|
|
|
|
//! Urgency flag
|
|
|
|
bool _urgent;
|
|
|
|
//! Notify the window when it receives focus?
|
|
|
|
bool _focus_notify;
|
|
|
|
|
|
|
|
//! The window uses shape extension to be non-rectangular?
|
|
|
|
bool _shaped;
|
|
|
|
|
|
|
|
//! The window is modal, so it must be processed before any windows it is
|
|
|
|
//! related to can be focused
|
|
|
|
bool _modal;
|
|
|
|
//! Only the window's titlebar is displayed
|
|
|
|
bool _shaded;
|
|
|
|
//! The window is iconified
|
|
|
|
bool _iconic;
|
|
|
|
//! The window is maximized to fill the screen vertically
|
|
|
|
bool _max_vert;
|
|
|
|
//! The window is maximized to fill the screen horizontally
|
|
|
|
bool _max_horz;
|
|
|
|
//! The window is a 'fullscreen' window, and should be on top of all others
|
|
|
|
bool _fullscreen;
|
|
|
|
//! The window should be on top of other windows of the same type
|
|
|
|
bool _floating;
|
|
|
|
|
2002-11-06 11:31:50 +00:00
|
|
|
//! A bitmask of values in the OBClient::Decoration enum
|
|
|
|
/*!
|
|
|
|
The values in the variable are the decorations that the client wants to be
|
|
|
|
displayed around it.
|
|
|
|
*/
|
|
|
|
DecorationFlags _decorations;
|
|
|
|
|
|
|
|
//! A bitmask of values in the OBClient::Function enum
|
|
|
|
/*!
|
|
|
|
The values in the variable specify the ways in which the user is allowed to
|
|
|
|
modify this window.
|
|
|
|
*/
|
|
|
|
FunctionFlags _functions;
|
2002-11-06 07:01:59 +00:00
|
|
|
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Retrieves the desktop hint's value and sets OBClient::_desktop
|
2002-11-06 09:04:48 +00:00
|
|
|
void getDesktop();
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Retrieves the window's type and sets OBClient::_type
|
2002-11-06 09:04:48 +00:00
|
|
|
void getType();
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Gets the MWM Hints and adjusts OBClient::_functions and
|
|
|
|
//! OBClient::_decorations
|
2002-11-06 11:31:50 +00:00
|
|
|
void getMwmHints();
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Gets the position and size of the window and sets OBClient::_area
|
2002-11-06 09:04:48 +00:00
|
|
|
void getArea();
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Gets the net_state hint and sets the boolean flags for any states set in
|
|
|
|
//! the hint
|
2002-11-06 09:04:48 +00:00
|
|
|
void getState();
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Determines if the window uses the Shape extension and sets
|
|
|
|
//! OBClient::_shaped
|
2002-11-06 09:04:48 +00:00
|
|
|
void getShaped();
|
|
|
|
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Sets the wm_state to the specified value
|
2002-11-06 07:01:59 +00:00
|
|
|
void setWMState(long state);
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Sends the window to the specified desktop
|
2002-11-06 07:01:59 +00:00
|
|
|
void setDesktop(long desktop);
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Adjusts the window's net_state
|
2002-11-06 07:01:59 +00:00
|
|
|
void setState(StateAction action, long data1, long data2);
|
2002-11-06 10:05:56 +00:00
|
|
|
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Update the protocols that the window supports and adjusts things if they
|
|
|
|
//! change
|
2002-11-06 10:05:56 +00:00
|
|
|
void updateProtocols();
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Updates the WMNormalHints and adjusts things if they change
|
2002-11-06 07:01:59 +00:00
|
|
|
void updateNormalHints();
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Updates the WMHints and adjusts things if they change
|
2002-11-06 07:01:59 +00:00
|
|
|
void updateWMHints();
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Updates the window's title
|
2002-11-06 07:01:59 +00:00
|
|
|
void updateTitle();
|
2002-11-07 08:22:50 +00:00
|
|
|
//! Updates the window's icon title
|
|
|
|
void updateIconTitle();
|
|
|
|
//! Updates the window's application name and class
|
2002-11-06 07:01:59 +00:00
|
|
|
void updateClass();
|
2002-11-07 08:22:50 +00:00
|
|
|
// XXX: updateTransientFor();
|
2002-11-06 07:01:59 +00:00
|
|
|
|
|
|
|
public:
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Constructs a new OBClient object around a specified window id
|
|
|
|
/*!
|
|
|
|
@param window The window id that the OBClient class should handle
|
2002-11-10 04:08:26 +00:00
|
|
|
@param screen The screen on which the window resides
|
2002-11-07 09:02:26 +00:00
|
|
|
*/
|
2002-11-10 04:08:26 +00:00
|
|
|
OBClient(int screen, Window window);
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Destroys the OBClient object
|
2002-11-06 07:01:59 +00:00
|
|
|
virtual ~OBClient();
|
|
|
|
|
2002-11-10 04:08:26 +00:00
|
|
|
//! Returns the screen on which the clien resides
|
|
|
|
inline int screen() const { return _screen; }
|
|
|
|
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the window id that the OBClient object is handling
|
2002-11-06 07:01:59 +00:00
|
|
|
inline Window window() const { return _window; }
|
|
|
|
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the type of the window, one of the OBClient::WindowType values
|
2002-11-06 07:01:59 +00:00
|
|
|
inline WindowType type() const { return _type; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the desktop on which the window resides
|
|
|
|
/*!
|
|
|
|
This value is a 0-based index.<br>
|
|
|
|
A value of 0xffffffff indicates that the window exists on all desktops.
|
|
|
|
*/
|
2002-11-06 09:04:48 +00:00
|
|
|
inline unsigned long desktop() const { return _desktop; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the window's title
|
2002-11-06 07:01:59 +00:00
|
|
|
inline const std::string &title() const { return _title; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the window's title when it is iconified
|
2002-11-06 07:01:59 +00:00
|
|
|
inline const std::string &iconTitle() const { return _title; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the application's name to whom the window belongs
|
2002-11-06 07:01:59 +00:00
|
|
|
inline const std::string &appName() const { return _app_name; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the class of the window
|
2002-11-06 07:01:59 +00:00
|
|
|
inline const std::string &appClass() const { return _app_class; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the window can be focused
|
|
|
|
/*!
|
|
|
|
@return true if the window can receive focusl otherwise, false
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline bool canFocus() const { return _can_focus; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the window has indicated that it needs urgent attention
|
2002-11-06 07:01:59 +00:00
|
|
|
inline bool urgent() const { return _urgent; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the window wants to be notified when it receives focus
|
2002-11-06 07:01:59 +00:00
|
|
|
inline bool focusNotify() const { return _focus_notify; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the window uses the Shape extension
|
2002-11-06 07:01:59 +00:00
|
|
|
inline bool shaped() const { return _shaped; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the window's gravity
|
|
|
|
/*!
|
|
|
|
This value determines where to place the decorated window in relation to
|
|
|
|
its position without decorations.<br>
|
|
|
|
One of: NorthWestGravity, SouthWestGravity, EastGravity, ...,
|
|
|
|
SouthGravity, StaticGravity, ForgetGravity
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline int gravity() const { return _gravity; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the application requested the initial position for the window
|
|
|
|
/*!
|
|
|
|
If the application did not request a position (this function returns false)
|
|
|
|
then the window should be placed intelligently by the window manager
|
|
|
|
initially
|
|
|
|
*/
|
2002-11-06 10:18:38 +00:00
|
|
|
inline bool positionRequested() const { return _positioned; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the decorations that the client window wishes to be displayed on
|
|
|
|
//! it
|
2002-11-06 11:31:50 +00:00
|
|
|
inline DecorationFlags decorations() const { return _decorations; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the functions that the user can perform on the window
|
2002-11-06 11:31:50 +00:00
|
|
|
inline FunctionFlags funtions() const { return _functions; }
|
2002-11-06 07:01:59 +00:00
|
|
|
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the window is modal
|
|
|
|
/*!
|
|
|
|
If the window is modal, then no other windows that it is related to can get
|
|
|
|
focus while it exists/remains modal.
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline bool modal() const { return _modal; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the window is shaded
|
|
|
|
/*!
|
|
|
|
When the window is shaded, only its titlebar is visible, the client itself
|
|
|
|
is not mapped
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline bool shaded() const { return _shaded; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the window is iconified
|
|
|
|
/*!
|
|
|
|
When the window is iconified, it is not visible at all (except in iconbars/
|
|
|
|
panels/etc that want to show lists of iconified windows
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline bool iconic() const { return _iconic; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the window is maximized vertically
|
2002-11-06 07:01:59 +00:00
|
|
|
inline bool maxVert() const { return _max_vert; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the window is maximized horizontally
|
2002-11-06 07:01:59 +00:00
|
|
|
inline bool maxHorz() const { return _max_horz; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the window is fullscreen
|
|
|
|
/*!
|
|
|
|
When the window is fullscreen, it is kept above all others
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline bool fullscreen() const { return _fullscreen; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns if the window is floating
|
|
|
|
/*!
|
|
|
|
When the window is floating, it is kept above all others in the same
|
|
|
|
stacking layer as it
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline bool floating() const { return _floating; }
|
|
|
|
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the window's border width
|
|
|
|
/*!
|
|
|
|
The border width is set to 0 when the client becomes managed, but the
|
|
|
|
border width is stored here so that it can be restored to the client window
|
|
|
|
when it is unmanaged later.
|
|
|
|
*/
|
2002-11-06 10:18:38 +00:00
|
|
|
inline int borderWidth() const { return _border_width; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the minimum width of the client window
|
|
|
|
/*!
|
|
|
|
If the min is > the max, then the window is not resizable
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline int minX() const { return _min_x; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the minimum height of the client window
|
|
|
|
/*!
|
|
|
|
If the min is > the max, then the window is not resizable
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline int minY() const { return _min_y; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the maximum width of the client window
|
|
|
|
/*!
|
|
|
|
If the min is > the max, then the window is not resizable
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline int maxX() const { return _max_x; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the maximum height of the client window
|
|
|
|
/*!
|
|
|
|
If the min is > the max, then the window is not resizable
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline int maxY() const { return _max_y; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the increment size for resizing the window (for the width)
|
2002-11-06 07:01:59 +00:00
|
|
|
inline int incrementX() const { return _inc_x; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the increment size for resizing the window (for the height)
|
2002-11-06 07:01:59 +00:00
|
|
|
inline int incrementY() const { return _inc_y; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the base width of the 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
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline int baseX() const { return _base_x; }
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the base height of the 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
|
|
|
|
*/
|
2002-11-06 07:01:59 +00:00
|
|
|
inline int baseY() const { return _base_y; }
|
|
|
|
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Returns the position and size of the client relative to the root window
|
2002-11-06 07:01:59 +00:00
|
|
|
inline const otk::Rect &area() const { return _area; }
|
|
|
|
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Updates the OBClient class from a property change XEvent
|
2002-11-06 07:01:59 +00:00
|
|
|
void update(const XPropertyEvent &e);
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Processes a client message XEvent for the window and causes an action
|
|
|
|
//! or whatever was specified to occur
|
2002-11-06 07:01:59 +00:00
|
|
|
void update(const XClientMessageEvent &e);
|
2002-11-10 05:54:12 +00:00
|
|
|
#if defined(SHAPE) || defined(DOXYGEN_IGNORE)
|
|
|
|
//! Updates the client's shape status
|
|
|
|
void update(const XShapeEvent &e);
|
|
|
|
#endif
|
2002-11-06 09:04:48 +00:00
|
|
|
|
2002-11-07 09:02:26 +00:00
|
|
|
//! Changes the stored positions and size of the OBClient window
|
|
|
|
/*!
|
|
|
|
This does not actually change the physical geometry, that needs to be done
|
|
|
|
before/after setting this value to keep it in sync
|
|
|
|
*/
|
2002-11-06 09:04:48 +00:00
|
|
|
void setArea(const otk::Rect &area);
|
2002-11-06 07:01:59 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // __client_hh
|