diff options
Diffstat (limited to 'src/FbCommandFactory.cc')
-rw-r--r-- | src/FbCommandFactory.cc | 283 |
1 files changed, 197 insertions, 86 deletions
diff --git a/src/FbCommandFactory.cc b/src/FbCommandFactory.cc index 0257374..bf008ad 100644 --- a/src/FbCommandFactory.cc +++ b/src/FbCommandFactory.cc | |||
@@ -52,17 +52,43 @@ using std::endl; | |||
52 | // autoregister this module to command parser | 52 | // autoregister this module to command parser |
53 | FbCommandFactory FbCommandFactory::s_autoreg; | 53 | FbCommandFactory FbCommandFactory::s_autoreg; |
54 | 54 | ||
55 | namespace { | ||
56 | |||
55 | static int getint(const char *str, int defaultvalue) { | 57 | static int getint(const char *str, int defaultvalue) { |
56 | sscanf(str, "%d", &defaultvalue); | 58 | sscanf(str, "%d", &defaultvalue); |
57 | return defaultvalue; | 59 | return defaultvalue; |
58 | } | 60 | } |
59 | 61 | ||
62 | void parseNextWindowArgs(const string &in, int &opts, string &pat) { | ||
63 | string options; | ||
64 | int err = FbTk::StringUtil::getStringBetween(options, in.c_str(), '{', '}'); | ||
65 | |||
66 | // the rest of the string is a ClientPattern | ||
67 | pat = in.c_str() + err; | ||
68 | |||
69 | // now parse the options | ||
70 | vector<string> args; | ||
71 | FbTk::StringUtil::stringtok(args, options); | ||
72 | vector<string>::iterator it = args.begin(), it_end = args.end(); | ||
73 | opts = 0; | ||
74 | for (; it != it_end; ++it) { | ||
75 | if (strcasecmp((*it).c_str(), "static") == 0) | ||
76 | opts |= FocusControl::CYCLELINEAR; | ||
77 | else if (strcasecmp((*it).c_str(), "groups") == 0) | ||
78 | opts |= FocusControl::CYCLEGROUPS; | ||
79 | } | ||
80 | } | ||
81 | |||
82 | }; // end anonymous namespace | ||
83 | |||
60 | FbCommandFactory::FbCommandFactory() { | 84 | FbCommandFactory::FbCommandFactory() { |
61 | // setup commands that we can handle | 85 | // setup commands that we can handle |
62 | const char* commands[] = { | 86 | const char* commands[] = { |
63 | "addworkspace", | 87 | "addworkspace", |
64 | "arrangewindows", | 88 | "arrangewindows", |
89 | "attach", | ||
65 | "bindkey", | 90 | "bindkey", |
91 | "clientmenu", | ||
66 | "close", | 92 | "close", |
67 | "closeallwindows", | 93 | "closeallwindows", |
68 | "commanddialog", | 94 | "commanddialog", |
@@ -79,6 +105,7 @@ FbCommandFactory::FbCommandFactory() { | |||
79 | "focusleft", | 105 | "focusleft", |
80 | "focusright", | 106 | "focusright", |
81 | "fullscreen", | 107 | "fullscreen", |
108 | "gotowindow", | ||
82 | "hidemenus", | 109 | "hidemenus", |
83 | "iconify", | 110 | "iconify", |
84 | "keymode", | 111 | "keymode", |
@@ -116,7 +143,7 @@ FbCommandFactory::FbCommandFactory() { | |||
116 | "reconfig", | 143 | "reconfig", |
117 | "reconfigure", | 144 | "reconfigure", |
118 | "reloadstyle", | 145 | "reloadstyle", |
119 | "removelastworkspace", | 146 | "removelastworkspace", |
120 | "resizeto", | 147 | "resizeto", |
121 | "resize", | 148 | "resize", |
122 | "resizehorizontal", | 149 | "resizehorizontal", |
@@ -148,6 +175,7 @@ FbCommandFactory::FbCommandFactory() { | |||
148 | "taketoprevworkspace", | 175 | "taketoprevworkspace", |
149 | "togglecmd", | 176 | "togglecmd", |
150 | "toggledecor", | 177 | "toggledecor", |
178 | "typeaheadfocus", | ||
151 | "windowmenu", | 179 | "windowmenu", |
152 | "workspace", | 180 | "workspace", |
153 | /* NOTE: The following are DEPRECATED and subject to removal */ | 181 | /* NOTE: The following are DEPRECATED and subject to removal */ |
@@ -243,21 +271,15 @@ FbTk::Command *FbCommandFactory::stringToCommand(const std::string &command, | |||
243 | // Current focused window commands | 271 | // Current focused window commands |
244 | // | 272 | // |
245 | else if (command == "fullscreen") | 273 | else if (command == "fullscreen") |
246 | return new FullscreenCmd(); | 274 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new FullscreenCmd()), arguments); |
247 | else if (command == "minimizewindow" || command == "minimize" || command == "iconify") { | 275 | else if (command == "minimizewindow" || command == "minimize" || command == "iconify") |
248 | string cmd; | 276 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::iconify)), arguments); |
249 | if (FbTk::StringUtil::getStringBetween(cmd, arguments.c_str() + | 277 | else if (command == "maximizewindow" || command == "maximize") |
250 | 0, '(', ')', " \t\n", true) | 278 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::maximizeFull)), arguments); |
251 | && cmd == "layer") | ||
252 | return new MinimizeLayerCmd(); | ||
253 | else | ||
254 | return new CurrentWindowCmd(&FluxboxWindow::iconify); | ||
255 | } else if (command == "maximizewindow" || command == "maximize") | ||
256 | return new CurrentWindowCmd(&FluxboxWindow::maximizeFull); | ||
257 | else if (command == "maximizevertical") | 279 | else if (command == "maximizevertical") |
258 | return new CurrentWindowCmd(&FluxboxWindow::maximizeVertical); | 280 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::maximizeVertical)), arguments); |
259 | else if (command == "maximizehorizontal") | 281 | else if (command == "maximizehorizontal") |
260 | return new CurrentWindowCmd(&FluxboxWindow::maximizeHorizontal); | 282 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::maximizeHorizontal)), arguments); |
261 | else if (command == "setalpha") { | 283 | else if (command == "setalpha") { |
262 | typedef vector<string> StringTokens; | 284 | typedef vector<string> StringTokens; |
263 | StringTokens tokens; | 285 | StringTokens tokens; |
@@ -279,24 +301,37 @@ FbTk::Command *FbCommandFactory::stringToCommand(const std::string &command, | |||
279 | unfocused = atoi(tokens[1].c_str()); | 301 | unfocused = atoi(tokens[1].c_str()); |
280 | } | 302 | } |
281 | 303 | ||
282 | return new SetAlphaCmd(focused, relative, unfocused, un_rel); | 304 | string pat; |
283 | } else if (command == "resize") { | 305 | string::size_type pos = arguments.find('('); |
284 | FbTk_istringstream is(arguments.c_str()); | 306 | if (pos != string::npos && pos != arguments.size()) |
285 | int dx = 0, dy = 0; | 307 | pat = arguments.c_str() + pos; |
286 | is >> dx >> dy; | 308 | |
287 | return new ResizeCmd(dx, dy); | 309 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new SetAlphaCmd(focused, relative, unfocused, un_rel)), pat); |
288 | } | 310 | } else if (command == "resize" || command == "resizeto" || |
289 | else if (command == "resizeto") { | 311 | command == "resizehorizontal" || command == "resizevertical") { |
290 | FbTk_istringstream is(arguments.c_str()); | 312 | FbTk_istringstream is(arguments.c_str()); |
291 | int dx = 0, dy = 0; | 313 | int dx = 0, dy = 0; |
292 | is >> dx >> dy; | 314 | is >> dx >> dy; |
293 | return new ResizeToCmd(dx, dy); | 315 | if (command == "resizehorizontal") |
294 | } | 316 | dy = 0; |
295 | else if (command == "resizehorizontal") | 317 | else if (command == "resizevertical") { |
296 | return new ResizeCmd(atoi(arguments.c_str()),0); | 318 | dy = dx; |
297 | else if (command == "resizevertical") | 319 | dx = 0; |
298 | return new ResizeCmd(0,atoi(arguments.c_str())); | 320 | } |
299 | else if (command == "moveto") { | 321 | |
322 | string pat; | ||
323 | string::size_type pos = arguments.find('('); | ||
324 | if (pos != string::npos && pos != arguments.size()) | ||
325 | pat = arguments.c_str() + pos; | ||
326 | |||
327 | FbTk::RefCount<WindowHelperCmd> cmd; | ||
328 | if (command == "resizeto") | ||
329 | cmd = new ResizeToCmd(dx, dy); | ||
330 | else | ||
331 | cmd = new ResizeCmd(dx, dy); | ||
332 | |||
333 | return new WindowListCmd(cmd, pat); | ||
334 | } else if (command == "moveto") { | ||
300 | typedef vector<string> StringTokens; | 335 | typedef vector<string> StringTokens; |
301 | StringTokens tokens; | 336 | StringTokens tokens; |
302 | FbTk::StringUtil::stringtok<StringTokens>(tokens, arguments); | 337 | FbTk::StringUtil::stringtok<StringTokens>(tokens, arguments); |
@@ -339,70 +374,107 @@ FbTk::Command *FbCommandFactory::stringToCommand(const std::string &command, | |||
339 | } | 374 | } |
340 | } | 375 | } |
341 | 376 | ||
342 | return new MoveToCmd(dx, dy, refc); | 377 | string pat; |
343 | } | 378 | string::size_type pos = arguments.find('('); |
344 | else if (command == "move") { | 379 | if (pos != string::npos && pos != arguments.size()) |
380 | pat = arguments.c_str() + pos; | ||
381 | |||
382 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new MoveToCmd(dx, dy, refc)), pat); | ||
383 | } else if (command == "move" || command == "moveright" || | ||
384 | command == "moveleft" || command == "moveup" || | ||
385 | command == "movedown") { | ||
345 | FbTk_istringstream is(arguments.c_str()); | 386 | FbTk_istringstream is(arguments.c_str()); |
346 | int dx = 0, dy = 0; | 387 | int dx = 0, dy = 0; |
347 | is >> dx >> dy; | 388 | is >> dx >> dy; |
348 | return new MoveCmd(dx, dy); | 389 | |
349 | } | 390 | if (command == "moveright") |
350 | else if (command == "moveright") | 391 | dy = 0; |
351 | return new MoveCmd(atoi(arguments.c_str()),0); | 392 | else if (command == "moveleft") { |
352 | else if (command == "moveleft") | 393 | dy = 0; |
353 | return new MoveCmd(-atoi(arguments.c_str()),0); | 394 | dx = -dx; |
354 | else if (command == "moveup") | 395 | } else if (command == "movedown") { |
355 | return new MoveCmd(0,-atoi(arguments.c_str())); | 396 | dy = dx; |
356 | else if (command == "movedown") | 397 | dx = 0; |
357 | return new MoveCmd(0,atoi(arguments.c_str())); | 398 | } else if (command == "moveup") { |
358 | else if (command == "raise") | 399 | dy = -dx; |
359 | return new CurrentWindowCmd(&FluxboxWindow::raise); | 400 | dx = 0; |
401 | } | ||
402 | |||
403 | string pat; | ||
404 | string::size_type pos = arguments.find('('); | ||
405 | if (pos != string::npos && pos != arguments.size()) | ||
406 | pat = arguments.c_str() + pos; | ||
407 | |||
408 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new MoveCmd(dx, dy)), pat); | ||
409 | } else if (command == "raise") | ||
410 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::raise)), arguments); | ||
360 | else if (command == "raiselayer") | 411 | else if (command == "raiselayer") |
361 | return new CurrentWindowCmd(&FluxboxWindow::raiseLayer); | 412 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::raiseLayer)), arguments); |
362 | else if (command == "lower") | 413 | else if (command == "lower") |
363 | return new CurrentWindowCmd(&FluxboxWindow::lower); | 414 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::lower)), arguments); |
364 | else if (command == "lowerlayer") | 415 | else if (command == "lowerlayer") |
365 | return new CurrentWindowCmd(&FluxboxWindow::lowerLayer); | 416 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::lowerLayer)), arguments); |
366 | else if (command == "close") | 417 | else if (command == "close") |
367 | return new CurrentWindowCmd(&FluxboxWindow::close); | 418 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::close)), arguments); |
368 | else if (command == "closeallwindows") | 419 | else if (command == "closeallwindows") |
369 | return new CloseAllWindowsCmd(); | 420 | return new CloseAllWindowsCmd(); |
421 | else if (command == "killwindow" || command == "kill") | ||
422 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::kill)), arguments); | ||
370 | else if (command == "shade" || command == "shadewindow") | 423 | else if (command == "shade" || command == "shadewindow") |
371 | return new CurrentWindowCmd(&FluxboxWindow::shade); | 424 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::shade)), arguments); |
372 | else if (command == "stick" || command == "stickwindow") | 425 | else if (command == "stick" || command == "stickwindow") |
373 | return new CurrentWindowCmd(&FluxboxWindow::stick); | 426 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::stick)), arguments); |
374 | else if (command == "toggledecor") | 427 | else if (command == "toggledecor") |
375 | return new CurrentWindowCmd(&FluxboxWindow::toggleDecoration); | 428 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::toggleDecoration)), arguments); |
376 | else if (command == "sethead") | 429 | else if (command == "sethead") { |
377 | return new SetHeadCmd(atoi(arguments.c_str())); | 430 | int num = 0; |
378 | else if (command == "sendtoworkspace") | 431 | string pat; |
379 | // workspaces appear 1-indexed to the user, hence the minus 1 | 432 | FbTk_istringstream iss(arguments.c_str()); |
380 | return new SendToWorkspaceCmd(getint(arguments.c_str(), 1) - 1); | 433 | iss >> num; |
381 | else if (command == "sendtonextworkspace") | 434 | string::size_type pos = arguments.find('('); |
382 | return new SendToNextWorkspaceCmd(getint(arguments.c_str(), 1)); | 435 | if (pos != string::npos && pos != arguments.size()) |
383 | else if (command == "sendtoprevworkspace") | 436 | pat = arguments.c_str() + pos; |
384 | return new SendToPrevWorkspaceCmd(getint(arguments.c_str(), 1)); | 437 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new SetHeadCmd(num)), pat); |
385 | else if (command == "taketoworkspace") | 438 | } else if (command == "tab" || command == "sendtonextworkspace" || |
439 | command == "sendtoprevworkspace" || | ||
440 | command == "taketonextworkspace" || | ||
441 | command == "taketoprevworkspace" || | ||
442 | command == "sendtoworkspace" || command == "taketoworkspace") { | ||
386 | // workspaces appear 1-indexed to the user, hence the minus 1 | 443 | // workspaces appear 1-indexed to the user, hence the minus 1 |
387 | return new TakeToWorkspaceCmd(getint(arguments.c_str(), 1) - 1); | 444 | int num = 1; |
388 | else if (command == "taketonextworkspace") | 445 | string pat; |
389 | return new TakeToNextWorkspaceCmd(getint(arguments.c_str(), 1)); | 446 | FbTk_istringstream iss(arguments.c_str()); |
390 | else if (command == "taketoprevworkspace") | 447 | iss >> num; |
391 | return new TakeToPrevWorkspaceCmd(getint(arguments.c_str(), 1)); | 448 | string::size_type pos = arguments.find('('); |
392 | else if (command == "killwindow" || command == "kill") | 449 | if (pos != string::npos && pos != arguments.size()) |
393 | return new KillWindowCmd(); | 450 | pat = arguments.c_str() + pos; |
394 | else if (command == "tab") | 451 | FbTk::RefCount<WindowHelperCmd> cmd; |
395 | return new GoToTabCmd(getint(arguments.c_str(), 1)); | 452 | |
396 | else if (command == "nexttab") | 453 | if (command == "tab") |
397 | return new CurrentWindowCmd(&FluxboxWindow::nextClient); | 454 | cmd = new GoToTabCmd(num); |
455 | else if (command == "sendtonextworkspace") | ||
456 | cmd = new SendToNextWorkspaceCmd(num); | ||
457 | else if (command == "sendtoprevworkspace") | ||
458 | cmd = new SendToPrevWorkspaceCmd(num); | ||
459 | else if (command == "taketonextworkspace") | ||
460 | cmd = new TakeToNextWorkspaceCmd(num); | ||
461 | else if (command == "taketoprevworkspace") | ||
462 | cmd = new TakeToPrevWorkspaceCmd(num); | ||
463 | else if (command == "sendtoworkspace") | ||
464 | cmd = new SendToWorkspaceCmd(num-1); | ||
465 | else | ||
466 | cmd = new TakeToWorkspaceCmd(num-1); | ||
467 | return new WindowListCmd(cmd, pat); | ||
468 | } else if (command == "nexttab") | ||
469 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::nextClient)), arguments); | ||
398 | else if (command == "prevtab") | 470 | else if (command == "prevtab") |
399 | return new CurrentWindowCmd(&FluxboxWindow::prevClient); | 471 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::prevClient)), arguments); |
400 | else if (command == "movetableft") | 472 | else if (command == "movetableft") |
401 | return new CurrentWindowCmd(&FluxboxWindow::moveClientLeft); | 473 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::moveClientLeft)), arguments); |
402 | else if (command == "movetabright") | 474 | else if (command == "movetabright") |
403 | return new CurrentWindowCmd(&FluxboxWindow::moveClientRight); | 475 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::moveClientRight)), arguments); |
404 | else if (command == "detachclient") | 476 | else if (command == "detachclient") |
405 | return new CurrentWindowCmd(&FluxboxWindow::detachCurrentClient); | 477 | return new WindowListCmd(FbTk::RefCount<WindowHelperCmd>(new CurrentWindowCmd(&FluxboxWindow::detachCurrentClient)), arguments); |
406 | else if (command == "windowmenu") | 478 | else if (command == "windowmenu") |
407 | return new CurrentWindowCmd(&FluxboxWindow::popupMenu); | 479 | return new CurrentWindowCmd(&FluxboxWindow::popupMenu); |
408 | // | 480 | // |
@@ -423,11 +495,54 @@ FbTk::Command *FbCommandFactory::stringToCommand(const std::string &command, | |||
423 | cerr<<"*** WARNING: 'Workspace<n>' actions are deprecated! Use 'Workspace <n>' instead"<<endl; | 495 | cerr<<"*** WARNING: 'Workspace<n>' actions are deprecated! Use 'Workspace <n>' instead"<<endl; |
424 | return new JumpToWorkspaceCmd(getint(command.substr(9).c_str(), 1) - 1); | 496 | return new JumpToWorkspaceCmd(getint(command.substr(9).c_str(), 1) - 1); |
425 | 497 | ||
426 | } else if (command == "nextwindow") | 498 | } else if (command == "attach") { |
427 | return new NextWindowCmd(atoi(arguments.c_str())); | 499 | int opts; // not used |
428 | else if (command == "prevwindow") | 500 | string pat; |
429 | return new PrevWindowCmd(atoi(arguments.c_str())); | 501 | parseNextWindowArgs(arguments, opts, pat); |
430 | else if (command == "focusup") | 502 | return new AttachCmd(pat); |
503 | } else if (command == "nextwindow") { | ||
504 | int opts; | ||
505 | string pat; | ||
506 | parseNextWindowArgs(arguments, opts, pat); | ||
507 | return new NextWindowCmd(opts, pat); | ||
508 | } else if (command == "nextgroup") { | ||
509 | int opts; | ||
510 | string pat; | ||
511 | parseNextWindowArgs(arguments, opts, pat); | ||
512 | opts |= FocusControl::CYCLEGROUPS; | ||
513 | return new NextWindowCmd(opts, pat); | ||
514 | } else if (command == "prevwindow") { | ||
515 | int opts; | ||
516 | string pat; | ||
517 | parseNextWindowArgs(arguments, opts, pat); | ||
518 | return new PrevWindowCmd(opts, pat); | ||
519 | } else if (command == "prevgroup") { | ||
520 | int opts; | ||
521 | string pat; | ||
522 | parseNextWindowArgs(arguments, opts, pat); | ||
523 | opts |= FocusControl::CYCLEGROUPS; | ||
524 | return new PrevWindowCmd(opts, pat); | ||
525 | } else if (command == "typeaheadfocus") { | ||
526 | int opts; | ||
527 | string pat; | ||
528 | parseNextWindowArgs(arguments, opts, pat); | ||
529 | return new TypeAheadFocusCmd(opts, pat); | ||
530 | } else if (command == "gotowindow") { | ||
531 | int num, opts; | ||
532 | string args, pat; | ||
533 | FbTk_istringstream iss(arguments.c_str()); | ||
534 | iss >> num; | ||
535 | string::size_type pos = arguments.find_first_of("({"); | ||
536 | if (pos != string::npos && pos != arguments.size()) | ||
537 | args = arguments.c_str() + pos; | ||
538 | parseNextWindowArgs(args, opts, pat); | ||
539 | return new GoToWindowCmd(num, opts, pat); | ||
540 | } else if (command == "clientmenu") { | ||
541 | int opts; | ||
542 | string pat; | ||
543 | parseNextWindowArgs(arguments, opts, pat); | ||
544 | return new ShowClientMenuCmd(opts, pat); | ||
545 | } else if (command == "focusup") | ||
431 | return new DirFocusCmd(FocusControl::FOCUSUP); | 546 | return new DirFocusCmd(FocusControl::FOCUSUP); |
432 | else if (command == "focusdown") | 547 | else if (command == "focusdown") |
433 | return new DirFocusCmd(FocusControl::FOCUSDOWN); | 548 | return new DirFocusCmd(FocusControl::FOCUSDOWN); |
@@ -435,10 +550,6 @@ FbTk::Command *FbCommandFactory::stringToCommand(const std::string &command, | |||
435 | return new DirFocusCmd(FocusControl::FOCUSLEFT); | 550 | return new DirFocusCmd(FocusControl::FOCUSLEFT); |
436 | else if (command == "focusright") | 551 | else if (command == "focusright") |
437 | return new DirFocusCmd(FocusControl::FOCUSRIGHT); | 552 | return new DirFocusCmd(FocusControl::FOCUSRIGHT); |
438 | else if (command == "nextgroup") | ||
439 | return new NextWindowCmd(atoi(arguments.c_str()) ^ FocusControl::CYCLEGROUPS); | ||
440 | else if (command == "prevgroup") | ||
441 | return new PrevWindowCmd(atoi(arguments.c_str()) ^ FocusControl::CYCLEGROUPS); | ||
442 | else if (command == "arrangewindows") | 553 | else if (command == "arrangewindows") |
443 | return new ArrangeWindowsCmd(); | 554 | return new ArrangeWindowsCmd(); |
444 | else if (command == "showdesktop") | 555 | else if (command == "showdesktop") |