X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fscreen.hh;h=543e216cb05974e1b1310922d0c040e7d67a9b6e;hb=9e0ae7ecee94a0cc467d90926428fdc84f9a0339;hp=f0bc33d5d4f906b9f360d3baff04c38fa07bcd1f;hpb=37be3ef9249b452b8edec25a441aefff80c2d4b8;p=chaz%2Fopenbox diff --git a/src/screen.hh b/src/screen.hh index f0bc33d5..543e216c 100644 --- a/src/screen.hh +++ b/src/screen.hh @@ -1,268 +1,141 @@ // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- -#ifndef __Screen_hh -#define __Screen_hh +#ifndef __screen_hh +#define __screen_hh + +/*! @file screen.hh + @brief OBScreen manages a single screen +*/ extern "C" { #include - -#ifdef TIME_WITH_SYS_TIME -# include -# include -#else // !TIME_WITH_SYS_TIME -# ifdef HAVE_SYS_TIME_H -# include -# else // !HAVE_SYS_TIME_H -# include -# endif // HAVE_SYS_TIME_H -#endif // TIME_WITH_SYS_TIME } -#include -#include - -#include "otk/color.hh" -#include "otk/font.hh" -#include "otk/texture.hh" +#include "rootwindow.hh" #include "otk/image.hh" #include "otk/strut.hh" -#include "otk/property.hh" -#include "otk/configuration.hh" +#include "otk/rect.hh" #include "otk/style.hh" -#include "timer.hh" -#include "workspace.hh" -#include "blackbox.hh" - -namespace ob { - -class BScreen : public otk::ScreenInfo { -private: - bool root_colormap_installed, managed, geom_visible; - GC opGC; - Pixmap geom_pixmap; - Window geom_window; - - Blackbox *blackbox; - otk::BImageControl *image_control; - otk::Configuration *config; - otk::OBProperty *xatom; - - BlackboxWindowList iconList, windowList; - - typedef std::vector WindowList; - WindowList specialWindowList, desktopWindowList, systrayWindowList; +#include "otk/configuration.hh" // TEMPORARY - Workspace *current_workspace; +#include - unsigned int geom_w, geom_h; - unsigned long event_mask; +namespace ob { - otk::Rect usableArea; -#ifdef XINERAMA - RectList xineramaUsableArea; -#endif // XINERAMA +class OBClient; +class OBRootWindow; +//! Manages a single screen +/*! +*/ +class OBScreen { +public: + //! Holds a list of OBClient objects + typedef std::list ClientList; + //! Holds a list of otk::Strut objects typedef std::list StrutList; - StrutList strutList; - typedef std::vector WorkspaceList; - WorkspaceList workspacesList; - - struct screen_resource { - otk::Style wstyle; - - bool sloppy_focus, auto_raise, auto_edge_balance, ordered_dither, - opaque_move, full_max, focus_new, focus_last, click_raise, - allow_scroll_lock, window_corner_snap, aa_fonts, - ignore_shaded, ignore_maximized, workspace_warping, shadow_fonts; - - int snap_to_windows, snap_to_edges; - unsigned int snap_offset; - unsigned int workspaces; - int placement_policy, - snap_threshold, row_direction, col_direction, root_scroll, - resistance_size; + static const unsigned long event_mask = ColormapChangeMask | + EnterWindowMask | + LeaveWindowMask | + PropertyChangeMask | + SubstructureNotifyMask | + SubstructureRedirectMask | + ButtonPressMask | + ButtonReleaseMask; - unsigned int resize_zones; - - std::string strftime_format; - - } resource; - std::string screenstr; - - BScreen(const BScreen&); - BScreen& operator=(const BScreen&); +private: + //! Was %Openbox able to manage the screen? + bool _managed; - void updateWorkArea(void); + //! The number of the screen on the X server + int _number; -public: - // XXX: temporary - void updateNetizenWorkspaceCount(); - void updateNetizenWindowFocus(); + //! Information about this screen + const otk::ScreenInfo *_info; + //! The Image Control used for rendering on the screen + otk::BImageControl *_image_control; - enum { WindowNoSnap = 0, WindowSnap, WindowResistance }; - enum { RowSmartPlacement = 1, ColSmartPlacement, CascadePlacement, - UnderMousePlacement, ClickMousePlacement, LeftRight, RightLeft, - TopBottom, BottomTop, IgnoreShaded, IgnoreMaximized }; - enum { Restart = 1, RestartOther, Exit, Shutdown, Execute, Reconfigure, - WindowShade, WindowIconify, WindowMaximize, WindowClose, WindowRaise, - WindowLower, WindowStick, WindowKill, SetStyle }; - enum FocusModel { SloppyFocus, ClickToFocus }; - enum RootScrollDirection { NoScroll = 0, NormalScroll, ReverseScroll }; + //! The style with which to render on the screen + otk::Style _style; - BScreen(Blackbox *bb, unsigned int scrn); - ~BScreen(void); - - void LoadStyle(void); - - inline bool isSloppyFocus(void) const { return resource.sloppy_focus; } - inline bool isRootColormapInstalled(void) const - { return root_colormap_installed; } - inline bool doAutoRaise(void) const { return resource.auto_raise; } - inline bool doClickRaise(void) const { return resource.click_raise; } - inline bool isScreenManaged(void) const { return managed; } - inline bool doShadowFonts(void) const { return resource.shadow_fonts; } - inline bool doAAFonts(void) const { return resource.aa_fonts; } - inline bool doImageDither(void) const { return image_control->doDither(); } - inline bool doOrderedDither(void) const { return resource.ordered_dither; } - inline bool doOpaqueMove(void) const { return resource.opaque_move; } - inline bool doFullMax(void) const { return resource.full_max; } - inline bool doFocusNew(void) const { return resource.focus_new; } - inline bool doFocusLast(void) const { return resource.focus_last; } - inline int getWindowToWindowSnap(void) const - { return resource.snap_to_windows; } - inline int getWindowToEdgeSnap(void) const - { return resource.snap_to_edges; } - inline bool getWindowCornerSnap(void) const - { return resource.window_corner_snap; } - inline bool allowScrollLock(void) const { return resource.allow_scroll_lock; } - inline bool doWorkspaceWarping(void) const - { return resource.workspace_warping; } - inline int rootScrollDirection(void) const { return resource.root_scroll; } - - inline const GC &getOpGC(void) const { return opGC; } - - inline Blackbox *getBlackbox(void) { return blackbox; } - inline otk::BColor *getBorderColor(void) { - return &resource.wstyle.border_color; - } - inline otk::BImageControl *getImageControl(void) { return image_control; } - - Workspace *getWorkspace(unsigned int index) const; - - inline Workspace *getCurrentWorkspace(void) { return current_workspace; } - - inline unsigned int getResizeZones(void) const - { return resource.resize_zones; } - inline bool getPlaceIgnoreShaded(void) const - { return resource.ignore_shaded; } - inline bool getPlaceIgnoreMaximized(void) const - { return resource.ignore_maximized; } - - inline unsigned int getCurrentWorkspaceID(void) const - { return current_workspace->getID(); } - inline unsigned int getWorkspaceCount(void) const - { return workspacesList.size(); } - inline unsigned int getIconCount(void) const { return iconList.size(); } - inline unsigned int getNumberOfWorkspaces(void) const - { return resource.workspaces; } - inline int getPlacementPolicy(void) const - { return resource.placement_policy; } - inline int getSnapOffset(void) const - { return resource.snap_offset; } - inline int getSnapThreshold(void) const - { return resource.snap_threshold; } - inline int getResistanceSize(void) const - { return resource.resistance_size; } - inline int getRowPlacementDirection(void) const - { return resource.row_direction; } - inline int getColPlacementDirection(void) const - { return resource.col_direction; } - - void changeWorkspaceCount(unsigned int new_count); + OBRootWindow _root; - inline void setRootColormapInstalled(bool r) { root_colormap_installed = r; } - void saveSloppyFocus(bool s); - void saveAutoRaise(bool a); - void saveClickRaise(bool c); - void saveWorkspaces(unsigned int w); - void savePlacementPolicy(int p); - void saveRowPlacementDirection(int d); - void saveColPlacementDirection(int d); - void saveSnapThreshold(int t); - void saveSnapOffset(int o); - void saveResistanceSize(int s); - void saveImageDither(bool d); - void saveShadowFonts(bool f); - void saveAAFonts(bool f); - void saveOpaqueMove(bool o); - void saveFullMax(bool f); - void saveFocusNew(bool f); - void saveFocusLast(bool f); - void saveWindowToEdgeSnap(int s); - void saveWindowToWindowSnap(int s); - void saveWindowCornerSnap(bool s); - void saveResizeZones(unsigned int z); - void savePlaceIgnoreShaded(bool i); - void savePlaceIgnoreMaximized(bool i); - void saveAllowScrollLock(bool a); - void saveWorkspaceWarping(bool w); - void saveRootScrollDirection(int d); - - inline const char *getStrftimeFormat(void) - { return resource.strftime_format.c_str(); } - void saveStrftimeFormat(const std::string& format); - - inline otk::Style *getWindowStyle(void) { return &resource.wstyle; } - - BlackboxWindow *getIcon(unsigned int index); - - // allAvailableAreas should be used whenever possible instead of this function - // as then Xinerama will work correctly. - const otk::Rect& availableArea(void) const; -#ifdef XINERAMA - const RectList& allAvailableAreas(void) const; -#endif // XINERAMA - void updateAvailableArea(void); + //! Is the root colormap currently installed? + bool _root_cmap_installed; + + //! All managed clients on the screen + ClientList _clients; + + //! Area usable for placement etc (total - struts) + otk::Rect _area; + + //! Areas of the screen reserved by applications + StrutList _struts; + + + //! Calculate the OBScreen::_area member + void calcArea(); + //! Set the client list on the root window + /*! + Sets the _NET_CLIENT_LIST root window property.
+ 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: + //! Constructs a new OBScreen object + OBScreen(int screen, const otk::Configuration &config); + //! Destroys the OBScreen object + virtual ~OBScreen(); + + //! 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; } + + + //! Adds a window's strut to the screen's list of reserved spaces void addStrut(otk::Strut *strut); + //! Removes a window's strut from the screen's list of reserved spaces void removeStrut(otk::Strut *strut); - unsigned int addWorkspace(void); - unsigned int removeLastWorkspace(void); - void changeWorkspaceID(unsigned int id); - void saveWorkspaceNames(void); - - void addSystrayWindow(Window window); - void removeSystrayWindow(Window window); - - void addIcon(BlackboxWindow *w); - void removeIcon(BlackboxWindow *w); - - void updateClientList(void); - void updateStackingList(void); - void manageWindow(Window w); - void unmanageWindow(BlackboxWindow *w, bool remap); - void raiseWindows(Window *workspace_stack, unsigned int num); - void lowerWindows(Window *workspace_stack, unsigned int num); - void reassociateWindow(BlackboxWindow *w, unsigned int wkspc_id, - bool ignore_sticky); - void propagateWindowName(const BlackboxWindow *bw); - void prevFocus(void) const; - void nextFocus(void) const; - void raiseFocus(void) const; - void load_rc(void); - void save_rc(void); - void reconfigure(void); - void toggleFocusModel(FocusModel model); - void shutdown(void); - void showPosition(int x, int y); - void showGeometry(unsigned int gx, unsigned int gy); - void hideGeometry(void); - - void buttonPressEvent(const XButtonEvent *xbutton); - void propertyNotifyEvent(const XPropertyEvent *pe); + //! Loads a new style on the screen + void loadStyle(const otk::Configuration &config); + + //! 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); }; } -#endif // __Screen_hh +#endif// __screen_hh