X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FWindow.hh;h=ea5c0d733c07f41a68655a1827b24faa2783ba92;hb=351a06655bdd7d440780b5bc5b255081c888044b;hp=038a58affc578613e8ab3cdfbe6c28d0942d70b2;hpb=9ccebf111819c77108c179b906d824cb2a2a790d;p=chaz%2Fopenbox diff --git a/src/Window.hh b/src/Window.hh index 038a58af..ea5c0d73 100644 --- a/src/Window.hh +++ b/src/Window.hh @@ -38,6 +38,11 @@ extern "C" { #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) @@ -108,10 +113,25 @@ public: 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; XAtom *xatom; + BInput *input; BTimer *timer; BlackboxAttributes blackbox_attrib; @@ -132,8 +152,11 @@ private: 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 @@ -151,6 +174,7 @@ private: std::string title, icon_title; Rect rect; + Strut strut; int old_bw; // client's borderwidth @@ -173,6 +197,8 @@ private: * 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 @@ -234,14 +260,18 @@ private: 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); @@ -265,10 +295,14 @@ private: void redrawMaximizeButton(bool pressed); void restoreGravity(void); void setGravityOffsets(void); + 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: @@ -281,11 +315,17 @@ 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 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; } inline bool hasTitlebar(void) const { return decorations & Decor_Titlebar; } @@ -321,19 +361,35 @@ public: 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 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 unstick(void); + void raise(void); + void lower(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); @@ -341,16 +397,16 @@ public: 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 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(Atom atom); - void exposeEvent(XExposeEvent *ee); - void configureRequestEvent(XConfigureRequestEvent *cr); + void exposeEvent(const XExposeEvent *ee); + void configureRequestEvent(const XConfigureRequestEvent *cr); #ifdef SHAPE void configureShape(void);