all repos — openbox @ 059bc4dc24b68d637c3608c05344c53c64cc2c4b

openbox fork - make it a bit more like ryudo

add a Config class with config data from the scripts.
set up the functions for loading a style from a file.
use the Config class throughout instead of reading out of the python namespace all the time.
Dana Jansens danakj@orodu.net
commit

059bc4dc24b68d637c3608c05344c53c64cc2c4b

parent

1431cd19584e750309561e0054fd013d566965cb

M otk/renderstyle.ccotk/renderstyle.cc

@@ -17,8 +17,10 @@ void RenderStyle::initialize()

{ int screens = ScreenCount(**display); _styles = new RenderStyle*[screens]; - for (int i = 0; i < screens; ++i) - _styles[i] = new RenderStyle(i, ""); // XXX get a path + for (int i = 0; i < screens; ++i) { + _styles[i] = new RenderStyle(); + defaultStyle(_styles[i], i); + } _notifies = new std::list<StyleNotify*>[screens]; }

@@ -49,467 +51,649 @@ assert(screen >= 0 && screen < ScreenCount(**display));

return _styles[screen]; } -RenderStyle::RenderStyle(int screen, const std::string &stylefile) - : _screen(screen), - _file(stylefile) +bool RenderStyle::setStyle(int screen, const ustring &stylefile) +{ + RenderStyle *s = new RenderStyle(); + if (!loadStyle(s, screen, stylefile)) { + delete s; + return false; + } + delete _styles[screen]; + _styles[screen] = s; + + std::list<StyleNotify*>::iterator it, end = _notifies[screen].end(); + for (it = _notifies[screen].begin(); it != end; ++it) + (*it)->styleChanged(*s); + return true; +} + +bool RenderStyle::loadStyle(RenderStyle *s, int screen, + const ustring &stylefile) { + s->_screen = screen; + s->_file = stylefile; // pick one.. //#define FIERON #define MERRY #ifdef FIERON - _root_color = new RenderColor(_screen, 0x272a2f); + s->_root_color = new RenderColor(screen, 0x272a2f); - _text_color_focus = new RenderColor(_screen, 0x272a2f); - _text_color_unfocus = new RenderColor(_screen, 0x676869); + s->_text_color_focus = new RenderColor(screen, 0x272a2f); + s->_text_color_unfocus = new RenderColor(screen, 0x676869); - _button_color_focus = new RenderColor(_screen, 0x96ba86); - _button_color_unfocus = new RenderColor(_screen, 0x676869); + s->_button_color_focus = new RenderColor(screen, 0x96ba86); + s->_button_color_unfocus = new RenderColor(screen, 0x676869); + + s->_frame_border_color = new RenderColor(screen, 0x181f24); + s->_frame_border_width = 1; - _frame_border_color = new RenderColor(_screen, 0x181f24); - _frame_border_width = 1; + s->_client_border_color_focus = new RenderColor(screen, 0x858687); + s->_client_border_color_unfocus = new RenderColor(screen, 0x555657); + s->_client_border_width = 1; - _client_border_color_focus = new RenderColor(_screen, 0x858687); - _client_border_color_unfocus = new RenderColor(_screen, 0x555657); - _client_border_width = 1; + s->_titlebar_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Vertical, + false, + 0x858687, + 0x373a3f, + 0x0, + 0x0); + s->_titlebar_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Vertical, + false, + 0x555657, + 0x171a1f, + 0x0, + 0x0); - _titlebar_focus = new RenderTexture(_screen, + s->_label_focus = new RenderTexture(screen, false, RenderTexture::Flat, RenderTexture::Bevel1, - false, + true, RenderTexture::Vertical, false, - 0x858687, - 0x373a3f, - 0x0, + 0x96ba86, + 0x5a724c, + 0x181f24, 0x0); - _titlebar_unfocus = new RenderTexture(_screen, + s->_label_unfocus = new RenderTexture(screen, false, - RenderTexture::Flat, + RenderTexture::Sunken, RenderTexture::Bevel1, false, - RenderTexture::Vertical, + RenderTexture::CrossDiagonal, false, 0x555657, - 0x171a1f, + 0x272a2f, 0x0, 0x0); - _label_focus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - true, - RenderTexture::Vertical, - false, - 0x96ba86, - 0x5a724c, - 0x181f24, - 0x0); - _label_unfocus = new RenderTexture(_screen, + s->_handle_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Vertical, + false, + 0x858687, + 0x373a3f, + 0x0, + 0x0); + s->_handle_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Vertical, + false, + 0x555657, + 0x171a1f, + 0x0, + 0x0); + + s->_button_unpress_focus = new RenderTexture(screen, + false, + RenderTexture::Raised, + RenderTexture::Bevel2, + false, + RenderTexture::CrossDiagonal, + false, + 0x858687, + 0x272a2f, + 0x0, + 0x0); + s->_button_unpress_unfocus = new RenderTexture(screen, + false, + RenderTexture::Raised, + RenderTexture::Bevel2, + false, + RenderTexture::CrossDiagonal, + false, + 0x555657, + 0x171a1f, + 0x0, + 0x0); + + s->_button_press_focus = new RenderTexture(screen, + false, + RenderTexture::Sunken, + RenderTexture::Bevel2, + false, + RenderTexture::CrossDiagonal, + false, + 0x96ba86, + 0x5a724c, + 0x0, + 0x0); + s->_button_press_unfocus = new RenderTexture(screen, + false, + RenderTexture::Sunken, + RenderTexture::Bevel2, + false, + RenderTexture::CrossDiagonal, + false, + 0x555657, + 0x171a1f, + 0x0, + 0x0); + + s->_grip_focus = new RenderTexture(screen, false, - RenderTexture::Sunken, + RenderTexture::Flat, RenderTexture::Bevel1, false, - RenderTexture::CrossDiagonal, + RenderTexture::Vertical, false, - 0x555657, - 0x272a2f, + 0x96ba86, + 0x5a724c, 0x0, 0x0); - - - _handle_focus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - false, - RenderTexture::Vertical, - false, - 0x858687, - 0x373a3f, - 0x0, - 0x0); - _handle_unfocus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - false, - RenderTexture::Vertical, - false, - 0x555657, - 0x171a1f, - 0x0, - 0x0); + s->_grip_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Vertical, + false, + 0x555657, + 0x171a1f, + 0x0, + 0x0); - - _button_unpress_focus = new RenderTexture(_screen, - false, - RenderTexture::Raised, - RenderTexture::Bevel2, - false, - RenderTexture::CrossDiagonal, - false, - 0x858687, - 0x272a2f, - 0x0, - 0x0); - _button_unpress_unfocus = new RenderTexture(_screen, - false, - RenderTexture::Raised, - RenderTexture::Bevel2, - false, - RenderTexture::CrossDiagonal, - false, - 0x555657, - 0x171a1f, - 0x0, - 0x0); + s->_label_font = new Font(screen, "Arial,Sans-9:bold", true, 1, 0x40); + s->_label_justify = RightBottomJustify; - _button_press_focus = new RenderTexture(_screen, - false, - RenderTexture::Sunken, - RenderTexture::Bevel2, - false, - RenderTexture::CrossDiagonal, - false, - 0x96ba86, - 0x5a724c, - 0x0, - 0x0); - _button_press_unfocus = new RenderTexture(_screen, - false, - RenderTexture::Sunken, - RenderTexture::Bevel2, - false, - RenderTexture::CrossDiagonal, - false, - 0x555657, - 0x171a1f, - 0x0, - 0x0); - - _grip_focus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - false, - RenderTexture::Vertical, - false, - 0x96ba86, - 0x5a724c, - 0x0, - 0x0); - _grip_unfocus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - false, - RenderTexture::Vertical, - false, - 0x555657, - 0x171a1f, - 0x0, - 0x0); - - _label_font = new Font(_screen, "Arial,Sans-9:bold", true, 1, 0x40); - _label_justify = RightBottomJustify; - - _max_mask = new PixmapMask(); - _max_mask->w = _max_mask->h = 8; + s->_max_mask = new PixmapMask(); + s->_max_mask->w = s->_max_mask->h = 8; { //char data[] = { 0x7e, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0x7e }; char data [] = {0x00, 0x00, 0x18, 0x3c, 0x66, 0x42, 0x00, 0x00 }; - _max_mask->mask = + s->_max_mask->mask = XCreateBitmapFromData(**display, - display->screenInfo(_screen)->rootWindow(), + display->screenInfo(screen)->rootWindow(), data, 8, 8); } - _icon_mask = new PixmapMask(); - _icon_mask->w = _icon_mask->h = 8; + s->_icon_mask = new PixmapMask(); + s->_icon_mask->w = s->_icon_mask->h = 8; { //char data[] = { 0x00, 0x00, 0xc3, 0xe7, 0x7e, 0x3c, 0x18, 0x00 }; char data[] = { 0x00, 0x00, 0x42, 0x66, 0x3c, 0x18, 0x00, 0x00 }; - _icon_mask->mask = + s->_icon_mask->mask = XCreateBitmapFromData(**display, - display->screenInfo(_screen)->rootWindow(), + display->screenInfo(screen)->rootWindow(), data, 8, 8); } - _alldesk_mask = new PixmapMask(); - _alldesk_mask->w = _alldesk_mask->h = 8; + s->_alldesk_mask = new PixmapMask(); + s->_alldesk_mask->w = s->_alldesk_mask->h = 8; { //char data[] = { 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00 }; char data[] = { 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00 }; - _alldesk_mask->mask = + s->_alldesk_mask->mask = XCreateBitmapFromData(**display, - display->screenInfo(_screen)->rootWindow(), + display->screenInfo(screen)->rootWindow(), data, 8, 8); } - _close_mask = new PixmapMask(); - _close_mask->w = _close_mask->h = 8; + s->_close_mask = new PixmapMask(); + s->_close_mask->w = s->_close_mask->h = 8; { //char data[] = { 0xc3, 0xe7, 0x7e, 0x3c, 0x3c, 0x7e, 0xe7, 0xc3 }; char data[] = { 0x00, 0xc3, 0x66, 0x3c, 0x3c, 0x66, 0xc3, 0x00 }; - _close_mask->mask = + s->_close_mask->mask = XCreateBitmapFromData(**display, - display->screenInfo(_screen)->rootWindow(), + display->screenInfo(screen)->rootWindow(), data, 8, 8); } - _bevel_width = 1; - _handle_width = 4; + s->_bevel_width = 1; + s->_handle_width = 4; #else # ifdef MERRY - _root_color = new RenderColor(_screen, 0x7b756a); + s->_root_color = new RenderColor(screen, 0x7b756a); - _text_color_focus = new RenderColor(_screen, 0xffffff); - _text_color_unfocus = new RenderColor(_screen, 0xffffff); + s->_text_color_focus = new RenderColor(screen, 0xffffff); + s->_text_color_unfocus = new RenderColor(screen, 0xffffff); - _button_color_focus = new RenderColor(_screen, 0x222222); - _button_color_unfocus = new RenderColor(_screen, 0x333333); + s->_button_color_focus = new RenderColor(screen, 0x222222); + s->_button_color_unfocus = new RenderColor(screen, 0x333333); - _frame_border_color = new RenderColor(_screen, 0x222222); - _frame_border_width = 1; + s->_frame_border_color = new RenderColor(screen, 0x222222); + s->_frame_border_width = 1; - _client_border_color_focus = new RenderColor(_screen, 0x858687); - _client_border_color_unfocus = new RenderColor(_screen, 0x555657); - _client_border_width = 0; + s->_client_border_color_focus = new RenderColor(screen, 0x858687); + s->_client_border_color_unfocus = new RenderColor(screen, 0x555657); + s->_client_border_width = 0; - _titlebar_focus = new RenderTexture(_screen, + s->_titlebar_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0xe6e6e6, + 0xe6e6e6, + 0x0, + 0x0); + s->_titlebar_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0xe6e6e6, + 0xd9d9d9, + 0x0, + 0x0); + + s->_label_focus = new RenderTexture(screen, false, RenderTexture::Flat, RenderTexture::Bevel1, - false, - RenderTexture::Solid, + true, + RenderTexture::Vertical, false, - 0xe6e6e6, - 0xe6e6e6, - 0x0, + //0x6a6973, + //0x6a6973, + 0x4c59a6, + 0x5a6dbd, + 0x222222, 0x0); - _titlebar_unfocus = new RenderTexture(_screen, + //urg this ain't so hot + s->_label_unfocus = new RenderTexture(screen, false, RenderTexture::Flat, RenderTexture::Bevel1, + true, + RenderTexture::Vertical, false, - RenderTexture::Solid, - false, - 0xe6e6e6, - 0xd9d9d9, - 0x0, + 0xb4b2ad, + 0xc3c1bc, + 0x6a696a, 0x0); - _label_focus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - true, - RenderTexture::Vertical, - false, - //0x6a6973, - //0x6a6973, - 0x4c59a6, - 0x5a6dbd, - 0x222222, - 0x0); - //urg this ain't so hot -_label_unfocus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - true, - RenderTexture::Vertical, - false, - 0xb4b2ad, - 0xc3c1bc, - 0x6a696a, - 0x0); + s->_handle_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Vertical, + false, + 0xe6e6e6, + 0xd9d9d9, + 0x0, + 0x0); + s->_handle_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0xe6e6e6, + 0xe6e6e6, + 0x0, + 0x0); - _handle_focus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - false, - RenderTexture::Vertical, - false, - 0xe6e6e6, - 0xd9d9d9, - 0x0, - 0x0); - _handle_unfocus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - false, - RenderTexture::Solid, - false, - 0xe6e6e6, - 0xe6e6e6, - 0x0, - 0x0); + + s->_button_unpress_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0xe6e6e6, + 0xe6e6e6, + 0x0, + 0x0); + s->_button_unpress_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0xe6e6e6, + 0xe6e6e6, + 0x0, + 0x0); - - _button_unpress_focus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - false, - RenderTexture::Solid, - false, - 0xe6e6e6, - 0xe6e6e6, - 0x0, - 0x0); - _button_unpress_unfocus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - false, - RenderTexture::Solid, - false, + s->_button_press_focus = new RenderTexture(screen, + false, + RenderTexture::Sunken, + RenderTexture::Bevel2, + false, + RenderTexture::Vertical, + false, + 0xe6e6e6, 0xe6e6e6, - 0xe6e6e6, - 0x0, - 0x0); - - _button_press_focus = new RenderTexture(_screen, - false, - RenderTexture::Sunken, - RenderTexture::Bevel2, - false, - RenderTexture::Vertical, - false, - 0xe6e6e6, - 0xe6e6e6, - 0x0, - 0x0); - _button_press_unfocus = new RenderTexture(_screen, - false, - RenderTexture::Sunken, - RenderTexture::Bevel2, - false, - RenderTexture::Vertical, - false, - 0xe6e6e6, - 0xe6e6e6, - 0x0, - 0x0); + 0x0, + 0x0); + s->_button_press_unfocus = new RenderTexture(screen, + false, + RenderTexture::Sunken, + RenderTexture::Bevel2, + false, + RenderTexture::Vertical, + false, + 0xe6e6e6, + 0xe6e6e6, + 0x0, + 0x0); - _grip_focus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - false, - RenderTexture::Vertical, - false, - 0xe6e6e6, - 0xd9d9d9, - 0x0, - 0x0); - _grip_unfocus = new RenderTexture(_screen, - false, - RenderTexture::Flat, - RenderTexture::Bevel1, - false, - RenderTexture::Solid, - false, - 0xe6e6e6, - 0xe6e6e6, - 0x0, - 0x0); + s->_grip_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Vertical, + false, + 0xe6e6e6, + 0xd9d9d9, + 0x0, + 0x0); + s->_grip_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0xe6e6e6, + 0xe6e6e6, + 0x0, + 0x0); - _label_font = new Font(_screen, "Arial,Sans-8", true, 1, 0x3e); - _label_justify = CenterJustify; + s->_label_font = new Font(screen, "Arial,Sans-8", true, 1, 0x3e); + s->_label_justify = CenterJustify; - _max_mask = new PixmapMask(); - _max_mask->w = _max_mask->h = 7; + s->_max_mask = new PixmapMask(); + s->_max_mask->w = s->_max_mask->h = 7; { char data [] = {0x7c, 0x44, 0x47, 0x47, 0x7f, 0x1f, 0x1f }; - _max_mask->mask = + s->_max_mask->mask = XCreateBitmapFromData(**display, - display->screenInfo(_screen)->rootWindow(), + display->screenInfo(screen)->rootWindow(), data, 7, 7); } - _icon_mask = new PixmapMask(); - _icon_mask->w = _icon_mask->h = 7; + s->_icon_mask = new PixmapMask(); + s->_icon_mask->w = s->_icon_mask->h = 7; { char data[] = {0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x3e }; - _icon_mask->mask = + s->_icon_mask->mask = XCreateBitmapFromData(**display, - display->screenInfo(_screen)->rootWindow(), + display->screenInfo(screen)->rootWindow(), data, 7, 7); } - _alldesk_mask = new PixmapMask(); - _alldesk_mask->w = _alldesk_mask->h = 7; + s->_alldesk_mask = new PixmapMask(); + s->_alldesk_mask->w = s->_alldesk_mask->h = 7; { char data[] = {0x00, 0x36, 0x36, 0x00, 0x36, 0x36, 0x00 }; - _alldesk_mask->mask = + s->_alldesk_mask->mask = XCreateBitmapFromData(**display, - display->screenInfo(_screen)->rootWindow(), + display->screenInfo(screen)->rootWindow(), data, 7, 7); } - _close_mask = new PixmapMask(); - _close_mask->w = _close_mask->h = 7; + s->_close_mask = new PixmapMask(); + s->_close_mask->w = s->_close_mask->h = 7; { char data[] = { 0x22, 0x77, 0x3e, 0x1c, 0x3e, 0x77, 0x22 }; - _close_mask->mask = + s->_close_mask->mask = XCreateBitmapFromData(**display, - display->screenInfo(_screen)->rootWindow(), + display->screenInfo(screen)->rootWindow(), data, 7, 7); } - _bevel_width = 1; - _handle_width = 3; + s->_bevel_width = 1; + s->_handle_width = 3; # else # error 1 # endif #endif + + return true; +} + +void RenderStyle::defaultStyle(RenderStyle *s, int screen) +{ + s->_screen = screen; + s->_file = ""; + + s->_root_color = new RenderColor(screen, 0); + s->_text_color_focus = new RenderColor(screen, 0xffffff); + s->_text_color_unfocus = new RenderColor(screen, 0xffffff); + s->_button_color_focus = new RenderColor(screen, 0); + s->_button_color_unfocus = new RenderColor(screen, 0); + s->_frame_border_color = new RenderColor(screen, 0); + s->_frame_border_width = 1; + s->_client_border_color_focus = new RenderColor(screen, 0); + s->_client_border_color_unfocus = new RenderColor(screen, 0); + s->_client_border_width = 1; + s->_titlebar_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + s->_titlebar_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + + s->_label_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + true, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + s->_label_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + + s->_handle_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + s->_handle_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + + s->_button_unpress_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + s->_button_unpress_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + + s->_button_press_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + s->_button_press_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + + s->_grip_focus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + s->_grip_unfocus = new RenderTexture(screen, + false, + RenderTexture::Flat, + RenderTexture::Bevel1, + false, + RenderTexture::Solid, + false, + 0, 0, 0, 0); + + s->_label_font = new Font(screen, "Sans-9", false, 0, 0); + s->_label_justify = LeftTopJustify; + + s->_max_mask = new PixmapMask(); + s->_max_mask->w = s->_max_mask->h = 0; + s->_max_mask->mask = None; + + s->_icon_mask = new PixmapMask(); + s->_icon_mask->w = s->_icon_mask->h = 0; + s->_icon_mask->mask = None; + + s->_alldesk_mask = new PixmapMask(); + s->_alldesk_mask->w = s->_alldesk_mask->h = 0; + s->_alldesk_mask->mask = 0; + + s->_close_mask = new PixmapMask(); + s->_close_mask->w = s->_close_mask->h = 8; + s->_close_mask->mask = 0; + + s->_bevel_width = 1; + s->_handle_width = 4; } RenderStyle::~RenderStyle() { + assert(_root_color); delete _root_color; + assert(_text_color_focus); delete _text_color_focus; + assert(_text_color_unfocus); delete _text_color_unfocus; + assert(_button_color_focus); delete _button_color_focus; + assert(_button_color_unfocus); delete _button_color_unfocus; + assert(_frame_border_color); delete _frame_border_color; + assert(_client_border_color_focus); delete _client_border_color_focus; + assert(_client_border_color_unfocus); delete _client_border_color_unfocus; + assert(_titlebar_focus); delete _titlebar_focus; + assert(_titlebar_unfocus); delete _titlebar_unfocus; + assert(_label_focus); delete _label_focus; + assert(_label_unfocus); delete _label_unfocus; + assert(_handle_focus); delete _handle_focus; + assert(_handle_unfocus); delete _handle_unfocus; + assert(_button_unpress_focus); delete _button_unpress_focus; + assert(_button_unpress_unfocus); delete _button_unpress_unfocus; + assert(_button_press_focus); delete _button_press_focus; + assert(_button_press_unfocus); delete _button_press_unfocus; + assert(_grip_focus); delete _grip_focus; + assert(_grip_unfocus); delete _grip_unfocus; + assert(_label_font); delete _label_font; + assert(_max_mask); delete _max_mask; + assert(_icon_mask); delete _icon_mask; + assert(_alldesk_mask); delete _alldesk_mask; + assert(_close_mask); delete _close_mask; }
M otk/renderstyle.hhotk/renderstyle.hh

@@ -5,8 +5,8 @@

#include "rendertexture.hh" #include "rendercolor.hh" #include "font.hh" +#include "ustring.hh" -#include <string> #include <list> namespace otk {

@@ -34,6 +34,7 @@ static void destroy();

static void registerNotify(int screen, StyleNotify *n); static void unregisterNotify(int screen, StyleNotify *n); static RenderStyle *style(int screen); + static bool setStyle(int screen, const ustring &stylefile); enum Justify { LeftTopJustify,

@@ -42,8 +43,11 @@ CenterJustify

}; private: + static bool loadStyle(RenderStyle *s, int screen, const ustring &stylefile); + static void defaultStyle(RenderStyle *s, int screen); + int _screen; - std::string _file; + ustring _file; RenderColor *_root_color;

@@ -89,7 +93,6 @@ int _handle_width;

int _bevel_width; public: - RenderStyle(int screen, const std::string &stylefile); virtual ~RenderStyle(); inline int screen() const { return _screen; }
M scripts/config.pyscripts/config.py

@@ -6,7 +6,7 @@ THEME = "/usr/local/share/openbox/styles/fieron2"

"""The theme used to decorate everything.""" #TITLEBAR_LAYOUT = [ "icon", "title", "alldesktops", "iconify", "maximize", "close" ] -TITLEBAR_LAYOUT = [ "alldesktops", "iconify", "title", "maximize", "close" ] +TITLEBAR_LAYOUT = "NTIMC" """The layout of the buttons/label on client titlebars, can be made up of the following: I - iconify button
M src/Makefile.amsrc/Makefile.am

@@ -16,9 +16,9 @@

openbox3_LDADD=-L../otk -lotk @LIBINTL@ openbox3_LDFLAGS=-export-dynamic openbox3_SOURCES= actions.cc client.cc frame.cc openbox.cc screen.cc \ - main.cc python.cc bindings.cc + main.cc python.cc bindings.cc config.cc noinst_HEADERS= actions.hh bindings.hh client.hh frame.hh openbox.hh \ - python.hh screen.hh + python.hh screen.hh config.hh MAINTAINERCLEANFILES= Makefile.in
M src/actions.ccsrc/actions.cc

@@ -165,12 +165,7 @@ // run the CLICK python hook

data.action = MouseAction::Click; openbox->bindings()->fireButton(&data); - - // XXX: dont load this every time!!@* - long dblclick; - if (!python_get_long("DOUBLE_CLICK_DELAY", &dblclick)) - dblclick = 300; - + long dblclick = openbox->screen(screen)->config().double_click_delay; if (e.time - _release.time < (unsigned)dblclick && _release.win == e.window && _release.button == e.button) {

@@ -318,13 +313,17 @@ x_root = e.x_root;

y_root = e.y_root; } + int screen; + Client *c = openbox->findClient(e.window); + if (c) + screen = c->screen(); + else + screen = otk::display->findScreen(e.root)->screen(); + if (!_dragging) { - long threshold; int dx = x_root - _posqueue[0]->pos.x(); int dy = y_root - _posqueue[0]->pos.y(); - // XXX: dont get this from python every time! - if (!python_get_long("DRAG_THRESHOLD", &threshold)) - threshold = 0; + long threshold = openbox->screen(screen)->config().drag_threshold; if (!(std::abs(dx) >= threshold || std::abs(dy) >= threshold)) return; // not at the threshold yet }

@@ -337,12 +336,6 @@ // kill off the Button1Mask etc, only want the modifiers

unsigned int state = e.state & (ControlMask | ShiftMask | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask); unsigned int button = _posqueue[0]->button; - int screen; - Client *c = openbox->findClient(e.window); - if (c) - screen = c->screen(); - else - screen = otk::display->findScreen(e.root)->screen(); MouseData data(screen, c, e.time, state, button, context, MouseAction::Motion, x_root, y_root, _posqueue[0]->pos, _posqueue[0]->clientarea);
M src/client.ccsrc/client.cc

@@ -446,7 +446,7 @@ break;

} c = c->_transient_for; } - if (!fs) { + if (!fs && _fullscreen) { // is one of our transients focused? c = searchFocusTree(this, this); if (c) fs = true;

@@ -738,8 +738,6 @@ ::memcpy(_icons[j].data, &data[i], w * h * sizeof(unsigned long));

i += w * h; assert(i <= num); } - printf("i: %lu\n", i); - printf("bleffffffff\n"); delete [] data; }
A src/config.cc

