all repos — fluxbox @ 269459e1aa0a8c0ab9be67cf11bb836ecc191f31

custom fork of the fluxbox windowmanager

don't flash original window in the middle of cycling focus
Mark Tiefenbruck mark@fluxbox.org
commit

269459e1aa0a8c0ab9be67cf11bb836ecc191f31

parent

b3da022ee22acd67f6ef6210e7412dbfc8fdfa70

M ChangeLogChangeLog

@@ -1,6 +1,8 @@

(Format: Year/Month/Day) Changes for 1.1.2 *08/10/01: + * Don't flash original window while cycling (Mark) + FocusControl.cc FbTk/XLayer.cc/hh * Reset background when screen changes resolution (Mark) Screen.cc RootTheme.cc/hh * Restore missing config files on reconfigure (Mark)
M src/FbTk/Layer.hhsrc/FbTk/Layer.hh

@@ -43,7 +43,6 @@ /// move item to top

virtual void raise(ItemType &item); /// move item to bottom virtual void lower(ItemType &item); - virtual void restack(); /// @return layer item on specific position, on failure 0 ItemType *getItem(unsigned int position); /// @return number of elements in layer

@@ -52,6 +51,8 @@ /// @return layer list

const ListType &itemList() const { return m_list; } /// @return layer list ListType &itemList() { return m_list; } +protected: + virtual void restack(); private: ListType m_list; };
M src/FbTk/MultLayers.hhsrc/FbTk/MultLayers.hh

@@ -52,7 +52,6 @@ void lowerLayer(XLayerItem &item);

void moveToLayer(XLayerItem &item, int layernum); int size(); - void restack(); XLayer *getLayer(size_t num); const XLayer *getLayer(size_t num) const;

@@ -62,10 +61,10 @@ void lock() { ++m_lock; }

void unlock() { if (--m_lock == 0) restack(); } private: - std::vector<XLayer *> m_layers; + void restack(); + std::vector<XLayer *> m_layers; int m_lock; - }; };
M src/FbTk/XLayer.ccsrc/FbTk/XLayer.cc

@@ -37,7 +37,7 @@ using std::endl;

#endif // DEBUG XLayer::XLayer(MultLayers &manager, int layernum): - m_manager(manager), m_layernum(layernum) { + m_manager(manager), m_layernum(layernum), m_needs_restack(false) { } XLayer::~XLayer() {

@@ -70,6 +70,7 @@ XRestackWindows(FbTk::App::instance()->display(), winlist, j);

delete [] winlist; + m_needs_restack = false; } int XLayer::countWindows() {

@@ -177,8 +178,11 @@

void XLayer::raise(XLayerItem &item) { // assume it is already in this layer - if (&item == itemList().front()) + if (&item == itemList().front()) { + if (m_needs_restack) + restack(); return; // nothing to do + } iterator it = find(itemList().begin(), itemList().end(), &item); if (it != itemList().end())

@@ -198,7 +202,7 @@

void XLayer::tempRaise(XLayerItem &item) { // assume it is already in this layer - if (&item == itemList().front()) + if (!m_needs_restack && &item == itemList().front()) return; // nothing to do iterator it = find(itemList().begin(), itemList().end(), &item);

@@ -212,14 +216,18 @@

// don't add it back to the top stackBelowItem(&item, m_manager.getLowestItemAboveLayer(m_layernum)); + m_needs_restack = true; } void XLayer::lower(XLayerItem &item) { // assume already in this layer // is it already the lowest? - if (&item == itemList().back()) + if (&item == itemList().back()) { + if (m_needs_restack) + restack(); return; // nothing to do + } iterator it = find(itemList().begin(), itemList().end(), &item); if (it != itemList().end())
M src/FbTk/XLayer.hhsrc/FbTk/XLayer.hh

@@ -44,7 +44,6 @@ //typedef std::list<XLayerItem *>::reverse_iterator reverse_iterator;

void setLayerNum(int layernum) { m_layernum = layernum; }; int getLayerNum() { return m_layernum; }; - void restack(); // Put all items on the same layer (called when layer item added to) void alignItem(XLayerItem &item); int countWindows();

@@ -73,9 +72,11 @@ void lowerLayer(XLayerItem &item);

void moveToLayer(XLayerItem &item, int layernum); private: + void restack(); + MultLayers &m_manager; int m_layernum; - + bool m_needs_restack; }; } // namespace FbTk
M src/FocusControl.ccsrc/FocusControl.cc

@@ -146,8 +146,6 @@ return;

// if we were already cycling, then restore the old state if (m_cycling_last) { - m_screen.layerManager().restack(); - // set back to originally selected window in that group m_cycling_last->fbwindow()->setCurrentClient(*m_cycling_last, false);