]> Dogcows Code - chaz/openbox/blobdiff - src/screen.hh
provide access to the desktop names
[chaz/openbox] / src / screen.hh
index 16a4225b37697a11f514fde644662d76cbbdcb74..4eb81d4aebd0b222beebf963f1fd48701ea543eb 100644 (file)
@@ -24,6 +24,16 @@ namespace ob {
 
 class Client;
 
+struct DesktopLayout {
+  enum Corner { TopLeft, TopRight, BottomRight, BottomLeft };
+  enum Direction { Horizontal, Vertical };
+
+  Direction orientation;
+  Corner start_corner;
+  unsigned int rows;
+  unsigned int columns;
+};
+
 //! Manages a single screen
 /*!
 */
@@ -58,9 +68,6 @@ private:
   //! Information about this screen
   const otk::ScreenInfo *_info;
   
-  //! Is the root colormap currently installed?
-  bool _root_cmap_installed;
-
   //! Area usable for placement etc (total - struts), one per desktop,
   //! plus one extra for windows on all desktops
   RectList _area;
@@ -80,14 +87,20 @@ private:
   ClientList _stacking;
 
   //! The desktop currently being displayed
-  long _desktop;
+  unsigned int _desktop;
 
   //! The number of desktops
-  long _num_desktops;
+  unsigned int _num_desktops;
 
   //! The names of all desktops
   otk::Property::StringVect _desktop_names;
 
+  //! The layout of the desktops as specified by an EWMH compliant pager
+  DesktopLayout _layout;
+
+  //! True when the window manager is in 'showing desktop' mode
+  bool _showing_desktop;
+
   //! Calculate the Screen::_area member
   void calcArea();
   //! Set the list of supported NETWM atoms on the root window
@@ -112,20 +125,23 @@ private:
   //! Get desktop names from the root window property
   void updateDesktopNames();
 
+  //! Gets the layout of the desktops from the root window property
+  void updateDesktopLayout();
+
   //! Changes to the specified desktop, displaying windows on it and hiding
   //! windows on the others.
   /*!
     @param desktop The number of the desktop to switch to (starts from 0).
     If the desktop is out of valid range, it is ignored.
   */
-  void changeDesktop(long desktop);
+  void changeDesktop(unsigned int desktop);
 
   //! Changes the number of desktops.
   /*!
     @param num The number of desktops that should exist. This value must be
                greater than 0 or it will be ignored.
   */
-  void changeNumDesktops(long num);
+  void changeNumDesktops(unsigned int num);
 
 public:
 #ifndef SWIG
@@ -146,9 +162,11 @@ public:
   //!  An offscreen window which gets focus when nothing else has it
   inline Window focuswindow() const { return _focuswindow; }
   //! Returns the desktop being displayed
-  inline long desktop() const { return _desktop; }
+  inline unsigned int desktop() const { return _desktop; }
   //! Returns the number of desktops
-  inline long numDesktops() const { return _num_desktops; }
+  inline unsigned int numDesktops() const { return _num_desktops; }
+  //! When true, the desktop is being shown and all clients are hidden
+  inline bool showingDesktop() const { return _showing_desktop; }
 
   //! Returns the area of the screen not reserved by applications' Struts
   /*!
@@ -156,7 +174,13 @@ public:
                    0xffffffff will return an area that combines all struts
                    on all desktops.
   */
-  const otk::Rect& area(long desktop) const;
+  const otk::Rect& area(unsigned int desktop) const;
+
+  const DesktopLayout& desktopLayout() const { return _layout; }
+
+  //! Shows and focuses the desktop and hides all the client windows, or
+  //! returns to the normal state, showing client windows.
+  void showDesktop(bool show);
 
   //! Update's the screen's combined strut of all the clients.
   /*!
@@ -198,7 +222,9 @@ public:
     @param name The name to set for the desktop
     If the index is too large, it is simply ignored.
   */
-  void setDesktopName(long i, const otk::ustring &name);
+  void setDesktopName(unsigned int i, const otk::ustring &name);
+
+  otk::ustring desktopName(unsigned int i) const;
 
   void installColormap(bool install) const;
 
This page took 0.022397 seconds and 4 git commands to generate.