aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drv.h8
-rw-r--r--drv_X11.c34
-rw-r--r--lcd4linux.c15
-rw-r--r--svn_version.h2
4 files changed, 56 insertions, 3 deletions
diff --git a/drv.h b/drv.h
index db2d1dd..2780206 100644
--- a/drv.h
+++ b/drv.h
@@ -41,6 +41,14 @@ typedef struct DRIVER {
*/
extern char *output;
+#ifdef WITH_X11
+/* function to handle special X11 command line parameters
+ * has to be defined here because it's referenced
+ * in main before dealing with normal parameters.
+ */
+void drv_X11_parseArgs(int *argc, char *arvg[]);
+#endif
+
int drv_list(void);
int drv_init(const char *section, const char *driver, const int quiet);
int drv_quit(const int quiet);
diff --git a/drv_X11.c b/drv_X11.c
index 6ff17df..41e2f77 100644
--- a/drv_X11.c
+++ b/drv_X11.c
@@ -49,6 +49,7 @@
#include <signal.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
+#include <X11/Xresource.h>
#include "debug.h"
#include "cfg.h"
@@ -93,6 +94,14 @@ static GC gc;
static Colormap cm;
static Pixmap pm;
+static char myDisplayName[256] = "";
+static int opTableEntries = 2;
+static XrmOptionDescRec opTable[] = {
+ {"-display", ".display", XrmoptionSepArg, NULL},
+ {"-synchronous", "*synchronous", XrmoptionNoArg, "on"},
+};
+static XrmDatabase commandlineDB;
+
/****************************************/
/*** hardware dependant functions ***/
@@ -413,6 +422,8 @@ static int drv_X11_start(const char *section)
{
int i;
char *s;
+ XrmValue value;
+ char *str_type[20];
XSetWindowAttributes wa;
XSizeHints sh;
XEvent ev;
@@ -489,11 +500,21 @@ static int drv_X11_start(const char *section)
drv_X11_FB[i] = NO_COL;
}
- if ((dp = XOpenDisplay(NULL)) == NULL) {
- error("%s: can't open display", Name);
+ if (XrmGetResource(commandlineDB, "lcd4linux.display", "Lcd4linux.Display", str_type, &value)) {
+ strncpy(myDisplayName, value.addr, value.size);
+ debug("%s: X11 display name from command line: %s", Name, myDisplayName);
+ }
+
+ if ((dp = XOpenDisplay(strlen(myDisplayName) > 0 ? myDisplayName : NULL)) == NULL) {
+ error("%s: can't open display %s", Name, XDisplayName(strlen(myDisplayName) > 0 ? myDisplayName : NULL));
return -1;
}
+ if (XrmGetResource(commandlineDB, "lcd4linux*synchronous", "Lcd4linux*Synchronous", str_type, &value)) {
+ debug("%s: X synchronize on", Name);
+ XSynchronize(dp, 1 /* true */ );
+ }
+
sc = DefaultScreen(dp);
gc = DefaultGC(dp, sc);
vi = DefaultVisual(dp, sc);
@@ -595,6 +616,15 @@ int drv_X11_list(void)
}
+/* read X11 specific command line arguments */
+/* it is defined in drv.h */
+void drv_X11_parseArgs(int *argc, char *argv[])
+{
+ XrmInitialize();
+ XrmParseCommand(&commandlineDB, opTable, opTableEntries, "lcd4linux", argc, argv);
+}
+
+
/* initialize driver & display */
int drv_X11_init(const char *section, const int quiet)
{
diff --git a/lcd4linux.c b/lcd4linux.c
index bf17f5e..7a48c7c 100644
--- a/lcd4linux.c
+++ b/lcd4linux.c
@@ -91,6 +91,14 @@ static void usage(void)
printf(" -F do not fork and detach (run in foreground)\n");
printf(" -o <output-file> write picture to file (raster driver only)\n");
printf(" -q suppress startup and exit splash screen\n");
+#ifdef WITH_X11
+ printf("special X11 options:\n");
+ printf(" -display <X11 display name> preceeds X connection given in $DISPLAY\n");
+ printf(" -synchronous use synchronized communication with X server (for debugging)\n");
+ printf("\n");
+ printf("\n");
+ printf("\n");
+#endif
}
static void interactive_mode(void)
@@ -222,6 +230,13 @@ int main(int argc, char *argv[])
running_foreground = 0;
running_background = 0;
+#ifdef WITH_X11
+ drv_X11_parseArgs(&argc, argv);
+ if (argc != thread_argc) {
+ /* info() will not work here because verbose level is not known */
+ printf("recognized special X11 parameters\n");
+ }
+#endif
while ((c = getopt(argc, argv, "c:Ff:hilo:qvp:")) != EOF) {
switch (c) {
diff --git a/svn_version.h b/svn_version.h
index 73131b4..090b8c8 100644
--- a/svn_version.h
+++ b/svn_version.h
@@ -1 +1 @@
-#define SVN_VERSION "1048"
+#define SVN_VERSION "1066M"