all repos — openbox @ e17c54e3f80458c0c85133e877371a55f460e3e7

openbox fork - make it a bit more like ryudo

removed all Xrm database calls from Screen.cc (style loading).
This completes the conversion to using the obResource class, there are no class to Xrm* except in Resource.cc/h
Dana Jansens danakj@orodu.net
commit

e17c54e3f80458c0c85133e877371a55f460e3e7

parent

b7fa41a30b2e3271c4489a780c24ea82597ea18d

6 files changed, 115 insertions(+), 132 deletions(-)

jump to
M nls/C/Screen.mnls/C/Screen.m

@@ -9,6 +9,8 @@ $ #FontLoadFail

# BScreen::LoadStyle(): couldn't load font '%s'\n $ #DefaultFontLoadFail # BScreen::LoadStyle(): couldn't load default font.\n +$ #DefaultStyleLoadFail +# BScreen::LoadStyle(): couldn't load default style.\n $ #EmptyMenuFile # %s: empty menu file\n $ #xterm
M src/Image.ccsrc/Image.cc

@@ -2343,7 +2343,7 @@ return (*(sqrt_table + x));

} -void BImageControl::parseTexture(BTexture *texture, char *t) { +void BImageControl::parseTexture(BTexture *texture, const char *t) { if ((! texture) || (! t)) return; int t_len = strlen(t) + 1, i;

@@ -2409,7 +2409,7 @@ delete [] ts;

} -void BImageControl::parseColor(BColor *color, char *c) { +void BImageControl::parseColor(BColor *color, const char *c) { if (! color) return; if (color->isAllocated()) {
M src/Image.hsrc/Image.h

@@ -230,8 +230,8 @@ void getGradientBuffers(unsigned int, unsigned int,

unsigned int **, unsigned int **); void setDither(Bool d) { dither = d; } void setColorsPerChannel(int); - void parseTexture(BTexture *, char *); - void parseColor(BColor *, char * = 0); + void parseTexture(BTexture *, const char *); + void parseColor(BColor *, const char * = 0); virtual void timeout(void); };
M src/Screen.ccsrc/Screen.cc

@@ -94,6 +94,7 @@ #ifndef FONT_ELEMENT_SIZE

#define FONT_ELEMENT_SIZE 50 #endif // FONT_ELEMENT_SIZE +#include <string> #include <algorithm> static Bool running = True;

@@ -201,7 +202,6 @@ getScreenNumber(), XVisualIDFromVisual(getVisual()),

getDepth()); rootmenu = 0; - resource.stylerc = 0; resource.mstyle.t_fontset = resource.mstyle.f_fontset = resource.tstyle.fontset = resource.wstyle.fontset = (XFontSet) 0;

@@ -584,16 +584,14 @@ XFreeGC(getBaseDisplay()->getXDisplay(),

resource.tstyle.b_pic_gc); } -void BScreen::readDatabaseTexture(char *rname, char *rclass, +void BScreen::readDatabaseTexture(const char *rname, const char *rclass, BTexture *texture, unsigned long default_pixel) { - XrmValue value; - char *value_type; - - if (XrmGetResource(resource.stylerc, rname, rclass, &value_type, - &value)) - image_control->parseTexture(texture, value.addr); + std::string s; + + if (resource.styleconfig.getValue(rname, rclass, s)) + image_control->parseTexture(texture, s.c_str()); else texture->setTexture(BImage_Solid | BImage_Flat);

@@ -684,16 +682,14 @@ }

} -void BScreen::readDatabaseColor(char *rname, char *rclass, BColor *color, - unsigned long default_pixel) +void BScreen::readDatabaseColor(const char *rname, const char *rclass, + BColor *color, unsigned long default_pixel) { - XrmValue value; - char *value_type; - - if (XrmGetResource(resource.stylerc, rname, rclass, &value_type, - &value)) { - image_control->parseColor(color, value.addr); - } else { + std::string s; + + if (resource.styleconfig.getValue(rname, rclass, s)) + image_control->parseColor(color, s.c_str()); + else { // parsing with no color string just deallocates the color, if it has // been previously allocated image_control->parseColor(color);

@@ -702,26 +698,22 @@ }

} -void BScreen::readDatabaseFontSet(char *rname, char *rclass, +void BScreen::readDatabaseFontSet(const char *rname, const char *rclass, XFontSet *fontset) { if (! fontset) return; static char *defaultFont = "fixed"; - - Bool load_default = False; - XrmValue value; - char *value_type; + bool load_default = false; + std::string s; if (*fontset) XFreeFontSet(getBaseDisplay()->getXDisplay(), *fontset); - if (XrmGetResource(resource.stylerc, rname, rclass, &value_type, &value)) { - char *fontname = value.addr; - if (! (*fontset = createFontSet(fontname))) - load_default = True; - } else { - load_default = True; - } + if (resource.styleconfig.getValue(rname, rclass, s)) { + if (! (*fontset = createFontSet(s.c_str()))) + load_default = true; + } else + load_default = true; if (load_default) { *fontset = createFontSet(defaultFont);

@@ -735,30 +727,27 @@ }

} -void BScreen::readDatabaseFont(char *rname, char *rclass, XFontStruct **font) { +void BScreen::readDatabaseFont(const char *rname, const char *rclass, + XFontStruct **font) { if (! font) return; static char *defaultFont = "fixed"; - - Bool load_default = False; - XrmValue value; - char *value_type; + bool load_default = false; + std::string s; if (*font) XFreeFont(getBaseDisplay()->getXDisplay(), *font); - if (XrmGetResource(resource.stylerc, rname, rclass, &value_type, &value)) { + if (resource.styleconfig.getValue(rname, rclass, s)) { if ((*font = XLoadQueryFont(getBaseDisplay()->getXDisplay(), - value.addr)) == NULL) { + s.c_str())) == NULL) { fprintf(stderr, i18n->getMessage(ScreenSet, ScreenFontLoadFail, "BScreen::LoadStyle(): couldn't load font '%s'\n"), - value.addr); - - load_default = True; + s.c_str()); + load_default = true; } - } else { - load_default = True; - } + } else + load_default = true; if (load_default) { if ((*font = XLoadQueryFont(getBaseDisplay()->getXDisplay(),

@@ -771,7 +760,7 @@ }

} -XFontSet BScreen::createFontSet(char *fontname) { +XFontSet BScreen::createFontSet(const char *fontname) { XFontSet fs; char **missing, *def = "-"; int nmissing, pixel_size = 0, buf_size = 0;

@@ -1004,14 +993,22 @@ }

void BScreen::LoadStyle(void) { - resource.stylerc = XrmGetFileDatabase(openbox->getStyleFilename()); - if (resource.stylerc == NULL) - resource.stylerc = XrmGetFileDatabase(DEFAULTSTYLE); - assert(resource.stylerc != NULL); - - XrmValue value; - char *value_type; + obResource &conf = resource.styleconfig; + + conf.setFile(openbox->getStyleFilename()); + if (!conf.load()) { + conf.setFile(DEFAULTSTYLE); + if (!conf.load()) { + fprintf(stderr, i18n->getMessage(ScreenSet, ScreenDefaultStyleLoadFail, + "BScreen::LoadStyle(): couldn't load " + "default style.\n")); + exit(2); + } + } + std::string s; + long l; + // load fonts/fontsets if (i18n->multibyte()) {

@@ -1119,17 +1116,16 @@ &resource.wstyle.b_pic_unfocus,

WhitePixel(getBaseDisplay()->getXDisplay(), getScreenNumber())); - if (XrmGetResource(resource.stylerc, "window.justify", "Window.Justify", - &value_type, &value)) { - if (strstr(value.addr, "right") || strstr(value.addr, "Right")) + if (conf.getValue("window.justify", "Window.Justify", s)) { + if (0 == strncasecmp(s.c_str(), "right", s.length())) resource.wstyle.justify = BScreen::RightJustify; - else if (strstr(value.addr, "center") || strstr(value.addr, "Center")) + else if (0 == strncasecmp(s.c_str(), "center", s.length())) resource.wstyle.justify = BScreen::CenterJustify; else resource.wstyle.justify = BScreen::LeftJustify; - } else { + } else resource.wstyle.justify = BScreen::LeftJustify; - } + // load toolbar config readDatabaseTexture("toolbar", "Toolbar", &resource.tstyle.toolbar,

@@ -1173,17 +1169,16 @@ &resource.tstyle.b_pic,

BlackPixel(getBaseDisplay()->getXDisplay(), getScreenNumber())); - if (XrmGetResource(resource.stylerc, "toolbar.justify", - "Toolbar.Justify", &value_type, &value)) { - if (strstr(value.addr, "right") || strstr(value.addr, "Right")) + if (conf.getValue("toolbar.justify", "Toolbar.Justify", s)) { + if (0 == strncasecmp(s.c_str(), "right", s.length())) resource.tstyle.justify = BScreen::RightJustify; - else if (strstr(value.addr, "center") || strstr(value.addr, "Center")) + else if (0 == strncasecmp(s.c_str(), "center", s.length())) resource.tstyle.justify = BScreen::CenterJustify; else resource.tstyle.justify = BScreen::LeftJustify; - } else { + } else resource.tstyle.justify = BScreen::LeftJustify; - } + // load menu config readDatabaseTexture("menu.title", "Menu.Title", &resource.mstyle.title,

@@ -1214,96 +1209,85 @@ &resource.mstyle.h_text,

BlackPixel(getBaseDisplay()->getXDisplay(), getScreenNumber())); - if (XrmGetResource(resource.stylerc, "menu.title.justify", - "Menu.Title.Justify", - &value_type, &value)) { - if (strstr(value.addr, "right") || strstr(value.addr, "Right")) + if (conf.getValue("menu.title.justify", "Menu.Title.Justify", s)) { + if (0 == strncasecmp(s.c_str(), "right", s.length())) resource.mstyle.t_justify = BScreen::RightJustify; - else if (strstr(value.addr, "center") || strstr(value.addr, "Center")) + else if (0 == strncasecmp(s.c_str(), "center", s.length())) resource.mstyle.t_justify = BScreen::CenterJustify; else resource.mstyle.t_justify = BScreen::LeftJustify; - } else { + } else resource.mstyle.t_justify = BScreen::LeftJustify; - } - if (XrmGetResource(resource.stylerc, "menu.frame.justify", - "Menu.Frame.Justify", - &value_type, &value)) { - if (strstr(value.addr, "right") || strstr(value.addr, "Right")) + + if (conf.getValue("menu.frame.justify", "Menu.Frame.Justify", s)) { + if (0 == strncasecmp(s.c_str(), "right", s.length())) resource.mstyle.f_justify = BScreen::RightJustify; - else if (strstr(value.addr, "center") || strstr(value.addr, "Center")) + else if (0 == strncasecmp(s.c_str(), "center", s.length())) resource.mstyle.f_justify = BScreen::CenterJustify; else resource.mstyle.f_justify = BScreen::LeftJustify; - } else { + } else resource.mstyle.f_justify = BScreen::LeftJustify; - } - if (XrmGetResource(resource.stylerc, "menu.bullet", "Menu.Bullet", - &value_type, &value)) { - if (! strncasecmp(value.addr, "empty", value.size)) + + if (conf.getValue("menu.bullet", "Menu.Bullet", s)) { + if (0 == strncasecmp(s.c_str(), "empty", s.length())) resource.mstyle.bullet = Basemenu::Empty; - else if (! strncasecmp(value.addr, "square", value.size)) + else if (0 == strncasecmp(s.c_str(), "square", s.length())) resource.mstyle.bullet = Basemenu::Square; - else if (! strncasecmp(value.addr, "diamond", value.size)) + else if (0 == strncasecmp(s.c_str(), "diamond", s.length())) resource.mstyle.bullet = Basemenu::Diamond; else resource.mstyle.bullet = Basemenu::Triangle; - } else { + } else resource.mstyle.bullet = Basemenu::Triangle; - } - if (XrmGetResource(resource.stylerc, "menu.bullet.position", - "Menu.Bullet.Position", &value_type, &value)) { - if (! strncasecmp(value.addr, "right", value.size)) + + if (conf.getValue("menu.bullet.position", "Menu.Bullet.Position", s)) { + if (0 == strncasecmp(s.c_str(), "right", s.length())) resource.mstyle.bullet_pos = Basemenu::Right; else resource.mstyle.bullet_pos = Basemenu::Left; - } else { + } else resource.mstyle.bullet_pos = Basemenu::Left; - } + readDatabaseColor("borderColor", "BorderColor", &resource.border_color, BlackPixel(getBaseDisplay()->getXDisplay(), getScreenNumber())); // load bevel, border and handle widths - if (XrmGetResource(resource.stylerc, "handleWidth", "HandleWidth", - &value_type, &value)) { - if (sscanf(value.addr, "%u", &resource.handle_width) != 1 || - resource.handle_width > getWidth() / 2 || resource.handle_width == 0) + if (conf.getValue("handleWidth", "HandleWidth", l)) { + if (l <= getWidth() / 2 && l != 0) + resource.handle_width = l; + else resource.handle_width = 6; - } else { + } else resource.handle_width = 6; - } - if (XrmGetResource(resource.stylerc, "borderWidth", "BorderWidth", - &value_type, &value)) { - if (sscanf(value.addr, "%u", &resource.border_width) != 1) - resource.border_width = 1; - } else { + + if (conf.getValue("borderWidth", "BorderWidth", l)) + resource.border_width = l; + else resource.border_width = 1; - } - if (XrmGetResource(resource.stylerc, "bevelWidth", "BevelWidth", - &value_type, &value)) { - if (sscanf(value.addr, "%u", &resource.bevel_width) != 1 || - resource.bevel_width > getWidth() / 2 || resource.bevel_width == 0) + if (conf.getValue("bevelWidth", "BevelWidth", l)) { + if (l <= getWidth() / 2 && l != 0) + resource.bevel_width = l; + else resource.bevel_width = 3; - } else { + } else resource.bevel_width = 3; - } - if (XrmGetResource(resource.stylerc, "frameWidth", "FrameWidth", - &value_type, &value)) { - if (sscanf(value.addr, "%u", &resource.frame_width) != 1 || - resource.frame_width > getWidth() / 2) + + if (conf.getValue("frameWidth", "FrameWidth", l)) { + if (l <= getWidth() / 2) + resource.frame_width = l; + else resource.frame_width = resource.bevel_width; - } else { + } else resource.frame_width = resource.bevel_width; - } + const char *cmd = resource.root_command; - if (cmd != NULL || XrmGetResource(resource.stylerc, - "rootCommand", - "RootCommand", &value_type, &value)) { + if (cmd != NULL || conf.getValue("rootCommand", "RootCommand", s)) { if (cmd == NULL) - cmd = value.addr; // not specified by the screen, so use the one from the - // style file + cmd = s.c_str(); // not specified by the screen, so use the one from the + // style file #ifndef __EMX__ char displaystring[MAXPATHLEN]; sprintf(displaystring, "DISPLAY=%s",

@@ -1316,8 +1300,6 @@ #else // __EMX__

spawnlp(P_NOWAIT, "cmd.exe", "cmd.exe", "/c", cmd, NULL); #endif // !__EMX__ } - - XrmDestroyDatabase(resource.stylerc); }
M src/Screen.hsrc/Screen.h

@@ -51,8 +51,7 @@ #ifdef SLIT

# include "Slit.h" #endif // SLIT #include "Image.h" - -#include <strstream> +#include "Resource.h" // forward declaration class BScreen;

@@ -136,7 +135,7 @@ 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; BColor border_color; - XrmDatabase stylerc; + obResource styleconfig; int workspaces, toolbar_placement, toolbar_width_percent, placement_policy, edge_snap_threshold, row_direction, col_direction;

@@ -163,12 +162,13 @@

protected: Bool parseMenuFile(FILE *, Rootmenu *); - void readDatabaseTexture(char *, char *, BTexture *, unsigned long); - void readDatabaseColor(char *, char *, BColor *, unsigned long); + void readDatabaseTexture(const char *, const char *, BTexture *, + unsigned long); + void readDatabaseColor(const char *, const char *, BColor *, unsigned long); - void readDatabaseFontSet(char *, char *, XFontSet *); - XFontSet createFontSet(char *); - void readDatabaseFont(char *, char *, XFontStruct **); + void readDatabaseFontSet(const char *, const char *, XFontSet *); + XFontSet createFontSet(const char *); + void readDatabaseFont(const char *, const char *, XFontStruct **); void InitMenu(void); void LoadStyle(void);
M src/openbox.ccsrc/openbox.cc

@@ -1333,7 +1333,6 @@

sprintf(name_lookup, "session.screen%d.focusModel", screen_number); sprintf(class_lookup, "Session.Screen%d.FocusModel", screen_number); if (config.getValue(name_lookup, class_lookup, s)) { - cout << s << endl; if (0 == strncasecmp(s.c_str(), "clicktofocus", s.length())) { screen->saveAutoRaise(False); screen->saveSloppyFocus(False);