Decor_Close = (1l << 5) };
typedef unsigned char DecorationFlags;
+ enum WindowType { Type_Desktop,
+ Type_Dock,
+ Type_Toolbar,
+ Type_Menu,
+ Type_Utility,
+ Type_Splash,
+ Type_Dialog,
+ Type_Normal };
+
+ enum Corner { TopLeft,
+ TopRight,
+ BottomLeft,
+ BottomRight };
+
private:
Blackbox *blackbox;
BScreen *screen;
visible, // is visible?
iconic, // is iconified?
focused, // has focus?
- stuck, // is omnipresent
+ stuck, // is omnipresent?
modal, // is modal? (must be dismissed to continue)
+ skip_taskbar, // skipped by taskbars?
+ skip_pager, // skipped by pagers?
+ fullscreen, // a fullscreen window?
send_focus_message, // should we send focus messages to our client?
shaped; // does the frame use the shape extension?
unsigned int maximized; // maximize is special, the number corresponds
std::string title, icon_title;
Rect rect;
+ Strut strut;
int old_bw; // client's borderwidth
min_width, min_height, // can not be resized smaller
max_width, max_height, // can not be resized larger
width_inc, height_inc, // increment step
+#if 0 // not supported at the moment
min_aspect_x, min_aspect_y, // minimum aspect ratio
max_aspect_x, max_aspect_y, // maximum aspect ratio
+#endif
base_width, base_height,
win_gravity;
* the menu is not really decor, but it goes hand in hand with the decor
*/
DecorationFlags decorations;
+ Corner resize_dir;
+ WindowType window_type;
/*
* client window = the application's window
Window createToplevelWindow();
Window createChildWindow(Window parent, Cursor = None);
+ void getWindowType(void);
+ void updateStrut(void);
void getWMName(void);
void getWMIconName(void);
void getWMNormalHints(void);
void getWMProtocols(void);
void getWMHints(void);
+ void getNetWMHints(void);
void getMWMHints(void);
bool getBlackboxHints(void);
void getTransientInfo(void);
+ bool isKDESystrayWindow(void);
void setNetWMAttributes(void);
void associateClientWindow(void);
void decorate(void);
void destroyIconifyButton(void);
void createMaximizeButton(void);
void destroyMaximizeButton(void);
- void redrawLabel(void);
- void redrawAllButtons(void);
- void redrawCloseButton(bool pressed);
- void redrawIconifyButton(bool pressed);
- void redrawMaximizeButton(bool pressed);
- void restoreGravity(void);
- void setGravityOffsets(void);
+ void redrawWindowFrame(void) const;
+ void redrawLabel(void) const;
+ void redrawAllButtons(void) const;
+ void redrawCloseButton(bool pressed) const;
+ void redrawIconifyButton(bool pressed) const;
+ void redrawMaximizeButton(bool pressed) const;
+ void applyGravity(Rect &r);
+ void restoreGravity(Rect &r);
+ void setAllowedActions(void);
void setState(unsigned long new_state);
void upsize(void);
+ void doMove(int x_root, int y_root);
+ void endMove(void);
+ void doResize(int x_root, int y_root);
+ void endResize(void);
- enum Corner { TopLeft, TopRight };
void constrain(Corner anchor, int *pw = 0, int *ph = 0);
public:
inline bool isIconic(void) const { return flags.iconic; }
inline bool isShaded(void) const { return flags.shaded; }
inline bool isMaximized(void) const { return flags.maximized; }
+ inline bool isMaximizedHoriz(void) const { return flags.maximized == 3; }
+ inline bool isMaximizedVert(void) const { return flags.maximized == 2; }
+ inline bool isMaximizedFull(void) const { return flags.maximized == 1; }
inline bool isStuck(void) const { return flags.stuck; }
+ inline bool isModal(void) const { return flags.modal; }
inline bool isIconifiable(void) const { return functions & Func_Iconify; }
inline bool isMaximizable(void) const { return functions & Func_Maximize; }
inline bool isResizable(void) const { return functions & Func_Resize; }
inline bool isClosable(void) const { return functions & Func_Close; }
+ inline bool isDesktop(void) const { return window_type == Type_Desktop; }
inline bool hasTitlebar(void) const { return decorations & Decor_Titlebar; }
bool validateClient(void) const;
bool setInputFocus(void);
+ // none of these are used by the window manager, they are here to persist
+ // them properly in the window's netwm state property.
+ inline bool skipTaskbar(void) const { return flags.skip_taskbar; }
+ inline void setSkipTaskbar(const bool s) { flags.skip_taskbar = s; }
+ inline bool skipPager(void) const { return flags.skip_pager; }
+ inline void setSkipPager(const bool s) { flags.skip_pager = s; }
+ inline bool isFullscreen(void) const { return flags.fullscreen; }
+ inline void setFullscreen(const bool f) { flags.fullscreen = f; }
+
+ inline void setModal(const bool m) { flags.modal = m; }
+
+ void beginMove(int x_root, int y_root);
+ void beginResize(int x_root, int y_root, Corner dir);
void setFocusFlag(bool focus);
void iconify(void);
void deiconify(bool reassoc = True, bool raise = True);
void remaximize(void);
void shade(void);
void stick(void);
- void unstick(void);
void reconfigure(void);
- void updateFocusModel(void);
+ void grabButtons(void);
+ void ungrabButtons(void);
void installColormap(bool install);
void restore(bool remap);
void configure(int dx, int dy, unsigned int dw, unsigned int dh);
void changeBlackboxHints(BlackboxHints *net);
void restoreAttributes(void);
- void buttonPressEvent(XButtonEvent *be);
- void buttonReleaseEvent(XButtonEvent *re);
- void motionNotifyEvent(XMotionEvent *me);
- void destroyNotifyEvent(XDestroyWindowEvent */*unused*/);
- void mapRequestEvent(XMapRequestEvent *mre);
- void unmapNotifyEvent(XUnmapEvent */*unused*/);
- void reparentNotifyEvent(XReparentEvent */*unused*/);
- void propertyNotifyEvent(Atom atom);
- void exposeEvent(XExposeEvent *ee);
- void configureRequestEvent(XConfigureRequestEvent *cr);
+ void buttonPressEvent(const XButtonEvent *be);
+ void buttonReleaseEvent(const XButtonEvent *re);
+ void motionNotifyEvent(const XMotionEvent *me);
+ void destroyNotifyEvent(const XDestroyWindowEvent */*unused*/);
+ void mapRequestEvent(const XMapRequestEvent *mre);
+ void unmapNotifyEvent(const XUnmapEvent */*unused*/);
+ void reparentNotifyEvent(const XReparentEvent */*unused*/);
+ void propertyNotifyEvent(const XPropertyEvent *pe);
+ void exposeEvent(const XExposeEvent *ee);
+ void configureRequestEvent(const XConfigureRequestEvent *cr);
#ifdef SHAPE
void configureShape(void);