]> Dogcows Code - chaz/openbox/blobdiff - src/client.hh
use otk objects in the ob scripts by importing otk
[chaz/openbox] / src / client.hh
index 14b5a45e103acd1bc213f8d7e9bc6bc1fb4e0ccd..c8110a3f70e75661926412e374a7f3ce0dac998a 100644 (file)
@@ -12,6 +12,7 @@
 #include "otk/strut.hh"
 #include "otk/rect.hh"
 #include "otk/eventhandler.hh"
+#include "otk/ustring.hh"
 
 extern "C" {
 #include <X11/Xlib.h>
@@ -88,7 +89,7 @@ public:
   enum WindowType { Type_Desktop, //!< A desktop (bottom-most window)
                     Type_Dock,    //!< A dock bar/panel window
                     Type_Toolbar, //!< A toolbar window, pulled off an app
-                    Type_Menu,    //!< A sticky menu from an app
+                    Type_Menu,    //!< An unpinned menu from an app
                     Type_Utility, //!< A small utility window such as a palette
                     Type_Splash,  //!< A splash screen window
                     Type_Dialog,  //!< A dialog window
@@ -120,23 +121,27 @@ public:
   };
 
   //! The things the user can do to the client window
-  enum Function { Func_Resize   = 1 << 0, //!< Allow resizing
-                  Func_Move     = 1 << 1, //!< Allow moving
-                  Func_Iconify  = 1 << 2, //!< Allow to be iconified
-                  Func_Maximize = 1 << 3, //!< Allow to be maximized
-                  Func_Close    = 1 << 4  //!< Allow to be closed
+  enum Function { Func_Resize     = 1 << 0, //!< Allow resizing
+                  Func_Move       = 1 << 1, //!< Allow moving
+                  Func_Iconify    = 1 << 2, //!< Allow to be iconified
+                  Func_Maximize   = 1 << 3, //!< Allow to be maximized
+                  Func_Shade      = 1 << 4, //!< Allow to be shaded
+                  Func_Fullscreen = 1 << 5, //!< Allow to be made fullscreen
+                  Func_Close      = 1 << 6  //!< Allow to be closed
   };
   //! Holds a bitmask of Client::Function values
   typedef unsigned char FunctionFlags;
 
   //! The decorations the client window wants to be displayed on it
-  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_Sticky   = 1 << 5, //!< Display a sticky button
-                    Decor_Close    = 1 << 6  //!< Display a close button
+  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
+                    //! Display a button to toggle the window's placement on
+                    //! all desktops
+                    Decor_AllDesktops = 1 << 5,
+                    Decor_Close       = 1 << 6  //!< Display a close button
   };
   //! Holds a bitmask of Client::Decoration values
   typedef unsigned char DecorationFlags;
@@ -159,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;
   
@@ -182,9 +191,9 @@ private:
   long _desktop;
 
   //! Normal window title
-  std::string  _title; // XXX: Have to keep track if this string is Utf8 or not
+  otk::ustring  _title;
   //! Window title when iconifiged
-  std::string  _icon_title;
+  otk::ustring  _icon_title;
 
   //! The application that created the window
   std::string  _app_name;
@@ -256,6 +265,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;
@@ -310,6 +322,8 @@ private:
   */
   FunctionFlags _functions;
 
+  //! Retrieves the window's initial gravity
+  void getGravity();
   //! Retrieves the desktop hint's value and sets Client::_desktop
   void getDesktop();
   //! Retrieves the window's type and sets Client::_type
@@ -336,9 +350,19 @@ private:
   //! Sets the wm_state to the specified value
   void setWMState(long state);
   //! Adjusts the window's net_state
+  /*!
+    This should not be called as part of the window mapping process! It is for
+    use when updating the state post-mapping.<br>
+    Client::applyStartupState is used to do the same things during the mapping
+    process.
+  */
   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
@@ -350,7 +374,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
@@ -364,6 +393,8 @@ private:
 
   //! Change the client's state hints to match the class' data
   void changeState();
+  //! Change the allowed actions set on the client
+  void changeAllowedActions();
 
   //! Request the client to close its window.
   void close();
@@ -374,7 +405,40 @@ private:
                  unshaded.
   */
   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.
+  */
+  void fullscreen(bool fs);
+
+  //! Internal version of the Client::move function
+  /*!
+    @param x The X coordinate to move to.
+    @param y The Y coordinate to move to.
+  */
+  void internal_move(int x, int y);
+  //! Internal version of the Client::resize function
+  /*!
+    This also maintains things like the client's minsize, and size increments.
+    @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 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
+             after resizing.
+    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,
+                       int x = INT_MIN, int y = INT_MIN);
+
 public:
 #ifndef SWIG
   //! Constructs a new Client object around a specified window id
@@ -412,9 +476,9 @@ BB    @param window The window id that the Client class should handle
   */
   inline long desktop() const { return _desktop; }
   //! Returns the window's title
-  inline const std::string &title() const { return _title; }
+  inline const otk::ustring &title() const { return _title; }
   //! Returns the window's title when it is iconified
-  inline const std::string &iconTitle() const { return _title; }
+  inline const otk::ustring &iconTitle() const { return _title; }
   //! Returns the application's name to whom the window belongs
   inline const std::string &appName() const { return _app_name; }
   //! Returns the class of the window
@@ -467,6 +531,8 @@ BB    @param window The window id that the Client class should handle
     When the window is shaded, only its titlebar is visible.
   */
   inline bool shaded() const { return _shaded; }
+  //! Returns if the window is in fullscreen mode
+  inline bool fullscreen() const { return _fullscreen; }
   //! Returns if the window is iconified
   /*!
     When the window is iconified, it is not visible at all (except in iconbars/
@@ -480,6 +546,13 @@ BB    @param window The window id that the Client class should handle
   //! Returns the window's stacking layer
   inline StackLayer layer() const { return _layer; }
 
+  //! 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.
@@ -507,17 +580,11 @@ BB    @param window The window id that the Client class should handle
     @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 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
-             after resizing.
-    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 resize(Corner anchor, int w, int h, int x = INT_MIN, int y = INT_MIN);
+  void resize(Corner anchor, int w, int h);
 
   //! Attempt to focus the client window
-  bool focus() const;
+  bool focus();
 
   //! Remove focus from the client window
   void unfocus() const;
@@ -530,6 +597,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.025554 seconds and 4 git commands to generate.