X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FWindow.hh;h=6cc5deed80d699e8ff38c38fe6924244b06b14ce;hb=ca316865793bc9b4f1833cb7ab90c7dfc5dd9891;hp=038a58affc578613e8ab3cdfbe6c28d0942d70b2;hpb=9ccebf111819c77108c179b906d824cb2a2a790d;p=chaz%2Fopenbox diff --git a/src/Window.hh b/src/Window.hh index 038a58af..6cc5deed 100644 --- a/src/Window.hh +++ b/src/Window.hh @@ -108,6 +108,20 @@ 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; @@ -132,8 +146,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 +168,7 @@ private: std::string title, icon_title; Rect rect; + Strut strut; int old_bw; // client's borderwidth @@ -158,12 +176,14 @@ private: 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; @@ -173,6 +193,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,11 +256,14 @@ 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); @@ -258,17 +283,22 @@ private: 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: @@ -281,12 +311,21 @@ 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; } + // is a 'normal' window? meaning, a standard client application + inline bool isNormal(void) const + { return window_type == Type_Dialog || window_type == Type_Normal; } + 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 @@ -321,6 +360,19 @@ 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); @@ -331,26 +383,26 @@ public: 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 setWorkspace(unsigned int n); - void changeBlackboxHints(BlackboxHints *net); + void changeBlackboxHints(const 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);