wmcp: Add version 1.2.8 to repository.

From
http://www.cs.mun.ca/~gstarkes/wmaker/dockapps/files/wmcp-1.2.8.tar.gz
This commit is contained in:
Doug Torrance 2016-12-27 11:09:33 -05:00 committed by Carlos R. Mafra
parent 673a7d931f
commit a2bcf3c0f4
14 changed files with 1545 additions and 0 deletions

41
wmcp/Makefile Normal file
View file

@ -0,0 +1,41 @@
INCLUDES =-I/usr/X11R6/include/X11 -I/usr/local/include -I/usr/include/X11R6/X11
LIBINC =-L/usr/X11R6/lib -L/usr/include/lib
LIBS = -lm -lX11 -lXpm -lXext
TARGET = wmcp
OBJECTS = wmcp.o
SOURCE = wmcp.c
scalpel:
if [ -e buttons.xpm ]; then rm buttons.xpm; fi
if [ -e pushed_buttons.xpm ]; then rm pushed_buttons.xpm; fi
if [ -e backdrop.xpm ]; then rm backdrop.xpm; fi
ln -s buttons-scalpel.xpm buttons.xpm
ln -s pushed_buttons-scalpel.xpm pushed_buttons.xpm
ln -s backdrop-scalpel.xpm backdrop.xpm
make clean
make ${TARGET}
gv:
if [ -e buttons.xpm ]; then rm buttons.xpm; fi
if [ -e pushed_buttons.xpm ]; then rm pushed_buttons.xpm; fi
if [ -e backdrop.xpm ]; then rm backdrop.xpm; fi
ln -s buttons-gv.xpm buttons.xpm
ln -s pushed_buttons-gv.xpm pushed_buttons.xpm
ln -s backdrop-gv.xpm backdrop.xpm
make clean
make ${TARGET}
###################################################################
${OBJECTS}: ${SOURCE}
gcc -g -c -Wall ${INCLUDES} ${FLAGS} $< -o $*.o
${TARGET}: ${OBJECTS}
gcc -g -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

158
wmcp/README Normal file
View file

