use Configuration class throughout code. no longer save rc file on exit, save when any options are changed.
insert(i18n(ConfigmenuSet, ConfigmenuFocusLast,
"Focus Last Window on Workspace"), 5);
update();
+ setValues();
+}
+
- setItemSelected(2, getScreen()->getImageControl()->doDither());
+void Configmenu::setValues(void) {
+ setItemSelected(2, getScreen()->doImageDither());
setItemSelected(3, getScreen()->doOpaqueMove());
setItemSelected(4, getScreen()->doFullMax());
setItemSelected(5, getScreen()->doFocusNew());
setItemSelected(6, getScreen()->doFocusLast());
}
+
Configmenu::~Configmenu(void) {
delete focusmenu;
delete placementmenu;
BasemenuItem *item = find(index);
- if (!item->function())
+ if (! item->function())
return;
switch(item->function()) {
case 1: { // dither
- getScreen()->getImageControl()->
- setDither((! getScreen()->getImageControl()->doDither()));
-
- setItemSelected(index, getScreen()->getImageControl()->doDither());
-
+ getScreen()->saveImageDither(! getScreen()->doImageDither());
+ setItemSelected(index, getScreen()->doImageDither());
break;
}
case 2: { // opaque move
getScreen()->saveOpaqueMove((! getScreen()->doOpaqueMove()));
-
setItemSelected(index, getScreen()->doOpaqueMove());
-
break;
}
case 3: { // full maximization
getScreen()->saveFullMax((! getScreen()->doFullMax()));
-
setItemSelected(index, getScreen()->doFullMax());
-
break;
}
case 4: { // focus new windows
getScreen()->saveFocusNew((! getScreen()->doFocusNew()));
-
setItemSelected(index, getScreen()->doFocusNew());
break;
}
void Configmenu::reconfigure(void) {
+ setValues();
focusmenu->reconfigure();
placementmenu->reconfigure();
insert(i18n(ConfigmenuSet, ConfigmenuAutoRaise, "Auto Raise"), 3);
insert(i18n(ConfigmenuSet, ConfigmenuClickRaise, "Click Raise"), 4);
update();
+ setValues();
+}
- setItemSelected(0, (! getScreen()->isSloppyFocus()));
+
+void Configmenu::Focusmenu::setValues(void) {
+ setItemSelected(0, ! getScreen()->isSloppyFocus());
setItemSelected(1, getScreen()->isSloppyFocus());
setItemEnabled(2, getScreen()->isSloppyFocus());
setItemSelected(2, getScreen()->doAutoRaise());
}
+void Configmenu::Focusmenu::reconfigure(void) {
+ setValues();
+ Basemenu::reconfigure();
+}
+
+
void Configmenu::Focusmenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
BasemenuItem *item = find(index);
- if (!item->function())
+ if (! item->function())
return;
switch (item->function()) {
getScreen()->updateFocusModel();
break;
}
-
- setItemSelected(0, (! getScreen()->isSloppyFocus()));
- setItemSelected(1, getScreen()->isSloppyFocus());
- setItemEnabled(2, getScreen()->isSloppyFocus());
- setItemSelected(2, getScreen()->doAutoRaise());
- setItemEnabled(3, getScreen()->isSloppyFocus());
- setItemSelected(3, getScreen()->doClickRaise());
+ setValues();
}
insert(i18n(ConfigmenuSet, ConfigmenuBottomTop, "Bottom to Top"),
BScreen::BottomTop);
update();
+ setValues();
+}
+
+void Configmenu::Placementmenu::setValues(void) {
switch (getScreen()->getPlacementPolicy()) {
case BScreen::RowSmartPlacement:
setItemSelected(0, True);
break;
}
- bool rl = (getScreen()->getRowPlacementDirection() ==
- BScreen::LeftRight),
- tb = (getScreen()->getColPlacementDirection() ==
- BScreen::TopBottom);
+ bool rl = (getScreen()->getRowPlacementDirection() == BScreen::LeftRight),
+ tb = (getScreen()->getColPlacementDirection() == BScreen::TopBottom);
setItemSelected(3, rl);
setItemSelected(4, ! rl);
}
+void Configmenu::Placementmenu::reconfigure(void) {
+ setValues();
+ Basemenu::reconfigure();
+}
+
+
void Configmenu::Placementmenu::itemSelected(int button, unsigned int index) {
if (button != 1)
return;
BasemenuItem *item = find(index);
- if (!item->function())
+ if (! item->function())
return;
switch (item->function()) {
protected:
virtual void itemSelected(int button, unsigned int index);
+ virtual void setValues(void);
public:
Focusmenu(Configmenu *cm);
+ virtual void reconfigure(void);
};
class Placementmenu : public Basemenu {
protected:
virtual void itemSelected(int button, unsigned int index);
+ virtual void setValues(void);
public:
Placementmenu(Configmenu *cm);
+ virtual void reconfigure(void);
};
Focusmenu *focusmenu;
protected:
virtual void itemSelected(int button, unsigned int index);
+ virtual void setValues(void);
public:
Configmenu(BScreen *scr);
inline Basemenu *getFocusmenu(void) { return focusmenu; }
inline Basemenu *getPlacementmenu(void) { return placementmenu; }
- void reconfigure(void);
+ virtual void reconfigure(void);
};
#endif // __Configmenu_hh
--- /dev/null
+// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
+// Configuration.hh for Blackbox - an X11 Window manager
+// Copyright (c) 2002 - 2002 Ben Jansens (ben@orodu.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#include "../config.h"
+
+#include "Configuration.hh"
+#include "Util.hh"
+
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif // HAVE_STDLIB_H
+
+using std::string;
+
+bool Configuration::m_initialized = false;
+
+Configuration::Configuration(const string &file) {
+ setFile(file);
+ m_modified = false;
+ m_database = NULL;
+ m_autosave = true;
+ if (! m_initialized) {
+ XrmInitialize();
+ m_initialized = true;
+ }
+}
+
+Configuration::Configuration() {
+ m_modified = false;
+ m_database = NULL;
+ m_autosave = true;
+ if (! m_initialized) {
+ XrmInitialize();
+ m_initialized = true;
+ }
+}
+
+Configuration::~Configuration() {
+ if (m_database != NULL)
+ XrmDestroyDatabase(m_database);
+}
+
+void Configuration::setFile(const string &file) {
+ m_file = file;
+}
+
+void Configuration::setAutoSave(bool autosave) {
+ m_autosave = autosave;
+}
+
+void Configuration::save() {
+ assert(m_database != NULL);
+ XrmPutFileDatabase(m_database, m_file.c_str());
+ m_modified = false;
+}
+
+bool Configuration::load() {
+ if (m_database != NULL)
+ XrmDestroyDatabase(m_database);
+ m_modified = false;
+ if (NULL == (m_database = XrmGetFileDatabase(m_file.c_str())))
+ return false;
+ return true;
+}
+
+void Configuration::create() {
+ if (m_database != NULL)
+ XrmDestroyDatabase(m_database);
+ m_modified = false;
+ assert(NULL != (m_database = XrmGetStringDatabase("")));
+}
+
+void Configuration::setValue(const string &rname, bool value) {
+ assert(m_database != NULL);
+
+ const char *val = (value ? "True" : "False");
+ string rc_string = rname + ": " + val;
+ XrmPutLineResource(&m_database, rc_string.c_str());
+
+ m_modified = true;
+ if (m_autosave)
+ save();
+}
+
+void Configuration::setValue(const string &rname, unsigned long value) {
+ assert(m_database != NULL);
+
+ string rc_string = rname + ": " + itostring(value);
+ XrmPutLineResource(&m_database, rc_string.c_str());
+
+ m_modified = true;
+ if (m_autosave)
+ save();
+}
+
+void Configuration::setValue(const string &rname, long value) {
+ assert(m_database != NULL);
+
+ string rc_string = rname + ": " + itostring(value);
+ XrmPutLineResource(&m_database, rc_string.c_str());
+
+ m_modified = true;
+ if (m_autosave)
+ save();
+}
+
+void Configuration::setValue(const string &rname, const char *value) {
+ assert(m_database != NULL);
+ assert(value != NULL);
+
+ string rc_string = rname + ": " + value;
+ XrmPutLineResource(&m_database, rc_string.c_str());
+
+ m_modified = true;
+ if (m_autosave)
+ save();
+}
+
+void Configuration::setValue(const string &rname, const string &value) {
+ assert(m_database != NULL);
+
+ string rc_string = rname + ": " + value;
+ XrmPutLineResource(&m_database, rc_string.c_str());
+
+ m_modified = true;
+ if (m_autosave)
+ save();
+}
+
+bool Configuration::getValue(const string &rname, bool &value) const {
+ assert(m_database != NULL);
+
+ string rclass = createClassName(rname);
+
+ char *rettype;
+ XrmValue retvalue;
+ if (0 == XrmGetResource(m_database, rname.c_str(), rclass.c_str(),
+ &rettype, &retvalue) || retvalue.addr == NULL)
+ return false;
+ string val = retvalue.addr;
+ if (val == "true" || val == "True")
+ value = true;
+ else
+ value = false;
+ return true;
+}
+
+bool Configuration::getValue(const string &rname, long &value) const {
+ assert(m_database != NULL);
+
+ string rclass = createClassName(rname);
+
+ char *rettype;
+ XrmValue retvalue;
+ if (0 == XrmGetResource(m_database, rname.c_str(), rclass.c_str(),
+ &rettype, &retvalue) || retvalue.addr == NULL)
+ return false;
+ char *end;
+ value = strtol(retvalue.addr, &end, 10);
+ if (end == retvalue.addr)
+ return false;
+ return true;
+}
+
+bool Configuration::getValue(const string &rname, unsigned long &value) const {
+ assert(m_database != NULL);
+
+ string rclass = createClassName(rname);
+
+ char *rettype;
+ XrmValue retvalue;
+ if (0 == XrmGetResource(m_database, rname.c_str(), rclass.c_str(),
+ &rettype, &retvalue) || retvalue.addr == NULL)
+ return false;
+ char *end;
+ value = strtoul(retvalue.addr, &end, 10);
+ if (end == retvalue.addr)
+ return false;
+ return true;
+}
+
+bool Configuration::getValue(const string &rname,
+ string &value) const {
+ assert(m_database != NULL);
+
+ string rclass = createClassName(rname);
+
+ char *rettype;
+ XrmValue retvalue;
+ if (0 == XrmGetResource(m_database, rname.c_str(), rclass.c_str(),
+ &rettype, &retvalue) || retvalue.addr == NULL)
+ return false;
+ value = retvalue.addr;
+ return true;
+}
+
+
+string Configuration::createClassName(const string &rname) const {
+ string rclass(rname);
+
+ string::iterator it = rclass.begin(), end = rclass.end();
+ while (true) {
+ *it = toUpper(*it);
+ ++it;
+ if (it == end) break;
+ it = std::find(it, rclass.end(), '.');
+ if (it == end) break;
+ ++it;
+ if (it == end) break;
+ }
+ return rclass;
+}
+
+
+char Configuration::toUpper(char c) const {
+ if (c >= 'a' && c <= 'z')
+ return c - 'a' + 'A';
+ return c;
+}
--- /dev/null
+// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
+// Configuration.hh for Blackbox - an X11 Window manager
+// Copyright (c) 2002 - 2002 Ben Jansens (ben@orodu.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#ifndef __Configuration_hh
+#define __Configuration_hh
+
+#include <X11/Xlib.h>
+#include <X11/Xresource.h>
+#include <string>
+
+/*
+ * The Configuration class is a generic wrapper for configuration settings.
+ *
+ * This class is used for the global rc/config file, and for styles.
+ *
+ * This implementation of the Configuration class wraps an X resource database
+ * file.
+ */
+class Configuration {
+public:
+ explicit Configuration(const std::string &file);
+ Configuration();
+ virtual ~Configuration();
+
+ inline const std::string &file() const {
+ return static_cast<const std::string &>(m_file);
+ }
+ void setFile(const std::string &file);
+
+ // defaults to true!
+ inline bool autoSave() const {
+ return m_autosave;
+ }
+ void setAutoSave(bool);
+
+ inline bool isModified() const {
+ return m_modified;
+ }
+
+ void save();
+ bool load();
+ void create();
+
+ void setValue(const std::string &rname, bool value);
+ inline void setValue(const std::string &rname, int value) {
+ setValue(rname, (long) value);
+ }
+ inline void setValue(const std::string &rname, unsigned int value) {
+ setValue(rname, (unsigned long) value);
+ }
+ void setValue(const std::string &rname, long value);
+ void setValue(const std::string &rname, unsigned long value);
+ void setValue(const std::string &rname, const std::string &value);
+ void setValue(const std::string &rname, const char *value);
+
+ bool getValue(const std::string &rname, bool &value) const;
+ inline bool getValue(const std::string &rname, int &value) const {
+ return getValue(rname, (long) value);
+ }
+ inline bool getValue(const std::string &rname, unsigned int &value) const {
+ return getValue(rname, (unsigned long) value);
+ }
+ bool getValue(const std::string &rname, long &value) const;
+ bool getValue(const std::string &rname, unsigned long &value) const;
+ bool getValue(const std::string &rname, std::string &value) const;
+
+private:
+ std::string createClassName(const std::string &rname) const;
+ char toUpper(char) const;
+
+ static bool m_initialized;
+ std::string m_file;
+ bool m_modified;
+ bool m_autosave;
+ XrmDatabase m_database;
+};
+
+#endif // __Configuration_hh
delete [] colors;
}
- if (!cache.empty()) {
+ if (! cache.empty()) {
//#ifdef DEBUG
fprintf(stderr, i18n(ImageSet, ImagePixmapRelease,
"BImageContol::~BImageControl: pixmap cache - "
BImage image(this, width, height);
pixmap = image.render(texture);
- if (!pixmap)
+ if (! pixmap)
return None;
CachedImage tmp;
void BImageControl::removeImage(Pixmap pixmap) {
- if (!pixmap)
+ if (! pixmap)
return;
CacheContainer::iterator it = cache.begin();
bin_PROGRAMS= openbox
-openbox_SOURCES= BaseDisplay.cc Basemenu.cc Clientmenu.cc Color.cc Configmenu.cc GCCache.cc Iconmenu.cc Image.cc ImageControl.cc Netizen.cc Rootmenu.cc Screen.cc Slit.cc Texture.cc Timer.cc Toolbar.cc Util.cc Window.cc Windowmenu.cc Workspace.cc Workspacemenu.cc blackbox.cc i18n.cc main.cc
+openbox_SOURCES= BaseDisplay.cc Basemenu.cc Clientmenu.cc Color.cc Configmenu.cc Configuration.cc GCCache.cc Iconmenu.cc Image.cc ImageControl.cc Netizen.cc Rootmenu.cc Screen.cc Slit.cc Texture.cc Timer.cc Toolbar.cc Util.cc Window.cc Windowmenu.cc Workspace.cc Workspacemenu.cc blackbox.cc i18n.cc main.cc
MAINTAINERCLEANFILES= Makefile.in
# local dependencies
-BaseDisplay.o: BaseDisplay.cc ../config.h i18n.hh \
- ../nls/blackbox-nls.hh BaseDisplay.hh Timer.hh GCCache.hh Color.hh \
- Util.hh
-Basemenu.o: Basemenu.cc ../config.h i18n.hh ../nls/blackbox-nls.hh \
- blackbox.hh BaseDisplay.hh Timer.hh Basemenu.hh GCCache.hh Color.hh \
- Image.hh Screen.hh Texture.hh Util.hh Configmenu.hh Iconmenu.hh \
- Netizen.hh Rootmenu.hh Workspace.hh Workspacemenu.hh
-Clientmenu.o: Clientmenu.cc ../config.h blackbox.hh i18n.hh \
- ../nls/blackbox-nls.hh BaseDisplay.hh Timer.hh Clientmenu.hh \
- Basemenu.hh Screen.hh Color.hh Texture.hh Util.hh Configmenu.hh \
- Iconmenu.hh Netizen.hh Rootmenu.hh Workspace.hh Workspacemenu.hh \
- Window.hh Windowmenu.hh
-Color.o: Color.cc ../config.h Color.hh BaseDisplay.hh Timer.hh
-Configmenu.o: Configmenu.cc ../config.h i18n.hh ../nls/blackbox-nls.hh \
- Configmenu.hh Basemenu.hh Image.hh Timer.hh BaseDisplay.hh Color.hh \
- Toolbar.hh Screen.hh Texture.hh Util.hh Iconmenu.hh Netizen.hh \
- Rootmenu.hh Workspace.hh Workspacemenu.hh blackbox.hh Window.hh \
- Windowmenu.hh
-GCCache.o: GCCache.cc ../config.h GCCache.hh BaseDisplay.hh Timer.hh \
- Color.hh Util.hh
-Iconmenu.o: Iconmenu.cc ../config.h i18n.hh ../nls/blackbox-nls.hh \
- Iconmenu.hh Basemenu.hh Screen.hh Color.hh Texture.hh Util.hh \
- Configmenu.hh Netizen.hh Rootmenu.hh Timer.hh Workspace.hh \
- Workspacemenu.hh blackbox.hh BaseDisplay.hh Window.hh Windowmenu.hh
-Image.o: Image.cc ../config.h blackbox.hh i18n.hh \
- ../nls/blackbox-nls.hh BaseDisplay.hh Timer.hh GCCache.hh Color.hh \
- Image.hh Texture.hh Util.hh
-ImageControl.o: ImageControl.cc ../config.h blackbox.hh i18n.hh \
- ../nls/blackbox-nls.hh BaseDisplay.hh Timer.hh Color.hh Image.hh \
- Texture.hh Util.hh
-Netizen.o: Netizen.cc ../config.h Netizen.hh Screen.hh Color.hh \
- Texture.hh Util.hh Configmenu.hh Basemenu.hh Iconmenu.hh Rootmenu.hh \
- Timer.hh Workspace.hh Workspacemenu.hh blackbox.hh i18n.hh \
- ../nls/blackbox-nls.hh BaseDisplay.hh
-Rootmenu.o: Rootmenu.cc ../config.h blackbox.hh i18n.hh \
- ../nls/blackbox-nls.hh BaseDisplay.hh Timer.hh Rootmenu.hh \
- Basemenu.hh Screen.hh Color.hh Texture.hh Util.hh Configmenu.hh \
- Iconmenu.hh Netizen.hh Workspace.hh Workspacemenu.hh
-Screen.o: Screen.cc ../config.h i18n.hh ../nls/blackbox-nls.hh \
- blackbox.hh BaseDisplay.hh Timer.hh Clientmenu.hh Basemenu.hh \
- GCCache.hh Color.hh Iconmenu.hh Image.hh Screen.hh Texture.hh Util.hh \
- Configmenu.hh Netizen.hh Rootmenu.hh Workspace.hh Workspacemenu.hh \
- Slit.hh Toolbar.hh Window.hh Windowmenu.hh
-Slit.o: Slit.cc ../config.h i18n.hh ../nls/blackbox-nls.hh blackbox.hh \
- BaseDisplay.hh Timer.hh Image.hh Color.hh Screen.hh Texture.hh \
- Util.hh Configmenu.hh Basemenu.hh Iconmenu.hh Netizen.hh Rootmenu.hh \
- Workspace.hh Workspacemenu.hh Slit.hh Toolbar.hh
-Texture.o: Texture.cc ../config.h Texture.hh Color.hh Util.hh \
- BaseDisplay.hh Timer.hh Image.hh Screen.hh Configmenu.hh Basemenu.hh \
- Iconmenu.hh Netizen.hh Rootmenu.hh Workspace.hh Workspacemenu.hh \
- blackbox.hh i18n.hh ../nls/blackbox-nls.hh
-Timer.o: Timer.cc ../config.h BaseDisplay.hh Timer.hh Util.hh
-Toolbar.o: Toolbar.cc ../config.h i18n.hh ../nls/blackbox-nls.hh \
- blackbox.hh BaseDisplay.hh Timer.hh Clientmenu.hh Basemenu.hh \
- GCCache.hh Color.hh Iconmenu.hh Image.hh Rootmenu.hh Screen.hh \
- Texture.hh Util.hh Configmenu.hh Netizen.hh Workspace.hh \
- Workspacemenu.hh Toolbar.hh Window.hh Windowmenu.hh Slit.hh
-Util.o: Util.cc ../config.h Util.hh
-Window.o: Window.cc ../config.h i18n.hh ../nls/blackbox-nls.hh \
- blackbox.hh BaseDisplay.hh Timer.hh GCCache.hh Color.hh Iconmenu.hh \
- Basemenu.hh Image.hh Screen.hh Texture.hh Util.hh Configmenu.hh \
- Netizen.hh Rootmenu.hh Workspace.hh Workspacemenu.hh Toolbar.hh \
- Window.hh Windowmenu.hh Slit.hh
-Windowmenu.o: Windowmenu.cc ../config.h i18n.hh ../nls/blackbox-nls.hh \
- blackbox.hh BaseDisplay.hh Timer.hh Screen.hh Color.hh Texture.hh \
- Util.hh Configmenu.hh Basemenu.hh Iconmenu.hh Netizen.hh Rootmenu.hh \
- Workspace.hh Workspacemenu.hh Window.hh Windowmenu.hh
-Workspace.o: Workspace.cc ../config.h i18n.hh ../nls/blackbox-nls.hh \
- blackbox.hh BaseDisplay.hh Timer.hh Clientmenu.hh Basemenu.hh \
- Netizen.hh Screen.hh Color.hh Texture.hh Util.hh Configmenu.hh \
- Iconmenu.hh Rootmenu.hh Workspace.hh Workspacemenu.hh Toolbar.hh \
- Window.hh Windowmenu.hh
-Workspacemenu.o: Workspacemenu.cc ../config.h i18n.hh \
- ../nls/blackbox-nls.hh blackbox.hh BaseDisplay.hh Timer.hh Screen.hh \
- Color.hh Texture.hh Util.hh Configmenu.hh Basemenu.hh Iconmenu.hh \
- Netizen.hh Rootmenu.hh Workspace.hh Workspacemenu.hh Toolbar.hh
-blackbox.o: blackbox.cc ../config.h i18n.hh ../nls/blackbox-nls.hh \
- blackbox.hh BaseDisplay.hh Timer.hh Basemenu.hh Clientmenu.hh \
- GCCache.hh Color.hh Image.hh Rootmenu.hh Screen.hh Texture.hh Util.hh \
- Configmenu.hh Iconmenu.hh Netizen.hh Workspace.hh Workspacemenu.hh \
- Slit.hh Toolbar.hh Window.hh Windowmenu.hh
-i18n.o: i18n.cc ../config.h i18n.hh ../nls/blackbox-nls.hh
-main.o: main.cc ../version.h ../config.h i18n.hh \
- ../nls/blackbox-nls.hh blackbox.hh BaseDisplay.hh Timer.hh
+BaseDisplay.o: BaseDisplay.cc i18n.hh ../nls/blackbox-nls.hh \
+ BaseDisplay.hh Timer.hh Util.hh GCCache.hh Color.hh
+Basemenu.o: Basemenu.cc i18n.hh ../nls/blackbox-nls.hh blackbox.hh \
+ BaseDisplay.hh Timer.hh Util.hh Configuration.hh Basemenu.hh GCCache.hh \
+ Color.hh Image.hh Screen.hh Texture.hh Configmenu.hh Iconmenu.hh \
+ Netizen.hh Rootmenu.hh Workspace.hh Workspacemenu.hh
+Clientmenu.o: Clientmenu.cc blackbox.hh i18n.hh ../nls/blackbox-nls.hh \
+ BaseDisplay.hh Timer.hh Util.hh Configuration.hh Clientmenu.hh \
+ Basemenu.hh Screen.hh Color.hh Texture.hh Image.hh Configmenu.hh \
+ Iconmenu.hh Netizen.hh Rootmenu.hh Workspace.hh Workspacemenu.hh \
+ Window.hh Windowmenu.hh
+Color.o: Color.cc Color.hh BaseDisplay.hh Timer.hh Util.hh
+Configmenu.o: Configmenu.cc i18n.hh ../nls/blackbox-nls.hh Configmenu.hh \
+ Basemenu.hh Image.hh Timer.hh BaseDisplay.hh Util.hh Color.hh \
+ Toolbar.hh Screen.hh Texture.hh Iconmenu.hh Netizen.hh Rootmenu.hh \
+ Workspace.hh Workspacemenu.hh blackbox.hh Configuration.hh Window.hh \
+ Windowmenu.hh
+Configuration.o: Configuration.cc ../config.h Configuration.hh Util.hh
+GCCache.o: GCCache.cc GCCache.hh BaseDisplay.hh Timer.hh Util.hh Color.hh
+Iconmenu.o: Iconmenu.cc i18n.hh ../nls/blackbox-nls.hh Iconmenu.hh \
+ Basemenu.hh Screen.hh Color.hh Texture.hh Util.hh Image.hh Timer.hh \
+ BaseDisplay.hh Configmenu.hh Netizen.hh Rootmenu.hh Workspace.hh \
+ Workspacemenu.hh blackbox.hh Configuration.hh Window.hh Windowmenu.hh
+Image.o: Image.cc blackbox.hh i18n.hh ../nls/blackbox-nls.hh \
+ BaseDisplay.hh Timer.hh Util.hh Configuration.hh GCCache.hh Color.hh \
+ Image.hh Texture.hh
+ImageControl.o: ImageControl.cc blackbox.hh i18n.hh \
+ ../nls/blackbox-nls.hh BaseDisplay.hh Timer.hh Util.hh Configuration.hh \
+ Color.hh Image.hh Texture.hh
+Netizen.o: Netizen.cc Netizen.hh Screen.hh Color.hh Texture.hh Util.hh \
+ Image.hh Timer.hh BaseDisplay.hh Configmenu.hh Basemenu.hh Iconmenu.hh \
+ Rootmenu.hh Workspace.hh Workspacemenu.hh blackbox.hh i18n.hh \
+ ../nls/blackbox-nls.hh Configuration.hh
+Rootmenu.o: Rootmenu.cc blackbox.hh i18n.hh ../nls/blackbox-nls.hh \
+ BaseDisplay.hh Timer.hh Util.hh Configuration.hh Rootmenu.hh \
+ Basemenu.hh Screen.hh Color.hh Texture.hh Image.hh Configmenu.hh \
+ Iconmenu.hh Netizen.hh Workspace.hh Workspacemenu.hh
+Screen.o: Screen.cc i18n.hh ../nls/blackbox-nls.hh blackbox.hh \
+ BaseDisplay.hh Timer.hh Util.hh Configuration.hh Clientmenu.hh \
+ Basemenu.hh GCCache.hh Color.hh Iconmenu.hh Image.hh Screen.hh \
+ Texture.hh Configmenu.hh Netizen.hh Rootmenu.hh Workspace.hh \
+ Workspacemenu.hh Slit.hh Toolbar.hh Window.hh Windowmenu.hh
+Slit.o: Slit.cc i18n.hh ../nls/blackbox-nls.hh blackbox.hh BaseDisplay.hh \
+ Timer.hh Util.hh Configuration.hh Image.hh Color.hh Screen.hh \
+ Texture.hh Configmenu.hh Basemenu.hh Iconmenu.hh Netizen.hh Rootmenu.hh \
+ Workspace.hh Workspacemenu.hh Slit.hh Toolbar.hh
+Texture.o: Texture.cc Texture.hh Color.hh Util.hh BaseDisplay.hh Timer.hh \
+ Image.hh Screen.hh Configmenu.hh Basemenu.hh Iconmenu.hh Netizen.hh \
+ Rootmenu.hh Workspace.hh Workspacemenu.hh blackbox.hh i18n.hh \
+ ../nls/blackbox-nls.hh Configuration.hh
+Timer.o: Timer.cc BaseDisplay.hh Timer.hh Util.hh
+Toolbar.o: Toolbar.cc i18n.hh ../nls/blackbox-nls.hh blackbox.hh \
+ BaseDisplay.hh Timer.hh Util.hh Configuration.hh Clientmenu.hh \
+ Basemenu.hh GCCache.hh Color.hh Iconmenu.hh Image.hh Rootmenu.hh \
+ Screen.hh Texture.hh Configmenu.hh Netizen.hh Workspace.hh \
+ Workspacemenu.hh Toolbar.hh Window.hh Windowmenu.hh Slit.hh
+Util.o: Util.cc Util.hh
+Window.o: Window.cc i18n.hh ../nls/blackbox-nls.hh blackbox.hh \
+ BaseDisplay.hh Timer.hh Util.hh Configuration.hh GCCache.hh Color.hh \
+ Iconmenu.hh Basemenu.hh Image.hh Screen.hh Texture.hh Configmenu.hh \
+ Netizen.hh Rootmenu.hh Workspace.hh Workspacemenu.hh Toolbar.hh \
+ Window.hh Windowmenu.hh Slit.hh
+Windowmenu.o: Windowmenu.cc i18n.hh ../nls/blackbox-nls.hh blackbox.hh \
+ BaseDisplay.hh Timer.hh Util.hh Configuration.hh Screen.hh Color.hh \
+ Texture.hh Image.hh Configmenu.hh Basemenu.hh Iconmenu.hh Netizen.hh \
+ Rootmenu.hh Workspace.hh Workspacemenu.hh Window.hh Windowmenu.hh
+Workspace.o: Workspace.cc i18n.hh ../nls/blackbox-nls.hh blackbox.hh \
+ BaseDisplay.hh Timer.hh Util.hh Configuration.hh Clientmenu.hh \
+ Basemenu.hh Netizen.hh Screen.hh Color.hh Texture.hh Image.hh \
+ Configmenu.hh Iconmenu.hh Rootmenu.hh Workspace.hh Workspacemenu.hh \
+ Toolbar.hh Window.hh Windowmenu.hh
+Workspacemenu.o: Workspacemenu.cc i18n.hh ../nls/blackbox-nls.hh \
+ blackbox.hh BaseDisplay.hh Timer.hh Util.hh Configuration.hh Screen.hh \
+ Color.hh Texture.hh Image.hh Configmenu.hh Basemenu.hh Iconmenu.hh \
+ Netizen.hh Rootmenu.hh Workspace.hh Workspacemenu.hh Toolbar.hh
+blackbox.o: blackbox.cc i18n.hh ../nls/blackbox-nls.hh blackbox.hh \
+ BaseDisplay.hh Timer.hh Util.hh Configuration.hh Basemenu.hh \
+ Clientmenu.hh GCCache.hh Color.hh Image.hh Rootmenu.hh Screen.hh \
+ Texture.hh Configmenu.hh Iconmenu.hh Netizen.hh Workspace.hh \
+ Workspacemenu.hh Slit.hh Toolbar.hh Window.hh Windowmenu.hh
+i18n.o: i18n.cc i18n.hh ../nls/blackbox-nls.hh
+main.o: main.cc ../version.h i18n.hh ../nls/blackbox-nls.hh blackbox.hh \
+ BaseDisplay.hh Timer.hh Util.hh Configuration.hh
BasemenuItem *item = find(index);
- if (!item->function())
+ if (! item->function())
return;
switch (item->function()) {
BScreen::BScreen(Blackbox *bb, unsigned int scrn) : ScreenInfo(bb, scrn) {
blackbox = bb;
+ screenstr = (string)"session.screen" + itostring(scrn) + '.';
+ config = blackbox->getConfig();
event_mask = ColormapChangeMask | EnterWindowMask | PropertyChangeMask |
SubstructureRedirectMask | ButtonPressMask | ButtonReleaseMask;
getDepth());
rootmenu = 0;
- resource.stylerc = 0;
resource.mstyle.t_fontset = resource.mstyle.f_fontset =
resource.tstyle.fontset = resource.wstyle.fontset = (XFontSet) 0;
image_control->installRootColormap();
root_colormap_installed = True;
- blackbox->load_rc(this);
-
- image_control->setDither(resource.image_dither);
-
+ load_rc();
LoadStyle();
XGCValues gcv;
void BScreen::removeWorkspaceNames(void) {
workspaceNames.clear();
}
+
+void BScreen::saveSloppyFocus(bool s) {
+ resource.sloppy_focus = s;
+
+ string fmodel;
+ if (resource.sloppy_focus) {
+ fmodel = "SloppyFocus";
+ if (resource.auto_raise) fmodel += " AutoRaise";
+ if (resource.click_raise) fmodel += " ClickRaise";
+ } else {
+ fmodel = "ClickToFocus";
+ }
+ config->setValue(screenstr + "focusModel", fmodel);
+}
+
+
+void BScreen::saveAutoRaise(bool a) {
+ resource.auto_raise = a;
+ saveSloppyFocus(resource.sloppy_focus);
+}
+
+
+void BScreen::saveClickRaise(bool c) {
+ resource.click_raise = c;
+ saveSloppyFocus(resource.sloppy_focus);
+}
+
+
+void BScreen::saveImageDither(bool d) {
+ image_control->setDither(d);
+ config->setValue(screenstr + "imageDither", doImageDither());
+}
+
+
+void BScreen::saveOpaqueMove(bool o) {
+ resource.opaque_move = o;
+ config->setValue(screenstr + "opaqueMove", resource.opaque_move);
+}
+
+
+void BScreen::saveFullMax(bool f) {
+ resource.full_max = f;
+ config->setValue(screenstr + "fullMaximization", resource.full_max);
+}
+
+
+void BScreen::saveFocusNew(bool f) {
+ resource.focus_new = f;
+ config->setValue(screenstr + "focusNewWindows", resource.focus_new);
+}
+
+
+void BScreen::saveFocusLast(bool f) {
+ resource.focus_last = f;
+ config->setValue(screenstr + "focusLastWindow", resource.focus_last);
+}
+
+
+void BScreen::saveWorkspaces(unsigned int w) {
+ resource.workspaces = w;
+ config->setValue(screenstr + "workspaces", resource.workspaces);
+}
+
+
+void BScreen::savePlacementPolicy(int p) {
+ resource.placement_policy = p;
+ const char *placement;
+ switch (resource.placement_policy) {
+ case CascadePlacement: placement = "CascadePlacement"; break;
+ case ColSmartPlacement: placement = "ColSmartPlacement"; break;
+ case RowSmartPlacement: default: placement = "RowSmartPlacement"; break;
+ }
+ config->setValue(screenstr + "windowPlacement", placement);
+}
+
+
+void BScreen::saveEdgeSnapThreshold(int t) {
+ resource.edge_snap_threshold = t;
+ config->setValue(screenstr + "edgeSnapThreshold",
+ resource.edge_snap_threshold);
+}
+
+
+void BScreen::saveRowPlacementDirection(int d) {
+ resource.row_direction = d;
+ config->setValue(screenstr + "rowPlacementDirection",
+ resource.row_direction == LeftRight ?
+ "LeftToRight" : "RightToLeft");
+}
+
+
+void BScreen::saveColPlacementDirection(int d) {
+ resource.col_direction = d;
+ config->setValue(screenstr + "colPlacementDirection",
+ resource.col_direction == TopBottom ?
+ "TopToBottom" : "BottomToTop");
+}
+
+
+#ifdef HAVE_STRFTIME
+void BScreen::saveStrftimeFormat(const std::string& format) {
+ resource.strftime_format = format;
+ config->setValue(screenstr + "strftimeFormat", resource.strftime_format);
+}
+
+#else // !HAVE_STRFTIME
+
+void BScreen::saveDateFormat(int f) {
+ resource.date_format = f;
+ config->setValue(screenstr + "dateFormat",
+ resource.date_format == B_EuropeanDate ?
+ "European" : "American");
+}
+
+
+void BScreen::saveClock24Hour(Bool c) {
+ resource.clock24hour = c;
+ config->setValue(screenstr + "clockFormat", resource.clock24hour ? 24 : 12);
+}
+#endif // HAVE_STRFTIME
+
+
+void BScreen::saveWorkspaceNames() {
+ string save_string = getWorkspace(0)->getName();
+ for (unsigned int i = 1; i < getWorkspaceCount(); ++i)
+ save_string += ',' + getWorkspace(i)->getName();
+ config->setValue(screenstr + "workspaceNames", save_string);
+}
+
+
+void BScreen::save_rc(void) {
+ saveSloppyFocus(resource.sloppy_focus);
+ saveAutoRaise(resource.auto_raise);
+ saveImageDither(doImageDither());
+ saveOpaqueMove(resource.opaque_move);
+ saveFullMax(resource.full_max);
+ saveFocusNew(resource.focus_new);
+ saveFocusLast(resource.focus_last);
+ saveWorkspaces(resource.workspaces);
+ savePlacementPolicy(resource.placement_policy);
+ saveEdgeSnapThreshold(resource.edge_snap_threshold);
+ saveRowPlacementDirection(resource.row_direction);
+ saveColPlacementDirection(resource.col_direction);
+#ifdef HAVE_STRFTIME
+ saveStrftimeFormat(resource.strftime_format);
+#else // !HAVE_STRFTIME
+ saveDateFormat(resource.date_format);
+ savwClock24Hour(resource.clock24hour);
+#endif // HAVE_STRFTIME
+
+ toolbar->save_rc();
+ slit->save_rc();
+}
+
+
+void BScreen::load_rc(void) {
+ std::string s;
+ bool b;
+
+ if (! config->getValue(screenstr + "fullMaximization", resource.full_max))
+ resource.full_max = false;
+
+ if (! config->getValue(screenstr + "focusNewWindows", resource.focus_new))
+ resource.focus_new = false;
+
+ if (! config->getValue(screenstr + "focusLastWindow", resource.focus_last))
+ resource.focus_last = false;
+
+ if (! config->getValue(screenstr + "workspaces", resource.workspaces))
+ resource.workspaces = 1;
+
+ if (! config->getValue(screenstr + "opaqueMove", resource.opaque_move))
+ resource.opaque_move = false;
+
+ if (! config->getValue(screenstr + "imageDither", b))
+ b = true;
+ image_control->setDither(b);
+
+ if (! config->getValue(screenstr + "edgeSnapThreshold",
+ resource.edge_snap_threshold))
+ resource.edge_snap_threshold = 4;
+
+ if (config->getValue(screenstr + "rowPlacementDirection", s) &&
+ s == "RightToLeft")
+ resource.row_direction = RightLeft;
+ else
+ resource.row_direction = LeftRight;
+
+ if (config->getValue(screenstr + "colPlacementDirection", s) &&
+ s == "BottomToTop")
+ resource.col_direction = BottomTop;
+ else
+ resource.col_direction = TopBottom;
+
+ removeWorkspaceNames();
+ if (config->getValue(screenstr + "workspaceNames", s)) {
+ string::const_iterator it = s.begin(), end = s.end();
+ while(1) {
+ string::const_iterator tmp = it; // current string.begin()
+ it = std::find(tmp, end, ','); // look for comma between tmp and end
+ addWorkspaceName(string(tmp, it)); // s[tmp:it]
+ if (it == end)
+ break;
+ ++it;
+ }
+ }
+
+ resource.sloppy_focus = true;
+ resource.auto_raise = false;
+ resource.click_raise = false;
+ if (config->getValue(screenstr + "focusModel", s)) {
+ if (s.find("ClickToFocus") != string::npos) {
+ resource.sloppy_focus = false;
+ } else {
+ // must be sloppy
+ if (s.find("AutoRaise") != string::npos)
+ resource.auto_raise = true;
+ if (s.find("ClickRaise") != string::npos)
+ resource.click_raise = true;
+ }
+ }
+
+ if (config->getValue(screenstr + "windowPlacement", s)) {
+ if (s == "CascadePlacement")
+ resource.placement_policy = CascadePlacement;
+ else if (s == "ColSmartPlacement")
+ resource.placement_policy = ColSmartPlacement;
+ else //if (s == "RowSmartPlacement")
+ resource.placement_policy = RowSmartPlacement;
+ } else
+ resource.placement_policy = RowSmartPlacement;
+
+#ifdef HAVE_STRFTIME
+ if (config->getValue(screenstr + "strftimeFormat", s))
+ resource.strftime_format = s;
+ else
+ resource.strftime_format = "%I:%M %p";
+#else // !HAVE_STRFTIME
+ long l;
+
+ if (config->getValue(screenstr + "dateFormat", s) && s == "European")
+ resource.date_format = B_EuropeanDate;
+ else
+ resource.date_format = B_AmericanDate;
+
+ if (! config->getValue(screenstr + "clockFormat", l))
+ l = 12;
+ resource.clock24hour = l == 24;
+#endif // HAVE_STRFTIME
+}
void BScreen::reconfigure(void) {
+ load_rc();
+ toolbar->load_rc();
+ slit->load_rc();
LoadStyle();
XGCValues gcv;
void BScreen::LoadStyle(void) {
- resource.stylerc = XrmGetFileDatabase(blackbox->getStyleFilename());
- if (! resource.stylerc)
- resource.stylerc = XrmGetFileDatabase(DEFAULTSTYLE);
+ Configuration style;
+
+ const char *sfile = blackbox->getStyleFilename();
+ if (sfile != NULL) {
+ style.setFile(sfile);
+ if (! style.load()) {
+ style.setFile(DEFAULTSTYLE);
+ if (! style.load())
+ style.create(); // hardcoded default values will be used.
+ }
+ }
- XrmValue value;
- char *value_type;
+ string s;
// load fonts/fontsets
if (resource.wstyle.fontset)
resource.mstyle.t_font = 0;
if (i18n.multibyte()) {
- resource.wstyle.fontset =
- readDatabaseFontSet("window.font", "Window.Font");
- resource.tstyle.fontset =
- readDatabaseFontSet("toolbar.font", "Toolbar.Font");
- resource.mstyle.t_fontset =
- readDatabaseFontSet("menu.title.font", "Menu.Title.Font");
- resource.mstyle.f_fontset =
- readDatabaseFontSet("menu.frame.font", "Menu.Frame.Font");
+ resource.wstyle.fontset = readDatabaseFontSet("window.font", style);
+ resource.tstyle.fontset = readDatabaseFontSet("toolbar.font", style);
+ resource.mstyle.t_fontset = readDatabaseFontSet("menu.title.font", style);
+ resource.mstyle.f_fontset = readDatabaseFontSet("menu.frame.font", style);
resource.mstyle.t_fontset_extents =
XExtentsOfFontSet(resource.mstyle.t_fontset);
resource.wstyle.fontset_extents =
XExtentsOfFontSet(resource.wstyle.fontset);
} else {
- resource.wstyle.font =
- readDatabaseFont("window.font", "Window.Font");
- resource.tstyle.font =
- readDatabaseFont("toolbar.font", "Toolbar.Font");
- resource.mstyle.t_font =
- readDatabaseFont("menu.title.font", "Menu.Title.Font");
- resource.mstyle.f_font =
- readDatabaseFont("menu.frame.font", "Menu.Frame.Font");
+ resource.wstyle.font = readDatabaseFont("window.font", style);
+ resource.tstyle.font = readDatabaseFont("toolbar.font", style);
+ resource.mstyle.t_font = readDatabaseFont("menu.title.font", style);
+ resource.mstyle.f_font = readDatabaseFont("menu.frame.font", style);
}
// load window config
resource.wstyle.t_focus =
- readDatabaseTexture("window.title.focus", "Window.Title.Focus", "white");
+ readDatabaseTexture("window.title.focus", "white", style);
resource.wstyle.t_unfocus =
- readDatabaseTexture("window.title.unfocus",
- "Window.Title.Unfocus", "black");
+ readDatabaseTexture("window.title.unfocus", "black", style);
resource.wstyle.l_focus =
- readDatabaseTexture("window.label.focus", "Window.Label.Focus", "white" );
+ readDatabaseTexture("window.label.focus", "white", style);
resource.wstyle.l_unfocus =
- readDatabaseTexture("window.label.unfocus", "Window.Label.Unfocus",
- "black");
+ readDatabaseTexture("window.label.unfocus", "black", style);
resource.wstyle.h_focus =
- readDatabaseTexture("window.handle.focus", "Window.Handle.Focus", "white");
+ readDatabaseTexture("window.handle.focus", "white", style);
resource.wstyle.h_unfocus =
- readDatabaseTexture("window.handle.unfocus",
- "Window.Handle.Unfocus", "black");
+ readDatabaseTexture("window.handle.unfocus", "black", style);
resource.wstyle.g_focus =
- readDatabaseTexture("window.grip.focus", "Window.Grip.Focus", "white");
+ readDatabaseTexture("window.grip.focus", "white", style);
resource.wstyle.g_unfocus =
- readDatabaseTexture("window.grip.unfocus", "Window.Grip.Unfocus", "black");
+ readDatabaseTexture("window.grip.unfocus", "black", style);
resource.wstyle.b_focus =
- readDatabaseTexture("window.button.focus", "Window.Button.Focus", "white");
+ readDatabaseTexture("window.button.focus", "white", style);
resource.wstyle.b_unfocus =
- readDatabaseTexture("window.button.unfocus",
- "Window.Button.Unfocus", "black");
+ readDatabaseTexture("window.button.unfocus", "black", style);
resource.wstyle.b_pressed =
- readDatabaseTexture("window.button.pressed",
- "Window.Button.Pressed", "black");
+ readDatabaseTexture("window.button.pressed", "black", style);
resource.wstyle.f_focus =
- readDatabaseColor("window.frame.focusColor",
- "Window.Frame.FocusColor", "white");
+ readDatabaseColor("window.frame.focusColor", "white", style);
resource.wstyle.f_unfocus =
- readDatabaseColor("window.frame.unfocusColor",
- "Window.Frame.UnfocusColor", "black");
+ readDatabaseColor("window.frame.unfocusColor", "black", style);
resource.wstyle.l_text_focus =
- readDatabaseColor("window.label.focus.textColor",
- "Window.Label.Focus.TextColor", "black");
+ readDatabaseColor("window.label.focus.textColor", "black", style);
resource.wstyle.l_text_unfocus =
- readDatabaseColor("window.label.unfocus.textColor",
- "Window.Label.Unfocus.TextColor", "white");
+ readDatabaseColor("window.label.unfocus.textColor", "white", style);
resource.wstyle.b_pic_focus =
- readDatabaseColor("window.button.focus.picColor",
- "Window.Button.Focus.PicColor", "black");
+ readDatabaseColor("window.button.focus.picColor", "black", style);
resource.wstyle.b_pic_unfocus =
- readDatabaseColor("window.button.unfocus.picColor",
- "Window.Button.Unfocus.PicColor", "white");
+ readDatabaseColor("window.button.unfocus.picColor", "white", style);
resource.wstyle.justify = LeftJustify;
- if (XrmGetResource(resource.stylerc, "window.justify", "Window.Justify",
- &value_type, &value)) {
- if (strstr(value.addr, "right") || strstr(value.addr, "Right"))
+ if (style.getValue("window.justify", s)) {
+ if (s == "right" || s == "Right")
resource.wstyle.justify = RightJustify;
- else if (strstr(value.addr, "center") || strstr(value.addr, "Center"))
+ else if (s == "center" || s == "Center")
resource.wstyle.justify = CenterJustify;
}
// load toolbar config
resource.tstyle.toolbar =
- readDatabaseTexture("toolbar", "Toolbar", "black");
+ readDatabaseTexture("toolbar", "black", style);
resource.tstyle.label =
- readDatabaseTexture("toolbar.label", "Toolbar.Label", "black");
+ readDatabaseTexture("toolbar.label", "black", style);
resource.tstyle.window =
- readDatabaseTexture("toolbar.windowLabel", "Toolbar.WindowLabel", "black");
+ readDatabaseTexture("toolbar.windowLabel", "black", style);
resource.tstyle.button =
- readDatabaseTexture("toolbar.button", "Toolbar.Button", "white");
+ readDatabaseTexture("toolbar.button", "white", style);
resource.tstyle.pressed =
- readDatabaseTexture("toolbar.button.pressed",
- "Toolbar.Button.Pressed", "black");
+ readDatabaseTexture("toolbar.button.pressed", "black", style);
resource.tstyle.clock =
- readDatabaseTexture("toolbar.clock", "Toolbar.Clock", "black");
+ readDatabaseTexture("toolbar.clock", "black", style);
resource.tstyle.l_text =
- readDatabaseColor("toolbar.label.textColor",
- "Toolbar.Label.TextColor", "white");
+ readDatabaseColor("toolbar.label.textColor", "white", style);
resource.tstyle.w_text =
- readDatabaseColor("toolbar.windowLabel.textColor",
- "Toolbar.WindowLabel.TextColor", "white");
+ readDatabaseColor("toolbar.windowLabel.textColor", "white", style);
resource.tstyle.c_text =
- readDatabaseColor("toolbar.clock.textColor",
- "Toolbar.Clock.TextColor", "white");
+ readDatabaseColor("toolbar.clock.textColor", "white", style);
resource.tstyle.b_pic =
- readDatabaseColor("toolbar.button.picColor",
- "Toolbar.Button.PicColor", "black");
+ readDatabaseColor("toolbar.button.picColor", "black", style);
resource.tstyle.justify = LeftJustify;
- if (XrmGetResource(resource.stylerc, "toolbar.justify",
- "Toolbar.Justify", &value_type, &value)) {
- if (strstr(value.addr, "right") || strstr(value.addr, "Right"))
+ if (style.getValue("toolbar.justify", s)) {
+ if (s == "right" || s == "Right")
resource.tstyle.justify = RightJustify;
- else if (strstr(value.addr, "center") || strstr(value.addr, "Center"))
+ else if (s == "center" || s == "Center")
resource.tstyle.justify = CenterJustify;
}
// load menu config
resource.mstyle.title =
- readDatabaseTexture("menu.title", "Menu.Title", "white");
+ readDatabaseTexture("menu.title", "white", style);
resource.mstyle.frame =
- readDatabaseTexture("menu.frame", "Menu.Frame", "black");
+ readDatabaseTexture("menu.frame", "black", style);
resource.mstyle.hilite =
- readDatabaseTexture("menu.hilite", "Menu.Hilite", "white");
+ readDatabaseTexture("menu.hilite", "white", style);
resource.mstyle.t_text =
- readDatabaseColor("menu.title.textColor", "Menu.Title.TextColor", "black");
+ readDatabaseColor("menu.title.textColor", "black", style);
resource.mstyle.f_text =
- readDatabaseColor("menu.frame.textColor", "Menu.Frame.TextColor", "white");
+ readDatabaseColor("menu.frame.textColor", "white", style);
resource.mstyle.d_text =
- readDatabaseColor("menu.frame.disableColor",
- "Menu.Frame.DisableColor", "black");
+ readDatabaseColor("menu.frame.disableColor", "black", style);
resource.mstyle.h_text =
- readDatabaseColor("menu.hilite.textColor",
- "Menu.Hilite.TextColor", "black");
+ readDatabaseColor("menu.hilite.textColor", "black", style);
resource.mstyle.t_justify = LeftJustify;
- if (XrmGetResource(resource.stylerc, "menu.title.justify",
- "Menu.Title.Justify",
- &value_type, &value)) {
- if (strstr(value.addr, "right") || strstr(value.addr, "Right"))
+ if (style.getValue("menu.title.justify", s)) {
+ if (s == "right" || s == "Right")
resource.mstyle.t_justify = RightJustify;
- else if (strstr(value.addr, "center") || strstr(value.addr, "Center"))
+ else if (s == "center" || s == "Center")
resource.mstyle.t_justify = CenterJustify;
}
resource.mstyle.f_justify = LeftJustify;
- if (XrmGetResource(resource.stylerc, "menu.frame.justify",
- "Menu.Frame.Justify",
- &value_type, &value)) {
- if (strstr(value.addr, "right") || strstr(value.addr, "Right"))
+ if (style.getValue("menu.frame.justify", s)) {
+ if (s == "right" || s == "Right")
resource.mstyle.f_justify = RightJustify;
- else if (strstr(value.addr, "center") || strstr(value.addr, "Center"))
+ else if (s == "center" || s == "Center")
resource.mstyle.f_justify = CenterJustify;
}
resource.mstyle.bullet = Basemenu::Triangle;
- if (XrmGetResource(resource.stylerc, "menu.bullet", "Menu.Bullet",
- &value_type, &value)) {
- if (! strncasecmp(value.addr, "empty", value.size))
+ if (style.getValue("menu.bullet", s)) {
+ if (s == "empty" || s == "Empty")
resource.mstyle.bullet = Basemenu::Empty;
- else if (! strncasecmp(value.addr, "square", value.size))
+ else if (s == "square" || s == "Square")
resource.mstyle.bullet = Basemenu::Square;
- else if (! strncasecmp(value.addr, "diamond", value.size))
+ else if (s == "diamond" || s == "Diamond")
resource.mstyle.bullet = Basemenu::Diamond;
}
resource.mstyle.bullet_pos = Basemenu::Left;
- if (XrmGetResource(resource.stylerc, "menu.bullet.position",
- "Menu.Bullet.Position", &value_type, &value)) {
- if (! strncasecmp(value.addr, "right", value.size))
+ if (style.getValue("menu.bullet.position", s)) {
+ if (s == "right" || s == "Right")
resource.mstyle.bullet_pos = Basemenu::Right;
}
resource.border_color =
- readDatabaseColor("borderColor", "BorderColor", "black");
-
- unsigned int uint_value;
+ readDatabaseColor("borderColor", "black", style);
// load bevel, border and handle widths
- resource.handle_width = 6;
- if (XrmGetResource(resource.stylerc, "handleWidth", "HandleWidth",
- &value_type, &value) &&
- sscanf(value.addr, "%u", &uint_value) == 1 &&
- uint_value <= (getWidth() / 2) && uint_value != 0) {
- resource.handle_width = uint_value;
- }
+ if (! style.getValue("handleWidth", resource.handle_width) ||
+ resource.handle_width > (getWidth() / 2) || resource.handle_width == 0)
+ resource.handle_width = 6;
- resource.border_width = 1;
- if (XrmGetResource(resource.stylerc, "borderWidth", "BorderWidth",
- &value_type, &value) &&
- sscanf(value.addr, "%u", &uint_value) == 1) {
- resource.border_width = uint_value;
- }
+ if (! style.getValue("borderWidth", resource.border_width))
+ resource.border_width = 1;
- resource.bevel_width = 3;
- if (XrmGetResource(resource.stylerc, "bevelWidth", "BevelWidth",
- &value_type, &value) &&
- sscanf(value.addr, "%u", &uint_value) == 1 &&
- uint_value <= (getWidth() / 2) && uint_value != 0) {
- resource.bevel_width = uint_value;
- }
+ if (! style.getValue("bevelWidth", resource.bevel_width) ||
+ resource.bevel_width > (getWidth() / 2) || resource.bevel_width == 0)
+ resource.bevel_width = 3;
- resource.frame_width = resource.bevel_width;
- if (XrmGetResource(resource.stylerc, "frameWidth", "FrameWidth",
- &value_type, &value) &&
- sscanf(value.addr, "%u", &uint_value) == 1 &&
- uint_value <= (getWidth() / 2)) {
- resource.frame_width = uint_value;
- }
+ if (! style.getValue("frameWidth", resource.frame_width) ||
+ resource.frame_width > (getWidth() / 2))
+ resource.frame_width = resource.bevel_width;
- if (XrmGetResource(resource.stylerc, "rootCommand", "RootCommand",
- &value_type, &value)) {
- bexec(value.addr, displayString());
- }
-
- XrmDestroyDatabase(resource.stylerc);
+ if (style.getValue("rootCommand", s))
+ bexec(s, displayString());
}
unsigned int BScreen::addWorkspace(void) {
Workspace *wkspc = new Workspace(this, workspacesList.size());
workspacesList.push_back(wkspc);
+ saveWorkspaces(getWorkspaceCount() + 1);
+ saveWorkspaceNames();
workspacemenu->insert(wkspc->getName(), wkspc->getMenu(),
wkspc->getID() + 2);
workspacesList.pop_back();
delete wkspc;
+ saveWorkspaces(getWorkspaceCount() - 1);
+ saveWorkspaceNames();
+
toolbar->reconfigure();
updateNetizenWorkspaceCount();
}
-#ifdef HAVE_STRFTIME
-void BScreen::saveStrftimeFormat(const string& format) {
- resource.strftime_format = format;
-}
-#endif // HAVE_STRFTIME
-
-
void BScreen::addWorkspaceName(const string& name) {
workspaceNames.push_back(name);
}
do {
current = next;
next = current_workspace->getNextWindowInList(current);
- } while(!next->setInputFocus() && next != focused);
+ } while(! next->setInputFocus() && next != focused);
if (next != focused)
current_workspace->raiseWindow(next);
do {
current = next;
next = current_workspace->getPrevWindowInList(current);
- } while(!next->setInputFocus() && next != focused);
+ } while(! next->setInputFocus() && next != focused);
if (next != focused)
current_workspace->raiseWindow(next);
const char *menu_filename = blackbox->getMenuFilename();
if (menu_filename)
- if (!(menu_file = fopen(menu_filename, "r")))
+ if (! (menu_file = fopen(menu_filename, "r")))
perror(menu_filename);
- if (!menu_file) { // opening the menu file failed, try the default menu
+ if (! menu_file) { // opening the menu file failed, try the default menu
menu_filename = DEFAULTMENU;
- if (!(menu_file = fopen(menu_filename, "r")))
+ if (! (menu_file = fopen(menu_filename, "r")))
perror(menu_filename);
}
rootmenu->setLabel(label);
defaultMenu = parseMenuFile(menu_file, rootmenu);
- if (!defaultMenu)
+ if (! defaultMenu)
blackbox->addMenuTimestamp(menu_filename);
break;
}
BTexture BScreen::readDatabaseTexture(const string &rname,
- const string &rclass,
- const string &default_color) {
+ const string &default_color,
+ Configuration &style) {
BTexture texture;
- XrmValue value;
- char *value_type;
+ string s;
- if (XrmGetResource(resource.stylerc, rname.c_str(), rclass.c_str(),
- &value_type, &value))
- texture = BTexture(value.addr);
+ if (style.getValue(rname, s))
+ texture = BTexture(s);
else
texture.setTexture(BTexture::Solid | BTexture::Flat);
if (texture.texture() & BTexture::Solid) {
texture.setColor(readDatabaseColor(rname + ".color",
- rclass + ".Color",
- default_color));
+ default_color, style));
texture.setColorTo(readDatabaseColor(rname + ".colorTo",
- rclass + ".ColorTo",
- default_color));
+ default_color, style));
} else if (texture.texture() & BTexture::Gradient) {
texture.setColor(readDatabaseColor(rname + ".color",
- rclass + ".Color",
- default_color));
+ default_color, style));
texture.setColorTo(readDatabaseColor(rname + ".colorTo",
- rclass + ".ColorTo",
- default_color));
+ default_color, style));
}
return texture;
}
-BColor BScreen::readDatabaseColor(const string &rname, const string &rclass,
- const string &default_color) {
+BColor BScreen::readDatabaseColor(const string &rname,
+ const string &default_color,
+ Configuration &style) {
BColor color;
- XrmValue value;
- char *value_type;
- if (XrmGetResource(resource.stylerc, rname.c_str(), rclass.c_str(),
- &value_type, &value))
- color = BColor(value.addr, getBaseDisplay(), getScreenNumber());
+ string s;
+ if (style.getValue(rname, s))
+ color = BColor(s, getBaseDisplay(), getScreenNumber());
else
color = BColor(default_color, getBaseDisplay(), getScreenNumber());
return color;
XFontSet BScreen::readDatabaseFontSet(const string &rname,
- const string &rclass) {
+ Configuration &style) {
char *defaultFont = "fixed";
bool load_default = True;
- XrmValue value;
- char *value_type;
+ string s;
XFontSet fontset = 0;
- if (XrmGetResource(resource.stylerc, rname.c_str(), rclass.c_str(),
- &value_type, &value) &&
- (fontset = createFontSet(value.addr))) {
+ if (style.getValue(rname, s) && (fontset = createFontSet(s)))
load_default = False;
- }
if (load_default) {
fontset = createFontSet(defaultFont);
XFontStruct *BScreen::readDatabaseFont(const string &rname,
- const string &rclass) {
+ Configuration &style) {
char *defaultFont = "fixed";
bool load_default = False;
- XrmValue value;
- char *value_type;
+ string s;
XFontStruct *font = 0;
- if (XrmGetResource(resource.stylerc, rname.c_str(), rclass.c_str(),
- &value_type, &value)) {
- if ((font = XLoadQueryFont(blackbox->getXDisplay(), value.addr)) == NULL) {
+ if (style.getValue(rname, s)) {
+ if ((font = XLoadQueryFont(blackbox->getXDisplay(), s.c_str())) == NULL) {
fprintf(stderr,
i18n(ScreenSet, ScreenFontLoadFail,
"BScreen::setCurrentStyle(): couldn't load font '%s'\n"),
- value.addr);
+ s.c_str());
load_default = True;
}
const char *s2, *p2;
for(; *str; str++) {
for(s2=str,p2=ptn; ; s2++,p2++) {
- if (!*p2) return str;
+ if (! *p2) return str;
if (toupper(*s2) != toupper(*p2)) break;
}
}
int n=0;
for (p=pattern; 1; p++) {
- if (!*p) {
+ if (! *p) {
if (p2!=NULL && n>1 && n<72) {
*size = n; return p2+1;
} else {
#include "Color.hh"
#include "Texture.hh"
+#include "Image.hh"
#include "Configmenu.hh"
#include "Iconmenu.hh"
#include "Netizen.hh"
Configmenu *configmenu;
Iconmenu *iconmenu;
Rootmenu *rootmenu;
+ Configuration *config;
typedef std::list<Rootmenu*> RootmenuList;
RootmenuList rootmenuList;
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;
BColor border_color;
- XrmDatabase stylerc;
unsigned int workspaces;
int toolbar_placement, toolbar_width_percent, placement_policy,
edge_snap_threshold, row_direction, col_direction;
- bool slit_on_top, slit_auto_hide;
- int slit_placement, slit_direction;
-
unsigned int handle_width, bevel_width, frame_width, border_width;
#ifdef HAVE_STRFTIME
#endif // HAVE_STRFTIME
} resource;
+ std::string screenstr;
BScreen(const BScreen&);
BScreen& operator=(const BScreen&);
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,
+ 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);
+ 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);
void InitMenu(void);
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 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 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);
inline unsigned int getIconCount(void) { 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
{ return resource.col_direction; }
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 saveOpaqueMove(bool o);
+ void saveFullMax(bool f);
+ void saveFocusNew(bool f);
+ void saveFocusLast(bool f);
inline void iconUpdate(void) { iconmenu->update(); }
#ifdef HAVE_STRFTIME
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; }
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 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);
Slit::Slit(BScreen *scr) {
screen = scr;
blackbox = screen->getBlackbox();
+ slitstr = (std::string)"session.screen" + itostring(screen->getScreenNumber())
+ + ".slit.";
+ config = blackbox->getConfig();
- on_top = screen->isSlitOnTop();
- hidden = do_auto_hide = screen->doSlitAutoHide();
+ load_rc();
display = screen->getBaseDisplay()->getXDisplay();
frame.window = frame.pixmap = None;
}
+void Slit::saveOnTop(bool b) {
+ on_top = b;
+ config->setValue(slitstr + "onTop", on_top);
+}
+
+void Slit::saveAutoHide(bool b) {
+ do_auto_hide = b;
+ config->setValue(slitstr + "autoHide", do_auto_hide);
+}
+
+void Slit::savePlacement(int p) {
+ placement = p;
+ const char *pname;
+ switch (placement) {
+ case TopLeft: pname = "TopLeft"; break;
+ case CenterLeft: pname = "CenterLeft"; break;
+ case BottomLeft: pname = "BottomLeft"; break;
+ case TopCenter: pname = "TopCenter"; break;
+ case BottomCenter: pname = "BottomCenter"; break;
+ case TopRight: pname = "TopRight"; break;
+ case BottomRight: pname = "BottomRight"; break;
+ case CenterRight: default: pname = "CenterRight"; break;
+ }
+ config->setValue(slitstr + "placement", pname);
+}
+
+void Slit::saveDirection(int d) {
+ direction = d;
+ config->setValue(slitstr + "direction", (direction == Horizontal ?
+ "Horizontal" : "Vertical"));
+}
+
+void Slit::save_rc(void) {
+ saveOnTop(on_top);
+ saveAutoHide(do_auto_hide);
+ savePlacement(placement);
+ saveDirection(direction);
+}
+
+void Slit::load_rc(void) {
+ std::string s;
+
+ if (! config->getValue(slitstr + "onTop", on_top))
+ on_top = false;
+
+ if (! config->getValue(slitstr + "autoHide", do_auto_hide))
+ do_auto_hide = false;
+ hidden = do_auto_hide;
+
+ if (config->getValue(slitstr + "direction", s) && s == "Horizontal")
+ direction = Horizontal;
+ else
+ direction = Vertical;
+
+ if (config->getValue(slitstr + "placement", s)) {
+ if (s == "TopLeft")
+ placement = TopLeft;
+ else if (s == "CenterLeft")
+ placement = CenterLeft;
+ else if (s == "BottomLeft")
+ placement = BottomLeft;
+ else if (s == "TopCenter")
+ placement = TopCenter;
+ else if (s == "BottomCenter")
+ placement = BottomCenter;
+ else if (s == "TopRight")
+ placement = TopRight;
+ else if (s == "BottomRight")
+ placement = BottomRight;
+ else //if (s == "CenterRight")
+ placement = CenterRight;
+ } else
+ placement = CenterRight;
+}
+
+
void Slit::reconfigure(void) {
SlitClientList::iterator it = clientList.begin();
const SlitClientList::iterator end = clientList.end();
unsigned int width = 0, height = 0;
- switch (screen->getSlitDirection()) {
+ switch (direction) {
case Vertical:
for (; it != end; ++it) {
client = *it;
int x, y;
- switch (screen->getSlitDirection()) {
+ switch (direction) {
case Vertical:
x = 0;
y = screen->getBevelWidth();
strut.top = strut.bottom = strut.left = strut.right = 0;
if (! clientList.empty()) {
- switch (screen->getSlitDirection()) {
+ switch (direction) {
case Vertical:
- switch (screen->getSlitPlacement()) {
+ switch (placement) {
case TopCenter:
strut.top = getY() + getExposedHeight() +
(screen->getBorderWidth() * 2);
}
break;
case Horizontal:
- switch (screen->getSlitPlacement()) {
+ switch (placement) {
case TopCenter:
case TopLeft:
case TopRight:
void Slit::reposition(void) {
// place the slit in the appropriate place
- switch (screen->getSlitPlacement()) {
+ switch (placement) {
case TopLeft:
frame.rect.setPos(0, 0);
- if (screen->getSlitDirection() == Vertical) {
+ if (direction == Vertical) {
frame.x_hidden = screen->getBevelWidth() - screen->getBorderWidth()
- frame.rect.width();
frame.y_hidden = 0;
frame.rect.setPos(0, (screen->getHeight() - frame.rect.height()
- (screen->getBorderWidth() * 2)));
- if (screen->getSlitDirection() == Vertical) {
+ if (direction == Vertical) {
frame.x_hidden = screen->getBevelWidth() - screen->getBorderWidth()
- frame.rect.width();
frame.y_hidden = frame.rect.y();
frame.rect.setPos((screen->getWidth() - frame.rect.width()
- (screen->getBorderWidth() * 2)), 0);
- if (screen->getSlitDirection() == Vertical) {
+ if (direction == Vertical) {
frame.x_hidden = screen->getWidth() - screen->getBevelWidth()
- screen->getBorderWidth();
frame.y_hidden = 0;
(screen->getHeight() - frame.rect.height()
- (screen->getBorderWidth() * 2)));
- if (screen->getSlitDirection() == Vertical) {
+ if (direction == Vertical) {
frame.x_hidden = screen->getWidth() - screen->getBevelWidth()
- screen->getBorderWidth();
frame.y_hidden = frame.rect.y();
delta = -delta;
}
frame.rect.setY(frame.rect.y() + delta);
- if (screen->getSlitDirection() == Vertical)
+ if (direction == Vertical)
frame.y_hidden += delta;
}
void Slit::toggleAutoHide(void) {
- do_auto_hide = (do_auto_hide) ? False : True;
+ saveAutoHide(do_auto_hide ? False : True);
updateStrut();
switch (item->function()) {
case 1: { // always on top
- slit->on_top = ((slit->isOnTop()) ? False : True);
- setItemSelected(2, slit->on_top);
+ slit->saveOnTop(! slit->isOnTop());
+ setItemSelected(2, slit->isOnTop());
if (slit->isOnTop()) slit->screen->raiseWindows((Window *) 0, 0);
break;
case 2: { // auto hide
slit->toggleAutoHide();
- setItemSelected(3, slit->do_auto_hide);
+ setItemSelected(3, slit->doAutoHide());
break;
}
Slitmenu::Directionmenu::Directionmenu(Slitmenu *sm)
- : Basemenu(sm->slit->screen) {
+ : Basemenu(sm->slit->screen), slit(sm->slit) {
setLabel(i18n(SlitSet, SlitSlitDirection, "Slit Direction"));
setInternalMenu();
Slit::Vertical);
update();
+ setValues();
+}
- if (getScreen()->getSlitDirection() == Slit::Horizontal)
- setItemSelected(0, True);
- else
- setItemSelected(1, True);
+
+void Slitmenu::Directionmenu::reconfigure(void) {
+ setValues();
+ Basemenu::reconfigure();
+}
+
+
+void Slitmenu::Directionmenu::setValues(void) {
+ const bool horiz = slit->getDirection() == Slit::Horizontal;
+ setItemSelected(0, horiz);
+ setItemSelected(1, ! horiz);
}
BasemenuItem *item = find(index);
if (! item) return;
- getScreen()->saveSlitDirection(item->function());
-
- if (item->function() == Slit::Horizontal) {
- setItemSelected(0, True);
- setItemSelected(1, False);
- } else {
- setItemSelected(0, False);
- setItemSelected(1, True);
- }
-
+ slit->saveDirection(item->function());
hide();
- getScreen()->getSlit()->reconfigure();
+ slit->reconfigure();
}
Slitmenu::Placementmenu::Placementmenu(Slitmenu *sm)
- : Basemenu(sm->slit->screen) {
+ : Basemenu(sm->slit->screen), slit(sm->slit) {
setLabel(i18n(SlitSet, SlitSlitPlacement, "Slit Placement"));
setMinimumSublevels(3);
Slit::BottomRight);
update();
+
+ setValues();
+}
+
+
+void Slitmenu::Placementmenu::reconfigure(void) {
+ setValues();
+ Basemenu::reconfigure();
+}
+
+
+void Slitmenu::Placementmenu::setValues(void) {
+ int place = 0;
+ switch (slit->getPlacement()) {
+ case Slit::BottomRight:
+ place++;
+ case Slit::CenterRight:
+ place++;
+ case Slit::TopRight:
+ place++;
+ case Slit::BottomCenter:
+ place++;
+ case Slit::TopCenter:
+ place++;
+ case Slit::BottomLeft:
+ place++;
+ case Slit::CenterLeft:
+ place++;
+ case Slit::TopLeft:
+ break;
+ }
+ setItemSelected(0, 0 == place);
+ setItemSelected(1, 1 == place);
+ setItemSelected(2, 2 == place);
+ setItemSelected(3, 3 == place);
+ setItemSelected(5, 4 == place);
+ setItemSelected(6, 5 == place);
+ setItemSelected(7, 6 == place);
+ setItemSelected(8, 7 == place);
}
BasemenuItem *item = find(index);
if (! (item && item->function())) return;
- getScreen()->saveSlitPlacement(item->function());
+ slit->savePlacement(item->function());
hide();
- getScreen()->getSlit()->reconfigure();
+ slit->reconfigure();
}
}
#include <list>
+#include <string>
#include "Screen.hh"
#include "Basemenu.hh"
private:
Directionmenu(const Directionmenu&);
Directionmenu& operator=(const Directionmenu&);
+ Slit *slit;
protected:
virtual void itemSelected(int button, unsigned int index);
-
+ virtual void setValues(void);
+
public:
Directionmenu(Slitmenu *sm);
+ virtual void reconfigure(void);
};
class Placementmenu : public Basemenu {
private:
Placementmenu(const Placementmenu&);
Placementmenu& operator=(const Placementmenu&);
+ Slit *slit;
protected:
virtual void itemSelected(int buton, unsigned int index);
+ virtual void setValues(void);
public:
Placementmenu(Slitmenu *sm);
+ virtual void reconfigure(void);
};
Directionmenu *directionmenu;
typedef std::list<SlitClient*> SlitClientList;
bool on_top, hidden, do_auto_hide;
+ int direction, placement;
+ std::string slitstr;
Display *display;
Blackbox *blackbox;
BScreen *screen;
+ Configuration *config;
BTimer *timer;
Strut strut;
inline bool isOnTop(void) const { return on_top; }
inline bool isHidden(void) const { return hidden; }
inline bool doAutoHide(void) const { return do_auto_hide; }
+ inline int getPlacement(void) const { return placement; }
+ inline int getDirection(void) const { return direction; }
+
+ void saveOnTop(bool);
+ void saveAutoHide(bool);
+ void savePlacement(int);
+ void saveDirection(int);
inline Slitmenu *getMenu(void) { return slitmenu; }
inline unsigned int getWidth(void) const { return frame.rect.width(); }
inline unsigned int getExposedWidth(void) const {
- if (screen->getSlitDirection() == Vertical && do_auto_hide)
+ if (direction == Vertical && do_auto_hide)
return screen->getBevelWidth();
return frame.rect.width();
}
inline unsigned int getHeight(void) const { return frame.rect.height(); }
inline unsigned int getExposedHeight(void) const {
- if (screen->getSlitDirection() == Horizontal && do_auto_hide)
+ if (direction == Horizontal && do_auto_hide)
return screen->getBevelWidth();
return frame.rect.height();
}
void addClient(Window w);
void removeClient(SlitClient *client, bool remap = True);
void removeClient(Window w, bool remap = True);
+ void load_rc(void);
+ void save_rc(void);
void reconfigure(void);
void updateSlit(void);
void reposition(void);
bool BTimer::shouldFire(const timeval &tm) const {
timeval end = endpoint();
- return !((tm.tv_sec < end.tv_sec) ||
- (tm.tv_sec == end.tv_sec && tm.tv_usec < end.tv_usec));
+ return ! ((tm.tv_sec < end.tv_sec) ||
+ (tm.tv_sec == end.tv_sec && tm.tv_usec < end.tv_usec));
}
Toolbar::Toolbar(BScreen *scrn) {
screen = scrn;
blackbox = screen->getBlackbox();
+ toolbarstr = (string)"session.screen" + itostring(screen->getScreenNumber())
+ + ".toolbar.";
+ config = blackbox->getConfig();
+
+ load_rc();
// get the clock updating every minute
clock_timer = new BTimer(blackbox, this);
hide_timer = new BTimer(blackbox, &hide_handler);
hide_timer->setTimeout(blackbox->getAutoRaiseDelay());
- on_top = screen->isToolbarOnTop();
- hidden = do_auto_hide = screen->doToolbarAutoHide();
-
editing = False;
new_name_pos = 0;
frame.grab_x = frame.grab_y = 0;
}
+void Toolbar::saveOnTop(bool b) {
+ on_top = b;
+ config->setValue(toolbarstr + "onTop", on_top);
+}
+
+
+void Toolbar::saveAutoHide(bool b) {
+ do_auto_hide = b;
+ config->setValue(toolbarstr + "autoHide", do_auto_hide);
+}
+
+
+void Toolbar::saveWidthPercent(unsigned int w) {
+ width_percent = w;
+ config->setValue(toolbarstr + "widthPercent", width_percent);
+}
+
+
+void Toolbar::savePlacement(int p) {
+ placement = p;
+ const char *pname;
+ switch (placement) {
+ case TopLeft: pname = "TopLeft"; break;
+ case BottomLeft: pname = "BottomLeft"; break;
+ case TopCenter: pname = "TopCenter"; break;
+ case TopRight: pname = "TopRight"; break;
+ case BottomRight: pname = "BottomRight"; break;
+ case BottomCenter: default: pname = "BottomCenter"; break;
+ }
+ config->setValue(toolbarstr + "placement", pname);
+}
+
+
+void Toolbar::save_rc(void) {
+ saveOnTop(on_top);
+ saveAutoHide(do_auto_hide);
+ saveWidthPercent(width_percent);
+ savePlacement(placement);
+}
+
+
+void Toolbar::load_rc(void) {
+ string s;
+
+ if (! config->getValue(toolbarstr + "onTop", on_top))
+ on_top = false;
+
+ if (! config->getValue(toolbarstr + "autoHide", do_auto_hide))
+ do_auto_hide = false;
+ hidden = do_auto_hide;
+
+ if (! config->getValue(toolbarstr + "widthPercent", width_percent) ||
+ width_percent == 0 || width_percent > 100)
+ width_percent = 66;
+
+ if (config->getValue(toolbarstr + "placement", s)) {
+ if (s == "TopLeft")
+ placement = TopLeft;
+ else if (s == "BottomLeft")
+ placement = BottomLeft;
+ else if (s == "TopCenter")
+ placement = TopCenter;
+ else if (s == "TopRight")
+ placement = TopRight;
+ else if (s == "BottomRight")
+ placement = BottomRight;
+ else //if (s == "BottomCenter")
+ placement = BottomCenter;
+ } else
+ placement = BottomCenter;
+}
+
+
void Toolbar::reconfigure(void) {
unsigned int height = 0,
- width = (screen->getWidth() * screen->getToolbarWidthPercent()) / 100;
+ width = (screen->getWidth() * width_percent) / 100;
if (i18n.multibyte())
height = screen->getToolbarStyle()->fontset_extents->max_ink_extent.height;
frame.rect.setSize(width, height);
int x, y;
- switch (screen->getToolbarPlacement()) {
+ switch (placement) {
case TopLeft:
case TopRight:
case TopCenter:
- if (screen->getToolbarPlacement() == TopLeft)
+ if (placement == TopLeft)
x = 0;
- else if (screen->getToolbarPlacement() == TopRight)
+ else if (placement == TopRight)
x = screen->getWidth() - frame.rect.width()
- (screen->getBorderWidth() * 2);
else
case BottomRight:
case BottomCenter:
default:
- if (screen->getToolbarPlacement() == BottomLeft)
+ if (placement == BottomLeft)
x = 0;
- else if (screen->getToolbarPlacement() == BottomRight)
+ else if (placement == BottomRight)
x = screen->getWidth() - frame.rect.width()
- (screen->getBorderWidth() * 2);
else
// left and right are always 0
strut.top = strut.bottom = 0;
- switch(screen->getToolbarPlacement()) {
+ switch(placement) {
case TopLeft:
case TopCenter:
case TopRight:
void Toolbar::toggleAutoHide(void) {
- do_auto_hide = (do_auto_hide) ? False : True;
+ saveAutoHide(! doAutoHide());
updateStrut();
screen->getSlit()->reposition();
"Edit current workspace name"), 3);
update();
+ setValues();
+}
- if (toolbar->isOnTop()) setItemSelected(1, True);
- if (toolbar->doAutoHide()) setItemSelected(2, True);
+
+void Toolbarmenu::setValues() {
+ setItemSelected(1, toolbar->isOnTop());
+ setItemSelected(2, toolbar->doAutoHide());
}
switch (item->function()) {
case 1: { // always on top
- toolbar->on_top = ((toolbar->isOnTop()) ? False : True);;
- setItemSelected(1, toolbar->on_top);
+ toolbar->saveOnTop(! toolbar->isOnTop());
+ setItemSelected(1, toolbar->isOnTop());
if (toolbar->isOnTop()) getScreen()->raiseWindows((Window *) 0, 0);
break;
case 2: { // auto hide
toolbar->toggleAutoHide();
- setItemSelected(2, toolbar->do_auto_hide);
+ setItemSelected(2, toolbar->doAutoHide());
break;
}
void Toolbarmenu::reconfigure(void) {
+ setValues();
placementmenu->reconfigure();
Basemenu::reconfigure();
Toolbarmenu::Placementmenu::Placementmenu(Toolbarmenu *tm)
- : Basemenu(tm->toolbar->screen) {
+ : Basemenu(tm->toolbar->screen), toolbar(tm->toolbar) {
setLabel(i18n(ToolbarSet, ToolbarToolbarPlacement, "Toolbar Placement"));
setInternalMenu();
setMinimumSublevels(3);
insert(i18n(CommonSet, CommonPlacementBottomRight, "Bottom Right"),
Toolbar::BottomRight);
update();
+ setValues();
+}
+
+
+void Toolbarmenu::Placementmenu::setValues(void) {
+ int place = 0;
+ switch (toolbar->getPlacement()) {
+ case Toolbar::BottomRight:
+ place++;
+ case Toolbar::TopRight:
+ place++;
+ case Toolbar::BottomCenter:
+ place++;
+ case Toolbar::TopCenter:
+ place++;
+ case Toolbar::BottomLeft:
+ place++;
+ case Toolbar::TopLeft:
+ break;
+ }
+ setItemSelected(0, 0 == place);
+ setItemSelected(1, 1 == place);
+ setItemSelected(2, 2 == place);
+ setItemSelected(3, 3 == place);
+ setItemSelected(4, 4 == place);
+ setItemSelected(5, 5 == place);
+}
+
+
+void Toolbarmenu::Placementmenu::reconfigure(void) {
+ setValues();
+ Basemenu::reconfigure();
}
BasemenuItem *item = find(index);
if (! item) return;
- getScreen()->saveToolbarPlacement(item->function());
+ toolbar->savePlacement(item->function());
hide();
- getScreen()->getToolbar()->reconfigure();
+ toolbar->reconfigure();
// reposition the slit as well to make sure it doesn't intersect the
// toolbar
private:
Placementmenu(const Placementmenu&);
Placementmenu& operator=(const Placementmenu&);
+ Toolbar *toolbar;
protected:
virtual void itemSelected(int button, unsigned int index);
+ virtual void setValues(void);
public:
Placementmenu(Toolbarmenu *tm);
+ virtual void reconfigure(void);
};
Toolbar *toolbar;
protected:
virtual void itemSelected(int button, unsigned int index);
virtual void internal_hide(void);
+ virtual void setValues(void);
public:
Toolbarmenu(Toolbar *tb);
inline Basemenu *getPlacementmenu(void) { return placementmenu; }
- void reconfigure(void);
+ virtual void reconfigure(void);
};
class Toolbar : public TimeoutHandler {
private:
bool on_top, editing, hidden, do_auto_hide;
+ unsigned int width_percent;
+ int placement;
+ std::string toolbarstr;
Display *display;
struct ToolbarFrame {
Blackbox *blackbox;
BScreen *screen;
+ Configuration *config;
BTimer *clock_timer, *hide_timer;
Toolbarmenu *toolbarmenu;
Strut strut;
inline bool isOnTop(void) const { return on_top; }
inline bool isHidden(void) const { return hidden; }
inline bool doAutoHide(void) const { return do_auto_hide; }
+ inline unsigned int getWidthPercent(void) const { return width_percent; }
+ inline int getPlacement(void) const { return placement; }
+
+ void saveOnTop(bool);
+ void saveAutoHide(bool);
+ void saveWidthPercent(unsigned int);
+ void savePlacement(int);
+
+ void save_rc(void);
+ void load_rc(void);
inline Window getWindowID(void) const { return frame.window; }
return ret;
}
+
+
+string itostring(unsigned long i) {
+ if (i == 0)
+ return string("0");
+
+ string tmp;
+ for (; i > 0; i /= 10)
+ tmp.insert(tmp.begin(), "0123456789"[i%10]);
+ return tmp;
+}
+
+
+string itostring(long i) {
+ if (i < 0) {
+ std::string tmp = itostring( (unsigned long) -i);
+ tmp.insert(tmp.begin(), '-');
+ return tmp;
+ } else
+ return itostring( (unsigned long) i);
+}
}
};
+std::string itostring(unsigned long i);
+std::string itostring(long i);
+inline std::string itostring(unsigned int i) {
+ return itostring((unsigned long) i);
+}
+inline std::string itostring(int i) {
+ return itostring((long) i);
+}
+
#endif
client.transient_for = 0;
Window trans_for;
- if (!XGetTransientForHint(blackbox->getXDisplay(), client.window,
- &trans_for)) {
+ if (! XGetTransientForHint(blackbox->getXDisplay(), client.window,
+ &trans_for)) {
// transient_for hint not set
return;
}
flags currently set. Otherwise it still thinks it is maximized.
so we do not need to call configure() because resizing will handle it
*/
- if (!flags.resizing)
+ if (! flags.resizing)
configure(blackbox_attrib.premax_x, blackbox_attrib.premax_y,
blackbox_attrib.premax_w, blackbox_attrib.premax_h);
blackbox->getBlackboxAttributesAtom(),
&atom_return, &foo, &nitems, &ulfoo,
(unsigned char **) &net);
- if (ret != Success || !net || nitems != PropBlackboxAttributesElements)
+ if (ret != Success || ! net || nitems != PropBlackboxAttributesElements)
return;
if (net->flags & AttribShaded &&
void BlackboxWindow::motionNotifyEvent(XMotionEvent *me) {
- if (!flags.resizing && (me->state & Button1Mask) &&
+ if (! flags.resizing && (me->state & Button1Mask) &&
(functions & Func_Move) &&
(frame.title == me->window || frame.label == me->window ||
frame.handle == me->window || frame.window == me->window)) {
if (decorations & Decor_Border) {
frame.border_w = screen->getBorderWidth();
- if (!isTransient())
+ if (! isTransient())
frame.mwm_border_w = screen->getFrameWidth();
else
frame.mwm_border_w = 0;
extern "C" {
#include <X11/Xlib.h>
#include <X11/Xutil.h>
-#include <X11/Xresource.h>
#include <X11/Xatom.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h>
argv = m_argv;
if (! rc) rc = "~/.openbox/rc";
rc_file = expandTilde(rc);
+ config.setFile(rc_file);
if (! menu) menu = "~/.openbox/menu";
menu_file = expandTilde(menu);
::exit(3);
}
+ // save current settings and default values
+ save_rc();
+
// set the screen with mouse to the first managed screen
active_screen = screenList.front();
setFocusedWindow(0);
bool Blackbox::handleSignal(int sig) {
switch (sig) {
case SIGHUP:
- reconfigure();
- break;
-
case SIGUSR1:
- reload_rc();
+ reconfigure();
break;
case SIGUSR2:
std::mem_fun(&BScreen::shutdown));
XSync(getXDisplay(), False);
-
- save_rc();
}
+/*
+ * Save all values as they are so that the defaults will be written to the rc
+ * file
+ */
void Blackbox::save_rc(void) {
- XrmDatabase new_blackboxrc = (XrmDatabase) 0;
- char rc_string[1024];
-
- load_rc();
-
- sprintf(rc_string, "session.colorsPerChannel: %d",
- resource.colors_per_channel);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.doubleClickInterval: %lu",
- resource.double_click_interval);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.autoRaiseDelay: %lu",
- ((resource.auto_raise_delay.tv_sec * 1000) +
- (resource.auto_raise_delay.tv_usec / 1000)));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.cacheLife: %lu", resource.cache_life / 60000);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.cacheMax: %lu", resource.cache_max);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- ScreenList::iterator it = screenList.begin();
- for (; it != screenList.end(); ++it) {
- BScreen *screen = *it;
- int screen_number = screen->getScreenNumber();
-
- char *placement = (char *) 0;
-
- switch (screen->getSlitPlacement()) {
- case Slit::TopLeft: placement = "TopLeft"; break;
- case Slit::CenterLeft: placement = "CenterLeft"; break;
- case Slit::BottomLeft: placement = "BottomLeft"; break;
- case Slit::TopCenter: placement = "TopCenter"; break;
- case Slit::BottomCenter: placement = "BottomCenter"; break;
- case Slit::TopRight: placement = "TopRight"; break;
- case Slit::BottomRight: placement = "BottomRight"; break;
- case Slit::CenterRight: default: placement = "CenterRight"; break;
- }
-
- sprintf(rc_string, "session.screen%d.slit.placement: %s", screen_number,
- placement);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.slit.direction: %s", screen_number,
- ((screen->getSlitDirection() == Slit::Horizontal) ? "Horizontal" :
- "Vertical"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.slit.onTop: %s", screen_number,
- ((screen->getSlit()->isOnTop()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.slit.autoHide: %s", screen_number,
- ((screen->getSlit()->doAutoHide()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.opaqueMove: %s",
- ((screen->doOpaqueMove()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.imageDither: %s",
- ((screen->getImageControl()->doDither()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.fullMaximization: %s", screen_number,
- ((screen->doFullMax()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.focusNewWindows: %s", screen_number,
- ((screen->doFocusNew()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.focusLastWindow: %s", screen_number,
- ((screen->doFocusLast()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.rowPlacementDirection: %s",
- screen_number,
- ((screen->getRowPlacementDirection() == BScreen::LeftRight) ?
- "LeftToRight" : "RightToLeft"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.colPlacementDirection: %s",
- screen_number,
- ((screen->getColPlacementDirection() == BScreen::TopBottom) ?
- "TopToBottom" : "BottomToTop"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- switch (screen->getPlacementPolicy()) {
- case BScreen::CascadePlacement:
- placement = "CascadePlacement";
- break;
- case BScreen::ColSmartPlacement:
- placement = "ColSmartPlacement";
- break;
-
- case BScreen::RowSmartPlacement:
- default:
- placement = "RowSmartPlacement";
- break;
- }
- sprintf(rc_string, "session.screen%d.windowPlacement: %s", screen_number,
- placement);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- string fmodel;
- if (screen->isSloppyFocus()) {
- fmodel = "SloppyFocus";
- if (screen->doAutoRaise()) fmodel += " AutoRaise";
- if (screen->doClickRaise()) fmodel += " ClickRaise";
- } else {
- fmodel = "ClickToFocus";
- }
- sprintf(rc_string, "session.screen%d.focusModel: %s", screen_number,
- fmodel.c_str());
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.workspaces: %d", screen_number,
- screen->getWorkspaceCount());
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.toolbar.onTop: %s", screen_number,
- ((screen->getToolbar()->isOnTop()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.toolbar.autoHide: %s",
- screen_number,
- ((screen->getToolbar()->doAutoHide()) ? "True" : "False"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- switch (screen->getToolbarPlacement()) {
- case Toolbar::TopLeft: placement = "TopLeft"; break;
- case Toolbar::BottomLeft: placement = "BottomLeft"; break;
- case Toolbar::TopCenter: placement = "TopCenter"; break;
- case Toolbar::TopRight: placement = "TopRight"; break;
- case Toolbar::BottomRight: placement = "BottomRight"; break;
- case Toolbar::BottomCenter: default: placement = "BottomCenter"; break;
- }
-
- sprintf(rc_string, "session.screen%d.toolbar.placement: %s",
- screen_number, placement);
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- load_rc(screen);
-
- // these are static, but may not be saved in the users .blackboxrc,
- // writing these resources will allow the user to edit them at a later
- // time... but loading the defaults before saving allows us to rewrite the
- // users changes...
-
-#ifdef HAVE_STRFTIME
- sprintf(rc_string, "session.screen%d.strftimeFormat: %s", screen_number,
- screen->getStrftimeFormat());
- XrmPutLineResource(&new_blackboxrc, rc_string);
-#else // !HAVE_STRFTIME
- sprintf(rc_string, "session.screen%d.dateFormat: %s", screen_number,
- ((screen->getDateFormat() == B_EuropeanDate) ?
- "European" : "American"));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.clockFormat: %d", screen_number,
- ((screen->isClock24Hour()) ? 24 : 12));
- XrmPutLineResource(&new_blackboxrc, rc_string);
-#endif // HAVE_STRFTIME
-
- sprintf(rc_string, "session.screen%d.edgeSnapThreshold: %d",
- screen_number, screen->getEdgeSnapThreshold());
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- sprintf(rc_string, "session.screen%d.toolbar.widthPercent: %d",
- screen_number, screen->getToolbarWidthPercent());
- XrmPutLineResource(&new_blackboxrc, rc_string);
-
- // write out the user's workspace names
-
- string save_string = screen->getWorkspace(0)->getName();
- for (unsigned int i = 1; i < screen->getWorkspaceCount(); ++i) {
- save_string += ',';
- save_string += screen->getWorkspace(i)->getName();
- }
-
- char *resource_string = new char[save_string.length() + 48];
- sprintf(resource_string, "session.screen%d.workspaceNames: %s",
- screen_number, save_string.c_str());
- XrmPutLineResource(&new_blackboxrc, resource_string);
-
- delete [] resource_string;
- }
-
- XrmDatabase old_blackboxrc = XrmGetFileDatabase(rc_file.c_str());
-
- XrmMergeDatabases(new_blackboxrc, &old_blackboxrc);
- XrmPutFileDatabase(old_blackboxrc, rc_file.c_str());
- XrmDestroyDatabase(old_blackboxrc);
+ config.setAutoSave(false);
+
+ config.setValue("session.colorsPerChannel", resource.colors_per_channel);
+ config.setValue("session.doubleClickInterval",
+ resource.double_click_interval);
+ config.setValue("session.autoRaiseDelay",
+ ((resource.auto_raise_delay.tv_sec * 1000) +
+ (resource.auto_raise_delay.tv_usec / 1000)));
+ config.setValue("session.cacheLife", resource.cache_life / 60000);
+ config.setValue("session.cacheMax", resource.cache_max);
+ config.setValue("session.styleFile", resource.style_file);
+
+ std::for_each(screenList.begin(), screenList.end(),
+ std::mem_fun(&BScreen::save_rc));
+
+ config.setAutoSave(true);
+ config.save();
}
void Blackbox::load_rc(void) {
- XrmDatabase database = (XrmDatabase) 0;
-
- database = XrmGetFileDatabase(rc_file.c_str());
-
- XrmValue value;
- char *value_type;
- int int_value;
- unsigned long long_value;
-
- resource.colors_per_channel = 4;
- if (XrmGetResource(database, "session.colorsPerChannel",
- "Session.ColorsPerChannel", &value_type, &value) &&
- sscanf(value.addr, "%d", &int_value) == 1) {
- resource.colors_per_channel = int_value;
- if (resource.colors_per_channel < 2) resource.colors_per_channel = 2;
- if (resource.colors_per_channel > 6) resource.colors_per_channel = 6;
- }
-
- if (XrmGetResource(database, "session.styleFile", "Session.StyleFile",
- &value_type, &value))
- resource.style_file = expandTilde(value.addr);
+ if (! config.load())
+ config.create();
+
+ string s;
+
+ if (! config.getValue("session.colorsPerChannel",
+ resource.colors_per_channel))
+ resource.colors_per_channel = 4;
+ if (resource.colors_per_channel < 2) resource.colors_per_channel = 2;
+ else if (resource.colors_per_channel > 6) resource.colors_per_channel = 6;
+
+ if (config.getValue("session.styleFile", s))
+ resource.style_file = expandTilde(s);
else
resource.style_file = DEFAULTSTYLE;
- resource.double_click_interval = 250;
- if (XrmGetResource(database, "session.doubleClickInterval",
- "Session.DoubleClickInterval", &value_type, &value) &&
- sscanf(value.addr, "%lu", &long_value) == 1) {
- resource.double_click_interval = long_value;
- }
-
- resource.auto_raise_delay.tv_usec = 400;
- if (XrmGetResource(database, "session.autoRaiseDelay",
- "Session.AutoRaiseDelay", &value_type, &value) &&
- sscanf(value.addr, "%lu", &long_value) == 1) {
- resource.auto_raise_delay.tv_usec = long_value;
- }
+ if (! config.getValue("session.doubleClickInterval",
+ resource.double_click_interval));
+ resource.double_click_interval = 250;
+ if (! config.getValue("session.autoRaiseDelay",
+ resource.auto_raise_delay.tv_usec))
+ resource.auto_raise_delay.tv_usec = 400;
resource.auto_raise_delay.tv_sec = resource.auto_raise_delay.tv_usec / 1000;
resource.auto_raise_delay.tv_usec -=
(resource.auto_raise_delay.tv_sec * 1000);
resource.auto_raise_delay.tv_usec *= 1000;
- resource.cache_life = 5l;
- if (XrmGetResource(database, "session.cacheLife", "Session.CacheLife",
- &value_type, &value) &&
- sscanf(value.addr, "%lu", &long_value) == 1) {
- resource.cache_life = long_value;
- }
+ if (! config.getValue("session.cacheLife", resource.cache_life))
+ resource.cache_life = 5;
resource.cache_life *= 60000;
- resource.cache_max = 200;
- if (XrmGetResource(database, "session.cacheMax", "Session.CacheMax",
- &value_type, &value) &&
- sscanf(value.addr, "%lu", &long_value) == 1) {
- resource.cache_max = long_value;
- }
-}
-
-
-void Blackbox::load_rc(BScreen *screen) {
- XrmDatabase database = (XrmDatabase) 0;
-
- database = XrmGetFileDatabase(rc_file.c_str());
-
- XrmValue value;
- char *value_type, name_lookup[1024], class_lookup[1024];
- int screen_number = screen->getScreenNumber();
- int int_value;
-
- sprintf(name_lookup, "session.screen%d.fullMaximization", screen_number);
- sprintf(class_lookup, "Session.Screen%d.FullMaximization", screen_number);
- screen->saveFullMax(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveFullMax(True);
- }
-
- sprintf(name_lookup, "session.screen%d.focusNewWindows", screen_number);
- sprintf(class_lookup, "Session.Screen%d.FocusNewWindows", screen_number);
- screen->saveFocusNew(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveFocusNew(True);
- }
-
- sprintf(name_lookup, "session.screen%d.focusLastWindow", screen_number);
- sprintf(class_lookup, "Session.Screen%d.focusLastWindow", screen_number);
- screen->saveFocusLast(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveFocusLast(True);
- }
-
- sprintf(name_lookup, "session.screen%d.rowPlacementDirection",
- screen_number);
- sprintf(class_lookup, "Session.Screen%d.RowPlacementDirection",
- screen_number);
- screen->saveRowPlacementDirection(BScreen::LeftRight);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "righttoleft", value.size)) {
- screen->saveRowPlacementDirection(BScreen::RightLeft);
- }
-
- sprintf(name_lookup, "session.screen%d.colPlacementDirection",
- screen_number);
- sprintf(class_lookup, "Session.Screen%d.ColPlacementDirection",
- screen_number);
- screen->saveColPlacementDirection(BScreen::TopBottom);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "bottomtotop", value.size)) {
- screen->saveColPlacementDirection(BScreen::BottomTop);
- }
-
- sprintf(name_lookup, "session.screen%d.workspaces", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Workspaces", screen_number);
- screen->saveWorkspaces(1);
- if (XrmGetResource(database, name_lookup, class_lookup,
- &value_type, &value) &&
- sscanf(value.addr, "%d", &int_value) == 1 &&
- int_value > 0 && int_value < 128) {
- screen->saveWorkspaces(int_value);
- }
-
- sprintf(name_lookup, "session.screen%d.toolbar.widthPercent",
- screen_number);
- sprintf(class_lookup, "Session.Screen%d.Toolbar.WidthPercent",
- screen_number);
- screen->saveToolbarWidthPercent(66);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- sscanf(value.addr, "%d", &int_value) == 1 &&
- int_value > 0 && int_value <= 100) {
- screen->saveToolbarWidthPercent(int_value);
- }
-
- sprintf(name_lookup, "session.screen%d.toolbar.placement", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Toolbar.Placement", screen_number);
- screen->saveToolbarPlacement(Toolbar::BottomCenter);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- if (! strncasecmp(value.addr, "TopLeft", value.size))
- screen->saveToolbarPlacement(Toolbar::TopLeft);
- else if (! strncasecmp(value.addr, "BottomLeft", value.size))
- screen->saveToolbarPlacement(Toolbar::BottomLeft);
- else if (! strncasecmp(value.addr, "TopCenter", value.size))
- screen->saveToolbarPlacement(Toolbar::TopCenter);
- else if (! strncasecmp(value.addr, "TopRight", value.size))
- screen->saveToolbarPlacement(Toolbar::TopRight);
- else if (! strncasecmp(value.addr, "BottomRight", value.size))
- screen->saveToolbarPlacement(Toolbar::BottomRight);
- }
- screen->removeWorkspaceNames();
-
- sprintf(name_lookup, "session.screen%d.workspaceNames", screen_number);
- sprintf(class_lookup, "Session.Screen%d.WorkspaceNames", screen_number);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- string search = value.addr;
- string::const_iterator it = search.begin(),
- end = search.end();
- while (1) {
- string::const_iterator tmp = it; // current string.begin()
- it = std::find(tmp, end, ','); // look for comma between tmp and end
- screen->addWorkspaceName(string(tmp, it)); // string = search[tmp:it]
- if (it == end) break;
- ++it;
- }
- }
-
- sprintf(name_lookup, "session.screen%d.toolbar.onTop", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Toolbar.OnTop", screen_number);
- screen->saveToolbarOnTop(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveToolbarOnTop(True);
- }
-
- sprintf(name_lookup, "session.screen%d.toolbar.autoHide", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Toolbar.autoHide", screen_number);
- screen->saveToolbarAutoHide(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveToolbarAutoHide(True);
- }
-
- sprintf(name_lookup, "session.screen%d.focusModel", screen_number);
- sprintf(class_lookup, "Session.Screen%d.FocusModel", screen_number);
- screen->saveSloppyFocus(True);
- screen->saveAutoRaise(False);
- screen->saveClickRaise(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- string fmodel = value.addr;
-
- if (fmodel.find("ClickToFocus") != string::npos) {
- screen->saveSloppyFocus(False);
- } else {
- // must be sloppy
-
- if (fmodel.find("AutoRaise") != string::npos)
- screen->saveAutoRaise(True);
- if (fmodel.find("ClickRaise") != string::npos)
- screen->saveClickRaise(True);
- }
- }
-
- sprintf(name_lookup, "session.screen%d.windowPlacement", screen_number);
- sprintf(class_lookup, "Session.Screen%d.WindowPlacement", screen_number);
- screen->savePlacementPolicy(BScreen::RowSmartPlacement);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- if (! strncasecmp(value.addr, "RowSmartPlacement", value.size))
- /* pass */;
- else if (! strncasecmp(value.addr, "ColSmartPlacement", value.size))
- screen->savePlacementPolicy(BScreen::ColSmartPlacement);
- else if (! strncasecmp(value.addr, "CascadePlacement", value.size))
- screen->savePlacementPolicy(BScreen::CascadePlacement);
- }
-
- sprintf(name_lookup, "session.screen%d.slit.placement", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Slit.Placement", screen_number);
- screen->saveSlitPlacement(Slit::CenterRight);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- if (! strncasecmp(value.addr, "TopLeft", value.size))
- screen->saveSlitPlacement(Slit::TopLeft);
- else if (! strncasecmp(value.addr, "CenterLeft", value.size))
- screen->saveSlitPlacement(Slit::CenterLeft);
- else if (! strncasecmp(value.addr, "BottomLeft", value.size))
- screen->saveSlitPlacement(Slit::BottomLeft);
- else if (! strncasecmp(value.addr, "TopCenter", value.size))
- screen->saveSlitPlacement(Slit::TopCenter);
- else if (! strncasecmp(value.addr, "BottomCenter", value.size))
- screen->saveSlitPlacement(Slit::BottomCenter);
- else if (! strncasecmp(value.addr, "TopRight", value.size))
- screen->saveSlitPlacement(Slit::TopRight);
- else if (! strncasecmp(value.addr, "BottomRight", value.size))
- screen->saveSlitPlacement(Slit::BottomRight);
- }
-
- sprintf(name_lookup, "session.screen%d.slit.direction", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Slit.Direction", screen_number);
- screen->saveSlitDirection(Slit::Vertical);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "Horizontal", value.size)) {
- screen->saveSlitDirection(Slit::Horizontal);
- }
-
- sprintf(name_lookup, "session.screen%d.slit.onTop", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Slit.OnTop", screen_number);
- screen->saveSlitOnTop(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "True", value.size)) {
- screen->saveSlitOnTop(True);
- }
-
- sprintf(name_lookup, "session.screen%d.slit.autoHide", screen_number);
- sprintf(class_lookup, "Session.Screen%d.Slit.AutoHide", screen_number);
- screen->saveSlitAutoHide(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- ! strncasecmp(value.addr, "true", value.size)) {
- screen->saveSlitAutoHide(True);
- }
-
-#ifdef HAVE_STRFTIME
- sprintf(name_lookup, "session.screen%d.strftimeFormat", screen_number);
- sprintf(class_lookup, "Session.Screen%d.StrftimeFormat", screen_number);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- screen->saveStrftimeFormat(value.addr);
- } else {
- screen->saveStrftimeFormat("%I:%M %p");
- }
-#else // HAVE_STRFTIME
- sprintf(name_lookup, "session.screen%d.dateFormat", screen_number);
- sprintf(class_lookup, "Session.Screen%d.DateFormat", screen_number);
- screen->saveDateFormat(B_AmericanDate);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value)) {
- if (! strncasecmp(value.addr, "european", value.size))
- screen->saveDateFormat(B_EuropeanDate);
- }
-
- sprintf(name_lookup, "session.screen%d.clockFormat", screen_number);
- sprintf(class_lookup, "Session.Screen%d.ClockFormat", screen_number);
- screen->saveClock24Hour(False);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- sscanf(value.addr, "%d", &int_value) == 1 && int_value == 24) {
- screen->saveClock24Hour(True);
- }
-#endif // HAVE_STRFTIME
-
- sprintf(name_lookup, "session.screen%d.edgeSnapThreshold", screen_number);
- sprintf(class_lookup, "Session.Screen%d.EdgeSnapThreshold", screen_number);
- if (XrmGetResource(database, name_lookup, class_lookup, &value_type,
- &value) &&
- sscanf(value.addr, "%d", &int_value) == 1) {
- screen->saveEdgeSnapThreshold(int_value);
- }
-
- screen->saveImageDither(True);
- if (XrmGetResource(database, "session.imageDither", "Session.ImageDither",
- &value_type, &value) &&
- ! strncasecmp("false", value.addr, value.size)) {
- screen->saveImageDither(False);
- }
-
- screen->saveOpaqueMove(False);
- if (XrmGetResource(database, "session.opaqueMove", "Session.OpaqueMove",
- &value_type, &value) &&
- ! strncasecmp("true", value.addr, value.size)) {
- screen->saveOpaqueMove(True);
- }
-
- XrmDestroyDatabase(database);
-}
-
-
-void Blackbox::reload_rc(void) {
- load_rc();
- reconfigure();
+ if (! config.getValue("session.cacheMax", resource.cache_max))
+ resource.cache_max = 200;
}
void Blackbox::real_reconfigure(void) {
- XrmDatabase new_blackboxrc = (XrmDatabase) 0;
- char *style = new char[resource.style_file.length() + 20];
-
- sprintf(style, "session.styleFile: %s", getStyleFilename());
- XrmPutLineResource(&new_blackboxrc, style);
-
- delete [] style;
-
- XrmDatabase old_blackboxrc = XrmGetFileDatabase(rc_file.c_str());
-
- XrmMergeDatabases(new_blackboxrc, &old_blackboxrc);
- XrmPutFileDatabase(old_blackboxrc, rc_file.c_str());
- if (old_blackboxrc) XrmDestroyDatabase(old_blackboxrc);
-
+ load_rc();
+
std::for_each(menuTimestamps.begin(), menuTimestamps.end(),
PointerAssassin());
menuTimestamps.clear();
void Blackbox::saveStyleFilename(const string& filename) {
assert(! filename.empty());
resource.style_file = filename;
+ config.setValue("session.styleFile", resource.style_file);
}
bool found = False;
MenuTimestampList::iterator it = menuTimestamps.begin();
- for (; it != menuTimestamps.end() && !found; ++it) {
+ for (; it != menuTimestamps.end() && ! found; ++it) {
if ((*it)->filename == filename) found = True;
}
if (! found) {
extern "C" {
#include <X11/Xlib.h>
-#include <X11/Xresource.h>
#ifdef HAVE_STDIO_H
# include <stdio.h>
#include "i18n.hh"
#include "BaseDisplay.hh"
+#include "Configuration.hh"
#include "Timer.hh"
#define AttribShaded (1l << 0)
BScreen *active_screen;
BlackboxWindow *focused_window;
BTimer *timer;
+ Configuration config;
bool no_focus, reconfigure_wait, reread_menu_wait;
Time last_time;
void load_rc(void);
void save_rc(void);
- void reload_rc(void);
void real_rereadMenu(void);
void real_reconfigure(void);
inline BlackboxWindow *getFocusedWindow(void) { return focused_window; }
+ inline Configuration *getConfig() { return &config; }
inline const Time &getDoubleClickInterval(void) const
{ return resource.double_click_interval; }
inline const Time &getLastTime(void) const { return last_time; }
void setFocusedWindow(BlackboxWindow *w);
void shutdown(void);
- void load_rc(BScreen *screen);
void saveStyleFilename(const std::string& filename);
void addMenuTimestamp(const std::string& filename);
void restart(const char *prog = 0);