]> Dogcows Code - chaz/openbox/blobdiff - src/client.hh
kill the typedef
[chaz/openbox] / src / client.hh
index 634d0e3de39720e55b5d64fd1f9eae96fe554eb9..932bac16251b73c1e8650eab3f56f9ff0d3d6756 100644 (file)
@@ -29,6 +29,11 @@ namespace ob {
 class Frame;
 class Screen;
 
+struct Icon {
+  unsigned long w, h;
+  unsigned long *data;
+};
+
 //! The MWM Hints as retrieved from the window property
 /*!
   This structure only contains 3 elements, even though the Motif 2.0
@@ -136,12 +141,13 @@ public:
   enum Decoration { Decor_Titlebar    = 1 << 0, //!< Display a titlebar
                     Decor_Handle      = 1 << 1, //!< Display a handle (bottom)
                     Decor_Border      = 1 << 2, //!< Display a border
-                    Decor_Iconify     = 1 << 3, //!< Display an iconify button
-                    Decor_Maximize    = 1 << 4, //!< Display a maximize button
+                    Decor_Icon        = 1 << 3, //!< Display the window's icon
+                    Decor_Iconify     = 1 << 4, //!< Display an iconify button
+                    Decor_Maximize    = 1 << 5, //!< Display a maximize button
                     //! Display a button to toggle the window's placement on
                     //! all desktops
-                    Decor_AllDesktops = 1 << 5,
-                    Decor_Close       = 1 << 6  //!< Display a close button
+                    Decor_AllDesktops = 1 << 6,
+                    Decor_Close       = 1 << 7  //!< Display a close button
   };
   //! Holds a bitmask of Client::Decoration values
   typedef unsigned char DecorationFlags;
@@ -164,10 +170,6 @@ 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;
   
@@ -188,7 +190,7 @@ private:
   Client::List _transients;
 
   //! The desktop on which the window resides (0xffffffff for all desktops)
-  long _desktop;
+  unsigned int _desktop;
 
   //! Normal window title
   otk::ustring  _title;
@@ -295,9 +297,6 @@ 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;
@@ -320,6 +319,8 @@ private:
   //! The window should be underneath other windows of the same type
   bool _below;
 
+  //! The layer in which the window will be stacked, windows in lower layers
+  //! are always below windows in higher layers.
   StackLayer _layer;
 
   //! A bitmask of values in the Client::Decoration enum
@@ -342,6 +343,14 @@ private:
   */
   FunctionFlags _functions;
 
+  //! Icons for the client as specified on the client window
+  Icon *_icons;
+  //! The number of icons in _icons
+  int _nicons;
+
+  Pixmap _pixmap_icon;
+  Pixmap _pixmap_icon_mask;
+
   //! Retrieves the window's initial gravity
   void getGravity();
   //! Retrieves the desktop hint's value and sets Client::_desktop
@@ -379,16 +388,7 @@ 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);
-  //! Set whether the window is modal or not
-  /*!
-    This adjusts references in parents etc to match.
-  */
-  void setModal(bool modal);
+  void setDesktop(unsigned int desktop);
   
   //! Calculates the stacking layer for the client window
   void calcLayer();
@@ -415,6 +415,10 @@ private:
   void updateStrut();
   //! Updates the window's transient status, and any parents of it
   void updateTransientFor();
+  //! Updates the window's icons
+  void updateIcons();
+  //! Updates the window's kwm icon
+  void updateKwmIcon();
 
   //! Change the client's state hints to match the class' data
   void changeState();
@@ -431,6 +435,14 @@ private:
   */
   void shade(bool shade);
 
+  //! Recursively searches the client 'tree' for a modal client, always skips
+  //! the topmost node (the window you're starting with).
+  Client *Client::searchModalTree(Client *node, Client *skip);
+
+  //! Recursively searches the client 'tree' for a focused client, always skips
+  //! the topmost node (the window you're starting with).
+  Client *Client::searchFocusTree(Client *node, Client *skip);
+
   //! Fires the urgent callbacks which lets the user do what they want with
   //! urgent windows
   void fireUrgent();
@@ -446,6 +458,16 @@ private:
   */
   void fullscreen(bool fs, bool savearea = true);
 
+  //! Iconifies or uniconifies the client window
+  /*!
+    @param iconic true if the window should be iconified; false if it should be
+                  restored.
+    @param curdesk If iconic is false, then this determines if the window will
+                   be uniconified to the current viewable desktop (true) or to
+                   its previous desktop (false)
+  */
+  void iconify(bool iconic, bool curdesk = true);
+
   //! Maximize or unmaximize the client window
   /*!
     @param max true if the window should be maximized; false if it should be
@@ -482,9 +504,6 @@ private:
   void internal_resize(Corner anchor, int w, 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.
@@ -535,7 +554,7 @@ BB    @param window The window id that the Client class should handle
     This value is a 0-based index.<br>
     A value of 0xffffffff indicates that the window exists on all desktops.
   */
-  inline long desktop() const { return _desktop; }
+  inline unsigned int desktop() const { return _desktop; }
   //! Returns the window's title
   inline const otk::ustring &title() const { return _title; }
   //! Returns the window's title when it is iconified
@@ -587,9 +606,6 @@ 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
@@ -630,11 +646,36 @@ BB    @param window The window id that the Client class should handle
   const otk::Size &logicalSize() const { return _logical_size; }
 
   //! Returns the position and size of the client relative to the root window
+  /*!
+    Note that this value is *not* the size and position of the window's
+    frame, though the position will often line up.<br>
+    If you want the frame's area, use Frame::area() instead.
+  */
   inline const otk::Rect &area() const { return _area; }
 
   //! Returns the client's strut definition
   inline const otk::Strut &strut() const { return _strut; }
 
+  //! Returns an icon for the window
+  /*!
+    The icon chosen will be the smallest icon available that is still bigger or
+    equal to the specified Size.<br>
+    If none that meet the requirements is found, the largest icon that is
+    smaller than the specified size will be returned.
+  */
+  const Icon *icon(const otk::Size &s) const;
+
+  //! Returns the pixmap for the pixmap icon specified on the window (or None)
+  /*!
+    The icon given by Client::icon should take precedence over this icon/mask.
+  */
+  Pixmap pixmapIcon() const { return _pixmap_icon; }
+  //! Returns the mask for the pixmap icon specified on the window (or None)
+  /*!
+    The icon given by Client::icon should take precedence over this icon/mask.
+  */
+  Pixmap pixmapIconMask() const { return _pixmap_icon_mask; }
+  
   //! 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
@@ -659,6 +700,12 @@ BB    @param window The window id that the Client class should handle
     surroundings (struts, etc).
   */
   void remaximize();
+
+  //! Shows the window if it should be shown, or hides it
+  /*!
+    Used when changing desktops, the window's state, etc.
+  */
+  void showhide();
   
   //! Choose a mask of decorations to not display on the client
   /*!
@@ -670,6 +717,12 @@ BB    @param window The window id that the Client class should handle
   */
   void disableDecorations(DecorationFlags flags);
   
+  //! Return a modal child of the client window
+  /*!
+    @return A modal child of the client window, or 0 if none was found.
+  */
+  Client *findModalChild();
+
   //! Attempt to focus the client window
   bool focus();
 
This page took 0.025733 seconds and 4 git commands to generate.