all repos — openbox @ 9259ec5732851dd66f7c598d629e3808ac7ab3d8

openbox fork - make it a bit more like ryudo

new timer infrastructure. takes a function pointer for the timeout, with a void* parameter (useful for holding a class instance!)
Dana Jansens danakj@orodu.net
commit

9259ec5732851dd66f7c598d629e3808ac7ab3d8

parent

ad80ef0f667e3b72d9e35d7a93451a1e2dfa0ab6

M Makefile.amMakefile.am

@@ -1,6 +1,6 @@

# Makefile.am for Openbox -SUBDIRS = intl po m4 data doc otk src util +SUBDIRS = intl po m4 data doc otk src MAINTAINERCLEANFILES = aclocal.m4 config.h.in configure Makefile.in stamp-h.in uninstall-local:
M otk/Makefile.amotk/Makefile.am

@@ -5,7 +5,7 @@

noinst_LIBRARIES=libotk.a libotk_a_SOURCES= color.cc display.cc font.cc gccache.cc image.cc \ - imagecontrol.cc rect.cc screeninfo.cc texture.cc + imagecontrol.cc rect.cc screeninfo.cc texture.cc timer.cc MAINTAINERCLEANFILES= Makefile.in

@@ -13,16 +13,7 @@ distclean-local:

rm -f *\~ *.orig *.rej .\#* # local dependencies -color.o: color.cc color.hh ../src/basedisplay.hh ../src/timer.hh ../src/util.hh -font.o: font.cc font.hh ../src/screen.hh color.hh texture.hh ../src/util.hh image.hh \ - ../src/timer.hh ../src/basedisplay.hh ../src/workspace.hh ../src/xatom.hh ../src/blackbox.hh \ - ../src/configuration.hh gccache.hh -gccache.o: gccache.cc gccache.hh ../src/basedisplay.hh ../src/timer.hh ../src/util.hh \ - color.hh -image.o: image.cc ../src/blackbox.hh ../src/basedisplay.hh ../src/timer.hh ../src/util.hh \ - ../src/configuration.hh ../src/xatom.hh gccache.hh color.hh image.hh texture.hh -imagecontrol.o: imagecontrol.cc ../src/blackbox.hh ../src/basedisplay.hh ../src/timer.hh \ - ../src/util.hh ../src/configuration.hh ../src/xatom.hh color.hh image.hh texture.hh -texture.o: texture.cc texture.hh color.hh ../src/util.hh ../src/basedisplay.hh \ - ../src/timer.hh image.hh ../src/screen.hh ../src/workspace.hh ../src/xatom.hh \ - ../src/blackbox.hh ../src/configuration.hh +color.o: color.cc color.hh display.hh screeninfo.hh rect.hh +gccache.o: gccache.cc gccache.hh display.hh color.hh assassin.hh \ + screeninfo.hh rect.hh +rect.o: rect.cc rect.hh
M otk/image.hhotk/image.hh

@@ -11,7 +11,7 @@ #include <list>

#include "color.hh" #include "screeninfo.hh" -#include "src/timer.hh" +#include "timer.hh" namespace otk {

@@ -66,7 +66,7 @@ Pixmap render(const BTexture &texture);

}; -class BImageControl : public ob::TimeoutHandler { +class BImageControl { public: struct CachedImage { Pixmap pixmap;

@@ -75,7 +75,8 @@ unsigned int count, width, height;

unsigned long pixel1, pixel2, texture; }; - BImageControl(const ScreenInfo *scrn, + BImageControl(OBTimerQueueManager *timermanager, + const ScreenInfo *scrn, bool _dither= False, int _cpc = 4, unsigned long cache_timeout = 300000l, unsigned long cmax = 200l);

@@ -111,12 +112,12 @@ unsigned int **xbuf, unsigned int **ybuf);

void setDither(bool d) { dither = d; } void setColorsPerChannel(int cpc); - virtual void timeout(void); + static void timeout(BImageControl *t); private: bool dither; const ScreenInfo *screeninfo; - ob::OBTimer *timer; + OBTimer *timer; Colormap colormap;
M otk/imagecontrol.ccotk/imagecontrol.cc

@@ -41,7 +41,8 @@ }

BImageControl *ctrl = 0; -BImageControl::BImageControl(const ScreenInfo *scrn, +BImageControl::BImageControl(OBTimerQueueManager *timermanager, + const ScreenInfo *scrn, bool _dither, int _cpc, unsigned long cache_timeout, unsigned long cmax) {

@@ -53,12 +54,11 @@ setColorsPerChannel(_cpc);

cache_max = cmax; if (cache_timeout) { - // XXX: FIX THIS - timer = 0;/*new BTimer(this); + timer = new OBTimer(timermanager, (OBTimeoutHandler)timeout, this); timer->setTimeout(cache_timeout); - timer->start();*/ + timer->start(); } else { - timer = (ob::OBTimer *) 0; + timer = (OBTimer *) 0; } colors = (XColor *) 0;

@@ -420,7 +420,7 @@ fprintf(stderr, "BImageControl::renderImage: cache is large, "

"forcing cleanout\n"); #endif // DEBUG - timeout(); + timeout(this); } return pixmap;

@@ -440,7 +440,7 @@ tmp.count--;

} if (! timer) - timeout(); + timeout(this); }

@@ -553,10 +553,10 @@ }

}; -void BImageControl::timeout(void) { +void BImageControl::timeout(BImageControl *t) { CacheCleaner cleaner; - std::for_each(cache.begin(), cache.end(), cleaner); - cache.remove_if(cleaner.ref_check); + std::for_each(t->cache.begin(), t->cache.end(), cleaner); + t->cache.remove_if(cleaner.ref_check); } }
M src/Makefile.amsrc/Makefile.am

