]> Dogcows Code - chaz/openbox/blobdiff - src/client.hh
maximizing!
[chaz/openbox] / src / client.hh
index 123193d437c9c470a276a852c9690dbd88d86a28..7539a7c8ed4512d2b13340e4004ce890a64ca99a 100644 (file)
@@ -164,6 +164,10 @@ public:
   static const long no_propagate_mask = ButtonPressMask | ButtonReleaseMask |
                                         ButtonMotionMask;
 
+  //! The desktop value which indicated the window is iconified and not on any
+  //! desktop
+  static const long ICONIC_DESKTOP = 0xfffffffe;
+
   //! The number of unmap events to ignore on the window
   int ignore_unmaps;
   
@@ -232,6 +236,17 @@ private:
   */
   int _border_width;
 
+  //! The minimum aspect ratio the client window can be sized to.
+  /*!
+    A value of 0 means this is ignored.
+  */
+  float _min_ratio;
+  //! The maximum aspect ratio the client window can be sized to.
+  /*!
+    A value of 0 means this is ignored.
+  */
+  float _max_ratio;
+  
   //! The minimum size of the client window
   /*!
     If the min is > the max, then the window is not resizable
@@ -261,6 +276,9 @@ private:
   //! NormalState
   long _wmstate;
 
+  //! True if the client supports the delete_window protocol
+  bool _delete_window;
+  
   //! Was the window's position requested by the application? if not, we should
   //! place the window ourselves when it first appears
   bool _positioned;
@@ -308,6 +326,12 @@ private:
   */
   DecorationFlags _decorations;
 
+  //! A bitmask of values in the Client::Decoration enum.
+  /*!
+    Specifies the decorations that should NOT be displayed on the client.
+  */
+  DecorationFlags _disabled_decorations;
+
   //! A bitmask of values in the Client::Function enum
   /*!
     The values in the variable specify the ways in which the user is allowed to
@@ -352,6 +376,10 @@ private:
   void setState(StateAction action, long data1, long data2);
 
   //! Sends the window to the specified desktop
+  /*!
+    A window is iconified by sending it to the ICONIC_DESKTOP, and restored
+    by sending it to any other valid desktop.
+  */
   void setDesktop(long desktop);
   
   //! Calculates the stacking layer for the client window
@@ -363,7 +391,12 @@ private:
   //! Updates the WMNormalHints and adjusts things if they change
   void updateNormalHints();
   //! Updates the WMHints and adjusts things if they change
-  void updateWMHints();
+  /*!
+    @param initstate Whether to read the initial_state property from the
+                     WMHints. This should only be used during the mapping
+                     process.
+  */
+  void updateWMHints(bool initstate = false);
   //! Updates the window's title
   void updateTitle();
   //! Updates the window's icon title
@@ -390,12 +423,30 @@ private:
   */
   void shade(bool shade);
 
+  //! Fires the urgent callbacks which lets the user do what they want with
+  //! urgent windows
+  void fireUrgent();
+  
   //! Fullscreen's or unfullscreen's the client window
   /*!
     @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.
   */
-  void fullscreen(bool fs);
+  void fullscreen(bool fs, bool savearea);
+
+  //! 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.
+  */
+  void maximize(bool max, int dir, bool savearea);
 
   //! Internal version of the Client::move function
   /*!
@@ -409,6 +460,8 @@ private:
     @param anchor The corner to keep in the same position when resizing.
     @param w The width component of the new size for the client.
     @param h The height component of the new size for the client.
+    @param user Specifies whether this is a user-requested change or a
+                program requested change.
     @param x An optional X coordinate to which the window will be moved
              after resizing.
     @param y An optional Y coordinate to which the window will be moved
@@ -416,7 +469,7 @@ 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,
+  void internal_resize(Corner anchor, int w, int h, bool user = true,
                        int x = INT_MIN, int y = INT_MIN);
 
 public:
@@ -494,6 +547,10 @@ BB    @param window The window id that the Client class should handle
   //! Returns the decorations that the client window wishes to be displayed on
   //! it
   inline DecorationFlags decorations() const { return _decorations; }
+  //! Returns the decorations that the user has requested to be disabled on the
+  //! client
+  inline DecorationFlags disabledDecorations() const
+    { return _disabled_decorations; }
   //! Returns the functions that the user can perform on the window
   inline FunctionFlags funtions() const { return _functions; }
 
@@ -506,7 +563,11 @@ BB    @param window The window id that the Client class should handle
     focus while it exists/remains modal.
   */
   inline bool modal() const { return _modal; }
-  //! Returns if the window is shaded
+  //! The window should not be displayed by pagers
+  inline bool skipPager() const { return _skip_pager; }
+  //! The window should not be displayed by taskbars
+  inline bool skipTaskbar() const { return _skip_taskbar; } 
+ //! Returns if the window is shaded
   /*!
     When the window is shaded, only its titlebar is visible.
   */
@@ -526,6 +587,15 @@ BB    @param window The window id that the Client class should handle
   //! Returns the window's stacking layer
   inline StackLayer layer() const { return _layer; }
 
+  //! Returns the logical size of the window
+  /*!
+    The "logical" size of the window is refers to the user's perception of the
+    size of the window, and is the value that should be displayed to the user.
+    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
@@ -563,12 +633,30 @@ BB    @param window The window id that the Client class should handle
   */
   void resize(Corner anchor, int w, int h);
 
+  //! 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
+    that you cannot add decorations to a window with this, you can only remove
+    decorations that would otherwise have been displayed.
+    @param flags The mask of values from Client::Decoration to specify which
+                 decorations should not be displayed.
+  */
+  void disableDecorations(DecorationFlags flags);
+  
   //! Attempt to focus the client window
-  bool focus() const;
+  bool focus();
 
   //! Remove focus from the client window
   void unfocus() const;
 
+  //! Validate client, by making sure no Destroy or Unmap events exist in
+  //! the event queue for the window.
+  /*!
+    @return true if the client is valid; false if the client has already
+            been unmapped/destroyed, and so is invalid.
+  */
+  bool validate() const;
+
   virtual void focusHandler(const XFocusChangeEvent &e);
   virtual void unfocusHandler(const XFocusChangeEvent &e);
   virtual void propertyHandler(const XPropertyEvent &e);
@@ -577,6 +665,7 @@ BB    @param window The window id that the Client class should handle
   virtual void unmapHandler(const XUnmapEvent &e);
   virtual void destroyHandler(const XDestroyWindowEvent &e);
   virtual void reparentHandler(const XReparentEvent &e);
+  virtual void mapRequestHandler(const XMapRequestEvent &e);
 #if defined(SHAPE)
   virtual void shapeHandler(const XShapeEvent &e);
 #endif // SHAPE 
This page took 0.028058 seconds and 4 git commands to generate.