X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FWorkspacemenu.cc;h=2ba73e23ae4618cbb11474ac72065fdea21057d1;hb=bb9a37ec3d10d529f4043ba76e149f0bd510c111;hp=bec5f4553ae02fa6429d4454d99d07289136690d;hpb=dfc5f034581f5a26cba5c4811500438f89f0634a;p=chaz%2Fopenbox diff --git a/src/Workspacemenu.cc b/src/Workspacemenu.cc index bec5f455..2ba73e23 100644 --- a/src/Workspacemenu.cc +++ b/src/Workspacemenu.cc @@ -1,5 +1,6 @@ -// Workspacemenu.cc for Openbox -// Copyright (c) 2001 Sean 'Shaleh' Perry +// -*- mode: C++; indent-tabs-mode: nil; -*- +// Workspacemenu.cc for Blackbox - an X11 Window manager +// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry // Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net) // // Permission is hereby granted, free of charge, to any person obtaining a @@ -20,50 +21,68 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// stupid macros needed to access some functions in version 2 of the GNU C -// library -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif // _GNU_SOURCE - #ifdef HAVE_CONFIG_H # include "../config.h" #endif // HAVE_CONFIG_H -#include "i18n.h" -#include "openbox.h" -#include "Screen.h" -#include "Toolbar.h" -#include "Workspacemenu.h" -#include "Workspace.h" +#include "i18n.hh" +#include "blackbox.hh" +#include "Clientmenu.hh" +#include "Screen.hh" +#include "Toolbar.hh" +#include "Workspacemenu.hh" +#include "Workspace.hh" Workspacemenu::Workspacemenu(BScreen *scrn) : Basemenu(scrn) { - screen = scrn; - setInternalMenu(); - setLabel(i18n->getMessage(WorkspacemenuSet, WorkspacemenuWorkspacesTitle, - "Workspaces")); - insert(i18n->getMessage(WorkspacemenuSet, WorkspacemenuNewWorkspace, - "New Workspace")); - insert(i18n->getMessage(WorkspacemenuSet, WorkspacemenuRemoveLast, - "Remove Last")); + setLabel(i18n(WorkspacemenuSet, WorkspacemenuWorkspacesTitle, "Workspaces")); + insert(i18n(WorkspacemenuSet, WorkspacemenuNewWorkspace, "New Workspace")); + insert(i18n(WorkspacemenuSet, WorkspacemenuRemoveLast, "Remove Last")); } -void Workspacemenu::itemSelected(int button, int index) { +void Workspacemenu::itemSelected(int button, unsigned int index) { if (button != 1) return; - if (index == 0) - screen->addWorkspace(); - else if (index == 1) - screen->removeLastWorkspace(); - else if ((screen->getCurrentWorkspace()->getWorkspaceID() != - (index - 2)) && ((index - 2) < screen->getCount())) - screen->changeWorkspaceID(index - 2); - - if (! (screen->getWorkspacemenu()->isTorn() || isTorn())) + if (index == 0) { + getScreen()->addWorkspace(); + } else if (index == 1) { + getScreen()->removeLastWorkspace(); + } else { + // subtract 2 because the workspace menu has 2 extra items at the top before + // the list of the workspace names + index -= 2; + const Workspace* const wkspc = getScreen()->getCurrentWorkspace(); + if (wkspc->getID() != index && index < getScreen()->getWorkspaceCount()) + getScreen()->changeWorkspaceID(index); + } + if (! (getScreen()->getWorkspacemenu()->isTorn() || isTorn())) hide(); } + + +void Workspacemenu::changeWorkspaceLabel(unsigned int index, + const std::string& label) { + // add 2 because the workspace menu has 2 extra items at the top before the + // list of the workspace names + changeItemLabel(index + 2, label); +} + + +void Workspacemenu::insertWorkspace(Workspace *wkspc) { + assert(wkspc); + // add 2 because the workspace menu has 2 extra items at the top before the + // list of the workspace names + insert(wkspc->getName(), wkspc->getMenu(), wkspc->getID() + 2); +} + + +void Workspacemenu::removeWorkspace(Workspace *wkspc) { + assert(wkspc); + // add 2 because the workspace menu has 2 extra items at the top before the + // list of the workspace names + remove(wkspc->getID() + 2); +}