all repos — fluxbox @ 93a91904e631c0ae95242c6de95bf8a1b3d90c20

custom fork of the fluxbox windowmanager

compress resize signals

typically buttons will call for this quite some, eg. when switching
workspace or (now) when altering the focused window. This compresses
various changes happening at the same time and re-layout the toolbar
only once for them
Thomas Lübking thomas.luebking@gmail.com
commit

93a91904e631c0ae95242c6de95bf8a1b3d90c20

parent

7d30d0007d4aed25be7c6b636a21a84855cd349d

2 files changed, 17 insertions(+), 3 deletions(-)

jump to
M src/IconbarTool.ccsrc/IconbarTool.cc

@@ -287,6 +287,12 @@ m_tracker.join(unfocused_theme.reconfigSig(),

FbTk::MemFun(*this, &IconbarTool::themeReconfigured)); m_tracker.join(screen.reconfigureSig(), FbTk::MemFunIgnoreArgs(*this, &IconbarTool::updateIconifiedPattern)); + + m_resizeSig_timer.setTimeout(100 * FbTk::FbTime::IN_MILLISECONDS); + m_resizeSig_timer.fireOnce(true); + FbTk::RefCount<FbTk::Command<void> > ers(new FbTk::SimpleCommand<IconbarTool>(*this, &IconbarTool::emitResizeSig)); + m_resizeSig_timer.setCommand(ers); + themeReconfigured(); }

@@ -360,7 +366,7 @@ ));

} reset(); - resizeSig().emit(); + m_resizeSig_timer.start(); // unlock graphics update m_icon_container.setUpdateLock(false);

@@ -372,6 +378,10 @@

m_menu.reconfigure(); } +void IconbarTool::emitResizeSig() { + resizeSig().emit(); +} + unsigned int IconbarTool::width() const { return m_icon_container.width(); }

@@ -427,7 +437,7 @@ case ALIGN:

break; } - resizeSig().emit(); + m_resizeSig_timer.start(); const unsigned int maxsize = (m_icon_container.orientation() & 1) ? height() : width(); m_icon_container.setMaxTotalSize(maxsize); m_icon_container.setMaxSizePerClient(maxsize/std::max(1, m_icon_container.size()));

@@ -482,7 +492,7 @@ pos++;

} m_icon_container.insertItem(button, pos); - m_tracker.join(button->titleChanged(), FbTk::MemFun(resizeSig(), &FbTk::Signal<>::emit)); + m_tracker.join(button->titleChanged(), FbTk::MemFun(m_resizeSig_timer, &FbTk::Timer::start)); } void IconbarTool::reset() {
M src/IconbarTool.hhsrc/IconbarTool.hh

@@ -29,6 +29,7 @@

#include "FbTk/Container.hh" #include "FbTk/CachedPixmap.hh" #include "FbTk/Resource.hh" +#include "FbTk/Timer.hh" #include <map>

@@ -103,6 +104,9 @@

void updateIconifiedPattern(); void themeReconfigured(); + + FbTk::Timer m_resizeSig_timer; + void emitResizeSig(); BScreen &m_screen; FbTk::Container m_icon_container;