X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FWorkspace.cc;h=60efba1e3845badb92d84e937b1b09f8346ce3ac;hb=be2f47223c17c399e05436a34ba4140f2fc44fc9;hp=50a9f4fbca28145bb46dd882c589d41989fd8543;hpb=f4c0547b7a90c9647a2c39c3d1a737142eab088e;p=chaz%2Fopenbox diff --git a/src/Workspace.cc b/src/Workspace.cc index 50a9f4fb..60efba1e 100644 --- a/src/Workspace.cc +++ b/src/Workspace.cc @@ -55,10 +55,12 @@ using std::string; #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; @@ -68,7 +70,7 @@ Workspace::Workspace(BScreen *scrn, unsigned int i) { lastfocus = (BlackboxWindow *) 0; - setName(screen->getNameOfWorkspace(id)); + setName(""); } @@ -379,8 +381,8 @@ unsigned int Workspace::getCount(void) const { 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); } @@ -395,6 +397,7 @@ bool Workspace::isLastWindow(const BlackboxWindow* const w) const { return (w == windowList.back()); } + void Workspace::setCurrent(void) { screen->changeWorkspaceID(id); } @@ -404,12 +407,35 @@ void Workspace::setName(const string& new_name) { 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();