From 0820c5100d7ea8daed00e7b1bf183edc9414728f Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 21 Dec 2002 12:39:49 +0000 Subject: [PATCH] make rect a proper pyobject. use "typesafety" --- otk_c/display.c | 6 +++--- otk_c/display.h | 2 +- otk_c/rect.h | 3 ++- otk_c/screeninfo.c | 20 ++++++++++---------- otk_c/screeninfo.h | 6 ++++-- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/otk_c/display.c b/otk_c/display.c index 016aa948..081655e9 100644 --- a/otk_c/display.c +++ b/otk_c/display.c @@ -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; } diff --git a/otk_c/display.h b/otk_c/display.h index f13c52fb..aa55e0b9 100644 --- a/otk_c/display.h +++ b/otk_c/display.h @@ -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 diff --git a/otk_c/rect.h b/otk_c/rect.h index 50547b57..c32daa7a 100644 --- a/otk_c/rect.h +++ b/otk_c/rect.h @@ -4,7 +4,8 @@ #include -typedef struct { +typedef struct OtkRect { + PyObject_HEAD int x, y, width, height; } OtkRect; diff --git a/otk_c/screeninfo.c b/otk_c/screeninfo.c index 3d253d1b..9b0c49ae 100644 --- a/otk_c/screeninfo.c +++ b/otk_c/screeninfo.c @@ -25,11 +25,11 @@ 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->screen)), - HeightOfScreen(ScreenOfDisplay(OBDisplay->display, - self->screen))); + self->rect = (OtkRect*) + OtkRect_New(0, 0, WidthOfScreen(ScreenOfDisplay(OBDisplay->display, + self->screen)), + HeightOfScreen(ScreenOfDisplay(OBDisplay->display, + self->screen))); /* 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 - 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; diff --git a/otk_c/screeninfo.h b/otk_c/screeninfo.h index 3a330f57..1a4aaea0 100644 --- a/otk_c/screeninfo.h +++ b/otk_c/screeninfo.h @@ -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; -- 2.39.2