@@ -0,0 +1,72 @@

+// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- + +#include "config.h" + +#include "config.hh" + +extern "C" { +#include <Python.h> +} + +namespace ob { + +static PyObject *obdict = NULL; + +bool python_get_long(const char *name, long *value) +{ + PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name)); + if (!(val && PyInt_Check(val))) return false; + + *value = PyInt_AsLong(val); + return true; +} + +bool python_get_string(const char *name, otk::ustring *value) +{ + PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name)); + if (!(val && PyString_Check(val))) return false; + + *value = PyString_AsString(val); + return true; +} + +bool python_get_stringlist(const char *name, std::vector<otk::ustring> *value) +{ + PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name)); + if (!(val && PyList_Check(val))) return false; + + value->clear(); + + for (int i = 0, end = PyList_Size(val); i < end; ++i) { + PyObject *str = PyList_GetItem(val, i); + if (PyString_Check(str)) + value->push_back(PyString_AsString(str)); + } + return true; +} + +Config::Config() +{ + PyRun_SimpleString("import config;"); + // set up access to the python global variables + PyObject *obmodule = PyImport_AddModule("config"); + obdict = PyModule_GetDict(obmodule); + + std::vector<otk::ustring> names; + python_get_stringlist("DESKTOP_NAMES", &names); + + python_get_string("THEME", &theme); + + if (!python_get_string("TITLEBAR_LAYOUT", &titlebar_layout)) + titlebar_layout = "NTIMC"; + printf("LAYOUT %s\n", titlebar_layout.c_str()); + + if (!python_get_long("DOUBLE_CLICK_DELAY", &double_click_delay)) + double_click_delay = 300; + if (!python_get_long("DRAG_THRESHOLD", &drag_threshold)) + drag_threshold = 3; + if (!python_get_long("NUMBER_OF_DESKTOPS", (long*)&num_desktops)) + num_desktops = 1; +} + +}
A src/config.hh

