]> Dogcows Code - chaz/openbox/blobdiff - src/client.hh
support for modal children, both in the focus code and in the raise/lower code
[chaz/openbox] / src / client.hh
index d3e3a9b062e90fa50bef2db192f09d2f1ae4522e..ddfa687ab962f132846ca711423c7aab70fa9ce2 100644 (file)
@@ -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();
@@ -472,11 +480,8 @@ private:
   void internal_resize(Corner anchor, int w, int h, bool user = true,
                        int x = INT_MIN, int y = INT_MIN);
 
-  //! Attempts to focus a modal child of this window, recursively.
-  /*!
-    @return true if a modal child has been found and focused; otherwise, false.
-  */
-  bool focusModalChild();
+  //! Attempts to find and return a modal child of this window, recursively.
+  Client *findModalChild(Client *skip = 0) const;
 
 public:
 #ifndef SWIG
@@ -563,6 +568,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
This page took 0.02306 seconds and 4 git commands to generate.