we don't like to modify the arguments, const-correctness and other strange code in Xinerama

This commit is contained in:
fluxgen 2002-03-19 21:19:55 +00:00
parent 95aeda2627
commit ccf9f5749e
2 changed files with 54 additions and 98 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: 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 @@ ScreenInfo::ScreenInfo(BaseDisplay *d, int num) {
// 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 @@ ScreenInfo::~ScreenInfo(void) {
// 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 @@ unsigned int ScreenInfo::getHead(int x, int y) {
(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 @@ unsigned int ScreenInfo::getHead(int x, int y) {
// 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 @@ unsigned int ScreenInfo::getHeadWidth(unsigned int head) {
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 width;
return getWidth();
}
//----------- 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 @@ unsigned int ScreenInfo::getHeadHeight(unsigned int head) {
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

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: 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 <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 @@ public:
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 @@ private:
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