fix up nextFocus/prevFocu for cycling through groups (not just clients)

This commit is contained in:
rathnor 2003-06-15 11:37:53 +00:00
parent 97fcf60f46
commit 1856480901
2 changed files with 15 additions and 13 deletions

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Screen.cc,v 1.181 2003/06/12 15:24:37 fluxgen Exp $
// $Id: Screen.cc,v 1.182 2003/06/15 11:37:53 rathnor Exp $
#include "Screen.hh"
@ -1536,7 +1536,7 @@ void BScreen::nextFocus(int opts) {
// keep track of the originally selected window in a set
WinClient &last_client = fbwin->winClient();
if (! (doSkipWindow(fbwin, opts) || !fbwin->setCurrentClient(**it)) ) {
if (! (doSkipWindow(**it, opts) || !fbwin->setCurrentClient(**it)) ) {
// moved onto a new fbwin
if (!cycling_last || cycling_last->fbwindow() != fbwin) {
if (cycling_last)
@ -1566,7 +1566,7 @@ void BScreen::nextFocus(int opts) {
if (it == wins.end())
it = wins.begin();
// see if the window should be skipped
if (! (doSkipWindow((*it), opts) || !(*it)->setInputFocus()) )
if (! (doSkipWindow((*it)->winClient(), opts) || !(*it)->setInputFocus()) )
break;
} while ((*it) != focused);
if ((*it) != focused && it != wins.end())
@ -1627,7 +1627,7 @@ void BScreen::prevFocus(int opts) {
WinClient &last_client = fbwin->winClient();
if (! (doSkipWindow(fbwin, opts) || !fbwin->setCurrentClient(**it)) ) {
if (! (doSkipWindow(**it, opts) || !fbwin->setCurrentClient(**it)) ) {
// moved onto a new fbwin
if (!cycling_last || cycling_last->fbwindow() != fbwin) {
if (cycling_last)
@ -1659,7 +1659,7 @@ void BScreen::prevFocus(int opts) {
it = wins.end();
--it;
// see if the window should be skipped
if (! (doSkipWindow((*it), opts) || !(*it)->setInputFocus()) )
if (! (doSkipWindow((*it)->winClient(), opts) || !(*it)->setInputFocus()) )
break;
} while ((*it) != focused);
@ -2411,11 +2411,13 @@ void BScreen::leftWorkspace(const int delta) {
/**
@return true if the windows should be skiped else false
*/
bool BScreen::doSkipWindow(const FluxboxWindow *w, int opts) {
return ((opts & CYCLESKIPSTUCK) != 0 && w->isStuck() || // skip if stuck
/* (opts & CYCLESKIPLOWERTABS) != 0 && w->isLowerTab() || // skip if lower tab
*/
(opts & CYCLESKIPSHADED) != 0 && w->isShaded()); // skip if shaded
bool BScreen::doSkipWindow(const WinClient &winclient, int opts) {
const FluxboxWindow *win = winclient.fbwindow();
return (!win ||
(opts & CYCLESKIPSTUCK) != 0 && win->isStuck() || // skip if stuck
(opts & CYCLEGROUPS) != 0 && win->winClient() != winclient || // skip if not active client (i.e. only visit each fbwin once)
(opts & CYCLESKIPSHADED) != 0 && win->isShaded() // skip if shaded
);
}
void BScreen::renderGeomWindow() {

View file

@ -22,7 +22,7 @@
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
// $Id: Screen.hh,v 1.104 2003/06/12 15:22:59 fluxgen Exp $
// $Id: Screen.hh,v 1.105 2003/06/15 11:37:53 rathnor Exp $
#ifndef SCREEN_HH
#define SCREEN_HH
@ -339,7 +339,7 @@ public:
UNDERMOUSEPLACEMENT, LEFTRIGHT, RIGHTLEFT, TOPBOTTOM, BOTTOMTOP };
// prevFocus/nextFocus option bits
enum { CYCLESKIPLOWERTABS = 0x01, CYCLESKIPSTUCK = 0x02, CYCLESKIPSHADED = 0x04,
enum { CYCLEGROUPS = 0x01, CYCLESKIPSTUCK = 0x02, CYCLESKIPSHADED = 0x04,
CYCLELINEAR = 0x08, CYCLEDEFAULT = 0x00 };
class ScreenSubject:public FbTk::Subject {
@ -359,7 +359,7 @@ private:
void initMenu();
bool doSkipWindow(const FluxboxWindow *w, int options);
bool doSkipWindow(const WinClient &winclient, int options);
void renderGeomWindow();