From 4d0a0c9e114cbadf3d06f4a71d5043bda847c844 Mon Sep 17 00:00:00 2001 From: simonb Date: Sun, 16 Apr 2006 11:29:38 +0000 Subject: add CloseAllWindows key action thanks Adriano Dal Bosco - adbosco at users.sourceforge.net --- ChangeLog | 5 +++++ src/FbCommandFactory.cc | 3 +++ src/WorkspaceCmd.cc | 21 +++++++++++++++++++++ src/WorkspaceCmd.hh | 6 ++++++ 4 files changed, 35 insertions(+) diff --git a/ChangeLog b/ChangeLog index 5d736a2..9bcaf85 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,11 @@ (Format: Year/Month/Day) Changes for 0.9.16: *06/04/16: + * Add "CloseAllWindows" key binding + (thanks Adriano Dal Bosco - adbosco at users.sourceforge.net) + - Useful to trigger all "close" actions before flux exit (or other) + to catch any pending file saves etc... + WorkspaceCmd.hh/cc FbCommandFactory.cc * Fix all warnings with (gcc 3.4.6) -Wall, mainly sign comparisons (Simon) ClientPattern.cc Container.cc FbWinFrame.cc IconButton.cc IconbarTool.cc ScreenPlacement.hh ScreenResources.cc ToolFactory.cc Toolbar.cc diff --git a/src/FbCommandFactory.cc b/src/FbCommandFactory.cc index 4bf1dd5..a749684 100644 --- a/src/FbCommandFactory.cc +++ b/src/FbCommandFactory.cc @@ -51,6 +51,7 @@ FbCommandFactory::FbCommandFactory() { "arrangewindows", "bindkey", "close", + "closeallwindows", "commanddialog", "deiconify", "detachclient", @@ -310,6 +311,8 @@ FbTk::Command *FbCommandFactory::stringToCommand(const std::string &command, return new CurrentWindowCmd(&FluxboxWindow::lowerLayer); else if (command == "close") return new CurrentWindowCmd(&FluxboxWindow::close); + else if (command == "closeallwindows") + return new CloseAllWindowsCmd(); else if (command == "shade" || command == "shadewindow") return new CurrentWindowCmd(&FluxboxWindow::shade); else if (command == "stick" || command == "stickwindow") diff --git a/src/WorkspaceCmd.cc b/src/WorkspaceCmd.cc index 3673e17..9951e0e 100644 --- a/src/WorkspaceCmd.cc +++ b/src/WorkspaceCmd.cc @@ -238,3 +238,24 @@ void ShowDesktopCmd::execute() { windows.end(), std::mem_fun(&FluxboxWindow::iconify)); } + +void CloseAllWindowsCmd::execute() { + BScreen *screen = Fluxbox::instance()->mouseScreen(); + if (screen == 0) + return; + + BScreen::Workspaces::iterator workspace_it = screen->getWorkspacesList().begin(); + BScreen::Workspaces::iterator workspace_it_end = screen->getWorkspacesList().end(); + for (; workspace_it != workspace_it_end; ++workspace_it) { + Workspace::Windows windows((*workspace_it)->windowList()); + std::for_each(windows.begin(), + windows.end(), + std::mem_fun(&FluxboxWindow::close)); + } + BScreen::Icons::iterator icon_it = screen->iconList().begin(); + BScreen::Icons::iterator icon_it_end = screen->iconList().end(); + for (; icon_it != icon_it_end; ++icon_it ) { + (*icon_it)->close(); + } + +} diff --git a/src/WorkspaceCmd.hh b/src/WorkspaceCmd.hh index 786492d..1e5b04d 100644 --- a/src/WorkspaceCmd.hh +++ b/src/WorkspaceCmd.hh @@ -104,4 +104,10 @@ public: void execute(); }; + +class CloseAllWindowsCmd: public FbTk::Command { +public: + void execute(); +}; + #endif // WORKSPACECMD_HH -- cgit v0.11.2