[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