diff options
Diffstat (limited to 'src/Workspace.cc')
-rw-r--r-- | src/Workspace.cc | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/src/Workspace.cc b/src/Workspace.cc index 3f57e37..57d3a74 100644 --- a/src/Workspace.cc +++ b/src/Workspace.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: Workspace.cc,v 1.18 2002/04/09 23:18:12 fluxgen Exp $ | 25 | // $Id: Workspace.cc,v 1.19 2002/05/07 13:57:09 fluxgen Exp $ |
26 | 26 | ||
27 | // use GNU extensions | 27 | // use GNU extensions |
28 | #ifndef _GNU_SOURCE | 28 | #ifndef _GNU_SOURCE |
@@ -43,13 +43,8 @@ | |||
43 | #include "Windowmenu.hh" | 43 | #include "Windowmenu.hh" |
44 | #include "StringUtil.hh" | 44 | #include "StringUtil.hh" |
45 | 45 | ||
46 | #ifdef HAVE_STDIO_H | 46 | #include <stdio.h> |
47 | # include <stdio.h> | 47 | #include <string.h> |
48 | #endif // HAVE_STDIO_H | ||
49 | |||
50 | #ifdef STDC_HEADERS | ||
51 | # include <string.h> | ||
52 | #endif // STDC_HEADERS | ||
53 | 48 | ||
54 | #include <X11/Xlib.h> | 49 | #include <X11/Xlib.h> |
55 | #include <X11/Xatom.h> | 50 | #include <X11/Xatom.h> |
@@ -58,16 +53,16 @@ | |||
58 | #include <iostream> | 53 | #include <iostream> |
59 | using namespace std; | 54 | using namespace std; |
60 | 55 | ||
56 | |||
61 | Workspace::Workspace(BScreen *scrn, unsigned int i): | 57 | Workspace::Workspace(BScreen *scrn, unsigned int i): |
62 | screen(scrn), | 58 | screen(scrn), |
63 | lastfocus(0), | 59 | lastfocus(0), |
60 | m_clientmenu(this), | ||
64 | m_name(""), | 61 | m_name(""), |
65 | m_id(i), | 62 | m_id(i), |
66 | cascade_x(32), cascade_y(32) | 63 | cascade_x(32), cascade_y(32) |
67 | { | 64 | { |
68 | 65 | ||
69 | clientmenu = new Clientmenu(this); | ||
70 | |||
71 | char *tmp; | 66 | char *tmp; |
72 | screen->getNameOfWorkspace(m_id, &tmp); | 67 | screen->getNameOfWorkspace(m_id, &tmp); |
73 | setName(tmp); | 68 | setName(tmp); |
@@ -78,7 +73,7 @@ cascade_x(32), cascade_y(32) | |||
78 | 73 | ||
79 | 74 | ||
80 | Workspace::~Workspace() { | 75 | Workspace::~Workspace() { |
81 | delete clientmenu; | 76 | |
82 | } | 77 | } |
83 | 78 | ||
84 | 79 | ||
@@ -96,23 +91,34 @@ const int Workspace::addWindow(FluxboxWindow *w, bool place) { | |||
96 | 91 | ||
97 | //insert window after the currently focused window | 92 | //insert window after the currently focused window |
98 | FluxboxWindow *focused = Fluxbox::instance()->getFocusedWindow(); | 93 | FluxboxWindow *focused = Fluxbox::instance()->getFocusedWindow(); |
94 | |||
99 | //if there isn't any window that's focused, just add it to the end of the list | 95 | //if there isn't any window that's focused, just add it to the end of the list |
100 | if (focused == 0) { | 96 | if (focused == 0) { |
101 | windowList.push_back(w); | 97 | windowList.push_back(w); |
98 | //Add client to clientmenu | ||
99 | m_clientmenu.insert(w->getTitle().c_str()); | ||
102 | } else { | 100 | } else { |
103 | Windows::iterator it = windowList.begin(); | 101 | Windows::iterator it = windowList.begin(); |
104 | for (; it != windowList.end(); ++it) { | 102 | size_t client_insertpoint=0; |
103 | for (; it != windowList.end(); ++it, ++client_insertpoint) { | ||
105 | if (*it == focused) { | 104 | if (*it == focused) { |
106 | ++it; | 105 | ++it; |
107 | break; | 106 | break; |
108 | } | 107 | } |
109 | } | 108 | } |
110 | windowList.insert(it, w); | ||
111 | } | ||
112 | 109 | ||
113 | clientmenu->insert(w->getTitle().c_str()); | 110 | windowList.insert(it, w); |
114 | clientmenu->update(); | 111 | //Add client to clientmenu |
112 | m_clientmenu.insert(w->getTitle().c_str(), client_insertpoint); | ||
113 | |||
115 | 114 | ||
115 | } | ||
116 | |||
117 | |||
118 | |||
119 | //update menugraphics | ||
120 | m_clientmenu.update(); | ||
121 | |||
116 | screen->updateNetizenWindowAdd(w->getClientWindow(), m_id); | 122 | screen->updateNetizenWindowAdd(w->getClientWindow(), m_id); |
117 | 123 | ||
118 | raiseWindow(w); | 124 | raiseWindow(w); |
@@ -159,8 +165,8 @@ const int Workspace::removeWindow(FluxboxWindow *w) { | |||
159 | } | 165 | } |
160 | } | 166 | } |
161 | 167 | ||
162 | clientmenu->remove(w->getWindowNumber()); | 168 | m_clientmenu.remove(w->getWindowNumber()); |
163 | clientmenu->update(); | 169 | m_clientmenu.update(); |
164 | 170 | ||
165 | screen->updateNetizenWindowDel(w->getClientWindow()); | 171 | screen->updateNetizenWindowDel(w->getClientWindow()); |
166 | 172 | ||
@@ -294,7 +300,7 @@ void Workspace::lowerWindow(FluxboxWindow *w) { | |||
294 | 300 | ||
295 | 301 | ||
296 | void Workspace::reconfigure(void) { | 302 | void Workspace::reconfigure(void) { |
297 | clientmenu->reconfigure(); | 303 | m_clientmenu.reconfigure(); |
298 | 304 | ||
299 | Windows::iterator it = windowList.begin(); | 305 | Windows::iterator it = windowList.begin(); |
300 | Windows::iterator it_end = windowList.end(); | 306 | Windows::iterator it_end = windowList.end(); |
@@ -305,10 +311,15 @@ void Workspace::reconfigure(void) { | |||
305 | } | 311 | } |
306 | 312 | ||
307 | 313 | ||
308 | FluxboxWindow *Workspace::getWindow(unsigned int index) const{ | 314 | const FluxboxWindow *Workspace::getWindow(unsigned int index) const { |
309 | if (index < windowList.size()) | 315 | if (index < windowList.size()) |
310 | return windowList[index]; | 316 | return windowList[index]; |
317 | return 0; | ||
318 | } | ||
311 | 319 | ||
320 | FluxboxWindow *Workspace::getWindow(unsigned int index) { | ||
321 | if (index < windowList.size()) | ||
322 | return windowList[index]; | ||
312 | return 0; | 323 | return 0; |
313 | } | 324 | } |
314 | 325 | ||
@@ -319,7 +330,7 @@ const int Workspace::getCount(void) const { | |||
319 | 330 | ||
320 | 331 | ||
321 | void Workspace::update(void) { | 332 | void Workspace::update(void) { |
322 | clientmenu->update(); | 333 | m_clientmenu.update(); |
323 | screen->getToolbar()->redrawWindowLabel(True); | 334 | screen->getToolbar()->redrawWindowLabel(True); |
324 | } | 335 | } |
325 | 336 | ||
@@ -353,8 +364,8 @@ void Workspace::setName(const char *name) { | |||
353 | 364 | ||
354 | screen->updateWorkspaceNamesAtom(); | 365 | screen->updateWorkspaceNamesAtom(); |
355 | 366 | ||
356 | clientmenu->setLabel(m_name.c_str()); | 367 | m_clientmenu.setLabel(m_name.c_str()); |
357 | clientmenu->update(); | 368 | m_clientmenu.update(); |
358 | } | 369 | } |
359 | 370 | ||
360 | //------------ shutdown --------- | 371 | //------------ shutdown --------- |