scriptdir = $(libdir)/openbox/python
MAINTAINERCLEANFILES = Makefile.in
-script_DATA = clientmotion.py clicks.py globals.py
+script_DATA = clientmotion.py clicks.py globals.py config.py
EXTRA_DIST = $(script_DATA)
distclean-local:
--- /dev/null
+#############################################################################
+### Options that can be defined on startup that affect the behavior of ###
+### openbox. ###
+#############################################################################
+
+# client_buttons - a list of the modifier(s) and buttons which are grabbed on
+# client windows (for interactive move/resize, etc).
+# examples: "A-2", "C-A-2", "W-1"
+client_buttons = ["A-1", "A-2", "A-3"]
+
+# theme - the theme used to decorate everything.
+theme = "/usr/local/share/openbox/styles/nyz"
+
+
+#############################################################################
+### Options that can be modified by the user to change the default hooks' ###
+### behaviors. ###
+#############################################################################
+
+# click_focus - '1' if clicking in a client will cause it to focus in the
+# default hook functions; else '0'.
+click_focus = 0
+# click_raise - '1' if clicking in a client will cause it to raise to the
+# top of its stacking layer; else '0'.
+click_raise = 0
+# enter_focus - '1' if entering a client window will cause it to focus in the
+# default hook functions; else '0'.
+enter_focus = 1
+# leave_unfocus - '1' if leaving a client window will cause it to unfocus in
+# the default hook functions; else '0'.
+leave_unfocus = 1
+
+
+print "Loaded config.py"
-#############################################################################
-### Options that can be defined on startup that affect the behavior of ###
-### openbox. ###
-#############################################################################
-
-# client_buttons - a list of the modifier(s) and buttons which are grabbed on
-# client windows (for interactive move/resize, etc)
-# examples: "A-2", "C-A-2", "W-1"
-client_buttons = ["A-1", "A-2", "A-3"]
-
-
-
-#############################################################################
-### Options that can be modified by the user to change the default hooks' ###
-### behaviors. ###
-#############################################################################
-
-# click_focus - true if clicking in a client will cause it to focus in the
-# default hook functions
-click_focus = 0
-# click_raise - true if clicking in a client will cause it to raise to the
-# top of its stacking layer
-click_raise = 0
-# enter_focus - true if entering a client window will cause it to focus in the
-# default hook functions
-enter_focus = 1
-# leave_unfocus - true if leaving a client window will cause it to unfocus in
-# the default hook functions
-leave_unfocus = 1
-
-
-
#############################################################################
### Variables defined for other scripts to use. ###
#############################################################################
# openbox - pointer to the current Openbox instance
openbox = Openbox_instance()
-# screen - list of all screens in the current openbox instance
-screen = []
+# screens - list of all screens in the current openbox instance
+screens = []
for i in range(Openbox_screenCount(openbox)):
- screen.append(Openbox_screen(openbox, i))
-
+ screens.append(Openbox_screen(openbox, i))
print "Loaded globals.py"
OBBindings::OBBindings()
- : _curpos(&_tree), _resetkey(0,0)
+ : _curpos(&_tree),
+ _resetkey(0,0),
+ _timer(Openbox::instance->timerManager(),
+ (otk::OBTimeoutHandler)reset, this)
{
+ _timer.setTimeout(5000); // chains reset after 5 seconds
+
setResetKey("C-g"); // set the default reset key
}
BindingTree *p = _curpos->first_child;
while (p) {
- if (grab)
+ if (grab) {
otk::OBDisplay::grabKey(p->binding.key, p->binding.modifiers,
root, false, GrabModeAsync, GrabModeAsync,
false);
+ }
else
otk::OBDisplay::ungrabKey(p->binding.key, p->binding.modifiers,
root);
Time time)
{
if (key == _resetkey.key && modifiers == _resetkey.modifiers) {
- grabKeys(false);
- _curpos = &_tree;
- grabKeys(true);
+ reset(this);
} else {
BindingTree *p = _curpos->first_child;
while (p) {
if (p->binding.key == key && p->binding.modifiers == modifiers) {
if (p->chain) {
+ _timer.start(); // start/restart the timer
grabKeys(false);
_curpos = p;
grabKeys(true);
} else {
python_callback_binding(p->id, window, modifiers, key, time);
- grabKeys(false);
- _curpos = &_tree;
- grabKeys(true);
+ reset(this);
}
break;
}
}
}
+void OBBindings::reset(OBBindings *self)
+{
+ self->_timer.stop();
+ self->grabKeys(false);
+ self->_curpos = &self->_tree;
+ self->grabKeys(true);
+}
+
}
*/
#include "actions.hh"
+#include "otk/timer.hh"
#include <string>
#include <vector>
BindingTree *_curpos; // position in the keytree
Binding _resetkey; // the key which resets the key chain status
+
+ otk::OBTimer _timer;
int find(BindingTree *search) const;
bool translate(const std::string &str, Binding &b) const;
BindingTree *buildtree(const StringVect &keylist, int id) const;
void assimilate(BindingTree *node);
+ static void reset(OBBindings *self);
+
public:
//! Initializes an OBBinding object
OBBindings();
_plate.show(); // the other stuff is shown based on decor settings
grabClient();
+
+ grabButtons(true);
}
OBFrame::~OBFrame()
{
+ grabButtons(false);
releaseClient(false);
}
+void OBFrame::grabButtons(bool grab)
+{
+ if (grab) {
+ // grab simple button clicks on the client, but pass them through too
+ otk::OBDisplay::grabButton(Button1, 0, _plate.window(), true,
+ ButtonPressMask, GrabModeSync, GrabModeSync,
+ _plate.window(), None, false);
+ otk::OBDisplay::grabButton(Button2, 0, _plate.window(), true,
+ ButtonPressMask, GrabModeSync, GrabModeSync,
+ _plate.window(), None, false);
+ otk::OBDisplay::grabButton(Button3, 0, _plate.window(), true,
+ ButtonPressMask, GrabModeSync, GrabModeSync,
+ _plate.window(), None, false);
+ otk::OBDisplay::grabButton(Button4, 0, _plate.window(), true,
+ ButtonPressMask, GrabModeSync, GrabModeSync,
+ _plate.window(), None, false);
+ otk::OBDisplay::grabButton(Button5, 0, _plate.window(), true,
+ ButtonPressMask, GrabModeSync, GrabModeSync,
+ _plate.window(), None, false);
+ } else {
+ }
+
+ // grab any requested buttons on the entire frame
+ if (grab) {
+
+ otk::OBDisplay::grabButton(Button1, 0, _plate.window(), true,
+ ButtonPressMask, GrabModeSync, GrabModeSync,
+ _plate.window(), None, false);
+ } else {
+ }
+}
+
+
void OBFrame::setTitle(const std::string &text)
{
_label.setText(text);
//! Shape the frame window to the client window
void adjustShape();
+ //! Grabs or ungrabs buttons on the frame
+ void grabButtons(bool grab);
+
public:
//! Constructs an OBFrame object, and reparents the client to itself
/*!
#include "screen.hh"
#include "actions.hh"
#include "bindings.hh"
+#include "python.hh"
#include "otk/property.hh"
#include "otk/display.hh"
#include "otk/assassin.hh"
# include <sys/select.h>
#endif // HAVE_SYS_SELECT_H
-#include <Python.h>
-
-// The initializer in openbox_wrap.cc
-extern void init_openbox(void);
-// The initializer in otk_wrap.cc
-extern void init_otk(void);
-
#include "gettext.h"
#define _(str) gettext(str)
}
}
-static void runPython(const char *s) {
- FILE *rcpyfd = fopen(s, "r");
- if (!rcpyfd) {
- printf("failed to load python file %s\n", s);
- } else {
- PyRun_SimpleFile(rcpyfd, const_cast<char*>(s));
- fclose(rcpyfd);
- }
-}
-
-
Openbox::Openbox(int argc, char **argv)
: otk::OtkEventDispatcher(),
otk::OtkEventHandler()
parseCommandLine(argc, argv);
- // TEMPORARY: using the xrdb rc3
- _config.setFile(_rcfilepath);
- if (!_config.load()) {
- printf("failed to load rc file %s\n", _config.file().c_str());
- ::exit(2);
- }
- std::string s;
- _config.getValue("session.styleFile", s);
- _config.setFile(s);
- if (!_config.load()) {
- printf("failed to load style %s\n", _config.file().c_str());
- ::exit(2);
- }
-
// open the X display (and gets some info about it, and its screens)
otk::OBDisplay::initialize(_displayreq);
assert(otk::OBDisplay::display);
_cursors.ul_angle = XCreateFontCursor(otk::OBDisplay::display, XC_ul_angle);
_cursors.ur_angle = XCreateFontCursor(otk::OBDisplay::display, XC_ur_angle);
+ // start up python and load config values
+ python_init(argv[0]);
+ python_exec(SCRIPTDIR"/config.py"); // load openbox config values
+
// initialize all the screens
OBScreen *screen;
- screen = new OBScreen(0, _config);
+ screen = new OBScreen(0);
if (screen->managed()) {
_screens.push_back(screen);
// XXX: "change to" the first workspace on the screen to initialize stuff
::exit(1);
}
- // start up python and run the user's startup script
- Py_SetProgramName(argv[0]);
- Py_Initialize();
- init_otk();
- init_openbox();
- PyRun_SimpleString("from _otk import *; from _openbox import *;");
-
- runPython(SCRIPTDIR"/globals.py"); // create/set global vars
- runPython(SCRIPTDIR"/clientmotion.py"); // moving and resizing clients
- runPython(SCRIPTDIR"/clicks.py"); // titlebar/root clicks and dblclicks
- runPython(_scriptfilepath.c_str());
+ // run all of the python scripts, including the user's
+ python_exec(SCRIPTDIR"/globals.py"); // create/set global vars
+ python_exec(SCRIPTDIR"/clientmotion.py"); // moving and resizing clients
+ python_exec(SCRIPTDIR"/clicks.py"); // titlebar/root clicks and dblclicks
+ python_exec(_scriptfilepath.c_str());
ScreenList::iterator it, end = _screens.end();
- for (it = _screens.begin(); it != end; ++it)
+ for (it = _screens.begin(); it != end; ++it) {
(*it)->manageExisting();
+ }
// grab any keys set up before the screens existed
_bindings->grabKeys(true);
}
}
+
+bool Openbox::getConfigString(const char *name, std::string *value) {
+ return python_get_string(name, value);
+}
+
}
//! When set to true, the Openbox::eventLoop function will stop and return
bool _doshutdown;
- //! The configuration of the application. TEMPORARY
- otk::Configuration _config;
-
//! The client with input focus
/*!
Updated by the clients themselves.
manager can be destroyed.
*/
inline void shutdown() { _doshutdown = true; }
+
+ bool getConfigString(const char *name, std::string *value);
};
}
#define SWIGTYPE_p_otk__Strut swig_types[8]
#define SWIGTYPE_p_XShapeEvent swig_types[9]
#define SWIGTYPE_p_XConfigureRequestEvent swig_types[10]
-#define SWIGTYPE_p_otk__OtkEventHandler swig_types[11]
-#define SWIGTYPE_p_otk__Rect swig_types[12]
-#define SWIGTYPE_p_ob__OBWidget swig_types[13]
-#define SWIGTYPE_p_XFocusChangeEvent swig_types[14]
-#define SWIGTYPE_p_XClientMessageEvent swig_types[15]
-#define SWIGTYPE_p_otk__OBProperty swig_types[16]
-#define SWIGTYPE_p_otk__OtkEventDispatcher swig_types[17]
-#define SWIGTYPE_p_XPropertyEvent swig_types[18]
-#define SWIGTYPE_p_XDestroyWindowEvent swig_types[19]
-#define SWIGTYPE_p_otk__BImageControl swig_types[20]
-#define SWIGTYPE_p_PyObject swig_types[21]
-#define SWIGTYPE_p_ob__OBBindings swig_types[22]
-#define SWIGTYPE_p_ob__MwmHints swig_types[23]
-#define SWIGTYPE_p_otk__Configuration swig_types[24]
+#define SWIGTYPE_p_std__string swig_types[11]
+#define SWIGTYPE_p_otk__OtkEventHandler swig_types[12]
+#define SWIGTYPE_p_otk__Rect swig_types[13]
+#define SWIGTYPE_p_ob__OBWidget swig_types[14]
+#define SWIGTYPE_p_XFocusChangeEvent swig_types[15]
+#define SWIGTYPE_p_XClientMessageEvent swig_types[16]
+#define SWIGTYPE_p_otk__OBProperty swig_types[17]
+#define SWIGTYPE_p_otk__OtkEventDispatcher swig_types[18]
+#define SWIGTYPE_p_XPropertyEvent swig_types[19]
+#define SWIGTYPE_p_XDestroyWindowEvent swig_types[20]
+#define SWIGTYPE_p_otk__BImageControl swig_types[21]
+#define SWIGTYPE_p_PyObject swig_types[22]
+#define SWIGTYPE_p_ob__OBBindings swig_types[23]
+#define SWIGTYPE_p_ob__MwmHints swig_types[24]
#define SWIGTYPE_p_XUnmapEvent swig_types[25]
static swig_type_info *swig_types[27];
}
+static PyObject *_wrap_Openbox_getConfigString(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ ob::Openbox *arg1 = (ob::Openbox *) 0 ;
+ char *arg2 ;
+ std::string *arg3 = (std::string *) 0 ;
+ bool result;
+ PyObject * obj0 = 0 ;
+ PyObject * obj2 = 0 ;
+
+ if(!PyArg_ParseTuple(args,(char *)"OsO:Openbox_getConfigString",&obj0,&arg2,&obj2)) goto fail;
+ if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_ob__Openbox,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
+ if ((SWIG_ConvertPtr(obj2,(void **) &arg3, SWIGTYPE_p_std__string,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
+ result = (bool)(arg1)->getConfigString((char const *)arg2,arg3);
+
+ resultobj = PyInt_FromLong((long)result);
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
static PyObject * Openbox_swigregister(PyObject *self, PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL;
}
-static PyObject *_wrap_OBScreen_loadStyle(PyObject *self, PyObject *args) {
- PyObject *resultobj;
- ob::OBScreen *arg1 = (ob::OBScreen *) 0 ;
- otk::Configuration *arg2 = 0 ;
- PyObject * obj0 = 0 ;
- PyObject * obj1 = 0 ;
-
- if(!PyArg_ParseTuple(args,(char *)"OO:OBScreen_loadStyle",&obj0,&obj1)) goto fail;
- if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_ob__OBScreen,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
- if ((SWIG_ConvertPtr(obj1,(void **) &arg2, SWIGTYPE_p_otk__Configuration,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
- if (arg2 == NULL) {
- PyErr_SetString(PyExc_TypeError,"null reference"); SWIG_fail;
- }
- (arg1)->loadStyle((otk::Configuration const &)*arg2);
-
- Py_INCREF(Py_None); resultobj = Py_None;
- return resultobj;
- fail:
- return NULL;
-}
-
-
static PyObject *_wrap_OBScreen_manageExisting(PyObject *self, PyObject *args) {
PyObject *resultobj;
ob::OBScreen *arg1 = (ob::OBScreen *) 0 ;
Py_INCREF(obj);
return Py_BuildValue((char *)"");
}
+static PyObject *_wrap_python_init(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ char *arg1 ;
+
+ if(!PyArg_ParseTuple(args,(char *)"s:python_init",&arg1)) goto fail;
+ ob::python_init(arg1);
+
+ Py_INCREF(Py_None); resultobj = Py_None;
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
+static PyObject *_wrap_python_exec(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ char *arg1 ;
+ bool result;
+
+ if(!PyArg_ParseTuple(args,(char *)"s:python_exec",&arg1)) goto fail;
+ result = (bool)ob::python_exec((char const *)arg1);
+
+ resultobj = PyInt_FromLong((long)result);
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
+static PyObject *_wrap_python_get_string(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ char *arg1 ;
+ std::string *arg2 = (std::string *) 0 ;
+ bool result;
+ PyObject * obj1 = 0 ;
+
+ if(!PyArg_ParseTuple(args,(char *)"sO:python_get_string",&arg1,&obj1)) goto fail;
+ if ((SWIG_ConvertPtr(obj1,(void **) &arg2, SWIGTYPE_p_std__string,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
+ result = (bool)ob::python_get_string((char const *)arg1,arg2);
+
+ resultobj = PyInt_FromLong((long)result);
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
static PyObject *_wrap_register(PyObject *self, PyObject *args) {
PyObject *resultobj;
int arg1 ;
{ (char *)"Openbox_setFocusedClient", _wrap_Openbox_setFocusedClient, METH_VARARGS },
{ (char *)"Openbox_focusedScreen", _wrap_Openbox_focusedScreen, METH_VARARGS },
{ (char *)"Openbox_shutdown", _wrap_Openbox_shutdown, METH_VARARGS },
+ { (char *)"Openbox_getConfigString", _wrap_Openbox_getConfigString, METH_VARARGS },
{ (char *)"Openbox_swigregister", Openbox_swigregister, METH_VARARGS },
{ (char *)"OBScreen_client", _wrap_OBScreen_client, METH_VARARGS },
{ (char *)"OBScreen_clientCount", _wrap_OBScreen_clientCount, METH_VARARGS },
{ (char *)"OBScreen_focuswindow", _wrap_OBScreen_focuswindow, METH_VARARGS },
{ (char *)"OBScreen_addStrut", _wrap_OBScreen_addStrut, METH_VARARGS },
{ (char *)"OBScreen_removeStrut", _wrap_OBScreen_removeStrut, METH_VARARGS },
- { (char *)"OBScreen_loadStyle", _wrap_OBScreen_loadStyle, METH_VARARGS },
{ (char *)"OBScreen_manageExisting", _wrap_OBScreen_manageExisting, METH_VARARGS },
{ (char *)"OBScreen_manageWindow", _wrap_OBScreen_manageWindow, METH_VARARGS },
{ (char *)"OBScreen_unmanageWindow", _wrap_OBScreen_unmanageWindow, METH_VARARGS },
{ (char *)"OBClient_destroyHandler", _wrap_OBClient_destroyHandler, METH_VARARGS },
{ (char *)"OBClient_reparentHandler", _wrap_OBClient_reparentHandler, METH_VARARGS },
{ (char *)"OBClient_swigregister", OBClient_swigregister, METH_VARARGS },
+ { (char *)"python_init", _wrap_python_init, METH_VARARGS },
+ { (char *)"python_exec", _wrap_python_exec, METH_VARARGS },
+ { (char *)"python_get_string", _wrap_python_get_string, METH_VARARGS },
{ (char *)"register", _wrap_register, METH_VARARGS },
{ (char *)"preregister", _wrap_preregister, METH_VARARGS },
{ (char *)"unregister", _wrap_unregister, METH_VARARGS },
static swig_type_info _swigt__p_otk__Strut[] = {{"_p_otk__Strut", 0, "otk::Strut *", 0},{"_p_otk__Strut"},{0}};
static swig_type_info _swigt__p_XShapeEvent[] = {{"_p_XShapeEvent", 0, "XShapeEvent *", 0},{"_p_XShapeEvent"},{0}};
static swig_type_info _swigt__p_XConfigureRequestEvent[] = {{"_p_XConfigureRequestEvent", 0, "XConfigureRequestEvent *", 0},{"_p_XConfigureRequestEvent"},{0}};
+static swig_type_info _swigt__p_std__string[] = {{"_p_std__string", 0, "std::string *", 0},{"_p_std__string"},{0}};
static swig_type_info _swigt__p_otk__OtkEventHandler[] = {{"_p_otk__OtkEventHandler", 0, "otk::OtkEventHandler *", 0},{"_p_otk__OtkEventHandler"},{"_p_ob__Openbox", _p_ob__OpenboxTo_p_otk__OtkEventHandler},{"_p_ob__OBClient", _p_ob__OBClientTo_p_otk__OtkEventHandler},{0}};
static swig_type_info _swigt__p_otk__Rect[] = {{"_p_otk__Rect", 0, "otk::Rect *", 0},{"_p_otk__Rect"},{0}};
static swig_type_info _swigt__p_ob__OBWidget[] = {{"_p_ob__OBWidget", 0, "ob::OBWidget *", 0},{"_p_ob__OBWidget"},{"_p_ob__OBClient", _p_ob__OBClientTo_p_ob__OBWidget},{0}};
static swig_type_info _swigt__p_PyObject[] = {{"_p_PyObject", 0, "PyObject *", 0},{"_p_PyObject"},{0}};
static swig_type_info _swigt__p_ob__OBBindings[] = {{"_p_ob__OBBindings", 0, "ob::OBBindings *", 0},{"_p_ob__OBBindings"},{0}};
static swig_type_info _swigt__p_ob__MwmHints[] = {{"_p_ob__MwmHints", 0, "ob::MwmHints *", 0},{"_p_ob__MwmHints"},{0}};
-static swig_type_info _swigt__p_otk__Configuration[] = {{"_p_otk__Configuration", 0, "otk::Configuration *", 0},{"_p_otk__Configuration"},{0}};
static swig_type_info _swigt__p_XUnmapEvent[] = {{"_p_XUnmapEvent", 0, "XUnmapEvent *", 0},{"_p_XUnmapEvent"},{0}};
static swig_type_info *swig_types_initial[] = {
_swigt__p_otk__Strut,
_swigt__p_XShapeEvent,
_swigt__p_XConfigureRequestEvent,
+_swigt__p_std__string,
_swigt__p_otk__OtkEventHandler,
_swigt__p_otk__Rect,
_swigt__p_ob__OBWidget,
_swigt__p_PyObject,
_swigt__p_ob__OBBindings,
_swigt__p_ob__MwmHints,
-_swigt__p_otk__Configuration,
_swigt__p_XUnmapEvent,
0
};
#include <vector>
#include <algorithm>
+extern "C" {
+#include <Python.h>
+
+// The initializer in openbox_wrap.cc
+extern void init_openbox(void);
+// The initializer in otk_wrap.cc
+extern void init_otk(void);
+}
+
namespace ob {
typedef std::vector<PyObject*> FunctionList;
static FunctionList callbacks[OBActions::NUM_ACTIONS];
static FunctionList bindfuncs;
+static PyObject *obdict;
+
+void python_init(char *argv0)
+{
+ Py_SetProgramName(argv0);
+ Py_Initialize();
+ init_otk();
+ init_openbox();
+ PyRun_SimpleString("from _otk import *; from _openbox import *;");
+
+ // set up access to the python global variables
+ PyObject *obmodule = PyImport_AddModule("__main__");
+ obdict = PyModule_GetDict(obmodule);
+}
+
+bool python_exec(const char *file) {
+ FILE *rcpyfd = fopen(file, "r");
+ if (!rcpyfd) {
+ printf("failed to load python file %s\n", file);
+ return false;
+ }
+ PyRun_SimpleFile(rcpyfd, const_cast<char*>(file));
+ fclose(rcpyfd);
+ return true;
+}
+
+bool python_get_string(const char *name, std::string *value)
+{
+ PyObject *val = PyDict_GetItemString(obdict, const_cast<char*>(name));
+ if (!val) return false;
+
+ *value = PyString_AsString(val);
+ return true;
+}
+
+
bool python_register(int action, PyObject *callback)
{
if (action < 0 || action >= OBActions::NUM_ACTIONS ||
#include <Python.h>
}
+#include <string>
+
namespace ob {
+void python_init(char *argv0);
+bool python_exec(const char *file);
+bool python_get_string(const char *name, std::string *value);
+
//! Add a python callback funtion to the back of the hook list
/*!
Registering functions for KeyPress events is pointless. Use python_bind
namespace ob {
-OBScreen::OBScreen(int screen, const otk::Configuration &config)
+OBScreen::OBScreen(int screen)
: _number(screen),
_root(screen)
{
// initialize the screen's style
_style.setImageControl(_image_control);
- _style.load(config);
-
+ std::string stylepath;
+ Openbox::instance->getConfigString("theme", &stylepath);
+ otk::Configuration sconfig(false);
+ sconfig.setFile(otk::expandTilde(stylepath));
+ if (!sconfig.load()) {
+ sconfig.setFile(otk::expandTilde(DEFAULTSTYLE));
+ if (!sconfig.load()) {
+ printf(_("Unable to load default style: %s. Aborting.\n"), DEFAULTSTYLE);
+ ::exit(1);
+ }
+ }
+ _style.load(sconfig);
// Set the netwm atoms for geomtery and viewport
unsigned long geometry[] = { _info->width(),
}
-void OBScreen::loadStyle(const otk::Configuration &config)
-{
- _style.load(config);
-
- // XXX: make stuff redraw!
-}
-
-
void OBScreen::manageWindow(Window window)
{
OBClient *client = 0;
public:
#ifndef SWIG
//! Constructs a new OBScreen object
- OBScreen(int screen, const otk::Configuration &config);
+ OBScreen(int screen);
//! Destroys the OBScreen object
virtual ~OBScreen();
#endif
//! Removes a window's strut from the screen's list of reserved spaces
void removeStrut(otk::Strut *strut);
- //! Loads a new style on the screen
- void loadStyle(const otk::Configuration &config);
-
//! Manage any pre-existing windows on the screen
void manageExisting();
//! Manage a client window