X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=otk_c%2Fdisplay.c;h=c0cae13cb07f5c37cbdd9bc5db25c7ad170aee11;hb=867d3d9a94b059a0bd7574f13e1c0c669abaf8a3;hp=85965210e4fe9a6196f0b6bf855af889a837ad7e;hpb=e5c5b4bf700f9bf00dd88bd4b6a471ac1ccefaff;p=chaz%2Fopenbox diff --git a/otk_c/display.c b/otk_c/display.c index 85965210..c0cae13c 100644 --- a/otk_c/display.c +++ b/otk_c/display.c @@ -1,4 +1,4 @@ -// -*- mode: C; indent-tabs-mode: nil; -*- +// -*- mode: C; indent-tabs-mode: nil; c-basic-offset: 2; -*- #include "../config.h" #include "display.h" @@ -33,7 +33,9 @@ extern PyTypeObject OtkDisplay_Type; static int xerrorHandler(Display *d, XErrorEvent *e); -PyObject *OtkDisplay_New(char *name) +struct OtkDisplay *OBDisplay = NULL; + +void OtkDisplay_Initialize(char *name) { OtkDisplay* self; PyObject *disp_env; @@ -117,14 +119,15 @@ line argument.\n\n")); self->mask_list[6] = ScrollLockMask | NumLockMask; self->mask_list[7] = ScrollLockMask | LockMask | NumLockMask; + // set the global var, for the new screeninfo's + 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)); - self->gccache = OtkGCCache_New(PyList_Size(self->screenInfoList)); - - return (PyObject*)self; + Py_INCREF(OBDisplay); // make sure it stays around!! } void OtkDisplay_Grab(OtkDisplay *self) @@ -143,6 +146,11 @@ void OtkDisplay_Ungrab(OtkDisplay *self) XUngrabServer(self->display); } +OtkScreenInfo *OtkDisplay_ScreenInfo(OtkDisplay *self, int num) +{ + assert(num >= 0); + return (OtkScreenInfo*)PyList_GetItem((PyObject*)self->screenInfoList, num); +} static PyObject *otkdisplay_grab(OtkDisplay* self, PyObject* args) @@ -174,7 +182,7 @@ static PyMethodDef get_methods[] = { static void otkdisplay_dealloc(PyObject* self) { XCloseDisplay(((OtkDisplay*) self)->display); - PyObject_Del(((OtkDisplay*) self)->screenInfoList); + Py_DECREF(((OtkDisplay*) self)->screenInfoList); PyObject_Del(self); }