#include "Window.hh"
#include "Workspace.hh"
#include "Windowmenu.hh"
+#include "XAtom.hh"
Workspace::Workspace(BScreen *scrn, unsigned int i) {
screen = scrn;
+ xatom = screen->getBlackbox()->getXAtom();
cascade_x = cascade_y = 32;
lastfocus = (BlackboxWindow *) 0;
- setName(screen->getNameOfWorkspace(id));
+ setName("");
}
void Workspace::appendStackOrder(BlackboxWindowList &stack_order) const {
- BlackboxWindowList::const_iterator it = stackingList.begin();
- const BlackboxWindowList::const_iterator end = stackingList.end();
+ BlackboxWindowList::const_reverse_iterator it = stackingList.rbegin();
+ const BlackboxWindowList::const_reverse_iterator end = stackingList.rend();
for (; it != end; ++it)
stack_order.push_back(*it);
}
return (w == windowList.back());
}
+
void Workspace::setCurrent(void) {
screen->changeWorkspaceID(id);
}
if (! new_name.empty()) {
name = new_name;
} else {
- string tmp =i18n(WorkspaceSet, WorkspaceDefaultNameFormat, "Workspace %d");
- assert(tmp.length() < 32);
- char default_name[32];
- sprintf(default_name, tmp.c_str(), id + 1);
- name = default_name;
+ // attempt to get from the _NET_WM_DESKTOP_NAMES property
+ XAtom::StringVect namesList;
+ unsigned long numnames = id + 1;
+ if (xatom->getValue(screen->getRootWindow(), XAtom::net_desktop_names,
+ XAtom::utf8, numnames, namesList) &&
+ namesList.size() > id) {
+ name = namesList[id];
+ } else {
+ string tmp =i18n(WorkspaceSet, WorkspaceDefaultNameFormat,
+ "Workspace %d");
+ assert(tmp.length() < 32);
+ char default_name[32];
+ sprintf(default_name, tmp.c_str(), id + 1);
+ name = default_name;
+ }
+ }
+
+ // reset the property with the new name
+ XAtom::StringVect namesList;
+ unsigned long numnames = (unsigned) -1;
+ if (xatom->getValue(screen->getRootWindow(), XAtom::net_desktop_names,
+ XAtom::utf8, numnames, namesList)) {
+ if (namesList.size() > id)
+ namesList[id] = name;
+ else
+ namesList.push_back(name);
}
+ xatom->setValue(screen->getRootWindow(), XAtom::net_desktop_names,
+ XAtom::utf8, namesList);
clientmenu->setLabel(name);
clientmenu->update();