[Pkg-wmaker-commits] [fookb] 10/17: fookb: Port to libdockapp.

Doug Torrance dtorrance-guest at moszumanska.debian.org
Sun Sep 10 14:35:26 UTC 2017


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch upstream
in repository fookb.

commit c9fecdfa50d99950c337b20a99f0e149f37334f4
Author: Doug Torrance <dtorrance at piedmont.edu>
Date:   Sat Sep 9 21:24:26 2017 -0400

    fookb: Port to libdockapp.
    
    In addition to the obvious simplification to the code by removing all the
    window creation stuff, this also allows us to let users pick whether they
    want to run fookb as a dockapp or as a normal windowed application at
    runtime using libdockapp's --windowed command line option.  Previously,
    this was done during build using configure's --enable-wmaker option.
---
 Makefile.am  |   4 +-
 configure.ac |   1 +
 fookb.c      | 229 +++++++----------------------------------------------------
 images.c     |   2 +-
 4 files changed, 29 insertions(+), 207 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 0f0a075..4c1840f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -5,8 +5,8 @@ dist_man_MANS = fookb.1x
 dist_pkgdata_DATA = 1.xpm 2.xpm 3.xpm 4.xpm rus.xpm lat.xpm boom.xpm \
 	En.xpm Ru.xpm beep_spring.au
 
-AM_CFLAGS = $(Xlib_CFLAGS) $(libXpm_CFLAGS) $(WUtil_CFLAGS)
-LIBS += $(Xlib_LIBS) $(libXpm_LIBS) $(WUtil_LIBS)
+AM_CFLAGS = $(Xlib_CFLAGS) $(libXpm_CFLAGS) $(WUtil_CFLAGS) $(libdockapp_CFLAGS)
+LIBS += $(Xlib_LIBS) $(libXpm_LIBS) $(WUtil_LIBS) $(libdockapp_LIBS)
 
 EXTRA_DIST = copyright fookb.cf KNOWN_BUGS LICENSE README.russian.koi8-r \
 	README.russian.utf-8
diff --git a/configure.ac b/configure.ac
index ef0f509..ac37c18 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,6 +17,7 @@ dnl Checks for libraries.
 PKG_CHECK_MODULES([Xlib], [x11])
 PKG_CHECK_MODULES([libXpm], [xpm])
 PKG_CHECK_MODULES([WUtil], [WUtil])
+PKG_CHECK_MODULES([libdockapp], [dockapp])
 
 AC_ARG_ENABLE(
   [wmaker],
diff --git a/fookb.c b/fookb.c
index 7535214..c6cf888 100644
--- a/fookb.c
+++ b/fookb.c
@@ -17,6 +17,8 @@
 /* XKB fun */
 #include <X11/XKBlib.h>
 
+#include <libdockapp/dockapp.h>
+
 /* My own fun */
 #include "fookb.h"
 #include "images.h"
@@ -26,92 +28,27 @@
 #define sterror(x) (void)printf("Strange error, please report! %s:%d, %s\n",\
 		__FILE__, __LINE__, x)
 
