#include <fcntl.h>
#include <signal.h>
+
+#define DOC_DATA_TYPE struct python_doc
#include "core.h"
#include "misc.h"
#include "rexel.h"
+struct python_doc {
+ struct doc doc;
+ struct pydoc *pdoc;
+};
+
+#include "core-pane.h"
+
#define SAFE_CI {.key=safe_cast NULL,\
.home=safe_cast NULL,\
.focus=safe_cast NULL,\
} PaneIter;
static PyTypeObject PaneIterType;
-typedef struct {
+typedef struct pydoc {
PyObject_HEAD;
struct pane *pane;
struct command cmd;
struct map *map;
int map_init;
- struct doc doc;
} Doc;
static PyTypeObject DocType;
pane = p->data;
Py_INCREF(pane);
} else if (p && p->handle && p->handle->func == python_doc_call.func) {
- struct doc *doc = p->data;
- Doc *pdoc = container_of(doc, Doc, doc);
+ struct python_doc *pd = p->doc_data;
+ Doc *pdoc = pd->pdoc;
pane = (Pane*)pdoc;
Py_INCREF(pane);
} else {
if (p->map)
key_free(p->map);
p->map = NULL;
- if (PyObject_TypeCheck(p, &DocType)) {
- Doc *d = (Doc*)p;
- doc_free(&d->doc, safe_cast pn);
- }
+ if (pn && PyObject_TypeCheck(p, &DocType))
+ doc_free(&pn->doc_data->doc, safe_cast pn);
if (pn)
pane_put(pn);
Py_DECREF(p);
static int Doc_init(Doc *self, PyObject *args, PyObject *kwds)
{
Pane *parent = NULL;
+ struct python_doc *pd;
int z = 0;
int ret = do_Pane_init((Pane*safe)self, args, kwds, &parent, &z);
return -1;
self->cmd.func = python_doc_call_func;
- self->pane = do_doc_register(parent->pane, &self->cmd, &self->doc, 0);
- if (self->pane)
+ self->pane = doc_register(parent->pane, &self->cmd);
+ if (self->pane) {
pane_get(self->pane);
- self->doc.refcnt = mark_refcnt;
+ pd = self->pane->doc_data;
+ pd->pdoc = self;
+ pd->doc.refcnt = mark_refcnt;
+ }
return 0;
}
if (!doc_valid(self))
return NULL;
- m = mark_first(&self->doc);
+ m = mark_first(&self->pane->doc_data->doc);
if (!m) {
Py_INCREF(Py_None);
return Py_None;