diff options
author | Thomas Lübking <thomas.luebking@gmail.com> | 2016-08-03 21:55:26 (GMT) |
---|---|---|
committer | Thomas Lübking <thomas.luebking@gmail.com> | 2016-08-06 15:09:29 (GMT) |
commit | 59d9b0703ba8efb24893528f2eb9c84aaa8f5f83 (patch) | |
tree | 30fd4de07fa1fdaaac4420c218e7fae3ff3a0382 | |
parent | a8b0b3632b4ed6e6fb5f8aa26a6c0ef151a30144 (diff) | |
download | fluxbox-59d9b0703ba8efb24893528f2eb9c84aaa8f5f83.zip fluxbox-59d9b0703ba8efb24893528f2eb9c84aaa8f5f83.tar.bz2 |
delay title updates
Notably shells will cause brief interim titles when calling
short-lived commands (try "ls"...)
This covers such by waiting 100ms after every title update before
reacting (the title will have returned in the mentioned cases, the UI
remains steady)
-rw-r--r-- | src/IconButton.cc | 6 | ||||
-rw-r--r-- | src/IconButton.hh | 2 | ||||
-rw-r--r-- | src/WinClient.cc | 11 | ||||
-rw-r--r-- | src/WinClient.hh | 3 |
4 files changed, 20 insertions, 2 deletions
diff --git a/src/IconButton.cc b/src/IconButton.cc index d2bf4d3..4997365 100644 --- a/src/IconButton.cc +++ b/src/IconButton.cc | |||
@@ -51,8 +51,12 @@ IconButton::IconButton(const FbTk::FbWindow &parent, | |||
51 | m_theme(win, focused_theme, unfocused_theme), | 51 | m_theme(win, focused_theme, unfocused_theme), |
52 | m_pm(win.screen().imageControl()) { | 52 | m_pm(win.screen().imageControl()) { |
53 | 53 | ||
54 | m_title_update_timer.setTimeout(100 * FbTk::FbTime::IN_MILLISECONDS); | ||
55 | m_title_update_timer.fireOnce(true); | ||
56 | FbTk::RefCount<FbTk::Command<void> > ets(new FbTk::SimpleCommand<IconButton>(*this, &IconButton::clientTitleChanged)); | ||
57 | m_title_update_timer.setCommand(ets); | ||
54 | m_signals.join(m_win.titleSig(), | 58 | m_signals.join(m_win.titleSig(), |
55 | MemFunIgnoreArgs(*this, &IconButton::clientTitleChanged)); | 59 | MemFunIgnoreArgs(m_title_update_timer, &FbTk::Timer::start)); |
56 | 60 | ||
57 | m_signals.join(m_win.focusSig(), | 61 | m_signals.join(m_win.focusSig(), |
58 | MemFunIgnoreArgs(*this, &IconButton::reconfigAndClear)); | 62 | MemFunIgnoreArgs(*this, &IconButton::reconfigAndClear)); |
diff --git a/src/IconButton.hh b/src/IconButton.hh index 957374e..876cfe2 100644 --- a/src/IconButton.hh +++ b/src/IconButton.hh | |||
@@ -28,6 +28,7 @@ | |||
28 | #include "FbTk/CachedPixmap.hh" | 28 | #include "FbTk/CachedPixmap.hh" |
29 | #include "FbTk/FbPixmap.hh" | 29 | #include "FbTk/FbPixmap.hh" |
30 | #include "FbTk/TextButton.hh" | 30 | #include "FbTk/TextButton.hh" |
31 | #include "FbTk/Timer.hh" | ||
31 | #include "FbTk/Signal.hh" | 32 | #include "FbTk/Signal.hh" |
32 | 33 | ||
33 | class IconbarTheme; | 34 | class IconbarTheme; |
@@ -92,6 +93,7 @@ private: | |||
92 | FbTk::CachedPixmap m_pm; | 93 | FbTk::CachedPixmap m_pm; |
93 | FbTk::SignalTracker m_signals; | 94 | FbTk::SignalTracker m_signals; |
94 | FbTk::Signal<> m_title_changed; | 95 | FbTk::Signal<> m_title_changed; |
96 | FbTk::Timer m_title_update_timer; | ||
95 | }; | 97 | }; |
96 | 98 | ||
97 | #endif // ICONBUTTON_HH | 99 | #endif // ICONBUTTON_HH |
diff --git a/src/WinClient.cc b/src/WinClient.cc index b73f27c..22ee766 100644 --- a/src/WinClient.cc +++ b/src/WinClient.cc | |||
@@ -119,6 +119,11 @@ WinClient::WinClient(Window win, BScreen &screen, FluxboxWindow *fbwin): | |||
119 | s_transient_wait.erase(win); | 119 | s_transient_wait.erase(win); |
120 | } | 120 | } |
121 | 121 | ||
122 | m_title_update_timer.setTimeout(100 * FbTk::FbTime::IN_MILLISECONDS); | ||
123 | m_title_update_timer.fireOnce(true); | ||
124 | FbTk::RefCount<FbTk::Command<void> > ets(new FbTk::SimpleCommand<WinClient>(*this, &WinClient::emitTitleSig)); | ||
125 | m_title_update_timer.setCommand(ets); | ||
126 | |||
122 | // also check if this window is a transient | 127 | // also check if this window is a transient |
123 | // this needs to be done before creating an fbwindow, so this doesn't get | 128 | // this needs to be done before creating an fbwindow, so this doesn't get |
124 | // tabbed using the apps file | 129 | // tabbed using the apps file |
@@ -314,13 +319,17 @@ void WinClient::updateTitle() { | |||
314 | return; | 319 | return; |
315 | 320 | ||
316 | m_title.setLogical(FbTk::FbString(Xutil::getWMName(window()), 0, 512)); | 321 | m_title.setLogical(FbTk::FbString(Xutil::getWMName(window()), 0, 512)); |
322 | m_title_update_timer.start(); | ||
323 | } | ||
324 | |||
325 | void WinClient::emitTitleSig() { | ||
317 | titleSig().emit(m_title.logical(), *this); | 326 | titleSig().emit(m_title.logical(), *this); |
318 | } | 327 | } |
319 | 328 | ||
320 | void WinClient::setTitle(const FbTk::FbString &title) { | 329 | void WinClient::setTitle(const FbTk::FbString &title) { |
321 | m_title.setLogical(title); | 330 | m_title.setLogical(title); |
322 | m_title_override = true; | 331 | m_title_override = true; |
323 | titleSig().emit(m_title.logical(), *this); | 332 | m_title_update_timer.start(); |
324 | } | 333 | } |
325 | 334 | ||
326 | void WinClient::setIcon(const FbTk::PixmapWithMask& pm) { | 335 | void WinClient::setIcon(const FbTk::PixmapWithMask& pm) { |
diff --git a/src/WinClient.hh b/src/WinClient.hh index 5a29a5e..c46bddf 100644 --- a/src/WinClient.hh +++ b/src/WinClient.hh | |||
@@ -149,6 +149,9 @@ private: | |||
149 | // some transient (or us) is no longer modal | 149 | // some transient (or us) is no longer modal |
150 | void removeModal() { --m_modal_count; } | 150 | void removeModal() { --m_modal_count; } |
151 | 151 | ||
152 | FbTk::Timer m_title_update_timer; | ||
153 | void emitTitleSig(); | ||
154 | |||
152 | // number of transients which we are modal for | 155 | // number of transients which we are modal for |
153 | int m_modal_count; | 156 | int m_modal_count; |
154 | bool m_modal; | 157 | bool m_modal; |