@@ -0,0 +1,29 @@

+// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- +#ifndef __config_hh +#define __config_hh + +/*! @file config.hh + @brief The Config class contains configuration options set by the user's + scripts +*/ + +#include "otk/ustring.hh" + +#include <vector> + +namespace ob { + +struct Config { + std::vector<otk::ustring> desktop_names; + otk::ustring theme; + otk::ustring titlebar_layout; + long double_click_delay; + long drag_threshold; + long num_desktops; + + Config(); +}; + +} + +#endif // __config_hh
M src/frame.ccsrc/frame.cc

@@ -99,7 +99,7 @@ XMapWindow(**otk::display, _label);

applyStyle(*otk::RenderStyle::style(_client->screen())); - _layout = "NDITMC"; + _layout = openbox->screen(_client->screen())->config().titlebar_layout; // register all of the windows with the event dispatcher Window *w = allWindows();
M src/frame.hhsrc/frame.hh

@@ -95,7 +95,7 @@ otk::Surface *_iconify_sur;

otk::Surface *_icon_sur; otk::Surface *_close_sur; - std::string _layout; // layout of the titlebar + otk::ustring _layout; // layout of the titlebar bool _max_press; bool _desk_press;
M src/python.ccsrc/python.cc

@@ -14,8 +14,6 @@ }

