]> Dogcows Code - chaz/openbox/blobdiff - src/client.hh
highlight the popup
[chaz/openbox] / src / client.hh
index d43984cbff9b1cb9a3cb9382081f9fdf4447568e..6e11ed8c27ead0e191ca9b0c8573e8dd797b17fa 100644 (file)
@@ -7,8 +7,7 @@
   property changes on the window and some client messages
 */
 
-#include "widgetbase.hh"
-#include "otk/point.hh"
+#include "screen.hh"
 #include "otk/strut.hh"
 #include "otk/rect.hh"
 #include "otk/eventhandler.hh"
@@ -28,6 +27,7 @@ extern "C" {
 namespace ob {
 
 class Frame;
+class Screen;
 
 //! The MWM Hints as retrieved from the window property
 /*!
@@ -54,7 +54,7 @@ struct MwmHints {
   class' member variables and call whatever is nessary to complete the
   change (such as causing a redraw of the titlebar after the title is changed).
 */
-class Client : public otk::EventHandler, public WidgetBase {
+class Client : public otk::EventHandler {
 public:
 
   //! The frame window which decorates around the client window
@@ -227,7 +227,7 @@ private:
     For example, with xterms, this value it the number of characters being
     displayed in the terminal, instead of the number of pixels.
   */
-  otk::Point   _logical_size;
+  otk::Size   _logical_size;
 
   //! Width of the border on the window.
   /*!
@@ -251,20 +251,20 @@ private:
   /*!
     If the min is > the max, then the window is not resizable
   */
-  otk::Point _min_size;
+  otk::Size _min_size;
   //! The maximum size of the client window
   /*!
     If the min is > the max, then the window is not resizable
   */
-  otk::Point _max_size;
+  otk::Size _max_size;
   //! The size of increments to resize the client window by
-  otk::Point _size_inc;
+  otk::Size _size_inc;
   //! The base size of the client window
   /*!
     This value should be subtracted from the window's actual size when
     displaying its size to the user, or working with its min/max size
   */
-  otk::Point _base_size;
+  otk::Size _base_size;
 
   //! Window decoration and functionality hints
   MwmHints _mwmhints;
@@ -295,6 +295,9 @@ private:
   //! The window uses shape extension to be non-rectangular?
   bool _shaped;
 
+  //! If the window has a modal child window, then this will point to it
+  Client *_modal_child;
+
   //! The window is modal, so it must be processed before any windows it is
   //! related to can be focused
   bool _modal;
@@ -381,6 +384,11 @@ private:
     by sending it to any other valid desktop.
   */
   void setDesktop(long desktop);
+  //! Set whether the window is modal or not
+  /*!
+    This adjusts references in parents etc to match.
+  */
+  void setModal(bool modal);
   
   //! Calculates the stacking layer for the client window
   void calcLayer();
@@ -431,8 +439,24 @@ private:
   /*!
     @param fs true if the window should be made fullscreen; false if it should
               be returned to normal state.
+    @param savearea true to have the client's current size and position saved;
+                    otherwise, they are not. You should not save when mapping a
+                    new window that is set to fullscreen. This has no effect
+                    when restoring a window from fullscreen.
+  */
+  void fullscreen(bool fs, bool savearea = true);
+
+  //! Maximize or unmaximize the client window
+  /*!
+    @param max true if the window should be maximized; false if it should be
+               returned to normal size.
+    @param dir 0 to set both horz and vert, 1 to set horz, 2 to set vert.
+    @param savearea true to have the client's current size and position saved;
+                    otherwise, they are not. You should not save when mapping a
+                    new window that is set to fullscreen. This has no effect
+                    when unmaximizing a window.
   */
-  void fullscreen(bool fs);
+  void maximize(bool max, int dir, bool savearea = true);
 
   //! Internal version of the Client::move function
   /*!
@@ -455,9 +479,27 @@ private:
     The x and y coordinates must both be sepcified together, or they will have
     no effect. When they are specified, the anchor is ignored.
   */
-  void internal_resize(Corner anchor, int w, int h, bool user = true,
-                       int x = INT_MIN, int y = INT_MIN);
+  void internal_resize(Corner anchor, unsigned int w, unsigned int h,
+                       bool user = true, int x = INT_MIN, int y = INT_MIN);
+
+  //! Attempts to find and return a modal child of this window, recursively.
+  Client *findModalChild(Client *skip = 0) const;
+
+  //! Removes or reapplies the client's border to its window
+  /*!
+    Used when managing and unmanaging a window.
+    @param addborder true if adding the border to the client; false if removing
+                     from the client
+  */
+  void toggleClientBorder(bool addborder);
 
+  //! Applies the states requested when the window mapped
+  /*!
+    This should be called only once, during the window mapping process. It
+    applies things like maximized, and fullscreen.
+  */
+  void applyStartupState();
+  
 public:
 #ifndef SWIG
   //! Constructs a new Client object around a specified window id
@@ -513,6 +555,8 @@ BB    @param window The window id that the Client class should handle
   inline bool urgent() const { return _urgent; }
   //! Returns if the window wants to be notified when it receives focus
   inline bool focusNotify() const { return _focus_notify; }
+  //! Returns if the window is the focused window
+  inline bool focused() const { return _focused; }
   //! Returns if the window uses the Shape extension
   inline bool shaped() const { return _shaped; }
   //! Returns the window's gravity
@@ -543,6 +587,9 @@ BB    @param window The window id that the Client class should handle
   //! Return the client this window is transient for
   inline Client *transientFor() const { return _transient_for; }
 
+  //! Returns the window which is a modal child of this window
+  inline Client *modalChild() const { return _modal_child; }
+  
   //! Returns if the window is modal
   /*!
     If the window is modal, then no other windows that it is related to can get
@@ -580,22 +627,7 @@ BB    @param window The window id that the Client class should handle
     For example, with xterms, this value it the number of characters being
     displayed in the terminal, instead of the number of pixels.
   */
-  const otk::Point &logicalSize() const { return _logical_size; }
-
-  //! Applies the states requested when the window mapped
-  /*!
-    This should be called only once, during the window mapping process. It
-    applies things like maximized, and fullscreen.
-  */
-  void applyStartupState();
-  
-  //! Removes or reapplies the client's border to its window
-  /*!
-    Used when managing and unmanaging a window.
-    @param addborder true if adding the border to the client; false if removing
-                     from the client
-  */
-  void toggleClientBorder(bool addborder);
+  const otk::Size &logicalSize() const { return _logical_size; }
 
   //! Returns the position and size of the client relative to the root window
   inline const otk::Rect &area() const { return _area; }
@@ -603,8 +635,10 @@ BB    @param window The window id that the Client class should handle
   //! Returns the client's strut definition
   inline const otk::Strut &strut() const { return _strut; }
 
-  //! Move the client window
+  //! Move the window (actually, its frame) to a position.
   /*!
+    This moves the window so that the top-left corner of its frame will be at
+    the position specified.
     @param x The X coordinate to move to.
     @param y The Y coordinate to move to.
   */
@@ -617,8 +651,15 @@ BB    @param window The window id that the Client class should handle
     @param w The width component of the new size for the client.
     @param h The height component of the new size for the client.
   */
-  void resize(Corner anchor, int w, int h);
+  void resize(Corner anchor, unsigned int w, unsigned int h);
 
+  //! Reapplies the maximized state to the window
+  /*!
+    Use this to make the window readjust its maximized size to new
+    surroundings (struts, etc).
+  */
+  void remaximize();
+  
   //! Choose a mask of decorations to not display on the client
   /*!
     Pass a value of 0 to the function to turn all decorations back on. Note
@@ -643,6 +684,8 @@ BB    @param window The window id that the Client class should handle
   */
   bool validate() const;
 
+  void installColormap(bool install) const;
+  
   virtual void focusHandler(const XFocusChangeEvent &e);
   virtual void unfocusHandler(const XFocusChangeEvent &e);
   virtual void propertyHandler(const XPropertyEvent &e);
@@ -654,7 +697,10 @@ BB    @param window The window id that the Client class should handle
   virtual void mapRequestHandler(const XMapRequestEvent &e);
 #if defined(SHAPE)
   virtual void shapeHandler(const XShapeEvent &e);
-#endif // SHAPE 
+#endif // SHAPE
+
+  friend void Screen::manageWindow(Window);
+  friend void Screen::unmanageWindow(Client *);
 };
 
 }
This page took 0.031245 seconds and 4 git commands to generate.