summaryrefslogtreecommitdiff
path: root/src/Screen.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/Screen.cc')
-rw-r--r--src/Screen.cc31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/Screen.cc b/src/Screen.cc
index 6242b4a..73703eb 100644
--- a/src/Screen.cc
+++ b/src/Screen.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: Screen.cc,v 1.209 2003/07/28 16:29:24 rathnor Exp $ 25// $Id: Screen.cc,v 1.210 2003/07/28 18:28:03 fluxgen Exp $
26 26
27 27
28#include "Screen.hh" 28#include "Screen.hh"
@@ -56,6 +56,7 @@
56#include "SlitTheme.hh" 56#include "SlitTheme.hh"
57#include "CommandParser.hh" 57#include "CommandParser.hh"
58#include "MenuTheme.hh" 58#include "MenuTheme.hh"
59#include "IconMenuItem.hh"
59 60
60//use GNU extensions 61//use GNU extensions
61#ifndef _GNU_SOURCE 62#ifndef _GNU_SOURCE
@@ -234,6 +235,7 @@ void setupWorkspacemenu(BScreen &scr, FbTk::Menu &menu) {
234 menu.setLabel("Workspace"); 235 menu.setLabel("Workspace");
235 RefCount<Command> new_workspace(new AddWorkspaceCmd(scr)); 236 RefCount<Command> new_workspace(new AddWorkspaceCmd(scr));
236 RefCount<Command> remove_last(new RemoveLastWorkspaceCmd(scr)); 237 RefCount<Command> remove_last(new RemoveLastWorkspaceCmd(scr));
238 //!! TODO: NLS
237 menu.insert("New Workspace", new_workspace); 239 menu.insert("New Workspace", new_workspace);
238 menu.insert("Remove Last", remove_last); 240 menu.insert("Remove Last", remove_last);
239 // for each workspace add workspace name and it's menu to our workspace menu 241 // for each workspace add workspace name and it's menu to our workspace menu
@@ -385,6 +387,9 @@ BScreen::BScreen(FbTk::ResourceManager &rm,
385 387
386 workspacemenu.reset(createMenuFromScreen(*this)); 388 workspacemenu.reset(createMenuFromScreen(*this));
387 workspacemenu->setInternalMenu(); 389 workspacemenu->setInternalMenu();
390 //!! TODO: NLS
391 m_iconmenu.reset(createMenuFromScreen(*this, "Icons"));
392 m_iconmenu->setInternalMenu();
388 393
389 if (*resource.workspaces != 0) { 394 if (*resource.workspaces != 0) {
390 for (int i = 0; i < *resource.workspaces; ++i) { 395 for (int i = 0; i < *resource.workspaces; ++i) {
@@ -401,6 +406,9 @@ BScreen::BScreen(FbTk::ResourceManager &rm,
401 } 406 }
402 407
403 setupWorkspacemenu(*this, *workspacemenu); 408 setupWorkspacemenu(*this, *workspacemenu);
409 //!! TODO: NLS
410 workspacemenu->insert("Icons", m_iconmenu.get());
411 workspacemenu->update();
404 412
405 m_current_workspace = m_workspaces_list.front(); 413 m_current_workspace = m_workspaces_list.front();
406 414
@@ -713,6 +721,7 @@ void BScreen::addIcon(FluxboxWindow *w) {
713 if (! w) return; 721 if (! w) return;
714 722
715 m_icon_list.push_back(w); 723 m_icon_list.push_back(w);
724 updateIconMenu();
716} 725}
717 726
718 727
@@ -726,6 +735,21 @@ void BScreen::removeIcon(FluxboxWindow *w) {
726 if (erase_it != m_icon_list.end()) 735 if (erase_it != m_icon_list.end())
727 m_icon_list.erase(erase_it); 736 m_icon_list.erase(erase_it);
728 737
738 updateIconMenu();
739}
740
741
742void BScreen::updateIconMenu() {
743 m_iconmenu->removeAll();
744 Icons::iterator it = m_icon_list.begin();
745 Icons::iterator it_end = m_icon_list.end();
746 for (; it != it_end; ++it) {
747 FluxboxWindow::ClientList::iterator client_it = (*it)->clientList().begin();
748 FluxboxWindow::ClientList::iterator client_it_end = (*it)->clientList().end();
749 for (; client_it != client_it_end; ++client_it)
750 m_iconmenu->insert(new IconMenuItem(**client_it));
751 }
752 m_iconmenu->update();
729} 753}
730 754
731void BScreen::removeWindow(FluxboxWindow *win) { 755void BScreen::removeWindow(FluxboxWindow *win) {
@@ -737,6 +761,7 @@ void BScreen::removeWindow(FluxboxWindow *win) {
737 761
738 762
739void BScreen::removeClient(WinClient &client) { 763void BScreen::removeClient(WinClient &client) {
764
740 WinClient *cyc = *cycling_window; 765 WinClient *cyc = *cycling_window;
741 WinClient *focused = Fluxbox::instance()->getFocusedWindow(); 766 WinClient *focused = Fluxbox::instance()->getFocusedWindow();
742 focused_list.remove(&client); 767 focused_list.remove(&client);
@@ -750,7 +775,7 @@ void BScreen::removeClient(WinClient &client) {
750 else 775 else
751 Fluxbox::instance()->revertFocus(focused->screen()); 776 Fluxbox::instance()->revertFocus(focused->screen());
752 } 777 }
753 // update client lists 778 // update client lists on all workspaces
754 for_each(getWorkspacesList().begin(), getWorkspacesList().end(), 779 for_each(getWorkspacesList().begin(), getWorkspacesList().end(),
755 mem_fun(&Workspace::updateClientmenu)); 780 mem_fun(&Workspace::updateClientmenu));
756 781
@@ -764,6 +789,8 @@ void BScreen::removeClient(WinClient &client) {
764 break; 789 break;
765 } 790 }
766 } 791 }
792 // the client could be on icon menu so we update it
793 updateIconMenu();
767} 794}
768 795
769FluxboxWindow *BScreen::getIcon(unsigned int index) { 796FluxboxWindow *BScreen::getIcon(unsigned int index) {