src/screen.hh (raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- #ifndef __screen_hh #define __screen_hh /*! @file screen.hh @brief OBScreen manages a single screen */ extern "C" { #include <X11/Xlib.h> } #include "rootwindow.hh" #include "otk/image.hh" #include "otk/strut.hh" #include "otk/rect.hh" #include "otk/style.hh" #include "otk/configuration.hh" // TEMPORARY #include <string> namespace ob { class OBClient; class OBRootWindow; //! Manages a single screen /*! */ class OBScreen { public: //! Holds a list of OBClient objects typedef std::list<OBClient*> ClientList; //! Holds a list of otk::Strut objects typedef std::list<otk::Strut*> StrutList; static const unsigned long event_mask = ColormapChangeMask | EnterWindowMask | LeaveWindowMask | PropertyChangeMask | SubstructureNotifyMask | SubstructureRedirectMask | ButtonPressMask | ButtonReleaseMask; enum StackLayer { Layer_Icon, // 0 - iconified windows, in any order at all Layer_Desktop, // 1 - desktop windows Layer_Below, // 2 - normal windows w/ below Layer_Normal, // 3 - normal windows Layer_Above, // 4 - normal windows w/ above Layer_Top, // 5 - always-on-top-windows (docks?) Layer_Fullscreen, // 6 - fullscreeen windows Layer_Internal, // 7 - openbox windows/menus NUM_LAYERS }; //! All managed clients on the screen (in order of being mapped) ClientList clients; private: //! Was %Openbox able to manage the screen? bool _managed; //! The number of the screen on the X server int _number; //! Information about this screen const otk::ScreenInfo *_info; //! The Image Control used for rendering on the screen otk::BImageControl *_image_control; //! The style with which to render on the screen otk::Style _style; //! The screen's root window OBRootWindow _root; //! Is the root colormap currently installed? bool _root_cmap_installed; //! Area usable for placement etc (total - struts) otk::Rect _area; //! Combined strut from all of the clients' struts otk::Strut _strut; //! An offscreen window which gets focus when nothing else has it Window _focuswindow; //! An offscreen window which shows that a NETWM compliant window manager is //! running Window _supportwindow; //! A list of all managed clients on the screen, in their stacking order ClientList _stacking; //! Calculate the OBScreen::_area member void calcArea(); //! Set the list of supported NETWM atoms on the root window void setSupportedAtoms(); //! Set the client list on the root window /*! Sets the _NET_CLIENT_LIST root window property.<br> Also calls OBScreen::updateStackingList. */ void setClientList(); //! Set the client stacking list on the root window /*! Set the _NET_CLIENT_LIST_STACKING root window property. */ void setStackingList(); //! Set the work area hint on the root window /*! Set the _NET_WORKAREA root window property. */ void setWorkArea(); public: #ifndef SWIG //! Constructs a new OBScreen object OBScreen(int screen); //! Destroys the OBScreen object virtual ~OBScreen(); #endif inline int number() const { return _number; } //! Returns if the screen was successfully managed /*! If this is false, then the screen should be deleted and should NOT be used. */ inline bool managed() const { return _managed; } //! Returns the Image Control used for rendering on the screen inline otk::BImageControl *imageControl() { return _image_control; } //! Returns the area of the screen not reserved by applications' Struts inline const otk::Rect &area() const { return _area; } //! Returns the style in use on the screen inline const otk::Style *style() const { return &_style; } //! An offscreen window which gets focus when nothing else has it inline Window focuswindow() const { return _focuswindow; } //! Update's the screen's combined strut of all the clients. /*! Clients should call this whenever they change their strut. */ void updateStrut(); //! Manage any pre-existing windows on the screen void manageExisting(); //! Manage a client window /*! This gives the window a frame, reparents it, selects events on it, etc. */ void manageWindow(Window window); //! Unmanage a client /*! This removes the window's frame, reparents it to root, unselects events on it, etc. */ void unmanageWindow(OBClient *client); //! Raises/Lowers a client window above/below all others in its stacking //! layer void restack(bool raise, OBClient *client); }; } #endif// __screen_hh |