]> Dogcows Code - chaz/openbox/blobdiff - src/Window.hh
sync with bb. mostly cleanups in Window.cc
[chaz/openbox] / src / Window.hh
index 6dda6558e89289d3ae86e53b808ca01eaec77f22..eb5baefb862335a47992baf8ec4a153f08f32a00 100644 (file)
@@ -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)
@@ -98,7 +103,7 @@ public:
                   Func_Iconify  = (1l << 2),
                   Func_Maximize = (1l << 3),
                   Func_Close    = (1l << 4) };
-  typedef unsigned int FunctionFlags;
+  typedef unsigned char FunctionFlags;
 
   enum Decoration { Decor_Titlebar = (1l << 0),
                     Decor_Handle   = (1l << 1),
@@ -106,12 +111,27 @@ public:
                     Decor_Iconify  = (1l << 3),
                     Decor_Maximize = (1l << 4),
                     Decor_Close    = (1l << 5) };
-  typedef unsigned int DecorationFlags;
+  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);
@@ -258,17 +288,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,11 +316,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; }
 
@@ -293,13 +334,13 @@ public:
   { return client.transientList; }
   BlackboxWindow *getTransientFor(void) const;
 
-  inline BScreen *getScreen(void) { return screen; }
+  inline BScreen *getScreen(void) const { return screen; }
 
   inline Window getFrameWindow(void) const { return frame.window; }
   inline Window getClientWindow(void) const { return client.window; }
   inline Window getGroupWindow(void) const { return client.window_group; }
 
-  inline Windowmenu * getWindowmenu(void) { return windowmenu; }
+  inline Windowmenu * getWindowmenu(void) const { return windowmenu; }
 
   inline const char *getTitle(void) const
   { return client.title.c_str(); }
@@ -318,22 +359,38 @@ public:
 
   inline void setWindowNumber(int n) { window_number = n; }
 
-  bool validateClient(void);
+  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 +398,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);
This page took 0.030557 seconds and 4 git commands to generate.