diff options
Diffstat (limited to 'src/Windowmenu.cc')
-rw-r--r-- | src/Windowmenu.cc | 132 |
1 files changed, 64 insertions, 68 deletions
diff --git a/src/Windowmenu.cc b/src/Windowmenu.cc index b8f34c0..b4219f1 100644 --- a/src/Windowmenu.cc +++ b/src/Windowmenu.cc | |||
@@ -21,7 +21,7 @@ | |||
21 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 21 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
22 | // DEALINGS IN THE SOFTWARE. | 22 | // DEALINGS IN THE SOFTWARE. |
23 | 23 | ||
24 | // $Id: Windowmenu.cc,v 1.18 2002/09/06 16:59:29 fluxgen Exp $ | 24 | // $Id: Windowmenu.cc,v 1.19 2002/09/10 11:06:26 fluxgen Exp $ |
25 | 25 | ||
26 | //use GNU extensions | 26 | //use GNU extensions |
27 | #ifndef _GNU_SOURCE | 27 | #ifndef _GNU_SOURCE |
@@ -44,9 +44,11 @@ | |||
44 | #endif // STDC_HEADERS | 44 | #endif // STDC_HEADERS |
45 | 45 | ||
46 | 46 | ||
47 | Windowmenu::Windowmenu(FluxboxWindow *win) : Basemenu(win->getScreen()), | 47 | Windowmenu::Windowmenu(FluxboxWindow &win) : Basemenu(win.getScreen()), |
48 | window(win), | 48 | window(win), |
49 | screen(window->getScreen()){ | 49 | screen(win.getScreen()), |
50 | sendToMenu(this), | ||
51 | sendGroupToMenu(this) { | ||
50 | 52 | ||
51 | setTitleVisibility(False); | 53 | setTitleVisibility(False); |
52 | setMovable(False); | 54 | setMovable(False); |
@@ -54,18 +56,16 @@ screen(window->getScreen()){ | |||
54 | 56 | ||
55 | I18n *i18n = I18n::instance(); | 57 | I18n *i18n = I18n::instance(); |
56 | 58 | ||
57 | sendToMenu = new SendtoWorkspacemenu(this); | ||
58 | sendGroupToMenu = new SendGroupToWorkspacemenu(this); | ||
59 | using namespace FBNLS; | 59 | using namespace FBNLS; |
60 | insert(i18n->getMessage( | 60 | insert(i18n->getMessage( |
61 | WindowmenuSet, WindowmenuSendTo, | 61 | WindowmenuSet, WindowmenuSendTo, |
62 | "Send To ..."), | 62 | "Send To ..."), |
63 | sendToMenu); | 63 | &sendToMenu); |
64 | 64 | ||
65 | insert(i18n->getMessage( | 65 | insert(i18n->getMessage( |
66 | WindowmenuSet, WindowmenuSendGroupTo, | 66 | WindowmenuSet, WindowmenuSendGroupTo, |
67 | "Send Group To ..."), | 67 | "Send Group To ..."), |
68 | sendGroupToMenu); | 68 | &sendGroupToMenu); |
69 | 69 | ||
70 | insert(i18n->getMessage( | 70 | insert(i18n->getMessage( |
71 | WindowmenuSet, WindowmenuShade, | 71 | WindowmenuSet, WindowmenuShade, |
@@ -106,25 +106,27 @@ screen(window->getScreen()){ | |||
106 | 106 | ||
107 | update(); | 107 | update(); |
108 | 108 | ||
109 | setItemEnabled(2, window->hasTitlebar()); | 109 | setItemEnabled(2, window.hasTitlebar()); |
110 | setItemEnabled(3, window->isIconifiable()); | 110 | setItemEnabled(3, window.isIconifiable()); |
111 | setItemEnabled(4, window->isMaximizable()); | 111 | setItemEnabled(4, window.isMaximizable()); |
112 | setItemEnabled(9, window->isClosable()); | 112 | setItemEnabled(9, window.isClosable()); |
113 | setItemEnabled(10, true); //we should always be able to enable the tab | 113 | setItemEnabled(10, true); //we should always be able to enable the tab |
114 | 114 | ||
115 | } | 115 | } |
116 | 116 | ||
117 | 117 | ||
118 | Windowmenu::~Windowmenu(void) { | 118 | Windowmenu::~Windowmenu() { |
119 | delete sendToMenu; | 119 | |
120 | delete sendGroupToMenu; | ||
121 | } | 120 | } |
122 | 121 | ||
123 | 122 | ||
124 | void Windowmenu::show(void) { | 123 | void Windowmenu::show() { |
125 | if (isItemEnabled(2)) setItemSelected(2, window->isShaded()); | 124 | if (isItemEnabled(2)) |
126 | if (isItemEnabled(4)) setItemSelected(4, window->isMaximized()); | 125 | setItemSelected(2, window.isShaded()); |
127 | if (isItemEnabled(7)) setItemSelected(7, window->isStuck()); | 126 | if (isItemEnabled(4)) |
127 | setItemSelected(4, window.isMaximized()); | ||
128 | if (isItemEnabled(7)) | ||
129 | setItemSelected(7, window.isStuck()); | ||
128 | 130 | ||
129 | Basemenu::show(); | 131 | Basemenu::show(); |
130 | } | 132 | } |
@@ -135,71 +137,71 @@ void Windowmenu::itemSelected(int button, unsigned int index) { | |||
135 | hide(); | 137 | hide(); |
136 | switch (item->function()) { | 138 | switch (item->function()) { |
137 | case BScreen::WINDOWSHADE: | 139 | case BScreen::WINDOWSHADE: |
138 | if (window->isIconic()) | 140 | if (window.isIconic()) |
139 | break; | 141 | break; |
140 | 142 | ||
141 | window->shade(); | 143 | window.shade(); |
142 | if (window->hasTab()) | 144 | if (window.hasTab()) |
143 | window->getTab()->shade(); | 145 | window.getTab()->shade(); |
144 | break; | 146 | break; |
145 | 147 | ||
146 | case BScreen::WINDOWICONIFY: | 148 | case BScreen::WINDOWICONIFY: |
147 | if (!window->isIconic()) | 149 | if (!window.isIconic()) |
148 | window->iconify(); | 150 | window.iconify(); |
149 | else | 151 | else |
150 | window->deiconify(); // restore window | 152 | window.deiconify(); // restore window |
151 | 153 | ||
152 | break; | 154 | break; |
153 | 155 | ||
154 | case BScreen::WINDOWMAXIMIZE: | 156 | case BScreen::WINDOWMAXIMIZE: |
155 | window->maximize((unsigned int) button); | 157 | window.maximize((unsigned int) button); |
156 | break; | 158 | break; |
157 | 159 | ||
158 | case BScreen::WINDOWCLOSE: | 160 | case BScreen::WINDOWCLOSE: |
159 | window->close(); | 161 | window.close(); |
160 | break; | 162 | break; |
161 | 163 | ||
162 | case BScreen::WINDOWRAISE: | 164 | case BScreen::WINDOWRAISE: |
163 | if (window->isIconic()) | 165 | if (window.isIconic()) |
164 | break; | 166 | break; |
165 | 167 | ||
166 | if (window->hasTab()) | 168 | if (window.hasTab()) |
167 | window->getTab()->raise(); //raise tabs | 169 | window.getTab()->raise(); //raise tabs |
168 | screen->getWorkspace(window->getWorkspaceNumber())->raiseWindow(window); | 170 | screen->getWorkspace(window.getWorkspaceNumber())->raiseWindow(&window); |
169 | break; | 171 | break; |
170 | 172 | ||
171 | case BScreen::WINDOWLOWER: | 173 | case BScreen::WINDOWLOWER: |
172 | if (window->isIconic()) | 174 | if (window.isIconic()) |
173 | break; | 175 | break; |
174 | 176 | ||
175 | screen->getWorkspace(window->getWorkspaceNumber())->lowerWindow(window); | 177 | screen->getWorkspace(window.getWorkspaceNumber())->lowerWindow(&window); |
176 | if (window->hasTab()) | 178 | if (window.hasTab()) |
177 | window->getTab()->lower(); //lower tabs AND all it's windows | 179 | window.getTab()->lower(); //lower tabs AND all it's windows |
178 | break; | 180 | break; |
179 | 181 | ||
180 | case BScreen::WINDOWSTICK: | 182 | case BScreen::WINDOWSTICK: |
181 | window->stick(); | 183 | window.stick(); |
182 | break; | 184 | break; |
183 | 185 | ||
184 | case BScreen::WINDOWKILL: | 186 | case BScreen::WINDOWKILL: |
185 | XKillClient(screen->getBaseDisplay()->getXDisplay(), | 187 | XKillClient(BaseDisplay::getXDisplay(), |
186 | window->getClientWindow()); | 188 | window.getClientWindow()); |
187 | break; | 189 | break; |
188 | case BScreen::WINDOWTAB: | 190 | case BScreen::WINDOWTAB: |
189 | window->setTab(!window->hasTab()); | 191 | window.setTab(!window.hasTab()); |
190 | break; | 192 | break; |
191 | } | 193 | } |
192 | } | 194 | } |
193 | 195 | ||
194 | 196 | ||
195 | void Windowmenu::reconfigure(void) { | 197 | void Windowmenu::reconfigure() { |
196 | setItemEnabled(1, window->hasTitlebar()); | 198 | setItemEnabled(1, window.hasTitlebar()); |
197 | setItemEnabled(2, window->isIconifiable()); | 199 | setItemEnabled(2, window.isIconifiable()); |
198 | setItemEnabled(3, window->isMaximizable()); | 200 | setItemEnabled(3, window.isMaximizable()); |
199 | setItemEnabled(8, window->isClosable()); | 201 | setItemEnabled(8, window.isClosable()); |
200 | 202 | ||
201 | sendToMenu->reconfigure(); | 203 | sendToMenu.reconfigure(); |
202 | sendGroupToMenu->reconfigure(); | 204 | sendGroupToMenu.reconfigure(); |
203 | 205 | ||
204 | Basemenu::reconfigure(); | 206 | Basemenu::reconfigure(); |
205 | } | 207 | } |
@@ -218,7 +220,8 @@ Windowmenu::SendtoWorkspacemenu::SendtoWorkspacemenu(Windowmenu *w) | |||
218 | 220 | ||
219 | 221 | ||
220 | void Windowmenu::SendtoWorkspacemenu::itemSelected(int button, unsigned int index) { | 222 | void Windowmenu::SendtoWorkspacemenu::itemSelected(int button, unsigned int index) { |
221 | if (button > 2) return; | 223 | if (button > 2) |
224 | return; | ||
222 | 225 | ||
223 | if (index <= windowmenu->screen->getCount()) { | 226 | if (index <= windowmenu->screen->getCount()) { |
224 | 227 | ||
@@ -226,20 +229,12 @@ void Windowmenu::SendtoWorkspacemenu::itemSelected(int button, unsigned int inde | |||
226 | if (index == windowmenu->screen->getCurrentWorkspaceID()) | 229 | if (index == windowmenu->screen->getCurrentWorkspaceID()) |
227 | return; | 230 | return; |
228 | 231 | ||
229 | // if the window is stuck then unstick it | ||
230 | if (windowmenu->window->isStuck()) | ||
231 | windowmenu->window->stick(); | ||
232 | |||
233 | // if the window is iconic, deiconify it | ||
234 | if (windowmenu->window->isIconic()) | ||
235 | windowmenu->window->deiconify(); | ||
236 | |||
237 | if (button == 1) { // send to workspace without changing workspace | 232 | if (button == 1) { // send to workspace without changing workspace |
238 | windowmenu->screen->sendToWorkspace(index, | 233 | windowmenu->screen->sendToWorkspace(index, |
239 | windowmenu->window, false); | 234 | &windowmenu->window, false); |
240 | } else if (button == 2) { // send to workspace and change workspace | 235 | } else if (button == 2) { // send to workspace and change workspace |
241 | windowmenu->screen->sendToWorkspace(index, | 236 | windowmenu->screen->sendToWorkspace(index, |
242 | windowmenu->window, true); | 237 | &windowmenu->window, true); |
243 | } | 238 | } |
244 | } | 239 | } |
245 | 240 | ||
@@ -247,7 +242,7 @@ void Windowmenu::SendtoWorkspacemenu::itemSelected(int button, unsigned int inde | |||
247 | } | 242 | } |
248 | 243 | ||
249 | 244 | ||
250 | void Windowmenu::SendtoWorkspacemenu::update(void) { | 245 | void Windowmenu::SendtoWorkspacemenu::update() { |
251 | unsigned int i, r = numberOfItems(); | 246 | unsigned int i, r = numberOfItems(); |
252 | 247 | ||
253 | if (numberOfItems() != 0) { | 248 | if (numberOfItems() != 0) { |
@@ -261,7 +256,7 @@ void Windowmenu::SendtoWorkspacemenu::update(void) { | |||
261 | } | 256 | } |
262 | 257 | ||
263 | 258 | ||
264 | void Windowmenu::SendtoWorkspacemenu::show(void) { | 259 | void Windowmenu::SendtoWorkspacemenu::show() { |
265 | update(); | 260 | update(); |
266 | 261 | ||
267 | Basemenu::show(); | 262 | Basemenu::show(); |
@@ -274,17 +269,17 @@ void Windowmenu::SendGroupToWorkspacemenu::itemSelected(int button, unsigned int | |||
274 | if (index <= getWindowMenu()->screen->getCount()) { | 269 | if (index <= getWindowMenu()->screen->getCount()) { |
275 | if (index == getWindowMenu()->screen->getCurrentWorkspaceID()) | 270 | if (index == getWindowMenu()->screen->getCurrentWorkspaceID()) |
276 | return; | 271 | return; |
277 | if (getWindowMenu()->window->isStuck()) | 272 | if (getWindowMenu()->window.isStuck()) |
278 | getWindowMenu()->window->stick(); | 273 | getWindowMenu()->window.stick(); |
279 | 274 | ||
280 | // if the window is iconic, deiconify it | 275 | // if the window is iconic, deiconify it |
281 | if (getWindowMenu()->window->isIconic()) | 276 | if (getWindowMenu()->window.isIconic()) |
282 | getWindowMenu()->window->deiconify(); | 277 | getWindowMenu()->window.deiconify(); |
283 | 278 | ||
284 | if (button == 1) { | 279 | if (button == 1) { |
285 | // TODO: use reassociateGroup from BScreen instead | 280 | // TODO: use reassociateGroup from BScreen instead |
286 | if (getWindowMenu()->window->hasTab()) { | 281 | if (getWindowMenu()->window.hasTab()) { |
287 | for (Tab *first = Tab::getFirst(getWindowMenu()->window->getTab()); | 282 | for (Tab *first = Tab::getFirst(getWindowMenu()->window.getTab()); |
288 | first!=0; first=first->next()) { | 283 | first!=0; first=first->next()) { |
289 | first->withdraw(); | 284 | first->withdraw(); |
290 | first->getWindow()->withdraw(); | 285 | first->getWindow()->withdraw(); |
@@ -292,8 +287,8 @@ void Windowmenu::SendGroupToWorkspacemenu::itemSelected(int button, unsigned int | |||
292 | 287 | ||
293 | } | 288 | } |
294 | } else { | 289 | } else { |
295 | getWindowMenu()->window->withdraw(); | 290 | getWindowMenu()->window.withdraw(); |
296 | getWindowMenu()->screen->reassociateWindow(getWindowMenu()->window, index, True); | 291 | getWindowMenu()->screen->reassociateWindow(&getWindowMenu()->window, index, True); |
297 | } | 292 | } |
298 | 293 | ||
299 | } | 294 | } |
@@ -304,7 +299,8 @@ void Windowmenu::SendGroupToWorkspacemenu::itemSelected(int button, unsigned int | |||
304 | hide(); | 299 | hide(); |
305 | } | 300 | } |
306 | 301 | ||
307 | Windowmenu::SendGroupToWorkspacemenu::SendGroupToWorkspacemenu(Windowmenu *w):SendtoWorkspacemenu(w) | 302 | Windowmenu::SendGroupToWorkspacemenu:: |
303 | SendGroupToWorkspacemenu(Windowmenu *w):SendtoWorkspacemenu(w) | ||
308 | { | 304 | { |
309 | 305 | ||
310 | } | 306 | } |