@@ -16,7 +16,7 @@

openbox_LDADD=../otk/libotk.a @LIBINTL@ openbox_SOURCES= configuration.cc screen.cc openbox.cc \ - timer.cc util.cc window.cc workspace.cc xatom.cc blackbox.cc \ + util.cc window.cc workspace.cc xatom.cc blackbox.cc \ main.cc MAINTAINERCLEANFILES= Makefile.in
M src/blackbox.ccsrc/blackbox.cc

@@ -158,7 +158,9 @@ XSync(otk::OBDisplay::display, False);

reconfigure_wait = False; - timer = new OBTimer(this); + timer = new otk::OBTimer(Openbox::instance->timerManager(), + (otk::OBTimeoutHandler)timeout, + this); timer->setTimeout(0l); }

@@ -1151,11 +1153,11 @@ config.setValue("session.styleFile", resource.style_file);

} -void Blackbox::timeout(void) { - if (reconfigure_wait) - real_reconfigure(); +void Blackbox::timeout(Blackbox *t) { + if (t->reconfigure_wait) + t->real_reconfigure(); - reconfigure_wait = False; + t->reconfigure_wait = False; }
M src/blackbox.hhsrc/blackbox.hh

@@ -25,6 +25,7 @@ #include <list>

#include <map> #include <string> +#include "otk/timer.hh" #include "openbox.hh" #include "configuration.hh" #include "timer.hh"

@@ -69,7 +70,7 @@ class Blackbox;

class BlackboxWindow; class BWindowGroup; -class Blackbox : public Openbox, public TimeoutHandler { +class Blackbox : public Openbox { private: struct BCursor { Cursor session, move, ll_angle, lr_angle, ul_angle, ur_angle;

@@ -109,7 +110,7 @@ ScreenList screenList;

BScreen *active_screen; BlackboxWindow *focused_window, *changing_window; - OBTimer *timer; + otk::OBTimer *timer; Configuration config; XAtom *xatom;

@@ -213,7 +214,7 @@ bool validateWindow(Window window);

virtual bool handleSignal(int sig); - virtual void timeout(void); + static void timeout(Blackbox *t); enum { B_AmericanDate = 1, B_EuropeanDate }; };
M src/openbox.hhsrc/openbox.hh

@@ -10,7 +10,7 @@ #include <string>

#include <vector> #include "otk/screeninfo.hh" -#include "timer.hh" +#include "otk/timer.hh" namespace ob {

@@ -35,8 +35,8 @@ std::string _menufilepath; // path to the menu file to use/in use

char *_displayreq; // display requested by the user char *_argv0; // argv[0], how the program was called - OBTimerQueueManager _timermanager; // manages timers, so that they fire when - // their time elapses + otk::OBTimerQueueManager _timermanager; // manages timers, so that they fire + // when their time elapses RunState _state; // the state of the window manager

@@ -62,7 +62,7 @@

//! Returns the state of the window manager (starting, exiting, etc). inline RunState state() const { return _state; } - inline OBTimerQueueManager *timerManager() { return &_timermanager; } + inline otk::OBTimerQueueManager *timerManager() { return &_timermanager; } void eventLoop();
M src/screen.ccsrc/screen.cc

@@ -132,7 +132,8 @@

updateAvailableArea(); image_control = - new otk::BImageControl(this, True, blackbox->getColorsPerChannel(), + new otk::BImageControl(Openbox::instance->timerManager(), + this, True, blackbox->getColorsPerChannel(), blackbox->getCacheLife(), blackbox->getCacheMax()); image_control->installRootColormap(); root_colormap_installed = True;

@@ -779,7 +780,7 @@ if (bw->validateClient())

bw->reconfigure(); } - image_control->timeout(); + otk::BImageControl::timeout(image_control); }
M src/timer.ccotk/timer.cc

@@ -4,67 +4,101 @@ #ifdef HAVE_CONFIG_H

# include "../config.h" #endif // HAVE_CONFIG_H -#include "otk/display.hh" -#include "openbox.hh" #include "timer.hh" +#include "display.hh" #include "util.hh" -namespace ob { +namespace otk { + +static timeval normalizeTimeval(const timeval &tm) +{ + timeval ret = tm; + + while (ret.tv_usec < 0) { + if (ret.tv_sec > 0) { + --ret.tv_sec; + ret.tv_usec += 1000000; + } else { + ret.tv_usec = 0; + } + } + + if (ret.tv_usec >= 1000000) { + ret.tv_sec += ret.tv_usec / 1000000; + ret.tv_usec %= 1000000; + } + + if (ret.tv_sec < 0) ret.tv_sec = 0; + + return ret; +} -OBTimer::OBTimer(TimeoutHandler *h) { + +OBTimer::OBTimer(OBTimerQueueManager *m, OBTimeoutHandler h, OBTimeoutData d) +{ + manager = m; handler = h; + data = d; recur = timing = False; } -OBTimer::~OBTimer(void) { +OBTimer::~OBTimer(void) +{ if (timing) stop(); } -void OBTimer::setTimeout(long t) { +void OBTimer::setTimeout(long t) +{ _timeout.tv_sec = t / 1000; _timeout.tv_usec = t % 1000; _timeout.tv_usec *= 1000; } -void OBTimer::setTimeout(const timeval &t) { +void OBTimer::setTimeout(const timeval &t) +{ _timeout.tv_sec = t.tv_sec; _timeout.tv_usec = t.tv_usec; } -void OBTimer::start(void) { +void OBTimer::start(void) +{ gettimeofday(&_start, 0); if (! timing) { timing = True; - Openbox::instance->timerManager()->addTimer(this); + manager->addTimer(this); } } -void OBTimer::stop(void) { +void OBTimer::stop(void) +{ timing = False; - Openbox::instance->timerManager()->removeTimer(this); + manager->removeTimer(this); } -void OBTimer::halt(void) { +void OBTimer::halt(void) +{ timing = False; } -void OBTimer::fireTimeout(void) { +void OBTimer::fireTimeout(void) +{ if (handler) - handler->timeout(); + handler(data); } -timeval OBTimer::timeRemaining(const timeval &tm) const { +timeval OBTimer::timeRemaining(const timeval &tm) const +{ timeval ret = endpoint(); ret.tv_sec -= tm.tv_sec;

@@ -74,7 +108,8 @@ return normalizeTimeval(ret);

} -timeval OBTimer::endpoint(void) const { +timeval OBTimer::endpoint(void) const +{ timeval ret; ret.tv_sec = _start.tv_sec + _timeout.tv_sec;

@@ -84,7 +119,8 @@ return normalizeTimeval(ret);

} -bool OBTimer::shouldFire(const timeval &tm) const { +bool OBTimer::shouldFire(const timeval &tm) const +{ timeval end = endpoint(); return ! ((tm.tv_sec < end.tv_sec) ||
M src/timer.hhotk/timer.hh

@@ -19,19 +19,19 @@ #include <queue>

#include <algorithm> #include <vector> -namespace ob { +namespace otk { // forward declaration class OBTimerQueueManager; -class TimeoutHandler { -public: - virtual void timeout(void) = 0; -}; +typedef void *OBTimeoutData; +typedef void (*OBTimeoutHandler)(OBTimeoutData); class OBTimer { private: - TimeoutHandler *handler; + OBTimerQueueManager *manager; + OBTimeoutHandler handler; + OBTimeoutData data; bool timing, recur; timeval _start, _timeout;

@@ -40,29 +40,29 @@ OBTimer(const OBTimer&);

OBTimer& operator=(const OBTimer&); public: - OBTimer(TimeoutHandler *h); - virtual ~OBTimer(void); + OBTimer(OBTimerQueueManager *m, OBTimeoutHandler h, OBTimeoutData d); + virtual ~OBTimer(); - void fireTimeout(void); + void fireTimeout(); - inline bool isTiming(void) const { return timing; } - inline bool isRecurring(void) const { return recur; } + inline bool isTiming() const { return timing; } + inline bool isRecurring() const { return recur; } - inline const timeval &getTimeout(void) const { return _timeout; } - inline const timeval &getStartTime(void) const { return _start; } + inline const timeval &getTimeout() const { return _timeout; } + inline const timeval &getStartTime() const { return _start; } timeval timeRemaining(const timeval &tm) const; bool shouldFire(const timeval &tm) const; - timeval endpoint(void) const; + timeval endpoint() const; inline void recurring(bool b) { recur = b; } void setTimeout(long t); void setTimeout(const timeval &t); - void start(void); // manager acquires timer - void stop(void); // manager releases timer - void halt(void); // halts the timer + void start(); // manager acquires timer + void stop(); // manager releases timer + void halt(); // halts the timer bool operator<(const OBTimer& other) const { return shouldFire(other.endpoint()); }

@@ -74,19 +74,19 @@ class _timer_queue: protected std::priority_queue<_Tp, _Sequence, _Compare> {

public: typedef std::priority_queue<_Tp, _Sequence, _Compare> _Base; - _timer_queue(void): _Base() {} - ~_timer_queue(void) {} + _timer_queue(): _Base() {} + ~_timer_queue() {} void release(const _Tp& value) { c.erase(std::remove(c.begin(), c.end(), value), c.end()); // after removing the item we need to make the heap again std::make_heap(c.begin(), c.end(), comp); } - bool empty(void) const { return _Base::empty(); } - size_t size(void) const { return _Base::size(); } + bool empty() const { return _Base::empty(); } + size_t size() const { return _Base::size(); } void push(const _Tp& value) { _Base::push(value); } - void pop(void) { _Base::pop(); } - const _Tp& top(void) const { return _Base::top(); } + void pop() { _Base::pop(); } + const _Tp& top() const { return _Base::top(); } private: // no copying! _timer_queue(const _timer_queue&) {}
M src/util.ccsrc/util.cc

@@ -83,29 +83,6 @@ return ret;

} -timeval normalizeTimeval(const timeval &tm) { - timeval ret = tm; - - while (ret.tv_usec < 0) { - if (ret.tv_sec > 0) { - --ret.tv_sec; - ret.tv_usec += 1000000; - } else { - ret.tv_usec = 0; - } - } - - if (ret.tv_usec >= 1000000) { - ret.tv_sec += ret.tv_usec / 1000000; - ret.tv_usec %= 1000000; - } - - if (ret.tv_sec < 0) ret.tv_sec = 0; - - return ret; -} - - string itostring(unsigned long i) { if (i == 0) return string("0");
M src/util.hhsrc/util.hh

@@ -39,8 +39,6 @@ void bexec(const std::string& command, const std::string& displaystring);

std::string textPropertyToString(Display *display, XTextProperty& text_prop); -timeval normalizeTimeval(const timeval &tm); - std::string itostring(unsigned long i); std::string itostring(long i); inline std::string itostring(unsigned int i)
M src/window.ccsrc/window.cc

@@ -135,7 +135,9 @@ client.old_bw = wattrib.border_width;

lastButtonPressTime = 0; - timer = new OBTimer(this); + timer = new otk::OBTimer(Openbox::instance->timerManager(), + (otk::OBTimeoutHandler)timeout, + this); timer->setTimeout(blackbox->getAutoRaiseDelay()); // get size, aspect, minimum/maximum size and other hints set by the

@@ -3902,8 +3904,9 @@ }

// timer for autoraise -void BlackboxWindow::timeout(void) { - screen->getWorkspace(blackbox_attrib.workspace)->raiseWindow(this); +void BlackboxWindow::timeout(BlackboxWindow *t) { + t->screen->getWorkspace(t->blackbox_attrib.workspace)->raiseWindow(t); + printf("TIMED OUT YA YAY\n"); }
M src/window.hhsrc/window.hh

@@ -12,8 +12,8 @@ }

#include <string> +#include "otk/timer.hh" #include "blackbox.hh" -#include "timer.hh" #include "util.hh" #define MwmHintsFunctions (1l << 0)

@@ -70,7 +70,7 @@ BlackboxWindow *find(BScreen *screen, bool allow_transients = False) const;

}; -class BlackboxWindow : public TimeoutHandler { +class BlackboxWindow { public: enum Function { Func_Resize = (1l << 0), Func_Move = (1l << 1),

@@ -105,7 +105,7 @@ private:

Blackbox *blackbox; BScreen *screen; XAtom *xatom; - OBTimer *timer; + otk::OBTimer *timer; BlackboxAttributes blackbox_attrib; Time lastButtonPressTime; // used for double clicks, when were we clicked

@@ -405,7 +405,7 @@ void clearShape(void);

void shapeEvent(XShapeEvent * /*unused*/); #endif // SHAPE - virtual void timeout(void); + static void timeout(BlackboxWindow *t); }; }