make rect a proper pyobject. use "typesafety"
This commit is contained in:
parent
9e4d1bbabc
commit
0820c5100d
5 changed files with 20 additions and 17 deletions
|
@ -123,9 +123,9 @@ line argument.\n\n"));
|
||||||
OBDisplay = self;
|
OBDisplay = self;
|
||||||
|
|
||||||
// Get information on all the screens which are available.
|
// Get information on all the screens which are available.
|
||||||
self->screenInfoList = PyList_New(ScreenCount(self->display));
|
self->screenInfoList = (PyListObject*)PyList_New(ScreenCount(self->display));
|
||||||
for (i = 0; i < ScreenCount(self->display); ++i)
|
for (i = 0; i < ScreenCount(self->display); ++i)
|
||||||
PyList_SetItem(self->screenInfoList, i, OtkScreenInfo_New(i));
|
PyList_SetItem((PyObject*)self->screenInfoList, i, OtkScreenInfo_New(i));
|
||||||
|
|
||||||
Py_INCREF(OBDisplay); // make sure it stays around!!
|
Py_INCREF(OBDisplay); // make sure it stays around!!
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ void OtkDisplay_Ungrab(OtkDisplay *self)
|
||||||
|
|
||||||
OtkScreenInfo *OtkDisplay_ScreenInfo(OtkDisplay *self, int num)
|
OtkScreenInfo *OtkDisplay_ScreenInfo(OtkDisplay *self, int num)
|
||||||
{
|
{
|
||||||
PyObject *py = PyList_GetItem(self->screenInfoList, num);
|
PyObject *py = PyList_GetItem((PyObject*)self->screenInfoList, num);
|
||||||
return (OtkScreenInfo*) py;
|
return (OtkScreenInfo*) py;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ typedef struct OtkDisplay {
|
||||||
int grab_count;
|
int grab_count;
|
||||||
|
|
||||||
//! A list of information for all screens on the display
|
//! A list of information for all screens on the display
|
||||||
PyObject *screenInfoList; // PyListObject
|
PyListObject *screenInfoList;
|
||||||
} OtkDisplay;
|
} OtkDisplay;
|
||||||
|
|
||||||
//! Opens the X display, and sets the global OBDisplay variable
|
//! Opens the X display, and sets the global OBDisplay variable
|
||||||
|
|
|
@ -4,7 +4,8 @@
|
||||||
|
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
|
|
||||||
typedef struct {
|
typedef struct OtkRect {
|
||||||
|
PyObject_HEAD
|
||||||
int x, y, width, height;
|
int x, y, width, height;
|
||||||
} OtkRect;
|
} OtkRect;
|
||||||
|
|
||||||
|
|
|
@ -25,11 +25,11 @@ PyObject *OtkScreenInfo_New(int num)
|
||||||
|
|
||||||
self->screen = num;
|
self->screen = num;
|
||||||
self->root_window = RootWindow(OBDisplay->display, self->screen);
|
self->root_window = RootWindow(OBDisplay->display, self->screen);
|
||||||
self->rect = OtkRect_New(0, 0,
|
self->rect = (OtkRect*)
|
||||||
WidthOfScreen(ScreenOfDisplay(OBDisplay->display,
|
OtkRect_New(0, 0, WidthOfScreen(ScreenOfDisplay(OBDisplay->display,
|
||||||
self->screen)),
|
self->screen)),
|
||||||
HeightOfScreen(ScreenOfDisplay(OBDisplay->display,
|
HeightOfScreen(ScreenOfDisplay(OBDisplay->display,
|
||||||
self->screen)));
|
self->screen)));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If the default depth is at least 8 we will use that,
|
If the default depth is at least 8 we will use that,
|
||||||
|
@ -78,16 +78,16 @@ PyObject *OtkScreenInfo_New(int num)
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the default display string and strip the screen number
|
// get the default display string and strip the screen number
|
||||||
self->display_string =
|
self->display_string = (PyStringObject*)
|
||||||
PyString_FromFormat("DISPLAY=%s",DisplayString(OBDisplay->display));
|
PyString_FromFormat("DISPLAY=%s",DisplayString(OBDisplay->display));
|
||||||
dstr = PyString_AsString(self->display_string);
|
dstr = PyString_AsString((PyObject*)self->display_string);
|
||||||
dstr2 = strrchr(dstr, '.');
|
dstr2 = strrchr(dstr, '.');
|
||||||
if (dstr2) {
|
if (dstr2) {
|
||||||
PyObject *str;
|
PyObject *str;
|
||||||
|
|
||||||
_PyString_Resize(&self->display_string, dstr2 - dstr);
|
_PyString_Resize((PyObject**)&self->display_string, dstr2 - dstr);
|
||||||
str = PyString_FromFormat(".%d", self->screen);
|
str = PyString_FromFormat(".%d", self->screen);
|
||||||
PyString_Concat(&self->display_string, str);
|
PyString_Concat((PyObject**)&self->display_string, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XINERAMA
|
#ifdef XINERAMA
|
||||||
|
@ -142,7 +142,7 @@ static PyObject *otkscreeninfo_getscreen(OtkScreenInfo* self, PyObject* args)
|
||||||
return PyInt_FromLong(self->screen);
|
return PyInt_FromLong(self->screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *otkscreeninfo_getrect(OtkScreenInfo* self, PyObject* args)
|
static OtkRect *otkscreeninfo_getrect(OtkScreenInfo* self, PyObject* args)
|
||||||
{
|
{
|
||||||
if (!PyArg_ParseTuple(args, ":getRect"))
|
if (!PyArg_ParseTuple(args, ":getRect"))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
extern PyTypeObject OtkScreenInfo_Type;
|
extern PyTypeObject OtkScreenInfo_Type;
|
||||||
|
|
||||||
|
struct OtkRect;
|
||||||
|
|
||||||
typedef struct OtkScreenInfo {
|
typedef struct OtkScreenInfo {
|
||||||
int screen;
|
int screen;
|
||||||
Window root_window;
|
Window root_window;
|
||||||
|
@ -15,8 +17,8 @@ typedef struct OtkScreenInfo {
|
||||||
Visual *visual;
|
Visual *visual;
|
||||||
Colormap colormap;
|
Colormap colormap;
|
||||||
|
|
||||||
PyObject *display_string; // PyStringObject
|
PyStringObject *display_string;
|
||||||
PyObject *rect; // OtkRect
|
struct OtkRect *rect; // OtkRect
|
||||||
#ifdef XINERAMA
|
#ifdef XINERAMA
|
||||||
PyObject *xinerama_areas; // PyListObject[OtkRect]
|
PyObject *xinerama_areas; // PyListObject[OtkRect]
|
||||||
Bool xinerama_active;
|
Bool xinerama_active;
|
||||||
|
|
Loading…
Reference in a new issue