we don't like to modify the arguments, const-correctness and other strange code in Xinerama
fluxgen fluxgen
2 files changed,
54 insertions(+),
98 deletions(-)
M
src/BaseDisplay.cc
→
src/BaseDisplay.cc
@@ -22,7 +22,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: BaseDisplay.cc,v 1.9 2002/03/19 14:30:42 fluxgen Exp $ +// $Id: BaseDisplay.cc,v 1.10 2002/03/19 21:19:55 fluxgen Exp $ // use GNU extensions #ifndef _GNU_SOURCE@@ -428,7 +428,7 @@ #ifdef XINERAMA
// check if we have Xinerama extension enabled if (XineramaIsActive(basedisplay->getXDisplay())) { m_hasXinerama = true; - xineramaLastHead = 0; // initialize this + xineramaLastHead = 0; xineramaInfos = XineramaQueryScreens(basedisplay->getXDisplay(), &xineramaNumHeads); } else {@@ -455,7 +455,6 @@ // x,y. If it fails or Xinerama isn't
// activated it'll return head nr 0 //----------------------------------------- unsigned int ScreenInfo::getHead(int x, int y) { - unsigned int head = 0; // is Xinerama extensions enabled? if (hasXinerama()) {@@ -466,25 +465,20 @@ xineramaInfos[xineramaLastHead].width) > x) &&
(xineramaInfos[xineramaLastHead].y_org <= y) && ((xineramaInfos[xineramaLastHead].y_org + xineramaInfos[xineramaLastHead].height) > y)) { - head = xineramaLastHead; - + return xineramaLastHead; } else { // go trough all the heads, and search - for (int i = 0; (signed) head < xineramaNumHeads; i++) { - if ((xineramaInfos[i].x_org <= x) && - ((xineramaInfos[i].x_org + xineramaInfos[i].width) > x) && - (xineramaInfos[i].y_org <= y) && - ((xineramaInfos[i].y_org + xineramaInfos[i].height) > y)) { - // TODO: actually set this to last head? - head = xineramaLastHead = i; - - break; // we don't wanna spend CPU searching what we - } // allready have found, do we? + for (int i = 0; (signed) i < xineramaNumHeads; i++) { + if (xineramaInfos[i].x_org <= x && + xineramaInfos[i].x_org + xineramaInfos[i].width) > x && + xineramaInfos[i].y_org <= y && + xineramaInfos[i].y_org + xineramaInfos[i].height) > y) + return (xineramaLastHead = i); } } } - return head; + return 0; } //------------- getCurrHead --------------@@ -492,52 +486,27 @@ // Searches for the head that the pointer
// currently is on, if it isn't found // the first one is returned //---------------------------------------- -unsigned int ScreenInfo::getCurrHead(void) { - unsigned int head = 0; +unsigned int ScreenInfo::getCurrHead(void) const { // is Xinerama extensions enabled? if (hasXinerama()) { - int pX, pY, wX, wY; + int x, y, wX, wY; unsigned int mask; Window rRoot, rChild; - - // check if last head is still active - if ((xineramaInfos[xineramaLastHead].x_org <= pX) && - ((xineramaInfos[xineramaLastHead].x_org + - xineramaInfos[xineramaLastHead].width) > pX) && - (xineramaInfos[xineramaLastHead].y_org <= pY) && - ((xineramaInfos[xineramaLastHead].y_org + - xineramaInfos[xineramaLastHead].height) > pY)) { - head = xineramaLastHead; - - } else { - // get pointer cordinates , we need to know were we are! - if ( (XQueryPointer(basedisplay->getXDisplay(), root_window, - &rRoot, &rChild, &pX, &pY, &wX, &wY, &mask)) != 0 ) { - - // go trough all the heads, and search - for (int i = 0; i < xineramaNumHeads; i++) { - if ((xineramaInfos[i].x_org <= pX) && - ((xineramaInfos[i].x_org + xineramaInfos[i].width) > pX) && - (xineramaInfos[i].y_org <= pY) && - ((xineramaInfos[i].y_org + xineramaInfos[i].height) > pY)) { - - head = xineramaLastHead = i; - break; // we don't wanna spend CPU searching what we - } // allready have found, do we? - } - } + // get pointer cordinates + if ( (XQueryPointer(basedisplay->getXDisplay(), root_window, + &rRoot, &rChild, &x, &y, &wX, &wY, &mask)) != 0 ) { + return getHead(x, y); } } - return head; + return 0; } //----------- getHeadWidth ------------ -// Returns the width of head nr head +// Returns the width of head //------------------------------------- unsigned int ScreenInfo::getHeadWidth(unsigned int head) { - unsigned int width; if (hasXinerama()) { if ((signed) head >= xineramaNumHeads) {@@ -545,23 +514,19 @@ #ifdef DEBUG
cerr << __FILE__ << ":" <<__LINE__ << ": " << "Head: " << head << " doesn't exist!" << endl; #endif // DEBUG - - head = xineramaNumHeads - 1; - } - - width = xineramaInfos[head].width; - } else { - width = getWidth(); + return xineramaInfos[xineramaNumHeads - 1].width; + } else + return xineramaInfos[head].width; } + + return getWidth(); - return width; } //----------- getHeadHeight ------------ -// Returns the heigt of head nr head +// Returns the heigt of head //-------------------------------------- -unsigned int ScreenInfo::getHeadHeight(unsigned int head) { - unsigned int height; +unsigned int ScreenInfo::getHeadHeight(unsigned int head) const { if (hasXinerama()) { if ((signed) head >= xineramaNumHeads) {@@ -569,59 +534,49 @@ #ifdef DEBUG
cerr << __FILE__ << ":" <<__LINE__ << ": " << "Head: " << head << " doesn't exist!" << endl; #endif // DEBUG - - head = xineramaNumHeads - 1; - } - - height = xineramaInfos[head].height; - } else { - height = getHeight(); + return xineramaInfos[xineramaNumHeads - 1].height; + } else + return xineramaInfos[head].height; } - return height; + return getHeight(); } //----------- getHeadX ----------------- // Returns the X start of head nr head //-------------------------------------- -int ScreenInfo::getHeadX(unsigned int head) { - int x = 0; - +int ScreenInfo::getHeadX(unsigned int head) const { if (hasXinerama()) { if ((signed) head >= xineramaNumHeads) { #ifdef DEBUG cerr << __FILE__ << ":" <<__LINE__ << ": " << "Head: " << head << " doesn't exist!" << endl; #endif // DEBUG - - head = xineramaNumHeads - 1; - } - x = xineramaInfos[head].x_org; + return xineramaInfos[head = xineramaNumHeads - 1].x_org; + } else + return xineramaInfos[head].x_org; } - return x; + return 0; } //----------- getHeadY ----------------- -// Returns the Y start of head nr head +// Returns the Y start of head //-------------------------------------- -int ScreenInfo::getHeadY(unsigned int head) { - int y = 0; - +int ScreenInfo::getHeadY(unsigned int head) const { if (hasXinerama()) { if ((signed) head >= xineramaNumHeads) { #ifdef DEBUG cerr << __FILE__ << ":" <<__LINE__ << ": " << "Head: " << head << " doesn't exist!" << endl; #endif // DEBUG - - head = xineramaNumHeads - 1; - } - y = xineramaInfos[head].y_org; + return xineramaInfos[xineramaNumHeads - 1].y_org; + } else + return xineramaInfos[head].y_org; } - return y; + return 0; } #endif // XINERAMA
M
src/BaseDisplay.hh
→
src/BaseDisplay.hh
@@ -22,7 +22,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: BaseDisplay.hh,v 1.16 2002/03/19 14:30:42 fluxgen Exp $ +// $Id: BaseDisplay.hh,v 1.17 2002/03/19 21:19:55 fluxgen Exp $ #ifndef BASEDISPLAY_HH #define BASEDISPLAY_HH@@ -32,9 +32,9 @@ #include "FbAtoms.hh"
#include <X11/Xlib.h> #ifdef XINERAMA - extern "C" { - #include <X11/extensions/Xinerama.h> - } +extern "C" { +#include <X11/extensions/Xinerama.h> +} #endif // XINERAMA #include <list>@@ -166,12 +166,12 @@ inline const unsigned int getWidth(void) const { return width; }
inline const unsigned int getHeight(void) const { return height; } #ifdef XINERAMA - inline bool hasXinerama(void) { return m_hasXinerama; } - inline int getNumHeads(void) { return xineramaNumHeads; } - unsigned int getHead(int x, int y); - unsigned int getCurrHead(void); - unsigned int getHeadWidth(unsigned int head); - unsigned int getHeadHeight(unsigned int head); + inline bool hasXinerama(void) const { return m_hasXinerama; } + inline int getNumHeads(void) const { return xineramaNumHeads; } + unsigned int getHead(int x, int y) const; + unsigned int getCurrHead(void) const; + unsigned int getHeadWidth(unsigned int head) const; + unsigned int getHeadHeight(unsigned int head) const; int getHeadX(unsigned int head); int getHeadY(unsigned int head); #endif // XINERAMA@@ -184,13 +184,14 @@ Colormap colormap;
int depth, screen_number; unsigned int width, height; - -}; - #ifdef XINERAMA bool m_hasXinerama; int xineramaMajor, xineramaMinor, xineramaNumHeads, xineramaLastHead; XineramaScreenInfo *xineramaInfos; #endif // XINERAMA + +}; + + #endif // BASEDISPLAY_HH