void Openbox::signalHandler(int signal)
{
switch (signal) {
+ case SIGUSR1:
+ printf("Caught SIGUSR1 signal. Restarting.\n");
+ instance->restart();
+ break;
+
case SIGHUP:
- // XXX: Do something with HUP? Really shouldn't, we get this when X shuts
- // down and hangs-up on us.
-
case SIGINT:
case SIGTERM:
case SIGPIPE:
printf("Caught signal %d. Exiting.\n", signal);
instance->shutdown();
-
break;
+
case SIGFPE:
case SIGSEGV:
printf("Caught signal %d. Aborting and dumping core.\n", signal);
action.sa_handler = Openbox::signalHandler;
action.sa_mask = sigset_t();
action.sa_flags = SA_NOCLDSTOP | SA_NODEFER;
+ sigaction(SIGUSR1, &action, (struct sigaction *) 0);
sigaction(SIGPIPE, &action, (struct sigaction *) 0);
sigaction(SIGSEGV, &action, (struct sigaction *) 0);
sigaction(SIGFPE, &action, (struct sigaction *) 0);
void Openbox::eventLoop()
{
while (!_shutdown) {
- _timermanager.fire();
+ _timermanager.fire(!_sync); // wait if not in sync mode
dispatchEvents(); // from OtkEventDispatcher
XFlush(otk::OBDisplay::display); // flush here before we go wait for timers
}
otk::OBProperty::Atom_Window,
(c && _focused_screen == *it) ? c->window() : None);
}
+
+ // call the python Focus callbacks
+ EventData *data = new_event_data(_focused_screen->number(),
+ c ? c->window() : 0,
+ EventFocus, 0);
+ Openbox::instance->bindings()->fireEvent(data);
+ Py_XDECREF((PyObject*)data);
}
void Openbox::execute(int screen, const std::string &bin)