all repos — openbox @ ae093dba2fb97124bb4af3eaf4070b46f07dfd74

openbox fork - make it a bit more like ryudo

make a new autoRaiseDelay value take effect without having to restart
Dana Jansens danakj@orodu.net
commit

ae093dba2fb97124bb4af3eaf4070b46f07dfd74

parent

a4c9553c64fb854aa5fdf79f87d5b4d6a07ca67e

6 files changed, 34 insertions(+), 11 deletions(-)

jump to
M CHANGELOGCHANGELOG

@@ -1,7 +1,12 @@

Changelog for Openbox: 1.3.0: - * fix for loading autoRaiseDelay value. (Ben Jansens) + * make reconfigure reset the timeout values for + windows, the slit, and the toolbar, so that a new + autoRaiseDelay value will take effect without having + to restart. (Ben Jansens) + + * fix for loading the autoRaiseDelay value. (Ben Jansens) 1.2.0: * fix off-by-one window resizing bug. (Ben Jansens)
M src/BaseDisplay.ccsrc/BaseDisplay.cc

@@ -462,10 +462,10 @@ // check for timer timeout

gettimeofday(&now, 0); TimerList::iterator it; - for (it = timerList.begin(); it != timerList.end(); ) { + for (it = timerList.begin(); it != timerList.end(); ++it) { BTimer *timer = *it; - ++it; // the timer may be removed from the list, so move ahead now ASSERT(timer != NULL); + tm.tv_sec = timer->getStartTime().tv_sec + timer->getTimeout().tv_sec; tm.tv_usec = timer->getStartTime().tv_usec +

@@ -478,12 +478,16 @@

timer->fireTimeout(); // restart the current timer so that the start time is updated - if (! timer->doOnce()) + if (! timer->doOnce()) { + // reorder + removeTimer(timer); + addTimer(timer); timer->start(); - else { + } else timer->stop(); -// delete timer; // USE THIS? - } + it = timerList.begin(); // we no longer have any idea if the iterator is + // valid, but what was at the front() is no + // longer. } } }

@@ -531,6 +535,7 @@ }

void BaseDisplay::removeTimer(BTimer *timer) { + ASSERT(timer != (BTimer *) 0); timerList.remove(timer); }
M src/Slit.ccsrc/Slit.cc

@@ -54,7 +54,7 @@ display = screen.getBaseDisplay().getXDisplay();

frame.window = frame.pixmap = None; timer = new BTimer(openbox, *this); - timer->setTimeout(openbox.getAutoRaiseDelay()); + // the time out is set in ::reconfigure() timer->fireOnce(True); slitmenu = new Slitmenu(*this);

@@ -326,6 +326,8 @@ rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);

} void Slit::reconfigure(void) { + timer->setTimeout(openbox.getAutoRaiseDelay()); + frame.area.setSize(0, 0); slitClientList::const_iterator it;
M src/Timer.ccsrc/Timer.cc

@@ -46,6 +46,10 @@ _timeout.tv_sec = t / 1000;

_timeout.tv_usec = t; _timeout.tv_usec -= (_timeout.tv_sec * 1000); _timeout.tv_usec *= 1000; + if (timing) { + display.removeTimer(this); + display.addTimer(this); // reorder the display + } } void BTimer::setTimeout(timeval t) {

@@ -63,9 +67,11 @@ }

} void BTimer::stop(void) { - timing = False; + if (timing) { + timing = False; - display.removeTimer(this); + display.removeTimer(this); + } } void BTimer::fireTimeout(void) {
M src/Toolbar.ccsrc/Toolbar.cc

@@ -80,7 +80,7 @@ clock_timer->start();

hide_handler.toolbar = this; hide_timer = new BTimer(openbox, hide_handler); - hide_timer->setTimeout(openbox.getAutoRaiseDelay()); + // the time out is set in ::reconfigure() hide_timer->fireOnce(True); image_ctrl = screen.getImageControl();

@@ -321,6 +321,8 @@ rname.rdbuf()->freeze(0); rclass.rdbuf()->freeze(0);

} void Toolbar::reconfigure() { + hide_timer->setTimeout(openbox.getAutoRaiseDelay()); + frame.bevel_w = screen.getBevelWidth(); frame.width = screen.size().w() * m_width_percent / 100;
M src/Window.ccsrc/Window.cc

@@ -845,6 +845,9 @@ if (windowmenu) {

windowmenu->move(windowmenu->getX(), frame.y + frame.title_h); windowmenu->reconfigure(); } + + // re-get the timeout delay + timer->setTimeout(openbox.getAutoRaiseDelay()); }