[teklib-general] teklib: RawFB display, Visual: Now considers TVisual_DriverName ...
Timm S. Mueller
tmueller at neoscientists.org
Thu Nov 27 18:37:24 CET 2008
details: http://hg.teklib.org/teklib/rev/8378a449a783
changeset: 205:8378a449a783
user: Timm S. Mueller <tmueller at neoscientists.org>
date: Fri Nov 21 18:22:16 2008 +0100
description:
RawFB display, Visual: Now considers TVisual_DriverName in tags (x11 is
default); X11 display: bugs in Shared memory detection and fallback procedure
fixed
diffs (truncated from 325 to 100 lines):
diff -r bc256b94f961 -r 8378a449a783 src/display_rawfb/display_rawfb_api.c
--- a/src/display_rawfb/display_rawfb_api.c Tue Sep 30 11:59:35 2008 +0000
+++ b/src/display_rawfb/display_rawfb_api.c Fri Nov 21 18:22:16 2008 +0100
@@ -35,7 +35,8 @@
v->bufptr = (TUINT8 *) TGetTag(tags, TVisual_BufPtr, TNULL);
if (v->bufptr == TNULL)
{
- v->bufptr = TExecAlloc(exec, mod->rawfb_MemMgr, (v->width + v->modulo) * v->height * 4);
+ v->bufptr = TExecAlloc0(exec, mod->rawfb_MemMgr,
+ (v->width + v->modulo) * v->height * 4);
v->bufptr_is_ours = TTRUE;
}
if (v->bufptr)
@@ -48,7 +49,9 @@
v->subreq->tvr_Req.io_Command = TVCMD_OPENVISUAL;
v->subreq->tvr_Req.io_ReplyPort = v->replyport;
v->subreq->tvr_Op.OpenVisual.Instance = TNULL;
- v->subreq->tvr_Op.OpenVisual.IMsgPort = req->tvr_Op.OpenVisual.IMsgPort;
+ /* forward input message port to sub module: */
+ v->subreq->tvr_Op.OpenVisual.IMsgPort =
+ req->tvr_Op.OpenVisual.IMsgPort;
v->subreq->tvr_Op.OpenVisual.Tags = tags;
TExecDoIO(mod->rawfb_ExecBase, &v->subreq->tvr_Req);
v->subinst = v->subreq->tvr_Op.OpenVisual.Instance;
diff -r bc256b94f961 -r 8378a449a783 src/display_rawfb/display_rawfb_mod.c
--- a/src/display_rawfb/display_rawfb_mod.c Tue Sep 30 11:59:35 2008 +0000
+++ b/src/display_rawfb/display_rawfb_mod.c Fri Nov 21 18:22:16 2008 +0100
@@ -268,8 +268,11 @@
for (;;)
{
TTAGITEM ftags[3];
- TSTRPTR subname = (TSTRPTR) TGetTag(tags, TVisual_DriverName, (TTAG) DEF_SUBDISPLAY);
- mod->subdevice = TExecOpenModule(mod->rawfb_ExecBase, subname, 0, TNULL);
+ TSTRPTR subname = (TSTRPTR) TGetTag(tags, TVisual_DriverName,
+ (TTAG) DEF_SUBDISPLAY);
+ if (subname)
+ mod->subdevice = TExecOpenModule(mod->rawfb_ExecBase, subname, 0,
+ TNULL);
ftags[0].tti_Tag = TVisual_FontName;
ftags[0].tti_Value = (TTAG) FNT_DEFNAME;
@@ -278,7 +281,6 @@
ftags[2].tti_Tag = TTAG_DONE;
mod->rawfb_fm.deffont = rawfb_hostopenfont(mod, ftags);
//if (inst->rawfb_fm.deffont == TNULL) break;
-
return TTRUE;
}
rawfb_exit(mod);
@@ -298,5 +300,6 @@
for (; (next = node->tln_Succ); node = next)
rawfb_hostclosefont(mod, (TAPTR) node);
- TExecCloseModule(mod->rawfb_ExecBase, mod->subdevice);
+ if (mod->subdevice)
+ TExecCloseModule(mod->rawfb_ExecBase, mod->subdevice);
}
diff -r bc256b94f961 -r 8378a449a783 src/display_x11/display_x11_api.c
--- a/src/display_x11/display_x11_api.c Tue Sep 30 11:59:35 2008 +0000
+++ b/src/display_x11/display_x11_api.c Fri Nov 21 18:22:16 2008 +0100
@@ -3,6 +3,7 @@
static void freepen(TMOD_X11 *mod, VISUAL *v, struct X11Pen *pen);
static int x11_seteventmask(TMOD_X11 *mod, VISUAL *v, TUINT eventmask);
+static void x11_freeimage(TMOD_X11 *mod, VISUAL *v);
#define DEF_WINWIDTH 600
#define DEF_WINHEIGHT 400
@@ -211,6 +212,7 @@
TRemove(&v->node);
+ x11_freeimage(mod, v);
TExecFree(TGetExecBase(mod), v->tempbuf);
if (mod->x11_use_xft == TTRUE && v->draw)
@@ -1019,8 +1021,13 @@
}
/*****************************************************************************/
+/*
+** This is extremely awkward, since we are in a shared library and must
+** check for availability of the extension in an error handler using
+** a global variable. TODO: To fully work around this mess, we would
+** additionally have to enclose XShmAttach() in a mutex.
+*/
-/* HACK: */
static TBOOL shm_available = TTRUE;
static int
@@ -1029,6 +1036,26 @@
TDBPRINTF(TDB_ERROR,("Remote display - fallback to normal XPutImage\n"));
shm_available = TFALSE;
return 0;
+}
+
+/*****************************************************************************/
+
+static void
More information about the teklib-general
mailing list