#include "bindings.hh"
#include "python.hh"
#include "otk/property.hh"
-#include "otk/display.hh"
#include "otk/assassin.hh"
#include "otk/util.hh"
namespace ob {
-Openbox *Openbox::instance = (Openbox *) 0;
+Openbox *openbox = (Openbox *) 0;
void Openbox::signalHandler(int signal)
switch (signal) {
case SIGUSR1:
printf("Caught SIGUSR1 signal. Restarting.\n");
- instance->restart();
+ openbox->restart();
break;
case SIGHUP:
case SIGTERM:
case SIGPIPE:
printf("Caught signal %d. Exiting.\n", signal);
- instance->shutdown();
+ openbox->shutdown();
break;
case SIGFPE:
Openbox::Openbox(int argc, char **argv)
: otk::EventDispatcher(),
- otk::EventHandler()
+ otk::EventHandler(),
+ _display()
{
struct sigaction action;
_state = State_Starting; // initializing everything
- Openbox::instance = this;
+ openbox = this;
_displayreq = (char*) 0;
_argv = argv;
parseCommandLine(argc, argv);
- // open the X display (and gets some info about it, and its screens)
- otk::Display::initialize(_displayreq);
- assert(otk::Display::display);
-
- XSynchronize(otk::Display::display, _sync);
+ XSynchronize(**otk::display, _sync);
// set up the signal handler
action.sa_handler = Openbox::signalHandler;
setMasterHandler(_actions); // set as the master event handler
// create the mouse cursors we'll use
- _cursors.session = XCreateFontCursor(otk::Display::display, XC_left_ptr);
- _cursors.move = XCreateFontCursor(otk::Display::display, XC_fleur);
- _cursors.ll_angle = XCreateFontCursor(otk::Display::display, XC_ll_angle);
- _cursors.lr_angle = XCreateFontCursor(otk::Display::display, XC_lr_angle);
- _cursors.ul_angle = XCreateFontCursor(otk::Display::display, XC_ul_angle);
- _cursors.ur_angle = XCreateFontCursor(otk::Display::display, XC_ur_angle);
+ _cursors.session = XCreateFontCursor(**otk::display, XC_left_ptr);
+ _cursors.move = XCreateFontCursor(**otk::display, XC_fleur);
+ _cursors.ll_angle = XCreateFontCursor(**otk::display, XC_ll_angle);
+ _cursors.lr_angle = XCreateFontCursor(**otk::display, XC_lr_angle);
+ _cursors.ul_angle = XCreateFontCursor(**otk::display, XC_ul_angle);
+ _cursors.ur_angle = XCreateFontCursor(**otk::display, XC_ur_angle);
// initialize scripting
python_init(argv[0]);
// initialize all the screens
Screen *screen;
- int i = _single ? DefaultScreen(otk::Display::display) : 0;
- int max = _single ? i + 1 : ScreenCount(otk::Display::display);
+ int i = _single ? DefaultScreen(**otk::display) : 0;
+ int max = _single ? i + 1 : ScreenCount(**otk::display);
for (; i < max; ++i) {
screen = new Screen(i);
if (screen->managed())
python_destroy();
- XSetInputFocus(otk::Display::display, PointerRoot, RevertToNone,
+ XSetInputFocus(**otk::display, PointerRoot, RevertToNone,
CurrentTime);
- XSync(otk::Display::display, false);
+ XSync(**otk::display, false);
// this tends to block.. i honestly am not sure why. causing an x error in
// the shutdown process unblocks it. blackbox simply did a ::exit(0), so
// all im gunna do is the same.
- //otk::Display::destroy();
+ //otk::display->destroy();
if (_restart) {
if (!_restart_prog.empty()) {
const std::string &dstr =
- otk::Display::screenInfo(first_screen)->displayString();
+ otk::display->screenInfo(first_screen)->displayString();
otk::putenv(const_cast<char *>(dstr.c_str()));
execlp(_restart_prog.c_str(), _restart_prog.c_str(), NULL);
perror(_restart_prog.c_str());
void Openbox::eventLoop()
{
- while (!_shutdown) {
+ while (true) {
dispatchEvents(); // from otk::EventDispatcher
- XFlush(otk::Display::display); // flush here before we go wait for timers
+ XFlush(**otk::display); // flush here before we go wait for timers
+ // don't wait if we're to shutdown
+ if (_shutdown) break;
_timermanager.fire(!_sync); // wait if not in sync mode
}
}
_focused_screen = _screens[c->screen()];
} else {
assert(_focused_screen);
- XSetInputFocus(otk::Display::display, _focused_screen->focuswindow(),
+ XSetInputFocus(**otk::display, _focused_screen->focuswindow(),
RevertToNone, CurrentTime);
}
// set the NET_ACTIVE_WINDOW hint for all screens
ScreenList::iterator it, end = _screens.end();
for (it = _screens.begin(); it != end; ++it) {
int num = (*it)->number();
- Window root = otk::Display::screenInfo(num)->rootWindow();
+ Window root = otk::display->screenInfo(num)->rootWindow();
_property->set(root, otk::Property::net_active_window,
otk::Property::Atom_Window,
(c && _focused_screen == *it) ? c->window() : None);
// call the python Focus callbacks
EventData data(_focused_screen->number(), c, EventFocus, 0);
- Openbox::instance->bindings()->fireEvent(&data);
+ _bindings->fireEvent(&data);
}
void Openbox::execute(int screen, const std::string &bin)
{
- if (screen >= ScreenCount(otk::Display::display))
+ if (screen >= ScreenCount(**otk::display))
screen = 0;
- otk::bexec(bin, otk::Display::screenInfo(screen)->displayString());
+ otk::bexec(bin, otk::display->screenInfo(screen)->displayString());
}
}