wmsun: Update to latest version of wmgeneral library.
This commit is contained in:
parent
22558c813b
commit
414b635dbd
|
@ -1,19 +1,56 @@
|
||||||
/*
|
/*
|
||||||
Best viewed with vim5, using ts=4
|
|
||||||
|
|
||||||
wmgeneral was taken from wmppp.
|
wmgeneral was taken from wmppp.
|
||||||
|
|
||||||
It has a lot of routines which most of the wm* programs use.
|
It has a lot of routines which most of the wm* programs use.
|
||||||
|
|
||||||
------------------------------------------------------------
|
------------------------------------------------------------
|
||||||
|
|
||||||
Author: Martijn Pieterse (pieterse@xs4all.nl)
|
Copyright (C) 1998 Martijn Pieterse (pieterse@xs4all.nl)
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301, USA.
|
||||||
|
|
||||||
---
|
---
|
||||||
CHANGES:
|
CHANGES:
|
||||||
---
|
---
|
||||||
|
10/10/2003 (Simon Law, sfllaw@debian.org)
|
||||||
|
* changed the parse_rcfile function to use getline instead of
|
||||||
|
fgets.
|
||||||
|
10/14/2000 (Chris Gray, cgray@tribsoft.com)
|
||||||
|
* Removed a bug from parse_rcfile. An extra
|
||||||
|
newline would cause a segfault.
|
||||||
|
14/09/1998 (Dave Clark, clarkd@skyia.com)
|
||||||
|
* Updated createXBMfromXPM routine
|
||||||
|
* Now supports >256 colors
|
||||||
|
11/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||||
|
* Removed a bug from parse_rcfile. You could
|
||||||
|
not use "start" in a command if a label was
|
||||||
|
also start.
|
||||||
|
* Changed the needed geometry string.
|
||||||
|
We don't use window size, and don't support
|
||||||
|
negative positions.
|
||||||
|
03/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||||
|
* Added parse_rcfile2
|
||||||
|
02/09/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||||
|
* Added -geometry support (untested)
|
||||||
|
28/08/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||||
|
* Added createXBMfromXPM routine
|
||||||
|
* Saves a lot of work with changing xpm's.
|
||||||
02/05/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
02/05/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||||
* changed the read_rc_file to parse_rcfile, as suggester by Marcelo E. Magallon
|
* changed the read_rc_file to parse_rcfile, as suggested by
|
||||||
|
Marcelo E. Magallon
|
||||||
* debugged the parse_rc file.
|
* debugged the parse_rc file.
|
||||||
30/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
30/04/1998 (Martijn Pieterse, pieterse@xs4all.nl)
|
||||||
* Ripped similar code from all the wm* programs,
|
* Ripped similar code from all the wm* programs,
|
||||||
|
@ -21,18 +58,17 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#define _POSIX_C_SOURCE 200809L
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
|
|
||||||
#include <X11/Xlib.h>
|
|
||||||
#include <X11/xpm.h>
|
|
||||||
#include <X11/extensions/shape.h>
|
|
||||||
|
|
||||||
#include "wmgeneral.h"
|
#include "wmgeneral.h"
|
||||||
|
#include <X11/Xlib.h> /* for XCopyArea, etc */
|
||||||
|
#include <X11/Xutil.h> /* for XSizeHints, XWMHints, etc */
|
||||||
|
#include <X11/extensions/shape.h> /* for XShapeCombineMask */
|
||||||
|
#include <X11/extensions/shapeconst.h> /* for ShapeBounding, ShapeSet */
|
||||||
|
#include <X11/xpm.h> /* for XpmAttributes, Pixel, etc */
|
||||||
|
#include <stddef.h> /* for size_t */
|
||||||
|
#include <stdio.h> /* for fprintf, stderr, NULL, etc */
|
||||||
|
#include <stdlib.h> /* for exit, free */
|
||||||
|
#include <string.h> /* for strcmp, strdup, strcspn, etc */
|
||||||
|
|
||||||
/*****************/
|
/*****************/
|
||||||
/* X11 Variables */
|
/* X11 Variables */
|
||||||
|
@ -45,7 +81,6 @@ int d_depth;
|
||||||
XSizeHints mysizehints;
|
XSizeHints mysizehints;
|
||||||
XWMHints mywmhints;
|
XWMHints mywmhints;
|
||||||
Pixel back_pix, fore_pix;
|
Pixel back_pix, fore_pix;
|
||||||
char *Geometry = "";
|
|
||||||
Window iconwin, win;
|
Window iconwin, win;
|
||||||
GC NormalGC;
|
GC NormalGC;
|
||||||
XpmIcon wmgen;
|
XpmIcon wmgen;
|
||||||
|
@ -63,7 +98,6 @@ typedef struct {
|
||||||
int right;
|
int right;
|
||||||
} MOUSE_REGION;
|
} MOUSE_REGION;
|
||||||
|
|
||||||
#define MAX_MOUSE_REGION (8)
|
|
||||||
MOUSE_REGION mouse_region[MAX_MOUSE_REGION];
|
MOUSE_REGION mouse_region[MAX_MOUSE_REGION];
|
||||||
|
|
||||||
/***********************/
|
/***********************/
|
||||||
|
@ -77,27 +111,70 @@ void AddMouseRegion(int, int, int, int, int);
|
||||||
int CheckMouseRegion(int, int);
|
int CheckMouseRegion(int, int);
|
||||||
|
|
||||||
/*******************************************************************************\
|
/*******************************************************************************\
|
||||||
|* read_rc_file *|
|
|* parse_rcfile *|
|
||||||
\*******************************************************************************/
|
\*******************************************************************************/
|
||||||
|
|
||||||
void parse_rcfile(const char *filename, rckeys *keys) {
|
void parse_rcfile(const char *filename, rckeys *keys) {
|
||||||
|
|
||||||
char *p;
|
char *p;
|
||||||
char temp[128];
|
|
||||||
char *tokens = " :\t\n";
|
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int i,key;
|
|
||||||
|
|
||||||
fp = fopen(filename, "r");
|
fp = fopen(filename, "r");
|
||||||
if (fp) {
|
if (fp) {
|
||||||
|
char temp[128];
|
||||||
|
|
||||||
while (fgets(temp, 128, fp)) {
|
while (fgets(temp, 128, fp)) {
|
||||||
|
char *q;
|
||||||
|
char *tokens = " :\t\n";
|
||||||
|
int key;
|
||||||
|
|
||||||
|
key = 0;
|
||||||
|
q = strdup(temp);
|
||||||
|
q = strtok(q, tokens);
|
||||||
|
if(!q)
|
||||||
|
continue;
|
||||||
|
while (key >= 0 && keys[key].label) {
|
||||||
|
if ((!strcmp(q, keys[key].label))) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
p = strstr(temp, keys[key].label);
|
||||||
|
p += strlen(keys[key].label);
|
||||||
|
p += strspn(p, tokens);
|
||||||
|
if ((i = strcspn(p, "#\n"))) p[i] = '\0';
|
||||||
|
*keys[key].var = strdup(p);
|
||||||
|
key = -1;
|
||||||
|
} else key++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************\
|
||||||
|
|* parse_rcfile2 *|
|
||||||
|
\*******************************************************************************/
|
||||||
|
|
||||||
|
void parse_rcfile2(const char *filename, rckeys2 *keys) {
|
||||||
|
|
||||||
|
char *p;
|
||||||
|
char *line = NULL;
|
||||||
|
size_t line_size = 0;
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
fp = fopen(filename, "r");
|
||||||
|
if (fp) {
|
||||||
|
while (getline(&line, &line_size, fp) >= 0) {
|
||||||
|
int key;
|
||||||
|
|
||||||
key = 0;
|
key = 0;
|
||||||
while (key >= 0 && keys[key].label) {
|
while (key >= 0 && keys[key].label) {
|
||||||
if ((p = strstr(temp, keys[key].label))) {
|
if ((p = strstr(line, keys[key].label))) {
|
||||||
|
char *tokens = " :\t\n";
|
||||||
|
int i;
|
||||||
|
|
||||||
p += strlen(keys[key].label);
|
p += strlen(keys[key].label);
|
||||||
p += strspn(p, tokens);
|
p += strspn(p, tokens);
|
||||||
if ((i = strcspn(p, "#\n"))) p[i] = 0;
|
if ((i = strcspn(p, "#\n"))) p[i] = 0;
|
||||||
free(*keys[key].var);
|
|
||||||
*keys[key].var = strdup(p);
|
*keys[key].var = strdup(p);
|
||||||
key = -1;
|
key = -1;
|
||||||
} else key++;
|
} else key++;
|
||||||
|
@ -232,6 +309,55 @@ int CheckMouseRegion(int x, int y) {
|
||||||
return (i-1);
|
return (i-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************\
|
||||||
|
|* createXBMfromXPM *|
|
||||||
|
\*******************************************************************************/
|
||||||
|
void createXBMfromXPM(char *xbm, char **xpm, int sx, int sy) {
|
||||||
|
|
||||||
|
int i,j,k;
|
||||||
|
int width, height, numcol, depth;
|
||||||
|
int zero=0;
|
||||||
|
int curpixel;
|
||||||
|
|
||||||
|
sscanf(*xpm, "%10d %10d %10d %10d", &width, &height, &numcol, &depth);
|
||||||
|
|
||||||
|
|
||||||
|
for (k=0; k!=depth; k++)
|
||||||
|
{
|
||||||
|
zero <<=8;
|
||||||
|
zero |= xpm[1][k];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=numcol+1; i < numcol+sy+1; i++) {
|
||||||
|
unsigned char bwrite;
|
||||||
|
int bcount;
|
||||||
|
|
||||||
|
bcount = 0;
|
||||||
|
bwrite = 0;
|
||||||
|
for (j=0; j<sx*depth; j+=depth) {
|
||||||
|
bwrite >>= 1;
|
||||||
|
|
||||||
|
curpixel=0;
|
||||||
|
for (k=0; k!=depth; k++)
|
||||||
|
{
|
||||||
|
curpixel <<=8;
|
||||||
|
curpixel |= xpm[i][j+k];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( curpixel != zero ) {
|
||||||
|
bwrite += 128;
|
||||||
|
}
|
||||||
|
bcount++;
|
||||||
|
if (bcount == 8) {
|
||||||
|
*xbm = bwrite;
|
||||||
|
xbm++;
|
||||||
|
bcount = 0;
|
||||||
|
bwrite = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************\
|
/*******************************************************************************\
|
||||||
|* copyXPMArea *|
|
|* copyXPMArea *|
|
||||||
\*******************************************************************************/
|
\*******************************************************************************/
|
||||||
|
@ -276,13 +402,16 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
|
||||||
XGCValues gcv;
|
XGCValues gcv;
|
||||||
unsigned long gcm;
|
unsigned long gcm;
|
||||||
|
|
||||||
|
char *geometry = NULL;
|
||||||
|
|
||||||
int dummy=0;
|
int dummy=0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i=1; argv[i]; i++) {
|
for (i=1; argv[i]; i++) {
|
||||||
if (!strcmp(argv[i], "-display"))
|
if (!strcmp(argv[i], "-display"))
|
||||||
display_name = argv[i+1];
|
display_name = argv[++i];
|
||||||
|
else if (!strcmp(argv[i], "-geometry"))
|
||||||
|
geometry = argv[++i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(display = XOpenDisplay(display_name))) {
|
if (!(display = XOpenDisplay(display_name))) {
|
||||||
|
@ -306,7 +435,7 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
|
||||||
back_pix = GetColor("white");
|
back_pix = GetColor("white");
|
||||||
fore_pix = GetColor("black");
|
fore_pix = GetColor("black");
|
||||||
|
|
||||||
XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
|
XWMGeometry(display, screen, geometry, NULL, borderwidth, &mysizehints,
|
||||||
&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
|
&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
|
||||||
|
|
||||||
mysizehints.width = 64;
|
mysizehints.width = 64;
|
||||||
|
@ -362,5 +491,4 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
|
||||||
|
|
||||||
XSetCommand(display, win, argv, argc);
|
XSetCommand(display, win, argv, argc);
|
||||||
XMapWindow(display, win);
|
XMapWindow(display, win);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,61 @@
|
||||||
|
/*
|
||||||
|
wmgeneral was taken from wmppp.
|
||||||
|
|
||||||
|
It has a lot of routines which most of the wm* programs use.
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (C) 1998 Martijn Pieterse (pieterse@xs4all.nl)
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef WMGENERAL_H_INCLUDED
|
#ifndef WMGENERAL_H_INCLUDED
|
||||||
#define WMGENERAL_H_INCLUDED
|
#define WMGENERAL_H_INCLUDED
|
||||||
|
|
||||||
|
#include <X11/X.h> /* for Pixmap */
|
||||||
|
#include <X11/Xlib.h> /* for Display */
|
||||||
|
#include <X11/xpm.h> /* for XpmAttributes */
|
||||||
|
|
||||||
/***********/
|
/***********/
|
||||||
/* Defines */
|
/* Defines */
|
||||||
/***********/
|
/***********/
|
||||||
|
|
||||||
#define MAX_MOUSE_REGION (8)
|
#define MAX_MOUSE_REGION (16)
|
||||||
|
|
||||||
/************/
|
/************/
|
||||||
/* Typedefs */
|
/* Typedefs */
|
||||||
/************/
|
/************/
|
||||||
|
|
||||||
typedef struct _rckeys rckeys;
|
|
||||||
|
|
||||||
struct _rckeys {
|
struct _rckeys {
|
||||||
const char *label;
|
const char *label;
|
||||||
char **var;
|
char **var;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct _rckeys rckeys;
|
||||||
|
|
||||||
|
struct _rckeys2 {
|
||||||
|
const char *family;
|
||||||
|
const char *label;
|
||||||
|
char **var;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct _rckeys2 rckeys2;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Pixmap pixmap;
|
Pixmap pixmap;
|
||||||
Pixmap mask;
|
Pixmap mask;
|
||||||
|
@ -41,6 +79,7 @@ void openXwindow(int argc, char *argv[], char **, char *, int, int);
|
||||||
void RedrawWindow(void);
|
void RedrawWindow(void);
|
||||||
void RedrawWindowXY(int x, int y);
|
void RedrawWindowXY(int x, int y);
|
||||||
|
|
||||||
|
void createXBMfromXPM(char *, char **, int, int);
|
||||||
void copyXPMArea(int, int, int, int, int, int);
|
void copyXPMArea(int, int, int, int, int, int);
|
||||||
void copyXBMArea(int, int, int, int, int, int);
|
void copyXBMArea(int, int, int, int, int, int);
|
||||||
void setMaskXY(int, int);
|
void setMaskXY(int, int);
|
||||||
|
|
Loading…
Reference in a new issue