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;
|
||||
|
||||
// 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)
|
||||
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!!
|
||||
}
|
||||
|
@ -148,7 +148,7 @@ void OtkDisplay_Ungrab(OtkDisplay *self)
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ typedef struct OtkDisplay {
|
|||
int grab_count;
|
||||
|
||||
//! A list of information for all screens on the display
|
||||
PyObject *screenInfoList; // PyListObject
|
||||
PyListObject *screenInfoList;
|
||||
} OtkDisplay;
|
||||
|
||||
//! Opens the X display, and sets the global OBDisplay variable
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
|
||||
#include <Python.h>
|
||||
|
||||
typedef struct {
|
||||
typedef struct OtkRect {
|
||||
PyObject_HEAD
|
||||
int x, y, width, height;
|
||||
} OtkRect;
|
||||
|
||||
|
|
|
@ -25,8 +25,8 @@ PyObject *OtkScreenInfo_New(int num)
|
|||
|
||||
self->screen = num;
|
||||
self->root_window = RootWindow(OBDisplay->display, self->screen);
|
||||
self->rect = OtkRect_New(0, 0,
|
||||
WidthOfScreen(ScreenOfDisplay(OBDisplay->display,
|
||||
self->rect = (OtkRect*)
|
||||
OtkRect_New(0, 0, WidthOfScreen(ScreenOfDisplay(OBDisplay->display,
|
||||
self->screen)),
|
||||
HeightOfScreen(ScreenOfDisplay(OBDisplay->display,
|
||||
self->screen)));
|
||||
|
@ -78,16 +78,16 @@ PyObject *OtkScreenInfo_New(int num)
|
|||
}
|
||||
|
||||
// get the default display string and strip the screen number
|
||||
self->display_string =
|
||||
self->display_string = (PyStringObject*)
|
||||
PyString_FromFormat("DISPLAY=%s",DisplayString(OBDisplay->display));
|
||||
dstr = PyString_AsString(self->display_string);
|
||||
dstr = PyString_AsString((PyObject*)self->display_string);
|
||||
dstr2 = strrchr(dstr, '.');
|
||||
if (dstr2) {
|
||||
PyObject *str;
|
||||
|
||||
_PyString_Resize(&self->display_string, dstr2 - dstr);
|
||||
_PyString_Resize((PyObject**)&self->display_string, dstr2 - dstr);
|
||||
str = PyString_FromFormat(".%d", self->screen);
|
||||
PyString_Concat(&self->display_string, str);
|
||||
PyString_Concat((PyObject**)&self->display_string, str);
|
||||
}
|
||||
|
||||
#ifdef XINERAMA
|
||||
|
@ -142,7 +142,7 @@ static PyObject *otkscreeninfo_getscreen(OtkScreenInfo* self, PyObject* args)
|
|||
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"))
|
||||
return NULL;
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
|
||||
extern PyTypeObject OtkScreenInfo_Type;
|
||||
|
||||
struct OtkRect;
|
||||
|
||||
typedef struct OtkScreenInfo {
|
||||
int screen;
|
||||
Window root_window;
|
||||
|
@ -15,8 +17,8 @@ typedef struct OtkScreenInfo {
|
|||
Visual *visual;
|
||||
Colormap colormap;
|
||||
|
||||
PyObject *display_string; // PyStringObject
|
||||
PyObject *rect; // OtkRect
|
||||
PyStringObject *display_string;
|
||||
struct OtkRect *rect; // OtkRect
|
||||
#ifdef XINERAMA
|
||||
PyObject *xinerama_areas; // PyListObject[OtkRect]
|
||||
Bool xinerama_active;
|
||||
|
|
Loading…
Reference in a new issue