X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2FScreen.hh;h=c6044812897d0e09f9d8afa8a59f3d3637c839f1;hb=87e63d53af67d5ea98f55a27007663d4c9c8fc6c;hp=44199b3437c5881f5238616f792222c387408f0b;hpb=e90fafd2fd907a81bdc60ad8b6de35fc1595cdff;p=chaz%2Fopenbox diff --git a/src/Screen.hh b/src/Screen.hh index 44199b34..c6044812 100644 --- a/src/Screen.hh +++ b/src/Screen.hh @@ -26,7 +26,6 @@ extern "C" { #include -#include #ifdef TIME_WITH_SYS_TIME # include @@ -54,59 +53,69 @@ 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 }; +#ifdef BITMAPBUTTONS +struct PixmapMask { + Pixmap mask; + unsigned int w, h; +}; +#endif // BITMAPBUTTONS + struct WindowStyle { - BColor f_focus, f_unfocus, l_text_focus, l_text_unfocus, b_pic_focus, + BColor l_text_focus, l_text_unfocus, b_pic_focus, b_pic_unfocus; - BTexture t_focus, t_unfocus, l_focus, l_unfocus, h_focus, h_unfocus, - b_focus, b_unfocus, b_pressed, g_focus, g_unfocus; + BTexture f_focus, f_unfocus, t_focus, t_unfocus, l_focus, l_unfocus, + h_focus, h_unfocus, b_focus, b_unfocus, b_pressed, b_pressed_focus, + b_pressed_unfocus, g_focus, g_unfocus; - XFontSet fontset; - XFontSetExtents *fontset_extents; - XFontStruct *font; +#ifdef BITMAPBUTTONS + PixmapMask close_button, max_button, icon_button, stick_button; +#endif // BITMAPBUTTONS + 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; +#ifdef BITMAPBUTTONS + PixmapMask left_button, right_button; +#endif // BITMAPBUTTONS + + 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; + +#ifdef BITMAPBUTTONS + PixmapMask bullet_image, tick_image; +#endif // BITMAPBUTTONS + + 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; @@ -129,6 +138,9 @@ private: NetizenList netizenList; BlackboxWindowList iconList, windowList; + typedef std::vector WindowList; + WindowList specialWindowList, desktopWindowList, systrayWindowList; + Slit *slit; Toolbar *toolbar; Workspace *current_workspace; @@ -138,11 +150,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; @@ -153,14 +166,23 @@ private: bool sloppy_focus, auto_raise, auto_edge_balance, ordered_dither, opaque_move, full_max, focus_new, focus_last, click_raise, - hide_toolbar, window_to_window_snap, window_corner_snap; + allow_scroll_lock, hide_toolbar, window_corner_snap, aa_fonts, + ignore_shaded, ignore_maximized, workspace_warping, shadow_fonts; + + int snap_to_windows, snap_to_edges; + unsigned int snap_offset; + BColor border_color; unsigned int workspaces; int toolbar_placement, toolbar_width_percent, placement_policy, - edge_snap_threshold, row_direction, col_direction; + snap_threshold, row_direction, col_direction, root_scroll, + resistance_size; - unsigned int handle_width, bevel_width, frame_width, border_width; + unsigned int handle_width, bevel_width, frame_width, border_width, + resize_zones; + + unsigned int root_menu_button, workspace_menu_button; #ifdef HAVE_STRFTIME std::string strftime_format; @@ -177,28 +199,37 @@ private: bool parseMenuFile(FILE *file, Rootmenu *menu); +#ifdef BITMAPBUTTONS + void readDatabaseMask(const std::string &rname, + PixmapMask &pixmapMask, + const Configuration &style); +#endif // BITMAPBUTTONS + BTexture readDatabaseTexture(const std::string &rname, const std::string &default_color, - Configuration &style); + const Configuration &style, + bool allowNoTexture = false); BColor readDatabaseColor(const std::string &rname, const std::string &default_color, - Configuration &style); - XFontSet readDatabaseFontSet(const std::string &rname, Configuration &style); - XFontStruct *readDatabaseFont(const std::string &rname, Configuration &style); - XFontSet createFontSet(const std::string &fontname); + const Configuration &style); + BFont *readDatabaseFont(const std::string &rbasename, + const Configuration &style); void InitMenu(void); void LoadStyle(void); - + void updateWorkArea(void); public: + enum { WindowNoSnap = 0, WindowSnap, WindowResistance }; enum { RowSmartPlacement = 1, ColSmartPlacement, CascadePlacement, - UnderMousePlacement, LeftRight, RightLeft, TopBottom, BottomTop }; + 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 = 0, NormalScroll, ReverseScroll }; BScreen(Blackbox *bb, unsigned int scrn); ~BScreen(void); @@ -209,6 +240,8 @@ public: 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; } @@ -216,10 +249,20 @@ public: 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 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 unsigned int rootMenuButton(void) const + { return resource.root_menu_button; } + inline unsigned int workspaceMenuButton(void) const + { return resource.workspace_menu_button; } inline const GC &getOpGC(void) const { return opGC; } @@ -231,7 +274,7 @@ public: inline Slit *getSlit(void) { return slit; } inline Toolbar *getToolbar(void) { return toolbar; } - Workspace *getWorkspace(unsigned int index); + Workspace *getWorkspace(unsigned int index) const; inline Workspace *getCurrentWorkspace(void) { return current_workspace; } @@ -245,23 +288,35 @@ 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 getPlacementPolicy(void) const { return resource.placement_policy; } - inline int getEdgeSnapThreshold(void) const - { return resource.edge_snap_threshold; } + 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); + inline void setRootColormapInstalled(bool r) { root_colormap_installed = r; } void saveSloppyFocus(bool s); void saveAutoRaise(bool a); @@ -270,15 +325,28 @@ public: void savePlacementPolicy(int p); void saveRowPlacementDirection(int d); void saveColPlacementDirection(int d); - void saveEdgeSnapThreshold(int t); + 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 saveHideToolbar(bool h); - void saveWindowToWindowSnap(bool s); + 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); + void saveRootMenuButton(unsigned int b); + void saveWorkspaceMenuButton(unsigned int b); inline void iconUpdate(void) { iconmenu->update(); } #ifdef HAVE_STRFTIME @@ -298,46 +366,57 @@ 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 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 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 showWorkspaceMenu(int x, int y); + void showRootMenu(int x, int y); + + void buttonPressEvent(const XButtonEvent *xbutton); + void propertyNotifyEvent(const XPropertyEvent *pe); void updateNetizenCurrentWorkspace(void); void updateNetizenWorkspaceCount(void);