-
-static void getGC(Window win, GC *gc, Display *dpy)
-{
-	unsigned long valuemask = 0;	/* No data in ``values'' */
-	XGCValues values;
-	*gc = XCreateGC(dpy, win, valuemask, &values);
-	/* FIXME Check if there was an error */
-/*	XSetForeground(dpy, *gc, BlackPixel(dpy, scr)); */
-}
-
-
 int main(int argc, register char *argv[])
 {
-	Display *dpy;
-	int scr;
-	Window root;
-
-	int err;
-
-	int event_rtrn;	/* for XkbOpenDisplay */
-	int error_rtrn;
-	int reason_rtrn;
-
-	XkbEvent labuda;	/* Xkb event. X event will be labuda.core */
-
-	Window billy;		/*   _The_ Window  */
-
-#ifdef WMAKER
-	Window dilly;		/* ...and his icon */
-#endif
-
-	int border = 0;		/* _The_ Window parameters */
-
-	XWMHints *wm_hints;
-	XClassHint class_hints;
-
-#ifdef WMAKER			/* If we use Windowmaker, _The_ Window will */
-	XSizeHints *BigBunny;	/* be withdrawn. And we do not want to
-				   place empty border by hand. */
-#endif
-
-	GC gc;			/* Graphic context */
-
-	char resn[] = "fookb";
-	char resc[] = "Fookb";
-
-
+	XkbEvent labuda;        /* Xkb event. X event will be labuda.core */
 	int state = 0;		/* We suppose that latin keyboard is the
 				   primal state FIXME */
+	Pixmap pixmap;
 
-	/*
-	event_rtrn = malloc(sizeof(int));
-	error_rtrn = malloc(sizeof(int));
-	reason_rtrn = malloc(sizeof(int));
-	*/
-
-	XrmInitialize();	/* We should initialize X resource
-				   manager before doing something else
-				 */
 
-	ParseOptions(&argc, argv);	/* We should parse command line
-					   options and try to find '-display'
-					   before opening X display */
+	DAParseArguments(argc, argv, NULL, 0,
+			 "XKB state indicator for Window Maker",
+			 PACKAGE_STRING);
 
-/* Go, fighters, go! */
-	dpy = XkbOpenDisplay(mydispname,
-			     &event_rtrn,
-			     &error_rtrn, NULL, NULL, &reason_rtrn);
-
-/* Oops. */
-	if (dpy == NULL) {
-		(void)puts("Cannot open display.");
-		exit(EXIT_FAILURE);
-	}
-
-	scr = DefaultScreen(dpy);
-	root = RootWindow(dpy, scr);
-
-	MoreOptions(dpy);		/* Now we can parse X server resource
-				   database. It is not available
-				   before display is opened */
+	DAOpenDisplay(NULL, argc, argv);
+	read_images(DADisplay);		/* Let's read icon images */
+	DACreateIcon(PACKAGE_NAME, get_width(), get_height(), argc, argv);
+	XSelectInput(DADisplay, DAWindow, ButtonPressMask);
 
 /* We would like receive the only Xkb event: XkbStateNotify. And only
  * when XkbLockGroup happens. */
 
-	if (False == XkbSelectEvents(dpy,
+	if (False == XkbSelectEvents(DADisplay,
 			XkbUseCoreKbd,
 			XkbAllEventsMask,
 			0)) {
@@ -119,7 +56,7 @@ int main(int argc, register char *argv[])
 		exit(EXIT_FAILURE);
 	} /* Deselect all events */
 
-	if (False == XkbSelectEventDetails(dpy,
+	if (False == XkbSelectEventDetails(DADisplay,
 				XkbUseCoreKbd,
 				XkbStateNotify,
 				XkbAllEventsMask,
@@ -128,127 +65,18 @@ int main(int argc, register char *argv[])
 		exit(EXIT_FAILURE);
 	} /* Select XkbStateNotify/XkbgroupLock */
 
-	read_images(dpy);		/* Let's read icon images */
-
-/* Run out! */
-	billy = XCreateSimpleWindow(dpy,
-				    root,
-				    0, 0,
-				    get_width(), get_height(),
-				    border,
-				    BlackPixel(dpy, scr),
-				    WhitePixel(dpy, scr));
-	XStoreName(dpy, billy, "fookb");
-
-#ifdef WMAKER
-	dilly = XCreateSimpleWindow(dpy,
-				    root,
-				    0, 0,
-				    get_width(), get_height(),
-				    border,
-				    BlackPixel(dpy, scr),
-				    WhitePixel(dpy, scr));
-#endif
-
-	class_hints.res_name = resn;
-	class_hints.res_class = resc;
-
-	err = XSetClassHint(dpy, billy, &class_hints);
-	switch(err) {
-		case BadAlloc:
-			sterror("BadAlloc");
-			exit(EXIT_FAILURE);
-		case BadWindow:
-			sterror("BadWindow");
-			exit(EXIT_FAILURE);
-	}
-
-	wm_hints = XAllocWMHints();
-	wm_hints->window_group = billy;
-
-#ifdef WMAKER
-	wm_hints->icon_window = dilly;
-#endif
-
-	wm_hints->input = False;
-	wm_hints->flags = InputHint | WindowGroupHint;
-
-#ifdef WMAKER
-	wm_hints->flags = wm_hints->flags | IconWindowHint;
-	err = XSetWMHints(dpy, dilly, wm_hints);
-	switch(err) {
-		case BadAlloc:
-			sterror("BadAlloc");
-			exit(EXIT_FAILURE);
-		case BadWindow:
-			sterror("BadWindow");
-			exit(EXIT_FAILURE);
-	}
-	wm_hints->initial_state = WithdrawnState;
-	wm_hints->flags = wm_hints->flags | StateHint;
-#endif
-
-	err = XSetWMHints(dpy, billy, wm_hints);
-	switch(err) {
-		case BadAlloc:
-			sterror("BadAlloc");
-			exit(EXIT_FAILURE);
-		case BadWindow:
-			sterror("BadWindow");
-			exit(EXIT_FAILURE);
-	}
-
-#ifdef WMAKER
-	/* Look at the comment for XSizeHints * BigBunny */
-	BigBunny = XAllocSizeHints();
-	if (NULL == BigBunny) {
-		(void)printf("Not enough memory, %s:%d.\n", __FILE__, __LINE__);
-		exit(EXIT_FAILURE);
-	}
-/* Nasty Hack. XSizeHints.x & XSizeHints.y are obsolete. */
-	BigBunny->x = 0;
-	BigBunny->y = 0;
-	BigBunny->flags = PPosition;
-	XSetWMNormalHints(dpy, billy, BigBunny);
-	XFree(BigBunny);
-#endif
-
-/* The only thing we would like to do - update our billy */
-#ifndef WMAKER
-	XSelectInput(dpy, billy, ExposureMask | ButtonPressMask);
-#else				/* ...or dilly?! */
-	XSelectInput(dpy, dilly, ExposureMask | ButtonPressMask);
-#endif
-
-	XSetCommand(dpy, billy, argv, argc);
-
-/* Programmer supplied functions */
-#ifndef WMAKER
-	getGC(billy, &gc, dpy);
-#else
-	getGC(dilly, &gc, dpy);
-#endif
+	pixmap = DAMakePixmap();
 
+	update_window(pixmap, DAGC, state, DADisplay);
+	DASetPixmap(pixmap);
 
-/* Let's look */
-	XMapWindow(dpy, billy);	/* We would like to see the window. */
+	DAShow();
 
 /* HELLO! HELLO! HELLO! Is that our GOOD FRIEND main loop here? */
 	while (1) {
-		XNextEvent(dpy, &labuda.core);
+		XNextEvent(DADisplay, &labuda.core);
 		switch (labuda.core.type) {
 
-		case Expose:	/* We should update our window. */
-			if (labuda.core.xexpose.count != 0)
-				/* Well, I knew what does it mean,
-				   but I forgot :) */
-				break;
-#ifndef WMAKER
-			update_window(billy, gc, state, dpy);
-#else
-			update_window(dilly, gc, state, dpy);
-#endif
-			break;
 		case ButtonPress:
 
 			switch (labuda.core.xbutton.button) {
@@ -256,7 +84,7 @@ int main(int argc, register char *argv[])
 #ifdef DEBUG
 				puts("Button1 pressed.");
 #endif
-				XkbLockGroup(dpy,
+				XkbLockGroup(DADisplay,
 					     XkbUseCoreKbd,
 					     (state + 1) % 4);
 				break;
@@ -264,7 +92,7 @@ int main(int argc, register char *argv[])
 #ifdef DEBUG
 				puts("Button2 pressed.");
 #endif
-				XkbLockGroup(dpy,
+				XkbLockGroup(DADisplay,
 					     XkbUseCoreKbd,
 					     (state + 3) % 4);
 				break;
@@ -272,12 +100,9 @@ int main(int argc, register char *argv[])
 #ifdef DEBUG
 				puts("Button3 pressed, bye.");
 #endif
-				XFreeGC(dpy, gc);
-				XDestroyWindow(dpy, billy);
-#ifdef WMAKER
-				XDestroyWindow(dpy, dilly);
-#endif
-				XCloseDisplay(dpy);
+				XFreeGC(DADisplay, DAGC);
+				XDestroyWindow(DADisplay, DAWindow);
+				XCloseDisplay(DADisplay);
 				exit(0);
 			}
 			break;
@@ -289,16 +114,12 @@ int main(int argc, register char *argv[])
 #endif
 			if ((state < 0) || (state > 4))
 				state = 4;
-#ifndef WMAKER
-			update_window(billy, gc, state, dpy);
-#else
-			update_window(dilly, gc, state, dpy);
-#endif
+			update_window(pixmap, DAGC, state, DADisplay);
+			DASetPixmap(pixmap);
 
 #ifdef DEBUG
 			puts(".");	/* XkbLockGroup happens */
 #endif
 		}
 	}
-
 }
diff --git a/images.c b/images.c
index 8f24949..21c04e9 100644
--- a/images.c
+++ b/images.c
@@ -150,7 +150,7 @@ void read_images(Display *dpy)
 
 }
 
-void update_window(Window win, GC gc, unsigned int whattodo, Display *dpy)
+void update_window(Drawable win, GC gc, unsigned int whattodo, Display *dpy)
 {
 	int err;
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/fookb.git



More information about the Pkg-wmaker-commits mailing list