namespace ob { -static PyObject *obdict = NULL; - void python_init(char *argv0) { // start the python engine

@@ -27,15 +25,6 @@ PyRun_SimpleString("sys.path.insert(0, '" SCRIPTDIR "')");

PyRun_SimpleString(const_cast<char*>(("sys.path.insert(0, '" + otk::expandTilde("~/.openbox/python") + "')").c_str())); - //PyRun_SimpleString("import ob; import otk; import config;"); - PyRun_SimpleString("import config;"); - // set up convenience global variables - //PyRun_SimpleString("ob.openbox = ob.Openbox_instance()"); - //PyRun_SimpleString("otk.display = otk.Display_instance()"); - - // set up access to the python global variables - PyObject *obmodule = PyImport_AddModule("config"); - obdict = PyModule_GetDict(obmodule); } void python_destroy()

@@ -52,39 +41,6 @@ return false;

} PyRun_SimpleFile(rcpyfd, const_cast<char*>(path.c_str())); fclose(rcpyfd); - return true; -} - -bool python_get_long(const char *name, long *value) -{ - PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name)); - if (!(val && PyInt_Check(val))) return false; - - *value = PyInt_AsLong(val); - return true; -} - -bool python_get_string(const char *name, otk::ustring *value) -{ - PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name)); - if (!(val && PyString_Check(val))) return false; - - *value = PyString_AsString(val); - return true; -} - -bool python_get_stringlist(const char *name, std::vector<otk::ustring> *value) -{ - PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name)); - if (!(val && PyList_Check(val))) return false; - - value->clear(); - - for (int i = 0, end = PyList_Size(val); i < end; ++i) { - PyObject *str = PyList_GetItem(val, i); - if (PyString_Check(str)) - value->push_back(PyString_AsString(str)); - } return true; }
M src/python.hhsrc/python.hh

