stoped
fluxgen fluxgen
1 files changed,
66 insertions(+),
50 deletions(-)
jump to
M
src/FbTk/XLayer.cc
→
src/FbTk/XLayer.cc
@@ -20,7 +20,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: XLayer.cc,v 1.3 2003/02/02 16:32:41 rathnor Exp $ +// $Id: XLayer.cc,v 1.4 2003/02/03 13:45:23 fluxgen Exp $ #include "XLayer.hh" #include "XLayerItem.hh"@@ -35,45 +35,42 @@ m_manager(manager), m_layernum(layernum) {
} XLayer::~XLayer() { + } void XLayer::restack() { - int numWindows = countWindows(); + int num_windows = countWindows(); // each LayerItem can contain several windows iterator it = itemList().begin(); iterator it_end = itemList().end(); - it = itemList().begin(); - it_end = itemList().end(); - Window *winlist = new Window[numWindows]; + Window *winlist = new Window[num_windows]; size_t j=0; - for (size_t i=0; it != it_end; ++it, i++) { - XLayerItem::Windows::const_iterator wit = (*it)->getWindows().begin(); - XLayerItem::Windows::const_iterator wit_end = (*it)->getWindows().end(); - for (; wit != wit_end; ++wit, j++) { - winlist[j] = (*wit); - } + for (size_t window=0; it != it_end; ++it, window++) { + winlist[window] = (*it)->window(); } - XRestackWindows(FbTk::App::instance()->display(), winlist, numWindows); + XRestackWindows(FbTk::App::instance()->display(), winlist, num_windows); delete [] winlist; } int XLayer::countWindows() { - int numWindows = 0; + int num_windows = 0; iterator it = itemList().begin(); iterator it_end = itemList().end(); for (size_t i=0; it != it_end; ++it, i++) { - numWindows += (*it)->numWindows(); + num_windows ++; // one window per item } - return numWindows; + return num_windows; } void XLayer::stackBelowItem(XLayerItem *item, XLayerItem *above) { + //!! What???? + // little optimisation - Window *winlist; + /* Window *winlist; size_t i, size, num = item->numWindows(); if (!above) { // must need to go right to top@@ -105,61 +102,70 @@
XRestackWindows(FbTk::App::instance()->display(), winlist, size); delete [] winlist; + */ } XLayer::iterator XLayer::insert(XLayerItem &item, unsigned int pos) { #ifdef DEBUG - if (pos != 0) + if (pos != 0)//!! Why???? cerr<<__FILE__<<"("<<__LINE__<<"): Insert using non-zero position not valid in XLayer"<<endl; #endif // DEBUG itemList().push_front(&item); - item.setLayer(this); // restack below next window up - item.setLayerIterator(itemList().begin()); + // item.setLayerIterator(itemList().begin()); stackBelowItem(&item, m_manager.getLowestItemAboveLayer(m_layernum)); return itemList().begin(); } -void XLayer::remove(XLayerItem &item) { - itemList().erase(item.getLayerIterator()); - item.setLayer(0); +void XLayer::remove(XLayerItem &item) { + iterator it = itemList().begin(); + iterator it_end = itemList().end(); + for (; it != it_end; ++it) { + if (*it == &item) + itemList().erase(it); + } } void XLayer::cycleUp() { // need to find highest visible window, and move it to bottom iterator it = itemList().begin(); iterator it_end = itemList().end(); - while (it != it_end && !(*it)->visible()) ++it; + while (it != it_end && !(*it)->visible()) + ++it; // if there is something to do - if (it != it_end) { + if (it != it_end) lower(**it); - } + } void XLayer::cycleDown() { // need to find highest visible window, and move it to bottom reverse_iterator it = itemList().rbegin(); reverse_iterator it_end = itemList().rend(); - while (it != it_end && !(*it)->visible()) ++it; + while (it != it_end && !(*it)->visible()) + ++it; // if there is something to do - if (it != it_end) { + if (it != it_end) raise(**it); - } } void XLayer::stepUp(XLayerItem &item) { // need to find next visible window upwards, and put it above that - if (&item == itemList().front()) return; // nothing to do + if (&item == itemList().front()) + return; // nothing to do + //!! better stable and slow than buggy! + /* // TODO: is there a better way of doing this? iterator it = item.getLayerIterator(); it--; - while ((*it) != itemList().front() && !(*it)->visible()) --it; + while ((*it) != itemList().front() && !(*it)->visible()) + --it; if (*it == itemList().front() && !(*it)->visible()) { // reached front item, but it wasn't visible, therefore it was already raised@@ -176,33 +182,36 @@ it--;
stackBelowItem(&item, *it); } } + */ } void XLayer::stepDown(XLayerItem &item) { // need to find next visible window down, and put it below that - if (&item == itemList().back()) return; // nothing to do + if (&item == itemList().back()) + return; // nothing to do - - iterator it = item.getLayerIterator(); + //!! better stable and slow than buggy! + /* iterator it = item.getLayerIterator(); it++; iterator it_end = itemList().end(); - while (it != it_end && !(*it)->visible()) ++it; + while (it != it_end && !(*it)->visible()) + ++it; - if (it != it_end) { + if (it != it_end) stackBelowItem(&item, *it); - } + */ } +//!! void XLayer::raise(XLayerItem &item) { // assume it is already in this layer - if (&item == itemList().front()) { + if (&item == itemList().front()) return; // nothing to do - } - itemList().erase(item.getLayerIterator()); + // itemList().erase(item.getLayerIterator()); itemList().push_front(&item); - item.setLayerIterator(itemList().begin()); + // item.setLayerIterator(itemList().begin()); stackBelowItem(&item, m_manager.getLowestItemAboveLayer(m_layernum)); }@@ -212,6 +221,8 @@ // assume already in this layer
if (&item == itemList().back()) return; // nothing to do + //!! better stable and slow than buggy! + /* itemList().erase(item.getLayerIterator()); itemList().push_back(&item); iterator it = itemList().end();@@ -219,28 +230,33 @@ it--;
item.setLayerIterator(it); it--; stackBelowItem(&item, *it); // must exist, otherwise item must == itemList().back() + */ } XLayerItem *XLayer::getLowestItem() { - if (itemList().empty()) return 0; - else return itemList().back(); + if (itemList().empty()) + return 0; + else + return itemList().back(); } XLayerItem *XLayer::getItemBelow(XLayerItem &item) { - iterator it = item.getLayerIterator(); - if (it == itemList().begin()) { + //!! better stable and slow than buggy! + /* iterator it = item.getLayerIterator(); + if (it == itemList().begin()) return 0; - } else { + else return *(--it); - } + */ } XLayerItem *XLayer::getItemAbove(XLayerItem &item) { - iterator it = item.getLayerIterator(); + //!! better stable and slow than buggy! + /* iterator it = item.getLayerIterator(); it++; - if (it == itemList().end()) { + if (it == itemList().end()) return 0; - } else { + else return *it; - } + */ }