diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Focusable.hh | 24 | ||||
-rw-r--r-- | src/FocusableTheme.hh | 10 | ||||
-rw-r--r-- | src/IconButton.cc | 19 | ||||
-rw-r--r-- | src/IconButton.hh | 4 |
4 files changed, 10 insertions, 47 deletions
diff --git a/src/Focusable.hh b/src/Focusable.hh index cf2169a..679e00b 100644 --- a/src/Focusable.hh +++ b/src/Focusable.hh | |||
@@ -24,7 +24,6 @@ | |||
24 | 24 | ||
25 | #include "FbTk/PixmapWithMask.hh" | 25 | #include "FbTk/PixmapWithMask.hh" |
26 | #include "FbTk/ITypeAheadable.hh" | 26 | #include "FbTk/ITypeAheadable.hh" |
27 | #include "FbTk/Subject.hh" | ||
28 | #include "FbTk/Signal.hh" | 27 | #include "FbTk/Signal.hh" |
29 | #include "FbTk/FbString.hh" | 28 | #include "FbTk/FbString.hh" |
30 | 29 | ||
@@ -41,7 +40,7 @@ public: | |||
41 | m_screen(scr), m_fbwin(fbwin), | 40 | m_screen(scr), m_fbwin(fbwin), |
42 | m_instance_name("fluxbox"), m_class_name("fluxbox"), | 41 | m_instance_name("fluxbox"), m_class_name("fluxbox"), |
43 | m_focused(false), m_attention_state(false), | 42 | m_focused(false), m_attention_state(false), |
44 | m_attentionsig(*this), | 43 | m_attentionsig(), |
45 | m_focussig(), | 44 | m_focussig(), |
46 | m_diesig(), | 45 | m_diesig(), |
47 | m_titlesig() { } | 46 | m_titlesig() { } |
@@ -62,7 +61,7 @@ public: | |||
62 | bool getAttentionState() const { return m_attention_state; } | 61 | bool getAttentionState() const { return m_attention_state; } |
63 | /// @set the attention state | 62 | /// @set the attention state |
64 | virtual void setAttentionState(bool value) { | 63 | virtual void setAttentionState(bool value) { |
65 | m_attention_state = value; attentionSig().notify(); | 64 | m_attention_state = value; attentionSig().emit(*this); |
66 | } | 65 | } |
67 | 66 | ||
68 | /// @return the screen in which this object resides | 67 | /// @return the screen in which this object resides |
@@ -101,19 +100,6 @@ public: | |||
101 | virtual const FbTk::BiDiString &title() const { return m_title; } | 100 | virtual const FbTk::BiDiString &title() const { return m_title; } |
102 | /// @return type ahead string | 101 | /// @return type ahead string |
103 | const std::string &iTypeString() const { return title().logical(); } | 102 | const std::string &iTypeString() const { return title().logical(); } |
104 | /** | ||
105 | * Signaling object to attatch observers to. | ||
106 | */ | ||
107 | class FocusSubject: public FbTk::Subject { | ||
108 | public: | ||
109 | explicit FocusSubject(Focusable &w):m_win(w) { } | ||
110 | /// @return context focusable for this signal | ||
111 | Focusable &win() { return m_win; } | ||
112 | /// @return context focusable for this signal | ||
113 | const Focusable &win() const { return m_win; } | ||
114 | private: | ||
115 | Focusable &m_win; //< the context | ||
116 | }; | ||
117 | 103 | ||
118 | /** | 104 | /** |
119 | @name signals | 105 | @name signals |
@@ -126,8 +112,7 @@ public: | |||
126 | const TitleSignal &titleSig() const { return m_titlesig; } | 112 | const TitleSignal &titleSig() const { return m_titlesig; } |
127 | FbTk::Signal<Focusable&> &focusSig() { return m_focussig; } | 113 | FbTk::Signal<Focusable&> &focusSig() { return m_focussig; } |
128 | FbTk::Signal<Focusable&> &dieSig() { return m_diesig; } | 114 | FbTk::Signal<Focusable&> &dieSig() { return m_diesig; } |
129 | FbTk::Subject &attentionSig() { return m_attentionsig; } | 115 | FbTk::Signal<Focusable&> &attentionSig() { return m_attentionsig; } |
130 | const FbTk::Subject &attentionSig() const { return m_attentionsig; } | ||
131 | /** @} */ // end group signals | 116 | /** @} */ // end group signals |
132 | 117 | ||
133 | /// Notify any listeners that the focus changed for this window. | 118 | /// Notify any listeners that the focus changed for this window. |
@@ -147,10 +132,9 @@ protected: | |||
147 | bool m_attention_state; //< state of icon button while demanding attention | 132 | bool m_attention_state; //< state of icon button while demanding attention |
148 | FbTk::PixmapWithMask m_icon; //< icon pixmap with mask | 133 | FbTk::PixmapWithMask m_icon; //< icon pixmap with mask |
149 | 134 | ||
150 | // state and hint signals | ||
151 | FocusSubject m_attentionsig; | ||
152 | 135 | ||
153 | private: | 136 | private: |
137 | FbTk::Signal<Focusable&> m_attentionsig; | ||
154 | FbTk::Signal<Focusable&> m_focussig; | 138 | FbTk::Signal<Focusable&> m_focussig; |
155 | FbTk::Signal<Focusable&> m_diesig; | 139 | FbTk::Signal<Focusable&> m_diesig; |
156 | TitleSignal m_titlesig; | 140 | TitleSignal m_titlesig; |
diff --git a/src/FocusableTheme.hh b/src/FocusableTheme.hh index d379c15..df73881 100644 --- a/src/FocusableTheme.hh +++ b/src/FocusableTheme.hh | |||
@@ -23,13 +23,11 @@ | |||
23 | #define FOCUSABLETHEME_HH | 23 | #define FOCUSABLETHEME_HH |
24 | 24 | ||
25 | #include "Focusable.hh" | 25 | #include "Focusable.hh" |
26 | #include "FbTk/Observer.hh" | ||
27 | #include "FbTk/Theme.hh" | 26 | #include "FbTk/Theme.hh" |
28 | #include "FbTk/RelaySignal.hh" | 27 | #include "FbTk/RelaySignal.hh" |
29 | 28 | ||
30 | template <typename BaseTheme> | 29 | template <typename BaseTheme> |
31 | class FocusableTheme: public FbTk::ThemeProxy<BaseTheme>, | 30 | class FocusableTheme: public FbTk::ThemeProxy<BaseTheme> { |
32 | private FbTk::Observer { | ||
33 | public: | 31 | public: |
34 | FocusableTheme(Focusable &win, FbTk::ThemeProxy<BaseTheme> &focused, | 32 | FocusableTheme(Focusable &win, FbTk::ThemeProxy<BaseTheme> &focused, |
35 | FbTk::ThemeProxy<BaseTheme> &unfocused): | 33 | FbTk::ThemeProxy<BaseTheme> &unfocused): |
@@ -37,8 +35,8 @@ public: | |||
37 | 35 | ||
38 | m_signals.join(m_win.focusSig(), | 36 | m_signals.join(m_win.focusSig(), |
39 | FbTk::MemFunIgnoreArgs(m_reconfig_sig, &FbTk::Signal<>::emit)); | 37 | FbTk::MemFunIgnoreArgs(m_reconfig_sig, &FbTk::Signal<>::emit)); |
40 | 38 | m_signals.join(m_win.attentionSig(), | |
41 | m_win.attentionSig().attach(this); | 39 | FbTk::MemFunIgnoreArgs(m_reconfig_sig, &FbTk::Signal<>::emit)); |
42 | m_signals.join(m_focused_theme.reconfigSig(), | 40 | m_signals.join(m_focused_theme.reconfigSig(), |
43 | FbTk::MemFun(m_reconfig_sig, &FbTk::Signal<>::emit)); | 41 | FbTk::MemFun(m_reconfig_sig, &FbTk::Signal<>::emit)); |
44 | m_signals.join(m_unfocused_theme.reconfigSig(), | 42 | m_signals.join(m_unfocused_theme.reconfigSig(), |
@@ -66,8 +64,6 @@ public: | |||
66 | } | 64 | } |
67 | 65 | ||
68 | private: | 66 | private: |
69 | void update(FbTk::Subject *subj) { m_reconfig_sig.emit(); } | ||
70 | |||
71 | Focusable &m_win; | 67 | Focusable &m_win; |
72 | FbTk::ThemeProxy<BaseTheme> &m_focused_theme, &m_unfocused_theme; | 68 | FbTk::ThemeProxy<BaseTheme> &m_focused_theme, &m_unfocused_theme; |
73 | FbTk::Signal<> m_reconfig_sig; | 69 | FbTk::Signal<> m_reconfig_sig; |
diff --git a/src/IconButton.cc b/src/IconButton.cc index b08e51a..7c70a63 100644 --- a/src/IconButton.cc +++ b/src/IconButton.cc | |||
@@ -61,7 +61,8 @@ IconButton::IconButton(const FbTk::FbWindow &parent, | |||
61 | m_signals.join(m_win.focusSig(), | 61 | m_signals.join(m_win.focusSig(), |
62 | MemFunIgnoreArgs(*this, &IconButton::reconfigAndClear)); | 62 | MemFunIgnoreArgs(*this, &IconButton::reconfigAndClear)); |
63 | 63 | ||
64 | m_win.attentionSig().attach(this); | 64 | m_signals.join(m_win.attentionSig(), |
65 | MemFunIgnoreArgs(*this, &IconButton::reconfigAndClear)); | ||
65 | 66 | ||
66 | FbTk::EventManager::instance()->add(*this, m_icon_window); | 67 | FbTk::EventManager::instance()->add(*this, m_icon_window); |
67 | 68 | ||
@@ -250,22 +251,6 @@ void IconButton::clientTitleChanged() { | |||
250 | showTooltip(); | 251 | showTooltip(); |
251 | } | 252 | } |
252 | 253 | ||
253 | void IconButton::update(FbTk::Subject *subj) { | ||
254 | // if the window's focus state changed, we need to update the background | ||
255 | if (subj == &m_win.attentionSig()) { | ||
256 | reconfigAndClear(); | ||
257 | return; | ||
258 | } | ||
259 | |||
260 | // we got signal that either title or | ||
261 | // icon pixmap was updated, | ||
262 | // so we refresh everything | ||
263 | // if the title was changed AND the mouse is over *this, | ||
264 | // update the tooltip | ||
265 | |||
266 | refreshEverything(subj != 0); | ||
267 | } | ||
268 | |||
269 | void IconButton::setupWindow() { | 254 | void IconButton::setupWindow() { |
270 | m_icon_window.clear(); | 255 | m_icon_window.clear(); |
271 | setText(m_win.title()); | 256 | setText(m_win.title()); |
diff --git a/src/IconButton.hh b/src/IconButton.hh index d1eb17e..36781d1 100644 --- a/src/IconButton.hh +++ b/src/IconButton.hh | |||
@@ -27,7 +27,6 @@ | |||
27 | 27 | ||
28 | #include "FbTk/CachedPixmap.hh" | 28 | #include "FbTk/CachedPixmap.hh" |
29 | #include "FbTk/FbPixmap.hh" | 29 | #include "FbTk/FbPixmap.hh" |
30 | #include "FbTk/Observer.hh" | ||
31 | #include "FbTk/TextButton.hh" | 30 | #include "FbTk/TextButton.hh" |
32 | #include "FbTk/Signal.hh" | 31 | #include "FbTk/Signal.hh" |
33 | 32 | ||
@@ -37,7 +36,7 @@ namespace FbTk { | |||
37 | template <class T> class ThemeProxy; | 36 | template <class T> class ThemeProxy; |
38 | } | 37 | } |
39 | 38 | ||
40 | class IconButton: public FbTk::TextButton, public FbTk::Observer { | 39 | class IconButton: public FbTk::TextButton { |
41 | public: | 40 | public: |
42 | IconButton(const FbTk::FbWindow &parent, | 41 | IconButton(const FbTk::FbWindow &parent, |
43 | FbTk::ThemeProxy<IconbarTheme> &focused_theme, | 42 | FbTk::ThemeProxy<IconbarTheme> &focused_theme, |
@@ -58,7 +57,6 @@ public: | |||
58 | 57 | ||
59 | void reconfigTheme(); | 58 | void reconfigTheme(); |
60 | 59 | ||
61 | void update(FbTk::Subject *subj); | ||
62 | void setPixmap(bool use); | 60 | void setPixmap(bool use); |
63 | 61 | ||
64 | Focusable &win() { return m_win; } | 62 | Focusable &win() { return m_win; } |