@ -0,0 +1,158 @@
wmcp ( Window Maker Crappy Pager )
Version 1.2.8
Origional Author:
Ben Cohen <buddog@aztec.asu.edu>
Contributors: ( ** Thanks alot to them !! ** )
Thomas Nemeth <tnemeth@multimania.com> -- Pushed button highlighting
Craig Maloney <craig@ic.net> -- CTRL + ALT + key option
Gert Beumer <Gert@scintilla.utwente.nl> -- Dynamic button sizes
A simple dockable pager for use in Window Maker.
---------------------------------------------------------------------------
INSTALL:
--------
Unzip the file: gunzip wmcp-1.2.8.tar.gz
Untar the file: tar xvf wmcp-1.2.8.tar
CD to src dir: cd wmcp-1.2.8
do one of these makes:
make -- make wmcp using the default button scheme (scalpel)
make scalpel -- make wmcp using the scalpel style button colors
make gv -- make wmcp using the ghostview style button colors
copy wmcp to some directory in your $PATH.
( ie: cp wmcp /usr/local/bin )
type wmcp
Grab the appicon and move it to the dock.
If make doesn't work, you may need to fiddle with the settings in
the Makefile.
Tested on:
WindowMaker-0.20.3
WindowMaker-0.50.2
X Clients: Red Hat 5.0, Red Hat 6.0, HP-UX 10.20
X Servers: XFree86, Exceed, AccelX
USAGE:
------
usage: wmcp [-g geometry] [-d dpy] [-n workspaces] [-a alt key] [-v]
[-c] [-w i/n/w] [-s y/n] [-x #] [-y #] [-h]
-g geometry: ie: 64x64+10+10
-d dpy: Display. ie: 127.0.0.1:0.0
-n workspaces: How many buttons to start with.
-a alt key: integer 1-4 defining ModXMask (default 1 Mod1Mask).
-w i/n/w: Window State: Iconic, Normal, Withdrawn (default Withdrawn)
-s y/n: Shaped window: yes or no (default y)
-c Sends CTRL + ALT + Key (default only sends ALT + key)
-v Verbose. 0=off, 1=on (default 0)
-x # Number of buttons on the x-direction (1,2,3 or 4)
-y # Number of buttons in the y-direction (1,2,3 or 4)
-h Help. This screen.
Left mouse button:
Selects the workspace to switch to.
Right / Middle mouse buttons:
Change the number of buttons displayed.
EXAMPLES:
---------
Use all defaults. Good for WindowMaker.
mwdl
Normal X window, non shaped window, send CTRL + ALT + key
wmdl -w n -s n -c
2x2 button grid:
wmdl -x 2 -y 2
2x3 button grid:
wmdl -x 2 -y 3
NOTES:
------
This pager works by sending synthetic ALT + number key press events to the
root window. The "-c" command line switch makes the application send
a CNTRL + ALT + number key which might be of use in another window manager.
Because the ALT key may have different key codes on different X servers,
you can use the -a command line switch to change which meta key is used.
I doubt anyone will ever have to do this though. The Mod1Mask which is the
program's default seems to work on most if not all systems.
I don't know of any Window Maker hooks for determining things like how
may workspaces are actually in use. If any one know about this stuff, please
let me know.
It is very easy to change the look of wmcp by editing the colors in the
pixmap files. Someday we'll add an official 'skins' ability but for now
just edit the xpm files to change the colors etc.
This program is released under the GPL license and has been created by looking
a lot at the code for wmppp, wmtime, wmload and various other Window Maker
resources and info on the Web and Usenet.
BTW, the one true enlightened way is "Sloppy Focus."
CHANGE LOG:
-----------
1.2.8 May 25, 1999 -- Gert Beumer
Added -x and -y functionality to configure the amount of buttons.
Changed the rendering of the buttons from the pixmap
(to suport multiple button startup)
1.2.6 Feb 11, 1999
Once again changed the button XPM styling.
Added window state = Iconic, Normal, or Withdrawn.
Added shaped window = yes or no.
CTRL + ALT code added by -- Craig Maloney <craig@ic.net>.
1.2.5 Jan 25, 1999
Made buttons flat style ala Ghostview 3.5.8
1.2 Jan 24, 1999
Pushed button images added by Thomas Nemeth <tnemeth@multimania.com>
1.1 Dec 24ish, 1998
Origional version.
TODO:
-----
Add a simple method for changing 'skins' other than just editing the XPM
files by hand.
Add catching Window Maker's events to know how to refresh the pager when
the current workspace is changed via the clip, and how to get the number
of workspaces actually in use.
Please send comments, flames, etc to buddog@aztec.asu.edu
- Ben Cohen

75
wmcp/backdrop-gv.xpm Normal file
View file

@ -0,0 +1,75 @@
/* XPM */
static char *backdrop_xpm[] = {
/* width height num_colors chars_per_pixel */
" 64 64 3 1",
/* colors */
"# c #9D906D",
"a c #000000",
"i c #c8c0b0",
/* pixels */
"################################################################",
"################################################################",
"################################################################",
"################################################################",
"################################################################",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"########iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"################################################################",
"################################################################",
"################################################################",
"################################################################",
"################################################################",
"################################################################",
"################################################################",
};

75
wmcp/backdrop-scalpel.xpm Normal file
View file

@ -0,0 +1,75 @@
/* XPM */
static char *backdrop_xpm[] = {
/* width height num_colors chars_per_pixel */
" 64 64 3 1",
/* colors */
"# c #9D906D",
"a c #000000",
"i c #313121",
/* pixels */
"################################################################",
"################################################################",
"################################################################",
"################################################################",
"################################################################",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"aaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"########iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii########",
"################################################################",
"################################################################",
"################################################################",
"################################################################",
"################################################################",
"################################################################",
"################################################################",
};

1
wmcp/backdrop.xpm Symbolic link
View file

@ -0,0 +1 @@
backdrop-scalpel.xpm

66
wmcp/buttons-gv.xpm Normal file
View file

@ -0,0 +1,66 @@
/* XPM */
static char *buttons_xpm[] = {
/* width height num_colors chars_per_pixel */
" 48 53 6 1",
/* colors */
". c #000000",
"# c #787468",
"a c #b0b4b0",
" c #c8c0b0",
"c c #f8e8d8",
"R c #FF0000",
/* pixels */
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aa#############################################a",
"aa#cccccccccccccccccccccccccccccccccccccccccc#ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c##########################################ca",
"aa#cccccccccccccccccccccccccccccccccccccccccccca",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
" .. .... .... . ...... ... .... ... ... ",
" . . .. .. . .. .. . ",
" . .. ... ......... .... . ... .... ",
" . . . . .. . .. . . ",
" ... ......... .... ... . ... ... ",
};

66
wmcp/buttons-scalpel.xpm Normal file
View file

@ -0,0 +1,66 @@
/* XPM */
static char *buttons_xpm[] = {
/* width height num_colors chars_per_pixel */
" 48 53 6 1",
/* colors */
". c #313121",
"# c #000000",
"a c #313121",
" c #635842",
"c c #9D906D",
"R c #FF0000",
/* pixels */
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"a##############################################a",
"a#cccccccccccccccccccccccccccccccccccccccccccc#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#cccccccccccccccccccccccccccccccccccccccccccc#a",
"a##############################################a",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
" .. .... .... . ...... ... .... ... ... ",
" . . .. .. . .. .. . ",
" . .. ... ......... .... . ... .... ",
" . . . . .. . .. . . ",
" ... ......... .... ... . ... ... ",
};

1
wmcp/buttons.xpm Symbolic link
View file

@ -0,0 +1 @@
buttons-scalpel.xpm

68
wmcp/mask-scalpel.xbm Normal file
View file

@ -0,0 +1,68 @@
#define mask_width 64
#define mask_height 64
static char mask_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

1
wmcp/mask.xbm Symbolic link
View file

@ -0,0 +1 @@
mask-scalpel.xbm

View file

@ -0,0 +1,66 @@
/* XPM */
static char *pushed_buttons_xpm[] = {
/* width height num_colors chars_per_pixel */
" 48 53 6 1",
/* colors */
". c #000000",
"# c #787468",
"a c #b0b4b0",
" c #e8dcc8",
"c c #f8e8d8",
"R c #FF0000",
/* pixels */
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aa#############################################a",
"aa#cccccccccccccccccccccccccccccccccccccccccc#ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c #ca",
"aa#c##########################################ca",
"aa#cccccccccccccccccccccccccccccccccccccccccccca",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
" .. .... .... . ...... ... .... ... ... ",
" . . .. .. . .. .. . ",
" . .. ... ......... .... . ... .... ",
" . . . . .. . .. . . ",
" ... ......... .... ... . ... ... ",
};

View file

@ -0,0 +1,67 @@
/* XPM */
static char *pushed_buttons_xpm[] = {
/* width height num_colors chars_per_pixel */
" 48 53 6 1",
/* colors */
". c #F6DEB3",
"# c #000000",
"a c #313121",
" c #635842",
"c c #9D906D",
"R c #FF0000",
/* pixels */
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"a##############################################a",
"a#cccccccccccccccccccccccccccccccccccccccccccc#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#c c#a",
"a#cccccccccccccccccccccccccccccccccccccccccccc#a",
"a##############################################a",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
" .. .... .... . ...... ... .... ... ... ",
" . . .. .. . .. .. . ",
" . .. ... ......... .... . ... .... ",
" . . . . .. . .. . . ",
" ... ......... .... ... . ... ... ",
};

1
wmcp/pushed_buttons.xpm Symbolic link
View file

@ -0,0 +1 @@
pushed_buttons-scalpel.xpm

859
wmcp/wmcp.c Normal file
View file

@ -0,0 +1,859 @@
/***********************************************************************
* Code is stol^H^H^H^Hbased on wmppp, wmload, and wmtme
*
* Author: Ben Cohen <buddog@aztec.asu.edu>
*
* Contributors:
* Thomas Nemeth <tnemeth@multimania.com> -- Pushed button highlighting
* Craig Maloney <craig@ic.net> -- CTRL + ALT + key option
*
*
* This program is distributed under the GPL license.
*
*
* Best viewed with tab = 4 ( in vi set ts=4 )
*
***********************************************************************/
#define VERSION "Ver 1.2.8 -- May 25, 1999"
#include <Xlib.h>
#include <Xutil.h>
#include <xpm.h>
#include <extensions/shape.h>
#include <keysym.h>
#include <stdio.h>
#include <math.h>
#include "backdrop.xpm"
#include "buttons.xpm"
#include "pushed_buttons.xpm"
#include "mask.xbm"
#define NO (0)
#define YES (1)
#define MAX_X_BUT 4
#define MAX_Y_BUT 4
/***********************************************************************
* Globals.. OK.. there's too many globals.. so sue me.
***********************************************************************/
Display * display;
int screen;
Window rootwin, win, iconwin;
GC gc;
int depth;
Pixel bg_pixel, fg_pixel;
XSizeHints xsizehints;
XWMHints * xwmhints;
XClassHint xclasshint;
typedef struct _XpmIcon {
Pixmap pixmap;
Pixmap mask;
XpmAttributes attributes;
} XpmIcon;
Pixmap pixmask;
typedef struct _button_region {
int x,y;
int i,j;
} ButtonArea;
ButtonArea button_region[16];
XpmIcon template, visible, buttons, pbuttons;
unsigned int control = 0;
int numb_of_workspaces = 16; /* Number of buttons to display.
Initially set high. Changed by
-n switch or button 2or3 */
int N = 1; /* Button number pressed to goto WS */
int B = 1; /* Button number pressed to number WS's */
int alt_key_type = 1;
int border = 5;
int Verbose = 0;
char * app_name = "wmcp";
/***********************************************************************
* Function Prototypes
***********************************************************************/
void switchToWorkspaceN( int workspace );
void redraw( int xbut, int ybut );
void getPixmaps();
int whichButton( int x, int y, int xbut, int ybut );
int flush_expose(Window w);
void show_usage();
/***********************************************************************
* main
***********************************************************************/
int main( int argc, char ** argv )
{
XEvent report;
XGCValues xgcValues;
XTextProperty app_name_atom;
int dummy = 0;
int i;
int xbut = 2;
int ybut = 2;
int is_shaped = YES;
int window_state = WithdrawnState;
char Geometry_str[64] = "64x64+5+5";
char Display_str[64] = "";
/* Parse Command Line Arguments */
for ( i=1; i<argc; i++ ) {
if ( *argv[i] == '-' ) {
switch ( *(argv[i]+1) ) {
case 'v':
Verbose = 1;
break;
case 'g':
if ( ++i >= argc ) show_usage();
sscanf(argv[i], "%s", Geometry_str);
if ( Verbose ) printf("Geometry is: %s\n", Geometry_str);
break;
case 'd':
if ( ++i >= argc ) show_usage();
sscanf(argv[i], "%s", Display_str);
if ( Verbose ) printf("Display is: %s\n", Display_str);
break;
case 'n':
if ( ++i >= argc ) show_usage();
sscanf(argv[i], "%d", &numb_of_workspaces);
if ( Verbose )
printf("Numb of Workspaces: %d\n", numb_of_workspaces);
break;
case 's':
if ( ++i >= argc ) show_usage();
if ( *argv[i] == 'n' ) {
is_shaped = NO;
} else {
is_shaped = YES;
}
break;
case 'w':
if ( ++i >= argc ) show_usage();
switch ( *argv[i] ) {
case 'i':
window_state = IconicState;
break;
case 'w':
window_state = WithdrawnState;
break;
case 'n':
window_state = NormalState;
break;
}
break;
case 'x':
if ( ++i >= argc ) show_usage();
sscanf(argv[i], "%d", &xbut);
if ( xbut < 1 || xbut > MAX_X_BUT ) xbut = 3;
if ( Verbose ) printf("Num X buttons=%d\n", xbut);
break;
case 'y':
if ( ++i >= argc ) show_usage();
sscanf(argv[i], "%d", &ybut);
if ( ybut < 1 || ybut > MAX_Y_BUT ) ybut = 3;
if ( Verbose ) printf("Num Y buttons=%d\n", ybut);
break;
case 'a':
if ( ++i >= argc ) show_usage();
sscanf(argv[i], "%d", &alt_key_type);
if ( Verbose ) printf("Alt Key is: %d\n", alt_key_type);
break;
case 'c':
control=ControlMask;
if ( Verbose ) printf ("Control Key Modifier added\n");
break;
case 'h':
show_usage();
break;
}
}
}
if ( (display = XOpenDisplay(Display_str)) == NULL ) {
fprintf(stderr,"Fail: XOpenDisplay for %s\n", Display_str);
exit(-1);
}
screen = DefaultScreen(display);
rootwin = RootWindow(display,screen);
depth = DefaultDepth(display, screen);
bg_pixel = WhitePixel(display, screen );
fg_pixel = BlackPixel(display, screen );
xsizehints.flags = USSize | USPosition;
xsizehints.width = 64;
xsizehints.height = 64;
/* Parse Geometry string and fill in sizehints fields */
XWMGeometry(display, screen,
Geometry_str,
NULL,
border,
&xsizehints,
&xsizehints.x,
&xsizehints.y,
&xsizehints.width,
&xsizehints.height,
&dummy);
if ( (win = XCreateSimpleWindow(
display,
rootwin,
xsizehints.x,
xsizehints.y,
xsizehints.width,
xsizehints.height,
border,
fg_pixel, bg_pixel) ) == 0 ) {
fprintf(stderr,"Fail: XCreateSimpleWindow\n");
exit(-1);
}
if ( (iconwin = XCreateSimpleWindow(
display,
win,
xsizehints.x,
xsizehints.y,
xsizehints.width,
xsizehints.height,
border,
fg_pixel, bg_pixel) ) == 0 ) {
fprintf(stderr,"Fail: XCreateSimpleWindow\n");
exit(-1);
}
/* Set up shaped windows */
/* Gives the appicon a border so you can grab and move it. */
if ( is_shaped == YES ) {
if ( ( pixmask = XCreateBitmapFromData(display, win,
mask_bits, mask_width, mask_height) ) == 0 ) {
fprintf(stderr,"Fail: XCreateBitmapFromData\n");
}
XShapeCombineMask(display,win, ShapeBounding,0,0, pixmask,ShapeSet);
XShapeCombineMask(display,iconwin,ShapeBounding,0,0, pixmask,ShapeSet);
}
/* Convert in pixmaps from .xpm includes. */
getPixmaps();
/* Interclient Communication stuff */
/* Appicons don't work with out this stuff */
xwmhints = XAllocWMHints();
xwmhints->flags = WindowGroupHint | IconWindowHint | StateHint;
xwmhints->icon_window = iconwin;
xwmhints->window_group = win;
xwmhints->initial_state = window_state;
XSetWMHints( display, win, xwmhints );
xclasshint.res_name = "wmcp";
xclasshint.res_class = "WMcp";
XSetClassHint( display, win, &xclasshint );
XSetWMNormalHints( display, win, &xsizehints );
/* Tell window manager what the title bar name is. We never see */
/* this anyways in the WithdrawnState */
if ( XStringListToTextProperty(&app_name, 1, &app_name_atom) == 0 ) {
fprintf(stderr,"%s: Can't set up window name\n", app_name);
exit(-1);
}
XSetWMName( display, win, &app_name_atom );
/* Create Graphic Context */
if ( (gc = XCreateGC(
display,
win,
(GCForeground | GCBackground),
&xgcValues)) == NULL ) {
fprintf(stderr,"Fail: XCreateGC\n");
exit(-1);
}
/* XEvent Masks. We want both window to process X events */
XSelectInput(
display,
win,
ExposureMask |
ButtonPressMask |
PointerMotionMask |
StructureNotifyMask );
XSelectInput(
display,
iconwin,
ExposureMask |
ButtonPressMask |
PointerMotionMask |
StructureNotifyMask );
/* Store the 'state' of the application for restarting */
XSetCommand( display, win, argv, argc );
/* Window won't ever show up until it is mapped.. then drawn after a */
/* ConfigureNotify */
XMapWindow( display, win );
/* X Event Loop */
while (1) {
XNextEvent(display, &report );
switch (report.type) {
case Expose:
if (report.xexpose.count != 0) {
break;
}
if ( Verbose ) fprintf(stdout,"Event: Expose\n");
redraw( xbut, ybut );
break;
case ConfigureNotify:
if ( Verbose ) fprintf(stdout,"Event: ConfigureNotify\n");
redraw( xbut, ybut );
break;
case ButtonPress:
if ( Verbose )
printf ("numb_of_workspaces=%d\n", numb_of_workspaces);
switch (report.xbutton.button) {
case Button1:
N = whichButton(report.xbutton.x, report.xbutton.y, xbut, ybut );
if ( N >= 0 && N <= numb_of_workspaces ) {
switchToWorkspaceN( N );
redraw(xbut, ybut);
}
if ( Verbose )
fprintf(stdout,"Button 1:x=%d y=%d N=%d\n",
report.xbutton.x, report.xbutton.y, N);
break;
case Button2:
case Button3:
B = whichButton(report.xbutton.x, report.xbutton.y, xbut, ybut );
if ( B >= 0 && B <= 9 ) {
numb_of_workspaces = B;
redraw(xbut, ybut);
}
if ( Verbose )
fprintf(stdout,"Button 2or3:x=%d y=%d B=%d\n",
report.xbutton.x, report.xbutton.y, B);
break;
}
break;
case DestroyNotify:
if ( Verbose )
fprintf(stdout, "Bye\n");
XFreeGC(display, gc);
XDestroyWindow(display,win);
XDestroyWindow(display,iconwin);
XCloseDisplay(display);
if ( Verbose )
fprintf(stdout, "Bye\n");
exit(0);
break;
}
}
return (0);
}
/***********************************************************************
* redraw
*
* Map the button region coordinates.
*
* Draw the appropriate number of buttons on the 'visible' Pixmap
* using data from the 'buttons' pixmap.
*
* Then, copy the 'visible' pixmap to the two windows ( the withdrawn
* main window and the icon window which is the main window's icon image.)
*
***********************************************************************/
void redraw( int xbut, int ybut )
{
int n;
int i,j;
int dest_x, dest_y; /* size of a whole button */
int step_x, step_y; /* size of half a button for corner copying */
int offset = 8; /* skip pixels past the window's border image */
int xbut_size;
int ybut_size;
xbut_size = 48 / xbut;
ybut_size = 48 / ybut;
XCopyArea( display,
template.pixmap, visible.pixmap,
gc,
0, 0,
template.attributes.width,
template.attributes.height,
0, 0 );
for ( j=0; j < ybut; j++ ) {
for ( i=0; i < xbut; i++ ) {
n = i + j * xbut;
dest_x = ( i * xbut_size ) + offset;
dest_y = ( j * ybut_size ) + offset;
step_x = 24 / xbut;
step_y = 24 / ybut;
/* Define button mouse coords */
button_region[n].x = dest_x;
button_region[n].y = dest_y;
button_region[n].i = dest_x + xbut_size - 1;
button_region[n].j = dest_y + ybut_size - 1;
/* Copy button images for valid workspaces */
if ( (n + 1) <= numb_of_workspaces ) {
/* Draw normal button */
/* Edited by Gert Beumer */
if ( (n + 1) != N ) {
/* upper left */
XCopyArea( display,
buttons.pixmap,
visible.pixmap,
gc,
0,0,
step_x, step_y,
dest_x,
dest_y);
/* lowwer left */
XCopyArea( display,
buttons.pixmap,
visible.pixmap,
gc,
0,48 - step_y,
step_x, step_y,
dest_x,
dest_y + step_y);
/* lowwer right */
XCopyArea( display,
buttons.pixmap,
visible.pixmap,
gc,
48 - step_x,48 - step_y,
step_x, step_y,
dest_x + step_x,
dest_y + step_y);
/* upper right */
XCopyArea( display,
buttons.pixmap,
visible.pixmap,
gc,
48 - step_x,0,
step_x, step_y,
dest_x + step_x,
dest_y);
/* Draw the numbers */
XCopyArea( display,
buttons.pixmap,
visible.pixmap,
gc,
n * 5,
48,
5,5,
dest_x + (48 - xbut * 5) / (2 * xbut),
dest_y + (48 - ybut * 5) / (2 * ybut));
}
/* Draw pushed button */
/* Added by Thomas Nemeth, Edited by Gert Beumer */
if ( (n + 1) == N ) {
/* draw the four parts */
/* upper left */
XCopyArea( display,
pbuttons.pixmap,
visible.pixmap,
gc,
0,0,
step_x, step_y,
dest_x,
dest_y);
/* lowwer left */
XCopyArea( display,
pbuttons.pixmap,
visible.pixmap,
gc,
0,48 - step_y,
step_x, step_y,
dest_x,
dest_y + step_y);
/* lowwer right */
XCopyArea( display,
pbuttons.pixmap,
visible.pixmap,
gc,
48 - step_x,48 - step_y,
step_x, step_y,
dest_x + step_x,
dest_y + step_y);
/* upper right */
XCopyArea( display,
pbuttons.pixmap,
visible.pixmap,
gc,
48 - step_x,0,
step_x, step_y,
dest_x + step_x,
dest_y);
/* Draw the numbers */
XCopyArea( display,
pbuttons.pixmap,
visible.pixmap,
gc,
n * 5,
48,
5,5,
dest_x + (48 - xbut * 5) / (2 * xbut),
dest_y + (48 - ybut * 5) / (2 * ybut));
}
}
}
}
flush_expose( win );
XCopyArea( display,
visible.pixmap, win, gc,
0, 0,
visible.attributes.width,
visible.attributes.height,
0, 0 );
flush_expose( iconwin );
XCopyArea( display,
visible.pixmap, iconwin, gc,
0, 0,
visible.attributes.width,
visible.attributes.height,
0, 0 );
if ( Verbose )
fprintf(stdout,"In Redraw()\n");
}
/***********************************************************************
* whichButton
*
* Return the button that at the x,y coordinates. The button need not
* be visible ( drawn ). Return -1 if no button match.
*
***********************************************************************/
int whichButton( int x, int y, int xbut, int ybut )
{
int index;
for ( index=0; index< xbut*ybut; index++ ) {
if ( x >= button_region[index].x &&
x <= button_region[index].i &&
y >= button_region[index].y &&
y <= button_region[index].j ) {
return( index + 1 );
}
}
return(-1);
}
/***********************************************************************
* switchToWorkspaceN()
*
* Send the Synthetic Key Press event with the appropriate
* [ meta key + 1-4 key ] combo. Alt seems to usualy be Mod1Mask.
*
***********************************************************************/
void switchToWorkspaceN( int workspace ) {
XEvent sendEvent;
sendEvent.xkey.type = KeyPress;
sendEvent.xkey.window = rootwin;
sendEvent.xkey.root = rootwin;
sendEvent.xkey.subwindow = 0x0;
switch ( alt_key_type ) {
case 1:
sendEvent.xkey.state = Mod1Mask+control;
break;
case 2:
sendEvent.xkey.state = Mod2Mask+control;
break;
case 3:
sendEvent.xkey.state = Mod3Mask+control;
break;
case 4:
sendEvent.xkey.state = Mod4Mask+control;
break;
}
sendEvent.xkey.keycode = XKeysymToKeycode(display, 0x30 + workspace );
sendEvent.xkey.same_screen = True;
sendEvent.xkey.display = display;
sendEvent.xkey.send_event = False;
XSendEvent( display, rootwin, True, KeyPressMask, &sendEvent );
}
/***********************************************************************
* getPixmaps
*
* Load XPM data into X Pixmaps.
*
* Pixmap template contains the untouched window backdrop image.
* Pixmap visible is the template pixmap with buttons drawn on it.
* -- what is seen by the user.
* Pixmap buttons holds the images for individual buttons that are
* later copied onto Pixmap visible.
***********************************************************************/
void getPixmaps()
{
template.attributes.valuemask |=
(XpmReturnPixels | XpmReturnExtensions);
visible.attributes.valuemask |=
(XpmReturnPixels | XpmReturnExtensions);
buttons.attributes.valuemask |=
(XpmReturnPixels | XpmReturnExtensions);
/* Template Pixmap. Never Drawn To. */
if ( XpmCreatePixmapFromData( display,
rootwin,
backdrop_xpm,
&template.pixmap,
&template.mask,
&template.attributes) != XpmSuccess ) {
fprintf(stderr, "Can't Create 'template' Pixmap");
exit(1);
}
/* Visible Pixmap. Copied from template Pixmap and then drawn to. */
if ( XpmCreatePixmapFromData( display,
rootwin,
backdrop_xpm,
&visible.pixmap,
&visible.mask,
&visible.attributes) != XpmSuccess ) {
fprintf(stderr, "Can't Create 'visible' Pixmap");
exit(1);
}
/* Buttons Pixmap. */
if ( XpmCreatePixmapFromData( display,
rootwin,
buttons_xpm,
&buttons.pixmap,
&buttons.mask,
&buttons.attributes) != XpmSuccess ) {
fprintf(stderr, "Can't Create 'buttons' Pixmap");
exit(1);
}
/* Pushed Buttons Pixmap. */
if ( XpmCreatePixmapFromData( display,
rootwin,
pushed_buttons_xpm,
&pbuttons.pixmap,
&pbuttons.mask,
&pbuttons.attributes) != XpmSuccess ) {
fprintf(stderr, "Can't Create 'pbuttons' Pixmap");
exit(1);
}
}
/***********************************************************************
* flush_expose
*
* Everyone else has one of these... Can't hurt to throw it in.
*
***********************************************************************/
int flush_expose(Window w) {
XEvent dummy;
int i=0;
while (XCheckTypedWindowEvent(display, w, Expose, &dummy))
i++;
return i;
}
/***********************************************************************
* show_usage
*
***********************************************************************/
void show_usage()
{
fprintf(stderr,"
%s
This software is GPL -- do as you wish with it.
Origional Author:
Ben Cohen <buddog@aztec.asu.edu>
Contributors:
Thomas Nemeth <tnemeth@multimania.com>
Craig Maloney <craig@ic.net>
Gert Beumer <Gert@scintilla.utwente.nl>
usage: wmcp [-g geometry] [-d dpy] [-n workspaces] [-a alt key] [-v]
[-c] [-w i/n/w] [-s y/n] [-x #] [-y #] [-h]
-g geometry: ie: 64x64+10+10
-d dpy: Display. ie: 127.0.0.1:0.0
-n workspaces: How many buttons to start with.
-a alt key: integer 1-4 defining ModXMask (default 1 Mod1Mask).
-w i/n/w: Window State: Iconic, Normal, Withdrawn (default Withdrawn)
-s y/n: Shaped window: yes or no (default y)
-c Sends CTRL + ALT + Key (default only sends ALT + key)
-v Verbose. 0=off, 1=on (default 0)
-x Number of buttons on the x-direction (1,2,3, or 4)
-y Number of buttons in the y-direction (1,2,3, or 4)
-h Help. This screen.
",VERSION);
exit(-1);
}
/*
KeyPress event, serial 13, synthetic NO, window 0x25,
root 0x25, subw 0x0, time 3340683384, (37,254), root:(37,254),
state 0x8, keycode 10 (keysym 0x31, 1), same_screen YES,
XLookupString gives 1 characters: "1"
KeyPress event, serial 13, synthetic YES, window 0xbffff9ac,
root 0x40009b48, subw 0x4000a670, time 2, (26460,-1352), root:(-1146,7),
state 0x7de0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
XLookupString gives 0 characters: ""
*/