X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FWorkspacemenu.cc;h=2ba73e23ae4618cbb11474ac72065fdea21057d1;hb=eb1f1b359f821061e1fe6a2953c8d984474c9ef4;hp=6a1e034b4ac436026f8d8f2e64e041ed37f31fa8;hpb=351f1d03315b84887b7532c35bdd8a49bdce1d43;p=chaz%2Fopenbox diff --git a/src/Workspacemenu.cc b/src/Workspacemenu.cc index 6a1e034b..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,48 +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) { +Workspacemenu::Workspacemenu(BScreen *scrn) : Basemenu(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.getWorkspaceCount())) - 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); +}