]> Dogcows Code - chaz/openbox/blobdiff - src/Window.hh
remove debug cout
[chaz/openbox] / src / Window.hh
index 038a58affc578613e8ab3cdfbe6c28d0942d70b2..6cc5deed80d699e8ff38c38fe6924244b06b14ce 100644 (file)
@@ -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);
This page took 0.024188 seconds and 4 git commands to generate.