-// -*- mode: C; indent-tabs-mode: nil; -*-
+// -*- mode: C; indent-tabs-mode: nil; c-basic-offset: 2; -*-
+#include "../config.h"
#include "display.h"
+#include "screeninfo.h"
#include <X11/keysym.h>
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;
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)
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)
static void otkdisplay_dealloc(PyObject* self)
{
XCloseDisplay(((OtkDisplay*) self)->display);
- PyObject_Del(((OtkDisplay*) self)->screenInfoList);
+ Py_DECREF(((OtkDisplay*) self)->screenInfoList);
PyObject_Del(self);
}