#include <X11/Xlibint.h>
#include <X11/Xutil.h>
#include "Xatomtype.h"
#include <X11/Xatom.h>
#include <X11/Xos.h>
#define safestrlen(s) ((s) ? strlen(s) : 0)
int
XSetSizeHints(dpy, w, hints, property)
Display *dpy;
Window w;
XSizeHints *hints;
Atom property;
{
xPropSizeHints prop;
prop.flags = (hints->flags & (USPosition|USSize|PAllHints));
prop.x = hints->x;
prop.y = hints->y;
prop.width = hints->width;
prop.height = hints->height;
prop.minWidth = hints->min_width;
prop.minHeight = hints->min_height;
prop.maxWidth = hints->max_width;
prop.maxHeight = hints->max_height;
prop.widthInc = hints->width_inc;
prop.heightInc = hints->height_inc;
prop.minAspectX = hints->min_aspect.x;
prop.minAspectY = hints->min_aspect.y;
prop.maxAspectX = hints->max_aspect.x;
prop.maxAspectY = hints->max_aspect.y;
return XChangeProperty (dpy, w, property, XA_WM_SIZE_HINTS, 32,
PropModeReplace, (unsigned char *) &prop,
OldNumPropSizeElements);
}
int
XSetWMHints (dpy, w, wmhints)
Display *dpy;
Window w;
XWMHints *wmhints;
{
xPropWMHints prop;
prop.flags = wmhints->flags;
prop.input = (wmhints->input == True ? 1 : 0);
prop.initialState = wmhints->initial_state;
prop.iconPixmap = wmhints->icon_pixmap;
prop.iconWindow = wmhints->icon_window;
prop.iconX = wmhints->icon_x;
prop.iconY = wmhints->icon_y;
prop.iconMask = wmhints->icon_mask;
prop.windowGroup = wmhints->window_group;
return XChangeProperty (dpy, w, XA_WM_HINTS, XA_WM_HINTS, 32,
PropModeReplace, (unsigned char *) &prop,
NumPropWMHintsElements);
}
int
XSetZoomHints (dpy, w, zhints)
Display *dpy;
Window w;
XSizeHints *zhints;
{
return XSetSizeHints (dpy, w, zhints, XA_WM_ZOOM_HINTS);
}
int
XSetNormalHints (dpy, w, hints)
Display *dpy;
Window w;
XSizeHints *hints;
{
return XSetSizeHints (dpy, w, hints, XA_WM_NORMAL_HINTS);
}
int
XSetIconSizes (dpy, w, list, count)
Display *dpy;
Window w;
XIconSize *list;
int count;
{
register int i;
xPropIconSize *pp, *prop;
#define size_of_the_real_thing sizeof
unsigned nbytes = count * size_of_the_real_thing(xPropIconSize);
#undef size_of_the_real_thing
if ((prop = pp = (xPropIconSize *) Xmalloc (nbytes))) {
for (i = 0; i < count; i++) {
pp->minWidth = list->min_width;
pp->minHeight = list->min_height;
pp->maxWidth = list->max_width;
pp->maxHeight = list->max_height;
pp->widthInc = list->width_inc;
pp->heightInc = list->height_inc;
pp += 1;
list += 1;
}
XChangeProperty (dpy, w, XA_WM_ICON_SIZE, XA_WM_ICON_SIZE, 32,
PropModeReplace, (unsigned char *) prop,
count * NumPropIconSizeElements);
Xfree ((char *)prop);
}
return 1;
}
int
XSetCommand (dpy, w, argv, argc)
Display *dpy;
Window w;
char **argv;
int argc;
{
register int i;
register int nbytes;
register char *buf, *bp;
for (i = 0, nbytes = 0; i < argc; i++) {
nbytes += safestrlen(argv[i]) + 1;
}
if ((bp = buf = Xmalloc((unsigned) nbytes))) {
for (i = 0; i < argc; i++) {
if (argv[i]) {
(void) strcpy(bp, argv[i]);
bp += strlen(argv[i]) + 1;
}
else
*bp++ = '\0';
}
XChangeProperty (dpy, w, XA_WM_COMMAND, XA_STRING, 8,
PropModeReplace, (unsigned char *)buf, nbytes);
Xfree(buf);
}
return 1;
}
int
XSetStandardProperties (
Display *dpy,
Window w,
_Xconst char *name,
_Xconst char *icon_string,
Pixmap icon_pixmap,
char **argv,
int argc,
XSizeHints *hints)
{
XWMHints phints;
phints.flags = 0;
if (name != NULL) XStoreName (dpy, w, name);
if (icon_string != NULL) {
XChangeProperty (dpy, w, XA_WM_ICON_NAME, XA_STRING, 8,
PropModeReplace, (unsigned char *)icon_string, safestrlen(icon_string));
}
if (icon_pixmap != None) {
phints.icon_pixmap = icon_pixmap;
phints.flags |= IconPixmapHint;
}
if (argv != NULL) XSetCommand(dpy, w, argv, argc);
if (hints != NULL) XSetNormalHints(dpy, w, hints);
if (phints.flags != 0) XSetWMHints(dpy, w, &phints);
return 1;
}
int
XSetTransientForHint(dpy, w, propWindow)
Display *dpy;
Window w;
Window propWindow;
{
return XChangeProperty(dpy, w, XA_WM_TRANSIENT_FOR, XA_WINDOW, 32,
PropModeReplace, (unsigned char *) &propWindow, 1);
}
int
XSetClassHint(dpy, w, classhint)
Display *dpy;
Window w;
XClassHint *classhint;
{
char *class_string;
char *s;
int len_nm, len_cl;
len_nm = safestrlen(classhint->res_name);
len_cl = safestrlen(classhint->res_class);
if ((class_string = s = Xmalloc((unsigned) (len_nm + len_cl + 2)))) {
if (len_nm) {
strcpy(s, classhint->res_name);
s += len_nm + 1;
}
else
*s++ = '\0';
if (len_cl)
strcpy(s, classhint->res_class);
else
*s = '\0';
XChangeProperty(dpy, w, XA_WM_CLASS, XA_STRING, 8,
PropModeReplace, (unsigned char *) class_string,
len_nm+len_cl+2);
Xfree(class_string);
}
return 1;
}