X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2FScreen.hh;h=2fbf20fd1414406c7bfc34450a5bff2ea4dcf2b6;hb=d86284c07b29817b93db1875fa1430d221b94a63;hp=7a75ac623516b127b6c9e25a9d4d190735428de2;hpb=8794d357e67abddf9fda9db77b235e294d0ec590;p=chaz%2Fopenbox diff --git a/src/Screen.hh b/src/Screen.hh index 7a75ac62..2fbf20fd 100644 --- a/src/Screen.hh +++ b/src/Screen.hh @@ -26,7 +26,6 @@ extern "C" { #include -#include #ifdef TIME_WITH_SYS_TIME # include @@ -45,6 +44,7 @@ extern "C" { #include "Color.hh" #include "Texture.hh" +#include "Image.hh" #include "Configmenu.hh" #include "Iconmenu.hh" #include "Netizen.hh" @@ -53,7 +53,11 @@ extern "C" { #include "Workspace.hh" #include "Workspacemenu.hh" #include "blackbox.hh" + class Slit; // forward reference +class BFont; +class XAtom; +struct Strut; enum TextJustify { LeftJustify = 1, RightJustify, CenterJustify }; @@ -63,48 +67,36 @@ struct WindowStyle { BTexture t_focus, t_unfocus, l_focus, l_unfocus, h_focus, h_unfocus, b_focus, b_unfocus, b_pressed, g_focus, g_unfocus; - XFontSet fontset; - XFontSetExtents *fontset_extents; - XFontStruct *font; + BFont *font; TextJustify justify; - int doJustify(const char *text, int &start_pos, unsigned int max_length, - unsigned int modifier, bool multibyte) const; + void doJustify(const std::string &text, int &start_pos, + unsigned int max_length, unsigned int modifier) const; }; struct ToolbarStyle { BColor l_text, w_text, c_text, b_pic; BTexture toolbar, label, window, button, pressed, clock; - XFontSet fontset; - XFontSetExtents *fontset_extents; - XFontStruct *font; + BFont *font; TextJustify justify; - int doJustify(const char *text, int &start_pos, unsigned int max_length, - unsigned int modifier, bool multibyte) const; + void doJustify(const std::string &text, int &start_pos, + unsigned int max_length, unsigned int modifier) const; }; struct MenuStyle { BColor t_text, f_text, h_text, d_text; BTexture title, frame, hilite; - XFontSet t_fontset, f_fontset; - XFontSetExtents *t_fontset_extents, *f_fontset_extents; - XFontStruct *t_font, *f_font; + BFont *t_font, *f_font; TextJustify t_justify, f_justify; int bullet, bullet_pos; }; -struct Strut { - unsigned int top, bottom, left, right; - - Strut(void): top(0), bottom(0), left(0), right(0) {} -}; - class BScreen : public ScreenInfo { private: bool root_colormap_installed, managed, geom_visible; @@ -117,6 +109,8 @@ private: Configmenu *configmenu; Iconmenu *iconmenu; Rootmenu *rootmenu; + Configuration *config; + XAtom *xatom; typedef std::list RootmenuList; RootmenuList rootmenuList; @@ -125,6 +119,9 @@ private: NetizenList netizenList; BlackboxWindowList iconList, windowList; + typedef std::vector WindowList; + WindowList desktopWindowList, systrayWindowList; + Slit *slit; Toolbar *toolbar; Workspace *current_workspace; @@ -134,11 +131,12 @@ private: unsigned long event_mask; Rect usableArea; +#ifdef XINERAMA + RectList xineramaUsableArea; +#endif // XINERAMA typedef std::list StrutList; StrutList strutList; - typedef std::vector WorkspaceNamesList; - WorkspaceNamesList workspaceNames; typedef std::vector WorkspaceList; WorkspaceList workspacesList; @@ -147,20 +145,19 @@ private: ToolbarStyle tstyle; MenuStyle mstyle; - bool toolbar_on_top, toolbar_auto_hide, sloppy_focus, auto_raise, - auto_edge_balance, image_dither, ordered_dither, opaque_move, full_max, - focus_new, focus_last, click_raise; + bool sloppy_focus, auto_raise, auto_edge_balance, ordered_dither, + opaque_move, full_max, focus_new, focus_last, click_raise, + allow_scroll_lock, hide_toolbar, window_to_window_snap, + window_corner_snap, aa_fonts, ignore_shaded, ignore_maximized, + workspace_warping; BColor border_color; - XrmDatabase stylerc; unsigned int workspaces; int toolbar_placement, toolbar_width_percent, placement_policy, - edge_snap_threshold, row_direction, col_direction; + edge_snap_threshold, row_direction, col_direction, root_scroll; - bool slit_on_top, slit_auto_hide; - int slit_placement, slit_direction; - - unsigned int handle_width, bevel_width, frame_width, border_width; + unsigned int handle_width, bevel_width, frame_width, border_width, + resize_zones; #ifdef HAVE_STRFTIME std::string strftime_format; @@ -170,6 +167,7 @@ private: #endif // HAVE_STRFTIME } resource; + std::string screenstr; BScreen(const BScreen&); BScreen& operator=(const BScreen&); @@ -177,52 +175,54 @@ private: bool parseMenuFile(FILE *file, Rootmenu *menu); BTexture readDatabaseTexture(const std::string &rname, - const std::string &rclass, - const std::string &default_color); + const std::string &default_color, + const Configuration &style); BColor readDatabaseColor(const std::string &rname, - const std::string &rclass, - const std::string &default_color); - XFontSet readDatabaseFontSet(const std::string &rname, - const std::string &rclass); - XFontStruct *readDatabaseFont(const std::string &rname, - const std::string &rclass); - XFontSet createFontSet(const std::string &fontname); + const std::string &default_color, + const Configuration &style); + BFont *readDatabaseFont(const std::string &rbasename, + const Configuration &style); void InitMenu(void); void LoadStyle(void); - + void updateWorkArea(void); public: - enum { RowSmartPlacement = 1, ColSmartPlacement, CascadePlacement, LeftRight, - RightLeft, TopBottom, BottomTop }; + enum { RowSmartPlacement = 1, ColSmartPlacement, CascadePlacement, + UnderMousePlacement, ClickMousePlacement, LeftRight, RightLeft, + TopBottom, BottomTop, IgnoreShaded, IgnoreMaximized }; enum { RoundBullet = 1, TriangleBullet, SquareBullet, NoBullet }; enum { Restart = 1, RestartOther, Exit, Shutdown, Execute, Reconfigure, WindowShade, WindowIconify, WindowMaximize, WindowClose, WindowRaise, WindowLower, WindowStick, WindowKill, SetStyle }; enum FocusModel { SloppyFocus, ClickToFocus }; + enum RootScrollDirection { NoScroll, NormalScroll, ReverseScroll }; BScreen(Blackbox *bb, unsigned int scrn); ~BScreen(void); - inline bool isToolbarOnTop(void) const - { return resource.toolbar_on_top; } - inline bool doToolbarAutoHide(void) const - { return resource.toolbar_auto_hide; } - inline bool isSloppyFocus(void) const - { return resource.sloppy_focus; } + 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 doImageDither(void) const - { return resource.image_dither; } - inline bool doOrderedDither(void) const - { return resource.ordered_dither; } + 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 bool doHideToolbar(void) const { return resource.hide_toolbar; } + inline bool getWindowToWindowSnap(void) const + { return resource.window_to_window_snap; } + 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; } @@ -231,19 +231,7 @@ public: inline BImageControl *getImageControl(void) { return image_control; } inline Rootmenu *getRootmenu(void) { return rootmenu; } - inline bool isSlitOnTop(void) const { return resource.slit_on_top; } - inline bool doSlitAutoHide(void) const - { return resource.slit_auto_hide; } inline Slit *getSlit(void) { return slit; } - inline int getSlitPlacement(void) const - { return resource.slit_placement; } - inline int getSlitDirection(void) const - { return resource.slit_direction; } - inline void saveSlitPlacement(int p) { resource.slit_placement = p; } - inline void saveSlitDirection(int d) { resource.slit_direction = d; } - inline void saveSlitOnTop(bool t) { resource.slit_on_top = t; } - inline void saveSlitAutoHide(bool t) { resource.slit_auto_hide = t; } - inline Toolbar *getToolbar(void) { return toolbar; } Workspace *getWorkspace(unsigned int index); @@ -260,18 +248,20 @@ public: { return resource.frame_width; } inline unsigned int getBorderWidth(void) const { return resource.border_width; } - - inline unsigned int getCurrentWorkspaceID(void) + 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) + inline unsigned int getWorkspaceCount(void) const { return workspacesList.size(); } - inline unsigned int getIconCount(void) { return iconList.size(); } + inline unsigned int getIconCount(void) const { return iconList.size(); } inline unsigned int getNumberOfWorkspaces(void) const { return resource.workspaces; } - inline int getToolbarPlacement(void) const - { return resource.toolbar_placement; } - inline int getToolbarWidthPercent(void) const - { return resource.toolbar_width_percent; } inline int getPlacementPolicy(void) const { return resource.placement_policy; } inline int getEdgeSnapThreshold(void) const @@ -281,26 +271,32 @@ public: inline int getColPlacementDirection(void) const { return resource.col_direction; } + void changeWorkspaceCount(unsigned int new_count); + inline void setRootColormapInstalled(bool r) { root_colormap_installed = r; } - inline void saveSloppyFocus(bool s) { resource.sloppy_focus = s; } - inline void saveAutoRaise(bool a) { resource.auto_raise = a; } - inline void saveClickRaise(bool c) { resource.click_raise = c; } - inline void saveWorkspaces(unsigned int w) { resource.workspaces = w; } - inline void saveToolbarOnTop(bool r) { resource.toolbar_on_top = r; } - inline void saveToolbarAutoHide(bool r) { resource.toolbar_auto_hide = r; } - inline void saveToolbarWidthPercent(int w) - { resource.toolbar_width_percent = w; } - inline void saveToolbarPlacement(int p) { resource.toolbar_placement = p; } - inline void savePlacementPolicy(int p) { resource.placement_policy = p; } - inline void saveRowPlacementDirection(int d) { resource.row_direction = d; } - inline void saveColPlacementDirection(int d) { resource.col_direction = d; } - inline void saveEdgeSnapThreshold(int t) - { resource.edge_snap_threshold = t; } - inline void saveImageDither(bool d) { resource.image_dither = d; } - inline void saveOpaqueMove(bool o) { resource.opaque_move = o; } - inline void saveFullMax(bool f) { resource.full_max = f; } - inline void saveFocusNew(bool f) { resource.focus_new = f; } - inline void saveFocusLast(bool f) { resource.focus_last = f; } + 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 saveEdgeSnapThreshold(int t); + void saveImageDither(bool d); + void saveAAFonts(bool f); + void saveOpaqueMove(bool o); + void saveFullMax(bool f); + void saveFocusNew(bool f); + void saveFocusLast(bool f); + void saveHideToolbar(bool h); + void saveWindowToWindowSnap(bool 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 void iconUpdate(void) { iconmenu->update(); } #ifdef HAVE_STRFTIME @@ -309,9 +305,9 @@ public: void saveStrftimeFormat(const std::string& format); #else // !HAVE_STRFTIME inline int getDateFormat(void) { return resource.date_format; } - inline void saveDateFormat(int f) { resource.date_format = f; } + inline void saveDateFormat(int f); inline bool isClock24Hour(void) { return resource.clock24hour; } - inline void saveClock24Hour(bool c) { resource.clock24hour = c; } + inline void saveClock24Hour(bool c); #endif // HAVE_STRFTIME inline WindowStyle *getWindowStyle(void) { return &resource.wstyle; } @@ -320,43 +316,54 @@ public: BlackboxWindow *getIcon(unsigned int index); + // allAvailableAreas should be used whenever possible instead of this function + // as then Xinerama will work correctly. const Rect& availableArea(void) const; +#ifdef XINERAMA + const RectList& allAvailableAreas(void) const; +#endif // XINERAMA void updateAvailableArea(void); void addStrut(Strut *strut); void removeStrut(Strut *strut); unsigned int addWorkspace(void); unsigned int removeLastWorkspace(void); - void removeWorkspaceNames(void); - void addWorkspaceName(const std::string& name); - const std::string getNameOfWorkspace(unsigned int id); void changeWorkspaceID(unsigned int id); + void saveWorkspaceNames(void); void addNetizen(Netizen *n); void removeNetizen(Window w); + 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); void nextFocus(void); void raiseFocus(void); + void load_rc(void); + void save_rc(void); void reconfigure(void); void toggleFocusModel(FocusModel model); - void updateFocusModel(void); void rereadMenu(void); void shutdown(void); void showPosition(int x, int y); void showGeometry(unsigned int gx, unsigned int gy); void hideGeometry(void); - void buttonPressEvent(XButtonEvent *xbutton); + void buttonPressEvent(const XButtonEvent *xbutton); + void propertyNotifyEvent(const XPropertyEvent *pe); void updateNetizenCurrentWorkspace(void); void updateNetizenWorkspaceCount(void);