+RenderStyle **RenderStyle::_styles = 0;
+std::list<StyleNotify*> *RenderStyle::_notifies = 0;
+
+void RenderStyle::initialize()
+{
+ int screens = ScreenCount(**display);
+ _styles = new RenderStyle*[screens];
+ for (int i = 0; i < screens; ++i) {
+ _styles[i] = new RenderStyle();
+ defaultStyle(_styles[i], i);
+ }
+ _notifies = new std::list<StyleNotify*>[screens];
+}
+
+void RenderStyle::destroy()
+{
+ int screens = ScreenCount(**display);
+ for (int i = 0; i < screens; ++i)
+ delete _styles[i];
+ delete [] _styles;
+ delete [] _notifies;
+}
+
+void RenderStyle::registerNotify(int screen, StyleNotify *n)
+{
+ assert(screen >= 0 && screen < ScreenCount(**display));
+ _notifies[screen].push_back(n);
+}
+
+void RenderStyle::unregisterNotify(int screen, StyleNotify *n)
+{
+ assert(screen >= 0 && screen < ScreenCount(**display));
+ _notifies[screen].remove(n);
+}
+
+RenderStyle *RenderStyle::style(int screen)
+{
+ assert(screen >= 0 && screen < ScreenCount(**display));
+ return _styles[screen];
+}
+
+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)