make rect a proper pyobject. use "typesafety"

This commit is contained in:
Dana Jansens 2002-12-21 12:39:49 +00:00
parent 9e4d1bbabc
commit 0820c5100d
5 changed files with 20 additions and 17 deletions

View file

@ -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;
} }

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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;