#include "otk/strut.hh"
#include "otk/rect.hh"
#include "otk/eventhandler.hh"
+#include "otk/ustring.hh"
extern "C" {
#include <X11/Xlib.h>
};
//! 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
+ 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_Shade = 1 << 4, //!< Allow to be shaded
+ Func_Fullscreen = 1 << 5, //!< Allow to be made fullscreen
+ Func_Close = 1 << 6 //!< Allow to be closed
};
//! Holds a bitmask of Client::Function values
typedef unsigned char FunctionFlags;
long _desktop;
//! Normal window title
- std::string _title; // XXX: Have to keep track if this string is Utf8 or not
+ otk::ustring _title;
//! Window title when iconifiged
- std::string _icon_title;
+ otk::ustring _icon_title;
//! The application that created the window
std::string _app_name;
*/
FunctionFlags _functions;
+ //! Retrieves the window's initial gravity
+ void getGravity();
//! Retrieves the desktop hint's value and sets Client::_desktop
void getDesktop();
//! Retrieves the window's type and sets Client::_type
//! Sets the wm_state to the specified value
void setWMState(long state);
//! Adjusts the window's net_state
+ /*!
+ This should not be called as part of the window mapping process! It is for
+ use when updating the state post-mapping.<br>
+ Client::applyStartupState is used to do the same things during the mapping
+ process.
+ */
void setState(StateAction action, long data1, long data2);
//! Sends the window to the specified desktop
//! Change the client's state hints to match the class' data
void changeState();
+ //! Change the allowed actions set on the client
+ void changeAllowedActions();
//! Request the client to close its window.
void close();
unshaded.
*/
void shade(bool shade);
-
+
+ //! Fullscreen's or unfullscreen's the client window
+ /*!
+ @param fs true if the window should be made fullscreen; false if it should
+ be returned to normal state.
+ */
+ void fullscreen(bool fs);
+
+ //! Internal version of the Client::move function
+ /*!
+ @param x The X coordinate to move to.
+ @param y The Y coordinate to move to.
+ */
+ void internal_move(int x, int y);
+ //! Internal version of the Client::resize function
+ /*!
+ This also maintains things like the client's minsize, and size increments.
+ @param anchor The corner to keep in the same position when resizing.
+ @param w The width component of the new size for the client.
+ @param h The height component of the new size for the client.
+ @param x An optional X coordinate to which the window will be moved
+ after resizing.
+ @param y An optional Y coordinate to which the window will be moved
+ after resizing.
+ The x and y coordinates must both be sepcified together, or they will have
+ no effect. When they are specified, the anchor is ignored.
+ */
+ void internal_resize(Corner anchor, int w, int h,
+ int x = INT_MIN, int y = INT_MIN);
+
public:
#ifndef SWIG
//! Constructs a new Client object around a specified window id
*/
inline long desktop() const { return _desktop; }
//! Returns the window's title
- inline const std::string &title() const { return _title; }
+ inline const otk::ustring &title() const { return _title; }
//! Returns the window's title when it is iconified
- inline const std::string &iconTitle() const { return _title; }
+ inline const otk::ustring &iconTitle() const { return _title; }
//! Returns the application's name to whom the window belongs
inline const std::string &appName() const { return _app_name; }
//! Returns the class of the window
When the window is shaded, only its titlebar is visible.
*/
inline bool shaded() const { return _shaded; }
+ //! Returns if the window is in fullscreen mode
+ inline bool fullscreen() const { return _fullscreen; }
//! Returns if the window is iconified
/*!
When the window is iconified, it is not visible at all (except in iconbars/
//! Returns the window's stacking layer
inline StackLayer layer() const { return _layer; }
+ //! Applies the states requested when the window mapped
+ /*!
+ This should be called only once, during the window mapping process. It
+ applies things like maximized, and fullscreen.
+ */
+ void applyStartupState();
+
//! Removes or reapplies the client's border to its window
/*!
Used when managing and unmanaging a window.
@param anchor The corner to keep in the same position when resizing.
@param w The width component of the new size for the client.
@param h The height component of the new size for the client.
- @param x An optional X coordinate to which the window will be moved
- after resizing.
- @param y An optional Y coordinate to which the window will be moved
- after resizing.
- The x and y coordinates must both be sepcified together, or they will have
- no effect. When they are specified, the anchor is ignored.
*/
- void resize(Corner anchor, int w, int h, int x = INT_MIN, int y = INT_MIN);
+ void resize(Corner anchor, int w, int h);
//! Attempt to focus the client window
bool focus() const;