]> Dogcows Code - chaz/openbox/blobdiff - src/screen.hh
speed up workspace switching by causing the minimal number of expose events (none...
[chaz/openbox] / src / screen.hh
index 16a4225b37697a11f514fde644662d76cbbdcb74..20ba0a63243f9349325b4f523df7e39cfddaceb3 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
 /*!
 */
@@ -43,10 +53,8 @@ public:
                                           ButtonPressMask |
                                           ButtonReleaseMask;
 
-  //! Holds a list of Clients
-  typedef std::list<Client*> ClientList;
   //! All managed clients on the screen (in order of being mapped)
-  ClientList clients;
+  std::list<Client*> clients;
   
 private:
   //! Was %Openbox able to manage the screen?
@@ -57,9 +65,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
@@ -77,17 +82,23 @@ private:
   Window _supportwindow;
 
   //! A list of all managed clients on the screen, in their stacking order
-  ClientList _stacking;
+  std::list<Client*> _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,28 +123,29 @@ 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
   //! Constructs a new Screen object
   Screen(int screen);
   //! Destroys the Screen object
   virtual ~Screen();
-#endif
 
   inline int number() const { return _number; }
   
@@ -143,12 +155,15 @@ public:
     used.
   */
   inline bool managed() const { return _managed; }
+
   //!  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 +171,15 @@ 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;
+
+  //! Gives the layout of how the desktops are being displayed, the number of
+  //! rows and columns etc.
+  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.
   /*!
@@ -192,13 +215,8 @@ public:
   //! Lowers a client window below all others in its stacking layer
   void lowerWindow(Client *client);
 
-  //! Sets the name of a desktop by changing the root window property
-  /*!
-    @param i The index of the desktop to set the name for (starts at 0)
-    @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);
+  const otk::Property::StringVect& desktopNames() const
+    { return _desktop_names; }
 
   void installColormap(bool install) const;
 
This page took 0.026339 seconds and 4 git commands to generate.