@@ -233,10 +233,6 @@ void python_init(char *argv0);

void python_destroy(); bool python_exec(const std::string &path); -bool python_get_long(const char *name, long *value); -bool python_get_string(const char *name, otk::ustring *value); -bool python_get_stringlist(const char *name, std::vector<otk::ustring> *value); - #endif // SWIG }
M src/screen.ccsrc/screen.cc

@@ -66,21 +66,8 @@ // set the mouse cursor for the root window (the default cursor)

XDefineCursor(**otk::display, _info->rootWindow(), openbox->cursors().session); - // XXX: initialize the screen's style - /* - otk::ustring stylepath; - python_get_string("THEME", &stylepath); - otk::Configuration sconfig(false); - sconfig.setFile(otk::expandTilde(stylepath.c_str())); - if (!sconfig.load()) { - sconfig.setFile(otk::expandTilde(DEFAULTSTYLE)); - if (!sconfig.load()) { - printf(_("Unable to load default style: %s. Aborting.\n"), DEFAULTSTYLE); - ::exit(1); - } - } - _style.load(sconfig); - */ + // initialize the screen's style + otk::RenderStyle::setStyle(_number, _config.theme); otk::display->renderControl(_number)-> drawRoot(*otk::RenderStyle::style(_number)->rootColor());

