#include "Timer.hh"
#include "Util.hh"
#include "Windowmenu.hh"
-#include "Workspace.hh"
-#include "Screen.hh"
-
-class XAtom;
-class BInput;
#define MwmHintsFunctions (1l << 0)
#define MwmHintsDecorations (1l << 1)
Blackbox *blackbox;
BScreen *screen;
XAtom *xatom;
- BInput *input;
BTimer *timer;
BlackboxAttributes blackbox_attrib;
unsigned int window_number;
unsigned long current_state;
+ unsigned int mod_mask; // the mod mask used to grab buttons
enum FocusMode { F_NoInput = 0, F_Passive,
F_LocallyActive, F_GloballyActive };
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;
- unsigned long initial_state, normal_hint_flags, wm_hint_flags;
+ unsigned long initial_state, normal_hint_flags;
} client;
FunctionFlags functions;
/*
* what decorations do we have?
* this is based on the type of the client window as well as user input
- * the menu is not really decor, but it goes hand in hand with the decor
*/
DecorationFlags decorations;
+ DecorationFlags mwm_decorations;
Corner resize_dir;
WindowType window_type;
Window createToplevelWindow();
Window createChildWindow(Window parent, Cursor = None);
- void getWindowType(void);
+ bool getWindowType(void);
void updateStrut(void);
void getWMName(void);
void getWMIconName(void);
void getMWMHints(void);
bool getBlackboxHints(void);
void getTransientInfo(void);
- bool isKDESystrayWindow(void);
void setNetWMAttributes(void);
void associateClientWindow(void);
void decorate(void);
void setState(unsigned long new_state);
void upsize(void);
void doMove(int x_root, int y_root);
+ void doWorkspaceWarping(int x_root, int y_root, int &dx);
+ void doWindowSnapping(int &dx, int &dy);
void endMove(void);
void doResize(int x_root, int y_root);
void endResize(void);
- void constrain(Corner anchor, int *pw = 0, int *ph = 0);
+ void constrain(Corner anchor, unsigned int *pw = 0, unsigned int *ph = 0);
public:
BlackboxWindow(Blackbox *b, Window w, BScreen *s);
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 isMovable(void) const { return functions & Func_Move; }
inline bool isClosable(void) const { return functions & Func_Close; }
- inline bool isDesktop(void) const { return window_type == Type_Desktop; }
+ // is a 'normal' window? meaning, a standard client application
+ inline bool isNormal(void) const
+ { return window_type == Type_Dialog || window_type == Type_Normal ||
+ window_type == Type_Toolbar || window_type == Type_Utility; }
+ inline bool isTopmost(void) const
+ { return window_type == Type_Toolbar || window_type == Type_Utility; }
+ inline bool isDesktop(void) const { return window_type == Type_Desktop; }
+
inline bool hasTitlebar(void) const { return decorations & Decor_Titlebar; }
inline const BlackboxWindowList &getTransients(void) const
void beginMove(int x_root, int y_root);
void beginResize(int x_root, int y_root, Corner dir);
+ void enableDecor(bool enable);
+ void setupDecor();
void setFocusFlag(bool focus);
void iconify(void);
void deiconify(bool reassoc = True, bool raise = True);
void show(void);
- void showWindowMenu(int root_x, int root_y);
void close(void);
void withdraw(void);
void maximize(unsigned int button);
void remaximize(void);
void shade(void);
void stick(void);
- void raise(void);
- void lower(void);
void reconfigure(void);
void grabButtons(void);
void ungrabButtons(void);
void restore(bool remap);
void configure(int dx, int dy, unsigned int dw, unsigned int dh);
void setWorkspace(unsigned int n);
- void changeBlackboxHints(BlackboxHints *net);
+ void changeBlackboxHints(const BlackboxHints *net);
void restoreAttributes(void);
void buttonPressEvent(const XButtonEvent *be);
void buttonReleaseEvent(const XButtonEvent *re);
void motionNotifyEvent(const XMotionEvent *me);
- void destroyNotifyEvent(const XDestroyWindowEvent */*unused*/);
+ void destroyNotifyEvent(const XDestroyWindowEvent* /*unused*/);
void mapRequestEvent(const XMapRequestEvent *mre);
- void unmapNotifyEvent(const XUnmapEvent */*unused*/);
- void reparentNotifyEvent(const XReparentEvent */*unused*/);
- void propertyNotifyEvent(Atom atom);
+ 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);
+ void enterNotifyEvent(const XCrossingEvent *ce);
+ void leaveNotifyEvent(const XCrossingEvent* /*unused*/);
#ifdef SHAPE
void configureShape(void);