[Pkg-wmaker-commits] [wmbutton] 04/09: Import Debian changes 0.6.1-2
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Sun Jul 16 03:13:30 UTC 2017
This is an automated email from the git hooks/post-receive script.
dtorrance-guest pushed a commit to branch master
in repository wmbutton.
commit 045988588f7ddc08345864065c640b49dacd6f52
Merge: 38d05ee a6ddb27
Author: Christian Aichinger <Greek0 at gmx.net>
Date: Tue Feb 15 00:48:52 2005 +0100
Import Debian changes 0.6.1-2
wmbutton (0.6.1-2) unstable; urgency=low
* Fixed build problems on several platforms
* debian/control: Fixed binary package section and priority
wmbutton (0.6.1-1) unstable; urgency=low
* New Maintainer
* New upstream version 0.6.1 (Closes: #245868)
* debian/control: Standards-Version to 3.6.1.1
wmbutton (0.4-5) unstable; urgency=low
* Update README.Debian to clarify customization (Closes: #179418)
* debian/control: Standards-Version to 3.5.8
* debian/rules: Add support for DEB_BUILD_OPTIONS
* debian/conffiles: Remove /etc/wmbutton.conf, debhelper
adds it automatically
wmbutton (0.4-4) unstable; urgency=low
* Applied patch from Steve Kemp <skx at tardis.ed.ac.uk> to avoid buffer
overflow (Closes: #167225)
.wmbutton | 50 +--
Makefile | 20 +-
README | 90 ++++--
debian/README.Debian | 15 +-
debian/changelog | 32 ++
debian/compat | 1 +
debian/conffiles | 1 -
debian/control | 10 +-
debian/copyright | 1 +
debian/menu | 2 +-
debian/rules | 25 +-
debian/wmbutton.1 | 19 +-
icons/buttons2.xpm | 854 +++++++++++++++++++++++++++++++++++++++++++++++++++
readln.c | 59 ----
wmb_libs.c | 695 +++++++++++++++++++++++++++++++++++++++++
wmbutton.c | 561 ++++++++++++++++-----------------
wmbutton.h | 110 +++++++
17 files changed, 2107 insertions(+), 438 deletions(-)
diff --cc Makefile
index 2d1db7a,b4b744d..9660725
--- a/Makefile
+++ b/Makefile
@@@ -1,29 -1,29 +1,39 @@@
--INCLUDES =-I/usr/X11R6/include/X11 -I/usr/local/include -I/usr/include/X11R6/X11
++INCLUDES =-I/usr/X11R6/include -I/usr/local/include
LIBINC =-L/usr/X11R6/lib -L/usr/include/lib
LIBS = -lX11 -lXpm -lXext
TARGET = wmbutton
- OBJECTS = wmbutton.o readln.o
+ OBJECTS = wmbutton.o wmb_libs.o
+DESTDIR =
+PREFIX = /usr/local
+BINDIR = ${PREFIX}/bin
+MANDIR = ${PREFIX}/share/man
+CONF = /etc
+INSTALL = /usr/bin/install
+INSTALL_PROGRAM = $(INSTALL) -p -o root -g root -m 755
+INSTALL_FILE = $(INSTALL) -p -o root -g root -m 644
-CFLAGS += -c -Wall -O2
-
-all: ${TARGET} tags
++CFLAGS += -Wall -O2
+
.c.o:
- gcc -O2 -c -Wall ${INCLUDES} ${FLAGS} $< -o $*.o
- gcc ${CFLAGS} ${INCLUDES} $< -o $*.o
++ gcc -c ${CFLAGS} ${INCLUDES} $< -o $*.o
${TARGET}: ${OBJECTS}
- gcc -O2 -o ${TARGET} ${OBJECTS} ${LIBINC} ${LIBS}
+ gcc -o ${TARGET} ${OBJECTS} ${LIBINC} ${LIBS}
clean::
for i in ${OBJECTS}; do if [ -e $$i ] ; then rm $$i; fi; done
if [ -e ${TARGET} ] ; then rm ${TARGET}; fi
+ if [ -e tags ]; then rm tags; fi
+ if [ -e core ]; then rm core; fi
+install::
+ ${INSTALL_PROGRAM} wmbutton ${DESTDIR}${BINDIR}
+ ${INSTALL_FILE} wmbutton.conf ${DESTDIR}${CONF}
- # ${INSTALL_FILE} wmbutton.1 ${DESTDIR}${MANDIR}/man1
++
+ wmbutton.o: wmbutton.c wmbutton.h Makefile
+
+ wmb_libs.o: wmb_libs.c wmbutton.h Makefile
+
+ tags:
+ ctags *.[ch]
diff --cc README
index 2d94aee,5da98ae..fe0cb79
--- a/README
+++ b/README
@@@ -41,10 -52,10 +52,10 @@@ helping out, catching bugs in the code
INSTALLATION:
-------------
Untar the file:
- tar xvzf wmbutton-0.4.tar.gz
- tar xvzf wmbutton-0.5.tar.gz
++ tar xvzf wmbutton-0.6.1.tar.gz
CD to source directory:
- cd wmbutton-0.4
- cd wmbutton-0.5
++ cd wmbutton-0.6.1
Edit background xpm, and buttons.xpm to your preferences
There are icon files in ./icons to work from
diff --cc debian/README.Debian
index 3ff5d39,0000000..06ec4b9
mode 100644,000000..100644
--- a/debian/README.Debian
+++ b/debian/README.Debian
@@@ -1,25 -1,0 +1,22 @@@
+wmbutton for Debian
+-------------------
+
+/etc/wmbutton.conf is only a very limited configuration as it should also
+work with a minimal system installed. You will almost definitely want to
+have a look at
+ /usr/share/doc/wmbutton/sample.wmbutton
+modify it and copy it to ~/.wmbutton or alter the system wide wmbutton.conf
+accordingly.
+
+
+Using custom images for the buttons:
+------------------------------------
+
- To include other icons wmbutton has to be rebuilt:
++Previously it was required to recompile wmbutton to change the images. Now
++you can use the -b command-line option to change the button images.
+
- 1) apt-get source wmbutton
- 2) edit buttons.xpm with your favourite imaging tool (e.g. Gimp)
- 3) rebuild (e.g. dpkg-buildpackage)
- This will require xlibs-dev (as dpkg-buildpackage will tell you
- if you don't have xlibs-dev installed)
- 4) Install your custom wmbutton package, or copy your binary to an
- appropriate place.
++Original author:
++ -- Gordon Fraser <gordon at debian.org>, Fri, 7 Feb 2003 19:56:54 +0100
+
- -- Gordon Fraser <gordon at debian.org>, Tue, 18 Sep 2001 20:27:46 +0200
++Updated by:
++ -- Christian Aichinger <Greek0 at gmx.net>, Sun, 16 Jan 2005 17:10:45 +0100
diff --cc debian/changelog
index 35edb0e,0000000..2569770
mode 100644,000000..100644
--- a/debian/changelog
+++ b/debian/changelog
@@@ -1,26 -1,0 +1,58 @@@
++wmbutton (0.6.1-2) unstable; urgency=low
++
++ * Fixed build problems on several platforms
++ * debian/control: Fixed binary package section and priority
++
++ -- Christian Aichinger <Greek0 at gmx.net> Tue, 15 Feb 2005 00:48:52 +0100
++
++wmbutton (0.6.1-1) unstable; urgency=low
++
++ * New Maintainer
++ * New upstream version 0.6.1 (Closes: #245868)
++ * debian/control: Standards-Version to 3.6.1.1
++
++ -- Christian Aichinger <Greek0 at gmx.net> Sun, 16 Jan 2005 16:40:13 +0100
++
++wmbutton (0.4-5) unstable; urgency=low
++
++ * Update README.Debian to clarify customization (Closes: #179418)
++ * debian/control: Standards-Version to 3.5.8
++ * debian/rules: Add support for DEB_BUILD_OPTIONS
++ * debian/conffiles: Remove /etc/wmbutton.conf, debhelper
++ adds it automatically
++
++ -- Gordon Fraser <gordon at debian.org> Fri, 7 Feb 2003 19:56:54 +0100
++
++wmbutton (0.4-4) unstable; urgency=low
++
++ * Applied patch from Steve Kemp <skx at tardis.ed.ac.uk> to avoid buffer
++ overflow (Closes: #167225)
++
++ -- Gordon Fraser <gordon at debian.org> Thu, 31 Oct 2002 15:59:47 +0100
++
+wmbutton (0.4-3) unstable; urgency=low
+
+ * Manpage updates
+ * Minor code cleanups, documentation updates
+ * Update package description
+
+ -- Gordon Fraser <gordon at debian.org> Mon, 4 Feb 2002 17:50:43 +0100
+
+wmbutton (0.4-2) unstable; urgency=low
+
+ * Update manpage to credit author
+ * Fix spelling mistakes (Closes: #125487)
+ * Add information how to customize
+ * Update maintainer's email
+
+ -- Gordon Fraser <gordon at debian.org> Wed, 5 Dec 2001 09:00:29 +0100
+
+wmbutton (0.4-1) unstable; urgency=low
+
+ * Initial Release - (Closes: #113946)
+
+ -- Gordon Fraser <gordon at debian.org> Tue, 18 Sep 2001 20:27:46 +0200
+
+Local variables:
+mode: debian-changelog
+End:
diff --cc debian/compat
index 0000000,0000000..b8626c4
new file mode 100644
--- /dev/null
+++ b/debian/compat
@@@ -1,0 -1,0 +1,1 @@@
++4
diff --cc debian/control
index eaef354,0000000..db7ef0d
mode 100644,000000..100644
--- a/debian/control
+++ b/debian/control
@@@ -1,15 -1,0 +1,17 @@@
+Source: wmbutton
+Section: x11
+Priority: optional
- Maintainer: Gordon Fraser <gordon at debian.org>
- Build-Depends: debhelper (>> 3.0.0), xlibs-dev
- Standards-Version: 3.5.2
++Maintainer: Christian Aichinger <Greek0 at gmx.net>
++Build-Depends: debhelper (>= 4), xlibs-dev
++Standards-Version: 3.6.1.1
+
+Package: wmbutton
+Architecture: any
++Section: x11
++Priority: optional
+Depends: ${shlibs:Depends}
- Description: Dockapp displaying nine configurable buttons
++Description: dockapp displaying nine configurable buttons
+ Wmbutton displays nine buttons which can be configured through a config file.
+ Each button can be assigned up to three commands (one per mouse button).
+ It is intended as a dockapp for X window managers such as Window Maker,
+ AfterStep, BlackBox, and Enlightenment.
diff --cc debian/copyright
index a767650,0000000..0583d44
mode 100644,000000..100644
--- a/debian/copyright
+++ b/debian/copyright
@@@ -1,12 -1,0 +1,13 @@@
+This package was debianized by Gordon Fraser <gordon at debian.org> on
+Tue, 18 Sep 2001 20:27:46 +0200.
+
+It was downloaded from http://members.access1.net/ehflora/
++An alternative location is: http://www.dockapps.org/file.php/id/241
+
+Upstream Author: Edward H. Flora <ehflora at ksu.edu>
+
+Copyright:
+
+Wmbutton is released under the GNU General Public License, version 2 or
+greater, found on Debian GNU/Linux systems in the file
+/usr/share/common-licenses/GPL
diff --cc debian/menu
index d337a79,0000000..8edc7d1
mode 100644,000000..100644
--- a/debian/menu
+++ b/debian/menu
@@@ -1,2 -1,0 +1,2 @@@
- ?package(wmbutton):needs=X11 section=Apps/Tools hints="Dockapp,Desktop"\
++?package(wmbutton):needs="X11" section="Apps/Tools" hints="Dockapp,Desktop"\
+ title="wmbutton" command="/usr/bin/wmbutton"
diff --cc debian/rules
index b5d277f,0000000..ee20401
mode 100755,000000..100755
--- a/debian/rules
+++ b/debian/rules
@@@ -1,56 -1,0 +1,71 @@@
+#!/usr/bin/make -f
- # GNU copyright 1997 to 1999 by Joey Hess.
+
- # This is the debhelper compatability version to use.
- export DH_COMPAT=3
++CFLAGS = -W -Wall
++INSTALL = install
++INSTALL_PROGRAM = $(INSTALL) -p -o root -g root -m 755
++
++ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
++ CFLAGS += -g
++endif
++ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
++ INSTALL_PROGRAM += -s
++endif
++ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
++ CFLAGS += -O0
++else
++ CFLAGS += -O2
++endif
++
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ touch configure-stamp
+
+build: configure-stamp build-stamp
+build-stamp:
+ dh_testdir
- $(MAKE)
++ $(MAKE) CFLAGS="$(CFLAGS)" INSTALL_PROGRAM="$(INSTALL_PROGRAM)"
+ touch build-stamp
+
+clean:
++ echo "BLA2"
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
++ echo "BLA2"
+ -$(MAKE) clean
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+ $(MAKE) install DESTDIR=$(CURDIR)/debian/wmbutton PREFIX=/usr
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_installdocs
+ dh_installmenu
+ dh_installman
+ dh_installchangelogs
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
- dh_builddeb
++ dh_builddeb -v
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --cc debian/wmbutton.1
index df70d11,0000000..37f696e
mode 100644,000000..100644
--- a/debian/wmbutton.1
+++ b/debian/wmbutton.1
@@@ -1,104 -1,0 +1,117 @@@
+.\" Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH WMBUTTON 1 "September 18, 2001"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh disable hyphenation
+.\" .hy enable hyphenation
+.\" .ad l left justify
+.\" .ad b justify to both left and right margins
+.\" .nf disable filling
+.\" .fi enable filling
+.\" .br insert line break
+.\" .sp <n> insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+wmbutton \- dockable launcher application
+.SH SYNOPSIS
+.B wmbutton
- [-g \fIgeometry\fP] [-d \fIdisplay\fP] [-v] [-f \fIconfigfile\fP] [-h]
++.\"[-g \fIgeometry\fP] [-d \fIdisplay\fP] [-v] [-f \fIconfigfile\fP] [-h]
++[\fIOPTIONS\fP]
+
+.SH DESCRIPTION
+This manual page documents briefly the
+.B wmbutton
+command.
+This manual page was written for the Debian GNU/Linux distribution
+because the original program does not have a manual page.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
+.\" respectively.
+\fBwmbutton\fP is a 64x64 pixel application that displays nine buttons and can be used as dockapp for X window managers such as Window Maker, AfterStep, BlackBox, and Enlightenment. Each of these buttons can be configured via a configuration file to run just about any application you would like to. Basically, if you can type it in a shell command, wmbutton can run it.
+
+.PP
+\fBwmbutton\fP is configured using a configuration file, ~/.wmbutton (or /etc/wmbutton.conf). Its format is documented in the "Configuration" section below.
+.SH OPTIONS
+.TP
+.B \-g <geometry>
+Window Geometry - ie: 64x64+10+10
+.TP
+.B \-d <display>
+Display - ie: 127.0.0.1:0.0
+.TP
+.B \-f <filename>
+Full path to configuration file.
+.TP
++.B \-b <filename>
++Full path to button xpm.
++.TP
++.B \-F <font>
++Custom tooltip font (e.g. -b\&h-lucidatypewriter-medium-*-*-*-12-*)
++.TP
+.B \-v
+Verbose Mode, gives extra debug output.
+.TP
+.B \-h
+Quick overview of available options.
+.TP
+.B \-m
- Enable Middle Mouse functionality (disabled by default).
++Disable Middle Mouse functionality.
++.TP
++.B \-s
++Swap tooltip colors.
++.TP
++.B \-n
++Turn off tooltips.
+
+.SH CONFIGURATION
+.TP
+The configuration file is case sensitive. A # starts a comment, and lines consisting entirely of whitespace are ignored. The syntax is simply:
+.TP
+.B <buttonnumber> <command>
+.TP
+\fBcommand\fP can be anything you can type in as a shell command.
+.TP
+Buttons are numbered as follows:
+.TP
+.B Left button
+.nf
+ 1 2 3
+ 4 5 6
+ 7 8 9
+.fi
+.TP
+.B Middle button
+.nf
+ 11 12 13
+ 14 15 16
+ 17 18 19
+.fi
+.TP
+.B Right button
+.nf
+ 21 22 23
+ 24 25 26
+ 27 28 29
+.fi
+
+.TP
+To use other icons, wmbutton has to be rebuilt. View /usr/share/doc/wmbutton/README.Debian for further information.
+
+.SH FILES
+.TP
+.I /etc/wmbutton.conf
+system wide wmbutton configuration file.
+.TP
+.I ~/.wmbutton
+peruser wmbutton configuration file. If it doesn't exist, the system wide wmbutton configuration file will be used.
+
+
+.SH AUTHOR
+wmbutton was written by Edward H. Flora <ehflora at access1.net>, and is licensed under the terms of the GNU General Public License.
+.TP
- This manual page was written by Gordon Fraser <gordon at debian.org>, for the Debian GNU/Linux system (but may be used by others).
++This manual page was written by Gordon Fraser <gordon at debian.org>, for the Debian GNU/Linux system (but may be used by others). It was updated by Christian Aichinger <Greek0 at gmx.net>
diff --cc wmb_libs.c
index 0000000,c9ea4c8..0d8daad
mode 000000,100644..100644
--- a/wmb_libs.c
+++ b/wmb_libs.c
@@@ -1,0 -1,692 +1,695 @@@
+ /* wmb_libs.c - Edward H. Flora - ehf_dockapps at cox.net */
+ /* Last Modified: 4/3/04 */
+ /*
+ * These functions are designed to work with wmbutton.
+ */
+
+ /* PORTABILITY:
+ ******************
+ * Coded in ANSI C, using ANSI prototypes.
+ */
+
+ /****** Include Files *************************************************/
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include "wmbutton.h"
+
+
+ /****** ToolTip Globals ***********************************************/
+
+ static struct timeval _tStart;
+
+ extern struct Config_t Config;
+ int _bTooltip = 0;
+ XFontStruct* _fTooltip;
+ int _nFontHeight, _nFontY;
+ int _nScreenWidth, _nScreenHeight;
+ GC _gcMono= 0;
+ Window _wTooltip;
+
+ /****** Parse Command Line ********************************************/
+ void parseargs(int argc, char **argv) {
+ int current;
+ char *Home = getenv("HOME");
+
+ while (-1 != (current = getopt(argc, argv, "vhnmsF:b:g:d:f:"))) {
+ switch (current) {
+ case 'v':
+ Config.Verbose = 1;
+ break;
+ case '?':
+ case 'h':
+ show_usage();
+ break;
+ case 'm':
+ Config.mmouse = 1;
+ break;
+ case 'n':
+ Config.bTooltipDisable = 1;
+ break;
+ case 's':
+ Config.bTooltipSwapColors = 1;
+ break;
+ case 'g':
+ Config.Geometry_str = strdup(optarg);
+ break;
+ case 'd':
+ Config.Display_str = strdup(optarg);
+ break;
+ case 'f':
+ Config.configfile = strdup(optarg);
+ break;
+ case 'F':
+ Config.szTooltipFont = strdup(optarg);
+ break;
+ case 'b':
+ Config.buttonfile = strdup(optarg);
+ break;
+ }
+ }
+
+ if (!Config.configfile) {
+ if (Home != NULL) {
+ Config.configfile = malloc(
+ strlen(Home) + strlen(CONFFILENAME) + 1);
+ sprintf(Config.configfile, "%s%s", Home, CONFFILENAME);
+ }
+ }
+
+ if (!Config.buttonfile) {
+ if (Home != NULL) {
+ Config.buttonfile = malloc(
+ strlen(Home) + strlen(BUTTONFILENAME) + 1);
+ sprintf(Config.buttonfile, "%s%s", Home, BUTTONFILENAME);
+ }
+ }
+
+ if (!Config.Geometry_str)
+ Config.Geometry_str = "64x64+0+0";
+
+ if (!Config.Display_str)
+ Config.Display_str = "";
+
+ if (!Config.szTooltipFont)
+ Config.szTooltipFont = TOOLTIP_FONT;
+
+ if (!Config.bTooltipDisable)
+ Config.bTooltipDisable = !TOOLTIP_SUPPORT;
+
+ }
+
+ /****** Show Usage Information ****************************************/
+ void show_usage() {
+ extern char *app_name;
+
+ fprintf(stderr,"\n");
+ fprintf(stderr,"usage: %s [-g geom] [-d dpy] [-f cfgfile] [-b btnfile] "\
+ "[-F <font>] [-v] [-s] [-n]\n",app_name);
+ fprintf(stderr,"\n");
- fprintf(stderr," wmbutton Ver %d Rel %d\n",VER,REL);
++ fprintf(stderr," wmbutton version %s\n", VER_STR);
+ fprintf(stderr,"\n");
+ fprintf(stderr,"-g <geometry> Window Geometry - ie: 64x64+10+10\n");
+ fprintf(stderr,"-d <display> Display - ie: 127.0.0.1:0.0\n");
+ fprintf(stderr,"-f <filename> Full path to configuration file.\n");
+ fprintf(stderr,"-b <filename> Full path to button xpm.\n");
+ fprintf(stderr,"-F <font> Custom tooltip font (e.g. -b\\&h-lucidatypewriter-medium-*-*-*-12-*)\n");
+ fprintf(stderr,"-v Verbose Mode.\n");
+ fprintf(stderr,"-h Help. This message.\n");
+ #if MIDMOUSE
+ fprintf(stderr,"-m Disable Middle Mouse functionality.\n");
+ #else
+ fprintf(stderr,"-m Enable Middle Mouse functionality.\n");
+ #endif
+ fprintf(stderr,"-s Swap tooltip colors.\n");
+ fprintf(stderr,"-n Turn off tooltips.\n");
+ fprintf(stderr,"\n");
+ exit(0);
+ }/***********************************************************************/
+
+
+ /****** Error Handler Routine *****************************************/
+ void err_mess(int err, char *str) {
+
+ switch (err) {
+ case FAILDISP:
+ fprintf(stderr,"Fail: XOpenDisplay for %s\n", str);
+ exit(err);
+ case FAILSWIN:
+ fprintf(stderr,"Fail: XCreateSimpleWindow\n");
+ exit(err);
+ case FAILICON:
+ fprintf(stderr,"Fail: XCreateSimpleWindow\n");
+ exit(err);
+ case FAILXPM:
+ fprintf(stderr,"Fail: XCreateBitmapFromData\n");
+ break;
+ case FAILWNAM:
+ fprintf(stderr,"%s: Can't set up window name\n", str);
+ exit(err);
+ case FAILGC:
+ fprintf(stderr,"Fail: XCreateGC\n");
+ exit(err);
+ case FAILCONF:
- fprintf(stderr, "Fail: Can't Find configuration file %s\n",str);
++ fprintf(stderr, "Fail: Can't Find user or system configuration file.\n");
++ fprintf(stderr, "Fail: User Config: '%s'\n", str);
++ fprintf(stderr, "Fail: System Config: '%s'\n", CONFIGGLOBAL);
+ exit(err);
+ case FAILTMPL:
+ fprintf(stderr, "Fail: Can't Create 'template' Pixmap\n");
+ exit(err);
+ case FAILVIS:
+ fprintf(stderr, "Fail: Can't Create 'visible' Pixmap\n");
+ exit(err);
+ case FAILBUT:
+ fprintf(stderr, "Fail: Can't Create 'buttons' Pixmap\n");
+ exit(err);
+ default:
+ fprintf(stderr, "Fail: UnSpecified Error: %d\n",err);
+ fprintf(stderr, "Fail: %s\n",str);
+ exit(err);
+ }
+
+ }/***********************************************************************/
+
+ /***********************************************************************
+ * RunAppN(int app)
+ *
+ * Run the command given in the configuration file 'configfile'
+ ***********************************************************************/
+ void RunAppN( int app ) {
+ char *cmndstr;
+ extern struct Config_t Config;
+
+ cmndstr = Parse(app); // Get command to pass to system
+
+ if (Config.Verbose) fprintf(stderr, "Command String: %s", cmndstr);
+
+ if (cmndstr != NULL) {
+ system(cmndstr); // if there's a command, run it
+ free(cmndstr);
+ }
+ }/***********************************************************************/
+
+ /***********************************************************************
+ * Parse(int app)
+ *
+ * Parses the file 'configfile' for command to execute.
+ ***********************************************************************/
+ char *Parse(int app) {
+ FILE *fp;
+ char Buf[BUFFER_SIZE];
+ char *Ptr;
+
+ if ((fp = fopen(Config.configfile, "r")) == NULL)
- err_mess(FAILCONF,Config.configfile);
++ if ((fp = fopen(CONFIGGLOBAL, "r")) == NULL)
++ err_mess(FAILCONF,Config.configfile);
+
+ while ((Ptr = fgets(Buf, BUFFER_SIZE, fp))) {
+ if (atoi(Buf) == app)
+ break;
+ }
+
+ fclose(fp);
+
+ if (!Ptr)
+ return Ptr;
+
+ Ptr = strchr(Buf, '\t'); // find first tab
+ if (Ptr == NULL) Ptr = strchr(Buf, ' '); // or space charater
+ if (Ptr == NULL) return(NULL);
+ Ptr++;
+
+ Ptr = strdup(Ptr);
+
+ return(Ptr);
+ }/**********************************************************************/
+
+ /***********************************************************************
+ * initTime
+ *
+ * Copyright (c) 2001 Bruno Essmann <essmann at users.sourceforge.net>
+ ***********************************************************************/
+
+ void initTime () {
+ extern struct Config_t Config;
+
+ if (Config.Verbose) {
+ fprintf(stdout, "[ ] initializing time\n");
+ }
+
+ gettimeofday(&_tStart, NULL);
+ }/**********************************************************************/
+
+ long currentTimeMillis () {
+ struct timeval tNow;
+ struct timeval tElapsed;
+
+ gettimeofday(&tNow, NULL);
+
+ if (_tStart.tv_usec > tNow.tv_usec) {
+ tNow.tv_usec+= 1000000;
+ tNow.tv_sec--;
+ }
+ tElapsed.tv_sec= tNow.tv_sec - _tStart.tv_sec;
+ tElapsed.tv_usec= tNow.tv_usec - _tStart.tv_usec;
+ return (tElapsed.tv_sec * 1000) + (tElapsed.tv_usec / 1000);
+ }/**********************************************************************/
+
+
+ void getWindowOrigin (Window w, int* nX, int* nY) {
+ extern Display *display;
+ Window wWindow, wParent, wRoot;
+ Window* wChildren;
+ unsigned int nChildren;
+ unsigned int ww, wh, wb, wd;
+ int wx, wy;
+
+ wParent= w;
+ do {
+ wWindow= wParent;
+ if (!XQueryTree(display, wParent, &wRoot, &wParent, &wChildren, &nChildren))
+ return;
+
+ if (wChildren)
+ XFree(wChildren);
+
+ } while (wParent != wRoot);
+
+ if (XGetGeometry(display, wWindow, &wRoot, &wx, &wy, &ww, &wh, &wb, &wd)) {
+ if (nX) {
+ *nX= wx;
+ }
+ if (nY) {
+ *nY= wy;
+ }
+ }
+ }/**********************************************************************/
+
+ /***********************************************************************
+ * getButtonLocation
+ *
+ * compute location for each button's tooltip (not perfect)
+ ***********************************************************************/
+ void getButtonLocation (int nButton, int* nLocationX, int* nLocationY) {
+ *nLocationX = 0;
+ *nLocationY = 8;
+ while (nButton > BUTTON_COLS) {
+ *nLocationY += BUTTON_SIZE;
+ nButton -= BUTTON_COLS;
+ }
+ while (nButton > 0) {
+ *nLocationX += BUTTON_SIZE - 1;
+ nButton--;
+ }
+ }/**********************************************************************/
+
+ /* SkipWord & SkipSpaces: utility functions for getNicenedString */
+ char *SkipWord(char *Text) {
+ char *Result = Text;
+
+ while ((*Result != ' ')&&(*Result != '\t')&&
+ (*Result != '\n')&&(*Result != 0x00))
+ Result++;
+ return Result;
+ }
+
+ char *SkipSpaces(char *Text) {
+ char *Result = Text;
+
+ while ((*Result == ' ')||(*Result == '\t')||(*Result == '\n'))
+ Result++;
+ return Result;
+ }
+
+ /***********************************************************************
+ * getNicenedString
+ *
+ * nicen the parsed command from the .wmbutton config file
+ * - cut if too long
+ * - remove parameters, whitespace and the '&'...
+ ***********************************************************************/
+ char* getNicenedString (char *old, int andAddSeparator) {
+ char *WorkStr;
+ char *WorkStrEnd;
+ char *StartPtr;
+ char *EndPtr;
+
+ char *RetStr;
+
+ if (!old) {
+ if (andAddSeparator)
+ return strdup("-- | ");
+ else
+ return strdup("--");
+ }
+
+ RetStr = malloc(strlen(old) + 3 + 1); // 3 for Seperator
+ *RetStr = 0x00;
+
+ WorkStr = strdup(old);
+ WorkStrEnd = strchr(WorkStr, 0x00);
+ StartPtr = WorkStr;
+
+ while(StartPtr < WorkStrEnd) {
+ StartPtr = SkipSpaces(StartPtr);
+ EndPtr = SkipWord(StartPtr);
+ *EndPtr = 0x00;
+
+ if ((*StartPtr == '&')||(*StartPtr == '-'))
+ break;
+
+ strcat(RetStr, StartPtr);
+ strcat(RetStr, " ");
+ StartPtr = EndPtr+1;
+ }
+
+ free(WorkStr);
+
+ if (andAddSeparator) {
+ strcat(RetStr, "| ");
+ }
+
+ return RetStr;
+ }
+
+ /***********************************************************************
+ * getButtonAppNames
+ *
+ * returns the 1..3 application names / commands to be shown in tooltip
+ ***********************************************************************/
+ char* getButtonAppNames (int nButton) {
+ char *str = NULL;
+ char *tmp1,*tmp2;
+
+ if (!( nButton < 0 || nButton > 9 )) {
+
+ // FIXME: _Might_ overflow, but it's unlikely.
+ // Perhaps one should fix this sometime ;)
+ str = (char*) calloc (sizeof(char), BUFFER_SIZE);
+
+ tmp1 = Parse(nButton + LMASK);
+ tmp2 = getNicenedString(tmp1, 1);
+ strcat(str, tmp2);
+ free(tmp1);
+ free(tmp2);
+
+ tmp1 = Parse(nButton + MMASK);
+ tmp2 = getNicenedString(tmp1, 1);
+ strcat(str, tmp2);
+ free(tmp1);
+ free(tmp2);
+
+ tmp1 = Parse(nButton + RMASK);
+ tmp2 = getNicenedString(tmp1, 0);
+ strcat(str, tmp2);
+ free(tmp1);
+ free(tmp2);
+ }
+
+ return(str);
+ }/**********************************************************************/
+
+
+ int hasTooltipSupport () {
+ return !Config.bTooltipDisable;
+ }/**********************************************************************/
+
+ void showTooltip (int nButton, int nMouseX, int nMouseY) {
+ Pixmap pixmap, mask;
+ int nMainWinX, nMainWinY;
+ int nButtonX = 0, nButtonY = 0, nButtonWidth = 0, nButtonHeight = 0;
+ int nTextY, nX, nY, nWidth, nHeight, nSide;
+ char* szText;
+ extern struct Config_t Config;
+ extern Window iconwin;
+ extern Pixel bg_pixel, fg_pixel;
+ extern Display *display;
+ extern GC gc;
+
+ if (Config.bTooltipDisable || nButton == -1) {
+ return;
+ }
+ if (_bTooltip) {
+ hideTooltip();
+ }
+
+
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] showing tooltip for button %d at %d, %d\n",
+ currentTimeMillis(),
+ nButton, nMouseX, nMouseY);
+ }
+
+ szText = getButtonAppNames(nButton);
+ if(!szText)
+ return;
+
+ _bTooltip= 1;
+
+ nWidth= XTextWidth(_fTooltip, szText, strlen(szText)) + 16;
+ nHeight= _nFontHeight + 4;
+ if (nHeight < 16) {
+ nHeight= 16;
+ }
+ if (nWidth < nHeight) {
+ nWidth= nHeight;
+ }
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] tooltip size: %d, %d\n",
+ currentTimeMillis(), nWidth, nHeight);
+ }
+
+ getWindowOrigin(iconwin, &nMainWinX, &nMainWinY);
+ getButtonLocation(nButton, &nButtonX, &nButtonY);
+ nButtonX+= nMainWinX;
+ nButtonY+= nMainWinY;
+ nButtonWidth = BUTTON_SIZE;
+ nButtonHeight = BUTTON_SIZE;
+
+ if (nButtonX + nWidth > _nScreenWidth) {
+ nSide= TOOLTIP_RIGHT;
+ nX= nButtonX - nWidth + nButtonWidth / 2;
+ if (nX < 0) {
+ nX= 0;
+ }
+ } else {
+ nSide= TOOLTIP_LEFT;
+ nX= nButtonX + nButtonWidth / 2;
+ }
+ if (nX + nWidth > _nScreenWidth) {
+ nX= _nScreenWidth - nWidth;
+ }
+
+ if (nButtonY - (nHeight + TOOLTIP_SPACE) < 0) {
+ nSide|= TOOLTIP_TOP;
+ nY= nButtonY + nButtonHeight - 1;
+ nTextY= TOOLTIP_SPACE;
+ } else {
+ nSide|= TOOLTIP_BOTTOM;
+ nY= nButtonY - (nHeight + TOOLTIP_SPACE);
+ nTextY= 0;
+ }
+
+ pixmap= createTooltipPixmap(nWidth, nHeight, nSide, &mask);
+
+ XSetForeground(display, gc, Config.bTooltipSwapColors ? fg_pixel : bg_pixel);
+ XSetFont(display, gc, _fTooltip->fid);
+ XDrawString(display, pixmap, gc,
+ 8, nTextY + (nHeight - _nFontHeight) / 2 + _nFontY,
+ szText, strlen(szText));
+
+ XSetWindowBackgroundPixmap(display, _wTooltip, pixmap);
+
+ XResizeWindow(display, _wTooltip, nWidth, nHeight + TOOLTIP_SPACE);
+ XShapeCombineMask(display, _wTooltip, ShapeBounding, 0, 0, mask, ShapeSet);
+ XFreePixmap(display, mask);
+ XMoveWindow(display, _wTooltip, nX, nY);
+ XMapRaised(display, _wTooltip);
+ XFreePixmap(display, pixmap);
+
+ free(szText);
+ }/**********************************************************************/
+
+ void hideTooltip () {
+ extern struct Config_t Config;
+ extern Display *display;
+
+ if (Config.bTooltipDisable) {
+ return;
+ }
+ if (_bTooltip) {
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] hiding tooltip\n", currentTimeMillis());
+ }
+ XUnmapWindow(display, _wTooltip);
+ _bTooltip= 0;
+ }
+ }/**********************************************************************/
+
+ int hasTooltip () {
+ if (Config.bTooltipDisable) {
+ return 0;
+ }
+ return _bTooltip;
+ }/**********************************************************************/
+
+ void initTooltip () {
+ XSetWindowAttributes attribs;
+ unsigned long vmask;
+ extern Display *display;
+ extern char *app_name;
+ extern int screen;
+ extern Window rootwin, win;
+
+ if (Config.bTooltipDisable) {
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] initializing tooltips (disabled)\n",
+ currentTimeMillis());
+ }
+
+ return;
+ }
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] initializing tooltips\n", currentTimeMillis());
+ }
+ _fTooltip= XLoadQueryFont(display, Config.szTooltipFont);
+ if (!_fTooltip) {
+ fprintf(stderr, "%s: couldn't allocate font '%s'.\n", app_name, Config.szTooltipFont);
+ if (!strcmp(Config.szTooltipFont, TOOLTIP_FONT))
+ fprintf(stderr, "%s: Use option -F <font>\n", app_name);
+ exit(-1);
+ }
+ _nFontHeight= _fTooltip->ascent + _fTooltip->descent;
+ _nFontY= _fTooltip->ascent;
+ _nScreenWidth= WidthOfScreen(ScreenOfDisplay(display, screen));
+ _nScreenHeight= HeightOfScreen(ScreenOfDisplay(display, screen));
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] configuring tooltip font:\n" \
+ "[%8ld] - '%s'\n" \
+ "[%8ld] - font-height= %d, font-ascent= %d\n" \
+ "[%8ld] configuring screen size: %dx%d\n",
+ currentTimeMillis(),
+ currentTimeMillis(), Config.szTooltipFont,
+ currentTimeMillis(), _nFontHeight, _nFontY,
+ currentTimeMillis(), _nScreenWidth, _nScreenHeight );
+ }
+
+ vmask= CWSaveUnder | CWOverrideRedirect | CWBorderPixel;
+ attribs.save_under= True;
+ attribs.override_redirect= True;
+ attribs.border_pixel= 0;
+ _wTooltip= XCreateWindow(display, rootwin, 1, 1, 10, 10, 1,
+ CopyFromParent, CopyFromParent,
+ CopyFromParent, vmask, &attribs);
+ if (win == 0) {
+ fprintf(stderr, "Cannot create tooltip window.\n");
+ exit(-1);
+ }
+ }/**********************************************************************/
+
+ void destroyTooltip () {
+ extern Display *display;
+
+ if (Config.bTooltipDisable) {
+ return;
+ }
+ if (_gcMono) {
+ XFreeGC(display, _gcMono);
+ _gcMono= 0;
+ }
+ XDestroyWindow(display, _wTooltip);
+ }/**********************************************************************/
+
+ void drawTooltipBalloon (Pixmap pix, GC gc, int x, int y, int w, int h, int side) {
+ extern Display *display;
+ int rad = h*3/10;
+ XPoint pt[3];
+
+ XFillArc(display, pix, gc, x, y, rad, rad, 90*64, 90*64);
+ XFillArc(display, pix, gc, x, y+h-1-rad, rad, rad, 180*64, 90*64);
+
+ XFillArc(display, pix, gc, x+w-1-rad, y, rad, rad, 0*64, 90*64);
+ XFillArc(display, pix, gc, x+w-1-rad, y+h-1-rad, rad, rad, 270*64, 90*64);
+
+ XFillRectangle(display, pix, gc, x, y+rad/2, w, h-rad);
+ XFillRectangle(display, pix, gc, x+rad/2, y, w-rad, h);
+
+ if (side & TOOLTIP_BOTTOM) {
+ pt[0].y = y+h-1;
+ pt[1].y = y+h-1+TOOLTIP_SPACE;
+ pt[2].y = y+h-1;
+ } else {
+ pt[0].y = y;
+ pt[1].y = y-TOOLTIP_SPACE;
+ pt[2].y = y;
+ }
+ if (side & TOOLTIP_RIGHT) {
+ pt[0].x = x+w-h+2*h/16;
+ pt[1].x = x+w-h+11*h/16;
+ pt[2].x = x+w-h+7*h/16;
+ } else {
+ pt[0].x = x+h-2*h/16;
+ pt[1].x = x+h-11*h/16;
+ pt[2].x = x+h-7*h/16;
+ }
+ XFillPolygon(display, pix, gc, pt, 3, Convex, CoordModeOrigin);
+ }/**********************************************************************/
+
+ Pixmap createTooltipPixmap (int width, int height, int side, Pixmap *mask) {
+ extern Display *display;
+ extern GC gc;
+ extern Pixel bg_pixel, fg_pixel;
+ extern int depth;
+ extern Window rootwin;
+ Pixmap bitmap;
+ Pixmap pixmap;
+ int x, y;
+
+ bitmap = XCreatePixmap(display, rootwin,
+ width+TOOLTIP_SPACE, height+TOOLTIP_SPACE, 1);
+
+ if (!_gcMono) {
+ _gcMono= XCreateGC(display, bitmap, 0, NULL);
+ }
+ XSetForeground(display, _gcMono, 0);
+ XFillRectangle(display, bitmap, _gcMono, 0, 0,
+ width+TOOLTIP_SPACE, height+TOOLTIP_SPACE);
+
+ pixmap = XCreatePixmap(display, rootwin,
+ width+TOOLTIP_SPACE, height+TOOLTIP_SPACE, depth);
+ XSetForeground(display, gc, Config.bTooltipSwapColors ? fg_pixel : bg_pixel);
+ XFillRectangle(display, pixmap, gc, 0, 0,
+ width+TOOLTIP_SPACE, height+TOOLTIP_SPACE);
+
+ if (side & TOOLTIP_BOTTOM) {
+ y = 0;
+ } else {
+ y = TOOLTIP_SPACE;
+ }
+ x = 0;
+
+ XSetForeground(display, _gcMono, 1);
+ drawTooltipBalloon(bitmap, _gcMono, x, y, width, height, side);
+ XSetForeground(display, gc, Config.bTooltipSwapColors ? bg_pixel : fg_pixel);
+ drawTooltipBalloon(pixmap, gc, x+1, y+1, width-2, height-2, side);
+
+ *mask = bitmap;
+
+ return pixmap;
+ }/***********************************************************************/
+
+
+ /***********************************************************************
+ * flush_expose
+ *
+ * Everyone else has one of these... Can't hurt to throw it in.
+ ***********************************************************************/
+ int flush_expose(Window w) {
+ extern Display *display;
+ XEvent dummy;
+ int i=0;
+
+ while (XCheckTypedWindowEvent(display, w, Expose, &dummy)) i++;
+ return(i);
+ }/***********************************************************************/
diff --cc wmbutton.h
index 0000000,178f896..324c37f
mode 000000,100644..100644
--- a/wmbutton.h
+++ b/wmbutton.h
@@@ -1,0 -1,107 +1,110 @@@
+ /* wmbutton.h - Edward H. Flora - ehf_dockapps at cox.net */
+ /* Last Modified 3/27/04 */
+
+ /****** Include Files ***************************************************/
-#include <Xlib.h>
-#include <Xutil.h>
-#include <xpm.h>
-#include <extensions/shape.h>
-#include <keysym.h>
++#include <X11/Xlib.h>
++#include <X11/Xutil.h>
++#include <X11/xpm.h>
++#include <X11/extensions/shape.h>
++#include <X11/keysym.h>
+ #include <math.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <ctype.h>
+ #include <sys/time.h>
+ #include <unistd.h>
+
+ /****** Define Config File Info ***************************************/
+ #define CONFFILENAME "/.wmbutton" /* Default conf filename $HOME/.wmbutton */
++#define CONFIGGLOBAL "/etc/wmbutton.conf" // added for Debianization
+ #define BUTTONFILENAME "/.wmbutton.xpm"
+
-/****** Version / Release Number ***************************************/
-#define VER 0 /* Version Number */
-#define REL 6 /* Release Number */
++/****** Version Number *************************************************/
++#define VER_STR "0.6.1" /* Version Number String*/
++#define VER_MAJOR 0 /* Major version number*/
++#define VER_MINOR 6 /* Minor version number*/
++#define VER_PATH 1 /* Patch Level*/
+
+ /****** Define Error Codes *********************************************/
+ #define FAILDISP 20
+ #define FAILSWIN 21
+ #define FAILICON 22
+ #define FAILXPM 23
+ #define FAILWNAM 24
+ #define FAILGC 25
+ #define FAILCONF 26
+ #define FAILTMPL 27
+ #define FAILVIS 28
+ #define FAILBUT 29
+
+ /****** Define Other Options ****************************************/
+ #define VERB 0 /* Enable=1, Disable=0: Debugging (verbose) Mode*/
+ #define MIDMOUSE 1 /* Define Middle Mouse functionality */
+ #define LMASK 0 /* left button mask: run app # mask + button #*/
+ #define MMASK 10 /* middle button mask: run app # mask + button #*/
+ #define RMASK 20 /* right button mask: run app # mask + button #*/
+ #define NUMB_OF_APPS 9 /* Define number of apps */
+
+ #define EOLN '\n' /* Defines the new line character */
+ #define SIZE1 20 /* Defines the increment to increase the */
+ /* string by until a newline of EOF is found */
+
+ /****** Defines for Tool Tips ***************************************/
+ #define TOOLTIP_SUPPORT 1
+ #define TOOLTIP_FONT "-*-helvetica-medium-r-normal-*-10-*-*-*-*-*-*-*"
+ #define TOOLTIP_FONT_LEN 128
+ #define TOOLTIP_SHOW_DELAY 750
+ #define TOOLTIP_RESHOW_DELAY 1500
+
+ #define TOOLTIP_SPACE 12
+ #define TOOLTIP_TOP 0
+ #define TOOLTIP_BOTTOM 1
+ #define TOOLTIP_LEFT 0
+ #define TOOLTIP_RIGHT 2
+
+ #define BUTTON_SIZE 18
+ #define BUTTON_COLS 3
+
+ #define BUFFER_SIZE 1024
+
+ /****** Typedefs *******************************************/
+
+ struct Config_t {
+ char *configfile;
+ char *buttonfile;
+ char *Geometry_str;
+ char *Display_str;
+ int mmouse;
+ int Verbose;
+ char* szTooltipFont;
+ int bTooltipSwapColors;
+ int bTooltipDisable;
+ };
+
+ /****** Function Prototyes *******************************************/
+ void RunAppN(int app); // function to run app N as found in conf file
+ char *Parse(int app); // parse data in config file
+ void parseargs(int argc, char **argv);
+ char *readln(FILE *fp); // read line from file, return pointer to it
+ void err_mess(int err, char *str); // Error Handling Routine
+ void show_usage(void); // show usage message to stderr
+ int flush_expose(Window w);
+
+
+ /****** Tooltip Function Prototypes **********************************/
+ void initTooltip();
+ void destroyTooltip ();
+ int hasTooltipSupport ();
+ void showTooltip (int nButton, int nMouseX, int nMouseY);
+ void hideTooltip ();
+ int hasTooltip ();
+ void drawTooltipBalloon (Pixmap pix, GC gc, int x, int y, int w, int h, int side);
+ Pixmap createTooltipPixmap (int width, int height, int side, Pixmap *mask);
+
+ void initTime ();
+ long currentTimeMillis ();
+ void getWindowOrigin (Window w, int* nX, int* nY);
+ void getButtonLocation (int nButton, int* nLocationX, int* nLocationY);
+ char *getButtonAppNames (int nButton);
+
+ /**********************************************************************/
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmbutton.git
More information about the Pkg-wmaker-commits
mailing list