X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk_c%2Fdisplay.c;h=081655e9d8d9a5bc3619c69dcce35fcdfd1b3413;hb=55b2aaf973063796a668bc758232141c3d6f5cc9;hp=ab193437875acc075f747901e785fc6bce4c4c10;hpb=edc47eb5580babdca6547989c1cb5cdf317f4835;p=chaz%2Fopenbox diff --git a/otk_c/display.c b/otk_c/display.c index ab193437..081655e9 100644 --- a/otk_c/display.c +++ b/otk_c/display.c @@ -1,6 +1,8 @@ // -*- mode: C; indent-tabs-mode: nil; -*- +#include "../config.h" #include "display.h" +#include "screeninfo.h" #include @@ -31,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; @@ -115,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_Append(self->screenInfoList, 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) @@ -141,6 +146,11 @@ void OtkDisplay_Ungrab(OtkDisplay *self) XUngrabServer(self->display); } +OtkScreenInfo *OtkDisplay_ScreenInfo(OtkDisplay *self, int num) +{ + PyObject *py = PyList_GetItem((PyObject*)self->screenInfoList, num); + return (OtkScreenInfo*) py; +} static PyObject *otkdisplay_grab(OtkDisplay* self, PyObject* args) @@ -172,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); }