@@ -95,19 +82,15 @@ otk::Property::atoms.net_desktop_geometry,

otk::Property::atoms.cardinal, geometry, 2); // Set the net_desktop_names property - std::vector<otk::ustring> names; - python_get_stringlist("DESKTOP_NAMES", &names); otk::Property::set(_info->rootWindow(), otk::Property::atoms.net_desktop_names, - otk::Property::utf8, names); + otk::Property::utf8, _config.desktop_names); // the above set() will cause the updateDesktopNames to fire right away so // we have a list of desktop names _desktop = 0; - - if (!python_get_long("NUMBER_OF_DESKTOPS", (long*)&_num_desktops)) - _num_desktops = 1; - changeNumDesktops(_num_desktops); // set the hint + + changeNumDesktops(_config.num_desktops); // set the hint changeDesktop(0); // set the hint
M src/screen.hhsrc/screen.hh

@@ -10,6 +10,7 @@ extern "C" {

#include <X11/Xlib.h> } +#include "config.hh" #include "otk/strut.hh" #include "otk/rect.hh" #include "otk/screeninfo.hh"

@@ -67,6 +68,9 @@ int _number;

//! Information about this screen const otk::ScreenInfo *_info; + + //! Configuration options from the user scripts + Config _config; //! Area usable for placement etc (total - struts), one per desktop, //! plus one extra for windows on all desktops

@@ -159,6 +163,10 @@ If this is false, then the screen should be deleted and should NOT be

used. */ inline bool managed() const { return _managed; } + + //! Returns the config options set by the user scripts + const Config& config() const { return _config; } + //! An offscreen window which gets focus when nothing else has it inline Window focuswindow() const { return _focuswindow; } //! Returns the desktop being displayed

@@ -176,6 +184,8 @@ on all desktops.

*/ const otk::Rect& area(unsigned int desktop) const; + //! Gives the layout of how the desktops are being displayed, the number of + //! rows and columns etc. const DesktopLayout& desktopLayout() const { return _layout; } //! Shows and focuses the desktop and hides all the client windows, or
M wrap/ob.iwrap/ob.i

@@ -48,6 +48,9 @@

// do this through events %ignore ob::Screen::showDesktop(bool); +%ignore ob::Screen::managed; +%ignore ob::Screen::config; + %import "otk.i" %import "actions.hh"