diff options
author | rathnor <rathnor> | 2003-06-26 12:22:43 (GMT) |
---|---|---|
committer | rathnor <rathnor> | 2003-06-26 12:22:43 (GMT) |
commit | 4993e2f36331299aba6a42df2896e49d4c98b111 (patch) | |
tree | e130579b68dbf4244913e676060d0f6fd624140b | |
parent | a1eb047c00e96295e482564311db9075d05ce034 (diff) | |
download | fluxbox-4993e2f36331299aba6a42df2896e49d4c98b111.zip fluxbox-4993e2f36331299aba6a42df2896e49d4c98b111.tar.bz2 |
speedups for having lots of stuck windows
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | src/Gnome.cc | 7 | ||||
-rw-r--r-- | src/IconBar.cc | 46 | ||||
-rw-r--r-- | src/IconBar.hh | 9 | ||||
-rw-r--r-- | src/Toolbar.cc | 16 | ||||
-rw-r--r-- | src/Toolbar.hh | 9 | ||||
-rw-r--r-- | src/ToolbarHandler.cc | 23 | ||||
-rw-r--r-- | src/Window.cc | 12 |
8 files changed, 95 insertions, 30 deletions
@@ -1,5 +1,8 @@ | |||
1 | (Format: Year/Month/Day) | 1 | (Format: Year/Month/Day) |
2 | Changes for 0.9.4: | 2 | Changes for 0.9.4: |
3 | *03/06/26: | ||
4 | * Speedups for having many (particularly stuck) windows (Simon) | ||
5 | Toolbar.hh/cc IconBar.hh/cc ToolbarHandler.cc Gnome.cc Window.cc | ||
3 | *03/06/25: | 6 | *03/06/25: |
4 | * Applied toggle max vertical/horizontal patch (Thanks MrChuoi mrchuoi<[aT]>yahoo.com) | 7 | * Applied toggle max vertical/horizontal patch (Thanks MrChuoi mrchuoi<[aT]>yahoo.com) |
5 | Window.hh/cc | 8 | Window.hh/cc |
diff --git a/src/Gnome.cc b/src/Gnome.cc index 2b12b7f..240c691 100644 --- a/src/Gnome.cc +++ b/src/Gnome.cc | |||
@@ -19,7 +19,7 @@ | |||
19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. | 20 | // DEALINGS IN THE SOFTWARE. |
21 | 21 | ||
22 | // $Id: Gnome.cc,v 1.27 2003/06/23 14:16:04 rathnor Exp $ | 22 | // $Id: Gnome.cc,v 1.28 2003/06/26 12:22:42 rathnor Exp $ |
23 | 23 | ||
24 | #include "Gnome.hh" | 24 | #include "Gnome.hh" |
25 | 25 | ||
@@ -218,7 +218,10 @@ void Gnome::updateWorkspaceCount(BScreen &screen) { | |||
218 | } | 218 | } |
219 | 219 | ||
220 | void Gnome::updateWorkspace(FluxboxWindow &win) { | 220 | void Gnome::updateWorkspace(FluxboxWindow &win) { |
221 | int val = win.workspaceNumber(); | 221 | int val = win.workspaceNumber(); |
222 | if (win.isStuck()) { | ||
223 | val = -1; | ||
224 | } | ||
222 | #ifdef DEBUG | 225 | #ifdef DEBUG |
223 | cerr<<__FILE__<<"("<<__LINE__<<"): setting workspace("<<val<< | 226 | cerr<<__FILE__<<"("<<__LINE__<<"): setting workspace("<<val<< |
224 | ") for window("<<&win<<")"<<endl; | 227 | ") for window("<<&win<<")"<<endl; |
diff --git a/src/IconBar.cc b/src/IconBar.cc index e24ba32..fa7478f 100644 --- a/src/IconBar.cc +++ b/src/IconBar.cc | |||
@@ -19,7 +19,7 @@ | |||
19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. | 20 | // DEALINGS IN THE SOFTWARE. |
21 | 21 | ||
22 | // $Id: IconBar.cc,v 1.37 2003/06/13 05:02:09 fluxgen Exp $ | 22 | // $Id: IconBar.cc,v 1.38 2003/06/26 12:22:42 rathnor Exp $ |
23 | 23 | ||
24 | #include "IconBar.hh" | 24 | #include "IconBar.hh" |
25 | 25 | ||
@@ -84,7 +84,8 @@ IconBar::IconBar(BScreen &scrn, Window parent, FbTk::Font &font): | |||
84 | m_parent(parent), | 84 | m_parent(parent), |
85 | m_focus_pm(None), | 85 | m_focus_pm(None), |
86 | m_vertical(false), | 86 | m_vertical(false), |
87 | m_font(font) | 87 | m_font(font), |
88 | allow_updates(0) | ||
88 | { | 89 | { |
89 | 90 | ||
90 | } | 91 | } |
@@ -103,9 +104,10 @@ Window IconBar::addIcon(FluxboxWindow *fluxboxwin) { | |||
103 | decorate(iconwin); | 104 | decorate(iconwin); |
104 | //add window object to list | 105 | //add window object to list |
105 | m_iconlist.push_back(new IconBarObj(fluxboxwin, iconwin)); | 106 | m_iconlist.push_back(new IconBarObj(fluxboxwin, iconwin)); |
107 | |||
106 | //reposition all icons to fit windowbar | 108 | //reposition all icons to fit windowbar |
107 | repositionIcons(); | 109 | repositionIcons(); |
108 | 110 | ||
109 | XMapSubwindows(m_display, iconwin); | 111 | XMapSubwindows(m_display, iconwin); |
110 | XMapWindow(m_display, iconwin); | 112 | XMapWindow(m_display, iconwin); |
111 | 113 | ||
@@ -139,16 +141,25 @@ Window IconBar::delIcon(FluxboxWindow *fluxboxwin) { | |||
139 | * Removes all icons from list | 141 | * Removes all icons from list |
140 | * Return X Windows of the removed iconobjs | 142 | * Return X Windows of the removed iconobjs |
141 | */ | 143 | */ |
142 | IconBar::WindowList *IconBar::delAllIcons() { | 144 | IconBar::WindowList *IconBar::delAllIcons(bool ignore_stuck) { |
143 | Window retwin = None; | 145 | Window retwin = None; |
144 | WindowList *ret = new WindowList(); | 146 | WindowList *ret = new WindowList(); |
145 | while (!m_iconlist.empty()) { | 147 | IconList::iterator it = m_iconlist.begin(); |
146 | IconBarObj *obj = m_iconlist.back(); | 148 | IconList::iterator tmp = m_iconlist.end(); |
147 | m_iconlist.pop_back(); | 149 | IconList::iterator it_end = m_iconlist.end(); |
148 | retwin = obj->getIconWin(); | 150 | while (it != it_end) { |
149 | ret->push_back(retwin); | 151 | IconBarObj *obj = *it; |
150 | delete obj; | 152 | if (!ignore_stuck || !obj->getFluxboxWin()->isStuck()) { |
151 | XDestroyWindow(m_display, retwin); | 153 | retwin = obj->getIconWin(); |
154 | ret->push_back(retwin); | ||
155 | tmp = it; | ||
156 | ++it; | ||
157 | m_iconlist.erase(tmp); | ||
158 | delete obj; | ||
159 | XDestroyWindow(m_display, retwin); | ||
160 | } else { | ||
161 | ++it; | ||
162 | } | ||
152 | } | 163 | } |
153 | repositionIcons(); | 164 | repositionIcons(); |
154 | return ret; | 165 | return ret; |
@@ -243,11 +254,22 @@ void IconBar::exposeEvent(XExposeEvent *ee) { | |||
243 | } | 254 | } |
244 | } | 255 | } |
245 | 256 | ||
257 | void IconBar::enableUpdates() { | ||
258 | --allow_updates; | ||
259 | if (allow_updates <= 0) | ||
260 | repositionIcons(); | ||
261 | |||
262 | } | ||
263 | |||
264 | void IconBar::disableUpdates() { | ||
265 | ++allow_updates; | ||
266 | } | ||
267 | |||
246 | /** | 268 | /** |
247 | Calculates and moves/resizes the icons | 269 | Calculates and moves/resizes the icons |
248 | */ | 270 | */ |
249 | void IconBar::repositionIcons() { | 271 | void IconBar::repositionIcons() { |
250 | if (m_iconlist.size() == 0) | 272 | if (m_iconlist.size() == 0 || allow_updates > 0) |
251 | return; | 273 | return; |
252 | 274 | ||
253 | Window root; | 275 | Window root; |
diff --git a/src/IconBar.hh b/src/IconBar.hh index ca2bd6d..7f58a12 100644 --- a/src/IconBar.hh +++ b/src/IconBar.hh | |||
@@ -19,7 +19,7 @@ | |||
19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. | 20 | // DEALINGS IN THE SOFTWARE. |
21 | 21 | ||
22 | // $Id: IconBar.hh,v 1.14 2003/04/15 12:06:11 fluxgen Exp $ | 22 | // $Id: IconBar.hh,v 1.15 2003/06/26 12:22:42 rathnor Exp $ |
23 | 23 | ||
24 | #ifndef ICONBAR_HH | 24 | #ifndef ICONBAR_HH |
25 | #define ICONBAR_HH | 25 | #define ICONBAR_HH |
@@ -64,13 +64,16 @@ public: | |||
64 | void reconfigure(); | 64 | void reconfigure(); |
65 | Window addIcon(FluxboxWindow *fluxboxwin); | 65 | Window addIcon(FluxboxWindow *fluxboxwin); |
66 | Window delIcon(FluxboxWindow *fluxboxwin); | 66 | Window delIcon(FluxboxWindow *fluxboxwin); |
67 | WindowList *delAllIcons(); | 67 | WindowList *delAllIcons(bool ignore_stuck = false); |
68 | void buttonPressEvent(XButtonEvent *be); | 68 | void buttonPressEvent(XButtonEvent *be); |
69 | FluxboxWindow *findWindow(Window w); | 69 | FluxboxWindow *findWindow(Window w); |
70 | IconBarObj *findIcon(FluxboxWindow * const fluxboxwin); | 70 | IconBarObj *findIcon(FluxboxWindow * const fluxboxwin); |
71 | const IconBarObj *findIcon(const FluxboxWindow * const fluxboxwin) const; | 71 | const IconBarObj *findIcon(const FluxboxWindow * const fluxboxwin) const; |
72 | void exposeEvent(XExposeEvent *ee); | 72 | void exposeEvent(XExposeEvent *ee); |
73 | 73 | ||
74 | void enableUpdates(); | ||
75 | void disableUpdates(); | ||
76 | |||
74 | void draw(const IconBarObj * const obj, int width) const; | 77 | void draw(const IconBarObj * const obj, int width) const; |
75 | void setVertical(bool value) { m_vertical = value; } | 78 | void setVertical(bool value) { m_vertical = value; } |
76 | BScreen &screen() { return m_screen; } | 79 | BScreen &screen() { return m_screen; } |
@@ -90,6 +93,8 @@ private: | |||
90 | unsigned long m_focus_pixel; | 93 | unsigned long m_focus_pixel; |
91 | bool m_vertical; | 94 | bool m_vertical; |
92 | FbTk::Font &m_font; | 95 | FbTk::Font &m_font; |
96 | |||
97 | int allow_updates; | ||
93 | }; | 98 | }; |
94 | 99 | ||
95 | #endif // ICONBAR_HH | 100 | #endif // ICONBAR_HH |
diff --git a/src/Toolbar.cc b/src/Toolbar.cc index a31fbaf..f97f2d2 100644 --- a/src/Toolbar.cc +++ b/src/Toolbar.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Toolbar.cc,v 1.95 2003/06/25 12:33:28 fluxgen Exp $ | 25 | // $Id: Toolbar.cc,v 1.96 2003/06/26 12:22:42 rathnor Exp $ |
26 | 26 | ||
27 | #include "Toolbar.hh" | 27 | #include "Toolbar.hh" |
28 | 28 | ||
@@ -404,11 +404,11 @@ void Toolbar::delIcon(FluxboxWindow *w) { | |||
404 | FbTk::EventManager::instance()->remove(m_iconbar->delIcon(w)); | 404 | FbTk::EventManager::instance()->remove(m_iconbar->delIcon(w)); |
405 | } | 405 | } |
406 | 406 | ||
407 | void Toolbar::delAllIcons() { | 407 | void Toolbar::delAllIcons(bool ignore_stuck) { |
408 | if (m_iconbar.get() == 0) | 408 | if (m_iconbar.get() == 0) |
409 | return; | 409 | return; |
410 | 410 | ||
411 | IconBar::WindowList *deleted = m_iconbar->delAllIcons(); | 411 | IconBar::WindowList *deleted = m_iconbar->delAllIcons(ignore_stuck); |
412 | IconBar::WindowList::iterator it = deleted->begin(); | 412 | IconBar::WindowList::iterator it = deleted->begin(); |
413 | IconBar::WindowList::iterator it_end = deleted->end(); | 413 | IconBar::WindowList::iterator it_end = deleted->end(); |
414 | for (; it != it_end; ++it) { | 414 | for (; it != it_end; ++it) { |
@@ -421,6 +421,16 @@ bool Toolbar::containsIcon(const FluxboxWindow &win) const { | |||
421 | return (m_iconbar->findIcon(&win) != 0); | 421 | return (m_iconbar->findIcon(&win) != 0); |
422 | } | 422 | } |
423 | 423 | ||
424 | void Toolbar::enableUpdates() { | ||
425 | if (m_iconbar.get() != 0) | ||
426 | m_iconbar->enableUpdates(); | ||
427 | } | ||
428 | |||
429 | void Toolbar::disableUpdates() { | ||
430 | if (m_iconbar.get() != 0) | ||
431 | m_iconbar->disableUpdates(); | ||
432 | } | ||
433 | |||
424 | void Toolbar::enableIconBar() { | 434 | void Toolbar::enableIconBar() { |
425 | if (m_iconbar.get() != 0) | 435 | if (m_iconbar.get() != 0) |
426 | return; // already on | 436 | return; // already on |
diff --git a/src/Toolbar.hh b/src/Toolbar.hh index 87cd223..7a62c8d 100644 --- a/src/Toolbar.hh +++ b/src/Toolbar.hh | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Toolbar.hh,v 1.35 2003/06/23 13:16:50 fluxgen Exp $ | 25 | // $Id: Toolbar.hh,v 1.36 2003/06/26 12:22:42 rathnor Exp $ |
26 | 26 | ||
27 | #ifndef TOOLBAR_HH | 27 | #ifndef TOOLBAR_HH |
28 | #define TOOLBAR_HH | 28 | #define TOOLBAR_HH |
@@ -71,13 +71,17 @@ public: | |||
71 | void addIcon(FluxboxWindow *w); | 71 | void addIcon(FluxboxWindow *w); |
72 | /// remove icon from iconbar | 72 | /// remove icon from iconbar |
73 | void delIcon(FluxboxWindow *w); | 73 | void delIcon(FluxboxWindow *w); |
74 | bool containsIcon(const FluxboxWindow &win) const; | ||
74 | /// remove all icons | 75 | /// remove all icons |
75 | void delAllIcons(); | 76 | void delAllIcons(bool ignore_stuck = false); |
76 | void enableIconBar(); | 77 | void enableIconBar(); |
77 | void disableIconBar(); | 78 | void disableIconBar(); |
78 | void raise(); | 79 | void raise(); |
79 | void lower(); | 80 | void lower(); |
80 | 81 | ||
82 | void enableUpdates(); | ||
83 | void disableUpdates(); | ||
84 | |||
81 | inline const FbTk::Menu &menu() const { return m_toolbarmenu; } | 85 | inline const FbTk::Menu &menu() const { return m_toolbarmenu; } |
82 | inline FbTk::Menu &menu() { return m_toolbarmenu; } | 86 | inline FbTk::Menu &menu() { return m_toolbarmenu; } |
83 | inline FbTk::Menu &placementMenu() { return m_placementmenu; } | 87 | inline FbTk::Menu &placementMenu() { return m_placementmenu; } |
@@ -111,7 +115,6 @@ public: | |||
111 | inline const ToolbarTheme &theme() const { return m_theme; } | 115 | inline const ToolbarTheme &theme() const { return m_theme; } |
112 | inline ToolbarTheme &theme() { return m_theme; } | 116 | inline ToolbarTheme &theme() { return m_theme; } |
113 | bool isVertical() const; | 117 | bool isVertical() const; |
114 | bool containsIcon(const FluxboxWindow &win) const; | ||
115 | 118 | ||
116 | /** | 119 | /** |
117 | @name eventhandlers | 120 | @name eventhandlers |
diff --git a/src/ToolbarHandler.cc b/src/ToolbarHandler.cc index d7cf8f0..317890a 100644 --- a/src/ToolbarHandler.cc +++ b/src/ToolbarHandler.cc | |||
@@ -20,7 +20,7 @@ | |||
20 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 20 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
21 | // DEALINGS IN THE SOFTWARE. | 21 | // DEALINGS IN THE SOFTWARE. |
22 | 22 | ||
23 | // $Id: ToolbarHandler.cc,v 1.17 2003/06/24 16:27:18 fluxgen Exp $ | 23 | // $Id: ToolbarHandler.cc,v 1.18 2003/06/26 12:22:42 rathnor Exp $ |
24 | 24 | ||
25 | /** | 25 | /** |
26 | * The ToolbarHandler class acts as a rough interface to the toolbar. | 26 | * The ToolbarHandler class acts as a rough interface to the toolbar. |
@@ -199,6 +199,10 @@ void ToolbarHandler::setMode(ToolbarMode newmode, bool initialise) { | |||
199 | void ToolbarHandler::initForScreen(BScreen &screen) { | 199 | void ToolbarHandler::initForScreen(BScreen &screen) { |
200 | if (&m_screen != &screen) | 200 | if (&m_screen != &screen) |
201 | return; | 201 | return; |
202 | |||
203 | if (m_toolbar.get() != 0) | ||
204 | m_toolbar->disableUpdates(); | ||
205 | |||
202 | switch (mode()) { | 206 | switch (mode()) { |
203 | case OFF: | 207 | case OFF: |
204 | break; | 208 | break; |
@@ -212,6 +216,7 @@ void ToolbarHandler::initForScreen(BScreen &screen) { | |||
212 | Workspace::Windows::iterator wit = wins.begin(); | 216 | Workspace::Windows::iterator wit = wins.begin(); |
213 | Workspace::Windows::iterator wit_end = wins.end(); | 217 | Workspace::Windows::iterator wit_end = wins.end(); |
214 | for (; wit != wit_end; ++wit) { | 218 | for (; wit != wit_end; ++wit) { |
219 | if (!m_toolbar->containsIcon(**wit)) | ||
215 | m_toolbar->addIcon(*wit); | 220 | m_toolbar->addIcon(*wit); |
216 | /* | 221 | /* |
217 | FluxboxWindow::ClientList::iterator cit = (*wit)->clientList().begin(); | 222 | FluxboxWindow::ClientList::iterator cit = (*wit)->clientList().begin(); |
@@ -238,7 +243,8 @@ void ToolbarHandler::initForScreen(BScreen &screen) { | |||
238 | Workspace::Windows::iterator wit = wins.begin(); | 243 | Workspace::Windows::iterator wit = wins.begin(); |
239 | Workspace::Windows::iterator wit_end = wins.end(); | 244 | Workspace::Windows::iterator wit_end = wins.end(); |
240 | for (; wit != wit_end; ++wit) { | 245 | for (; wit != wit_end; ++wit) { |
241 | m_toolbar->addIcon(*wit); | 246 | if (!m_toolbar->containsIcon(**wit)) |
247 | m_toolbar->addIcon(*wit); | ||
242 | } | 248 | } |
243 | } | 249 | } |
244 | // fall through and add icons for this workspace | 250 | // fall through and add icons for this workspace |
@@ -255,6 +261,10 @@ void ToolbarHandler::initForScreen(BScreen &screen) { | |||
255 | } | 261 | } |
256 | break; | 262 | break; |
257 | } | 263 | } |
264 | |||
265 | if (m_toolbar.get() != 0) | ||
266 | m_toolbar->enableUpdates(); | ||
267 | |||
258 | } | 268 | } |
259 | 269 | ||
260 | void ToolbarHandler::setupWindow(FluxboxWindow &win) { | 270 | void ToolbarHandler::setupWindow(FluxboxWindow &win) { |
@@ -305,7 +315,7 @@ void ToolbarHandler::updateWindowClose(FluxboxWindow &win) { | |||
305 | } | 315 | } |
306 | break; | 316 | break; |
307 | case WORKSPACE: | 317 | case WORKSPACE: |
308 | if (win.workspaceNumber() == m_current_workspace) | 318 | if (win.isStuck() || win.workspaceNumber() == m_current_workspace) |
309 | m_toolbar->delIcon(&win); | 319 | m_toolbar->delIcon(&win); |
310 | break; | 320 | break; |
311 | case ALLWINDOWS: | 321 | case ALLWINDOWS: |
@@ -364,7 +374,8 @@ void ToolbarHandler::updateWorkspace(FluxboxWindow &win) { | |||
364 | m_toolbar->addIcon(&win); | 374 | m_toolbar->addIcon(&win); |
365 | } else { | 375 | } else { |
366 | // relies on the fact that this runs but does nothing if window isn't contained. | 376 | // relies on the fact that this runs but does nothing if window isn't contained. |
367 | m_toolbar->delIcon(&win); | 377 | if (!win.isStuck()) |
378 | m_toolbar->delIcon(&win); | ||
368 | } | 379 | } |
369 | } | 380 | } |
370 | 381 | ||
@@ -375,8 +386,10 @@ void ToolbarHandler::updateCurrentWorkspace(BScreen &screen) { | |||
375 | // otherwise ignore it | 386 | // otherwise ignore it |
376 | if (mode() != WORKSPACE && mode() != WORKSPACEICONS) | 387 | if (mode() != WORKSPACE && mode() != WORKSPACEICONS) |
377 | return; | 388 | return; |
378 | m_toolbar->delAllIcons(); | 389 | m_toolbar->disableUpdates(); |
390 | m_toolbar->delAllIcons(true); | ||
379 | initForScreen(m_screen); | 391 | initForScreen(m_screen); |
392 | m_toolbar->enableUpdates(); | ||
380 | m_toolbar->redrawWorkspaceLabel(true); | 393 | m_toolbar->redrawWorkspaceLabel(true); |
381 | } | 394 | } |
382 | 395 | ||
diff --git a/src/Window.cc b/src/Window.cc index 464210c..380df19 100644 --- a/src/Window.cc +++ b/src/Window.cc | |||
@@ -22,7 +22,7 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: Window.cc,v 1.198 2003/06/25 13:37:06 fluxgen Exp $ | 25 | // $Id: Window.cc,v 1.199 2003/06/26 12:22:43 rathnor Exp $ |
26 | 26 | ||
27 | #include "Window.hh" | 27 | #include "Window.hh" |
28 | 28 | ||
@@ -1286,6 +1286,7 @@ void FluxboxWindow::maximizeVertical() { | |||
1286 | 1286 | ||
1287 | 1287 | ||
1288 | void FluxboxWindow::setWorkspace(int n) { | 1288 | void FluxboxWindow::setWorkspace(int n) { |
1289 | unsigned int old_wkspc = m_workspace_number; | ||
1289 | 1290 | ||
1290 | m_workspace_number = n; | 1291 | m_workspace_number = n; |
1291 | 1292 | ||
@@ -1293,10 +1294,12 @@ void FluxboxWindow::setWorkspace(int n) { | |||
1293 | m_blackbox_attrib.workspace = m_workspace_number; | 1294 | m_blackbox_attrib.workspace = m_workspace_number; |
1294 | 1295 | ||
1295 | // notify workspace change | 1296 | // notify workspace change |
1297 | if (!stuck && old_wkspc != m_workspace_number) { | ||
1296 | #ifdef DEBUG | 1298 | #ifdef DEBUG |
1297 | cerr<<this<<" notify workspace signal"<<endl; | 1299 | cerr<<this<<" notify workspace signal"<<endl; |
1298 | #endif // DEBUG | 1300 | #endif // DEBUG |
1299 | m_workspacesig.notify(); | 1301 | m_workspacesig.notify(); |
1302 | } | ||
1300 | } | 1303 | } |
1301 | 1304 | ||
1302 | void FluxboxWindow::setLayerNum(int layernum) { | 1305 | void FluxboxWindow::setLayerNum(int layernum) { |
@@ -1354,6 +1357,9 @@ void FluxboxWindow::stick() { | |||
1354 | } | 1357 | } |
1355 | 1358 | ||
1356 | setState(m_current_state); | 1359 | setState(m_current_state); |
1360 | // notify since some things consider "stuck" to be a pseudo-workspace | ||
1361 | m_workspacesig.notify(); | ||
1362 | |||
1357 | } | 1363 | } |
1358 | 1364 | ||
1359 | 1365 | ||