-// Workspacemenu.cc for Openbox
-// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
+// -*- mode: C++; indent-tabs-mode: nil; -*-
+// Workspacemenu.cc for Blackbox - an X11 Window manager
+// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
// Permission is hereby granted, free of charge, to any person obtaining a
// 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);
+}