rio: make full-screen work properly; add showevent
This commit is contained in:
parent
52abe8e130
commit
0206bd5113
12 changed files with 2132 additions and 11 deletions
|
|
@ -87,6 +87,7 @@ dotrace(char *s, Client *c, XEvent *e)
|
||||||
{
|
{
|
||||||
if(debug == 0)
|
if(debug == 0)
|
||||||
return;
|
return;
|
||||||
|
setbuf(stdout, 0);
|
||||||
fprintf(stderr, "rio: %s: c=%p", s, (void*)c);
|
fprintf(stderr, "rio: %s: c=%p", s, (void*)c);
|
||||||
if(c)
|
if(c)
|
||||||
fprintf(stderr, " x %d y %d dx %d dy %d w 0x%x parent 0x%x", c->x, c->y, c->dx, c->dy, (int)c->window, (int)c->parent);
|
fprintf(stderr, " x %d y %d dx %d dy %d w 0x%x parent 0x%x", c->x, c->y, c->dx, c->dy, (int)c->window, (int)c->parent);
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,9 @@ configurereq(XConfigureRequestEvent *e)
|
||||||
e->value_mask &= ~CWSibling;
|
e->value_mask &= ~CWSibling;
|
||||||
|
|
||||||
if(c){
|
if(c){
|
||||||
gravitate(c, 1);
|
c->x -= c->border;
|
||||||
|
c->y -= c->border;
|
||||||
|
|
||||||
if(e->value_mask & CWX)
|
if(e->value_mask & CWX)
|
||||||
c->x = e->x;
|
c->x = e->x;
|
||||||
if(e->value_mask & CWY)
|
if(e->value_mask & CWY)
|
||||||
|
|
@ -135,7 +137,20 @@ configurereq(XConfigureRequestEvent *e)
|
||||||
c->dy = e->height;
|
c->dy = e->height;
|
||||||
if(e->value_mask & CWBorderWidth)
|
if(e->value_mask & CWBorderWidth)
|
||||||
c->border = e->border_width;
|
c->border = e->border_width;
|
||||||
gravitate(c, 0);
|
|
||||||
|
if((e->value_mask & (CWX|CWY|CWWidth|CWHeight)) == (CWWidth|CWHeight)
|
||||||
|
&& c->dx >= c->screen->width && c->dy >= c->screen->height){
|
||||||
|
c->border = 0;
|
||||||
|
e->value_mask |= CWX|CWY;
|
||||||
|
}else
|
||||||
|
c->border = BORDER;
|
||||||
|
|
||||||
|
c->x += c->border;
|
||||||
|
c->y += c->border;
|
||||||
|
|
||||||
|
e->x = c->x;
|
||||||
|
e->y = c->y;
|
||||||
|
|
||||||
if(e->value_mask & CWStackMode){
|
if(e->value_mask & CWStackMode){
|
||||||
if(e->detail == Above)
|
if(e->detail == Above)
|
||||||
top(c);
|
top(c);
|
||||||
|
|
@ -143,15 +158,14 @@ configurereq(XConfigureRequestEvent *e)
|
||||||
e->value_mask &= ~CWStackMode;
|
e->value_mask &= ~CWStackMode;
|
||||||
}
|
}
|
||||||
if(c->parent != c->screen->root && c->window == e->window){
|
if(c->parent != c->screen->root && c->window == e->window){
|
||||||
wc.x = c->x-BORDER;
|
wc.x = c->x - c->border;
|
||||||
wc.y = c->y-BORDER;
|
wc.y = c->y - c->border;
|
||||||
wc.width = c->dx+2*BORDER;
|
wc.width = c->dx+c->border+c->border;
|
||||||
wc.height = c->dy+2*BORDER;
|
wc.height = c->dy+c->border+c->border;
|
||||||
wc.border_width = 1;
|
wc.border_width = 1;
|
||||||
wc.sibling = None;
|
wc.sibling = None;
|
||||||
wc.stack_mode = e->detail;
|
wc.stack_mode = e->detail;
|
||||||
XConfigureWindow(dpy, c->parent, e->value_mask, &wc);
|
XConfigureWindow(dpy, c->parent, e->value_mask, &wc);
|
||||||
sendconfig(c);
|
|
||||||
if(e->value_mask & CWStackMode){
|
if(e->value_mask & CWStackMode){
|
||||||
top(c);
|
top(c);
|
||||||
active(c);
|
active(c);
|
||||||
|
|
@ -160,8 +174,8 @@ configurereq(XConfigureRequestEvent *e)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(c && c->init){
|
if(c && c->init){
|
||||||
wc.x = BORDER;
|
wc.x = c->border;
|
||||||
wc.y = BORDER;
|
wc.y = c->border;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
wc.x = e->x;
|
wc.x = e->x;
|
||||||
|
|
@ -174,7 +188,6 @@ configurereq(XConfigureRequestEvent *e)
|
||||||
wc.stack_mode = Above;
|
wc.stack_mode = Above;
|
||||||
e->value_mask &= ~CWStackMode;
|
e->value_mask &= ~CWStackMode;
|
||||||
e->value_mask |= CWBorderWidth;
|
e->value_mask |= CWBorderWidth;
|
||||||
|
|
||||||
XConfigureWindow(dpy, e->window, e->value_mask, &wc);
|
XConfigureWindow(dpy, e->window, e->value_mask, &wc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -113,3 +113,5 @@ void dotrace();
|
||||||
|
|
||||||
/* cursor.c */
|
/* cursor.c */
|
||||||
void initcurs();
|
void initcurs();
|
||||||
|
|
||||||
|
void ShowEvent(XEvent*);
|
||||||
|
|
|
||||||
|
|
@ -449,6 +449,7 @@ sendconfig(Client *c)
|
||||||
{
|
{
|
||||||
XConfigureEvent ce;
|
XConfigureEvent ce;
|
||||||
|
|
||||||
|
fprintf(stderr, "send config: %p / %d %d %d %d\n", c);
|
||||||
ce.type = ConfigureNotify;
|
ce.type = ConfigureNotify;
|
||||||
ce.event = c->window;
|
ce.event = c->window;
|
||||||
ce.window = c->window;
|
ce.window = c->window;
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,11 @@ LDFLAGS=-L$X11/lib$L64/ -lXext -lX11
|
||||||
|
|
||||||
<|sh mkriorules.sh
|
<|sh mkriorules.sh
|
||||||
|
|
||||||
CFLAGS=$CFLAGS -DSHAPE
|
CFLAGS=$CFLAGS -DSHAPE -DDEBUG_EV -DDEBUG
|
||||||
|
|
||||||
$O.xevents: xevents.$O printevent.$O
|
$O.xevents: xevents.$O printevent.$O
|
||||||
$LD -o $target $prereq $LDFLAGS
|
$LD -o $target $prereq $LDFLAGS
|
||||||
|
|
||||||
xevents.$O printevent.$O: printevent.h
|
xevents.$O printevent.$O: printevent.h
|
||||||
|
|
||||||
|
error.$O: showevent/ShowEvent.c
|
||||||
|
|
|
||||||
13
src/cmd/rio/showevent/Makefile
Normal file
13
src/cmd/rio/showevent/Makefile
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
CFLAGS = -g
|
||||||
|
INCLUDE = -I/global/include
|
||||||
|
LFLAGS = -L/global/lib
|
||||||
|
OBJS = ShowEvent.o sample.o
|
||||||
|
LIBS = -lX11
|
||||||
|
|
||||||
|
all: sample
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
$(CC) $(INCLUDE) $(CFLAGS) -c $<
|
||||||
|
|
||||||
|
sample: $(OBJS)
|
||||||
|
$(CC) $(LFLAGS) $(OBJS) $(LIBS) -o sample
|
||||||
28
src/cmd/rio/showevent/README
Normal file
28
src/cmd/rio/showevent/README
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
I have edited this code to work on modern compilers.
|
||||||
|
|
||||||
|
Russ Cox
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
There are times during debugging when it would be real useful to be able to
|
||||||
|
print the fields of an event in a human readable form. Too many times I found
|
||||||
|
myself scrounging around in section 8 of the Xlib manual looking for the valid
|
||||||
|
fields for the events I wanted to see, then adding printf's to display the
|
||||||
|
numeric values of the fields, and then scanning through X.h trying to decode
|
||||||
|
the cryptic detail and state fields. After playing with xev, I decided to
|
||||||
|
write a couple of standard functions that I could keep in a library and call
|
||||||
|
on whenever I needed a little debugging verbosity. The first function,
|
||||||
|
GetType(), is useful for returning the string representation of the type of
|
||||||
|
an event. The second function, ShowEvent(), is used to display all the fields
|
||||||
|
of an event in a readable format. The functions are not complicated, in fact,
|
||||||
|
they are mind-numbingly boring - but that's just the point nobody wants to
|
||||||
|
spend the time writing functions like this, they just want to have them when
|
||||||
|
they need them.
|
||||||
|
|
||||||
|
A simple, sample program is included which does little else but to demonstrate
|
||||||
|
the use of these two functions. These functions have saved me many an hour
|
||||||
|
during debugging and I hope you find some benefit to these. If you have any
|
||||||
|
comments, suggestions, improvements, or if you find any blithering errors you
|
||||||
|
can get it touch with me at the following location:
|
||||||
|
|
||||||
|
ken@richsun.UUCP
|
||||||
890
src/cmd/rio/showevent/ShowEvent.c
Normal file
890
src/cmd/rio/showevent/ShowEvent.c
Normal file
|
|
@ -0,0 +1,890 @@
|
||||||
|
#include <X11/Intrinsic.h>
|
||||||
|
#include <X11/Xproto.h>
|
||||||
|
|
||||||
|
Boolean use_separate_lines = True;
|
||||||
|
static char *sep;
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/**** Miscellaneous routines to convert values to their string equivalents ****/
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a boolean parameter */
|
||||||
|
static char *TorF(bool)
|
||||||
|
int bool;
|
||||||
|
{
|
||||||
|
switch (bool) {
|
||||||
|
case True:
|
||||||
|
return ("True");
|
||||||
|
|
||||||
|
case False:
|
||||||
|
return ("False");
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ("?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a property notify state */
|
||||||
|
static char *PropertyState(state)
|
||||||
|
int state;
|
||||||
|
{
|
||||||
|
switch (state) {
|
||||||
|
case PropertyNewValue:
|
||||||
|
return ("PropertyNewValue");
|
||||||
|
|
||||||
|
case PropertyDelete:
|
||||||
|
return ("PropertyDelete");
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ("?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a visibility notify state */
|
||||||
|
static char *VisibilityState(state)
|
||||||
|
int state;
|
||||||
|
{
|
||||||
|
switch (state) {
|
||||||
|
case VisibilityUnobscured:
|
||||||
|
return ("VisibilityUnobscured");
|
||||||
|
|
||||||
|
case VisibilityPartiallyObscured:
|
||||||
|
return ("VisibilityPartiallyObscured");
|
||||||
|
|
||||||
|
case VisibilityFullyObscured:
|
||||||
|
return ("VisibilityFullyObscured");
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ("?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a timestamp */
|
||||||
|
static char *ServerTime(time)
|
||||||
|
Time time;
|
||||||
|
{
|
||||||
|
unsigned long msec;
|
||||||
|
unsigned long sec;
|
||||||
|
unsigned long min;
|
||||||
|
unsigned long hr;
|
||||||
|
unsigned long day;
|
||||||
|
static char buffer[32];
|
||||||
|
|
||||||
|
msec = time % 1000;
|
||||||
|
time /= 1000;
|
||||||
|
sec = time % 60;
|
||||||
|
time /= 60;
|
||||||
|
min = time % 60;
|
||||||
|
time /= 60;
|
||||||
|
hr = time % 24;
|
||||||
|
time /= 24;
|
||||||
|
day = time;
|
||||||
|
|
||||||
|
sprintf(buffer, "%ld day%s %02ld:%02ld:%02ld.%03ld",
|
||||||
|
day, day == 1 ? "" : "(s)", hr, min, sec, msec);
|
||||||
|
return (buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Simple structure to ease the interpretation of masks */
|
||||||
|
typedef struct _MaskType {
|
||||||
|
unsigned int value;
|
||||||
|
char *string;
|
||||||
|
} MaskType;
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a mask of buttons and/or modifier keys */
|
||||||
|
static char *ButtonAndOrModifierState(state)
|
||||||
|
unsigned int state;
|
||||||
|
{
|
||||||
|
static char buffer[256];
|
||||||
|
static MaskType masks[] = {
|
||||||
|
{Button1Mask, "Button1Mask"},
|
||||||
|
{Button2Mask, "Button2Mask"},
|
||||||
|
{Button3Mask, "Button3Mask"},
|
||||||
|
{Button4Mask, "Button4Mask"},
|
||||||
|
{Button5Mask, "Button5Mask"},
|
||||||
|
{ShiftMask, "ShiftMask"},
|
||||||
|
{LockMask, "LockMask"},
|
||||||
|
{ControlMask, "ControlMask"},
|
||||||
|
{Mod1Mask, "Mod1Mask"},
|
||||||
|
{Mod2Mask, "Mod2Mask"},
|
||||||
|
{Mod3Mask, "Mod3Mask"},
|
||||||
|
{Mod4Mask, "Mod4Mask"},
|
||||||
|
{Mod5Mask, "Mod5Mask"},
|
||||||
|
};
|
||||||
|
int num_masks = sizeof(masks) / sizeof(MaskType);
|
||||||
|
int i;
|
||||||
|
Boolean first = True;
|
||||||
|
|
||||||
|
buffer[0] = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < num_masks; i++)
|
||||||
|
if (state & masks[i].value)
|
||||||
|
if (first) {
|
||||||
|
first = False;
|
||||||
|
strcpy(buffer, masks[i].string);
|
||||||
|
} else {
|
||||||
|
strcat(buffer, " | ");
|
||||||
|
strcat(buffer, masks[i].string);
|
||||||
|
}
|
||||||
|
return (buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a mask of configure window values */
|
||||||
|
static char *ConfigureValueMask(valuemask)
|
||||||
|
unsigned int valuemask;
|
||||||
|
{
|
||||||
|
static char buffer[256];
|
||||||
|
static MaskType masks[] = {
|
||||||
|
{CWX, "CWX"},
|
||||||
|
{CWY, "CWY"},
|
||||||
|
{CWWidth, "CWWidth"},
|
||||||
|
{CWHeight, "CWHeight"},
|
||||||
|
{CWBorderWidth, "CWBorderWidth"},
|
||||||
|
{CWSibling, "CWSibling"},
|
||||||
|
{CWStackMode, "CWStackMode"},
|
||||||
|
};
|
||||||
|
int num_masks = sizeof(masks) / sizeof(MaskType);
|
||||||
|
int i;
|
||||||
|
Boolean first = True;
|
||||||
|
|
||||||
|
buffer[0] = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < num_masks; i++)
|
||||||
|
if (valuemask & masks[i].value)
|
||||||
|
if (first) {
|
||||||
|
first = False;
|
||||||
|
strcpy(buffer, masks[i].string);
|
||||||
|
} else {
|
||||||
|
strcat(buffer, " | ");
|
||||||
|
strcat(buffer, masks[i].string);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a motion hint */
|
||||||
|
static char *IsHint(is_hint)
|
||||||
|
char is_hint;
|
||||||
|
{
|
||||||
|
switch (is_hint) {
|
||||||
|
case NotifyNormal:
|
||||||
|
return ("NotifyNormal");
|
||||||
|
|
||||||
|
case NotifyHint:
|
||||||
|
return ("NotifyHint");
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ("?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of an id or the value "None" */
|
||||||
|
static char *MaybeNone(value)
|
||||||
|
int value;
|
||||||
|
{
|
||||||
|
static char buffer[16];
|
||||||
|
|
||||||
|
if (value == None)
|
||||||
|
return ("None");
|
||||||
|
else {
|
||||||
|
sprintf(buffer, "0x%x", value);
|
||||||
|
return (buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a colormap state */
|
||||||
|
static char *ColormapState(state)
|
||||||
|
int state;
|
||||||
|
{
|
||||||
|
switch (state) {
|
||||||
|
case ColormapInstalled:
|
||||||
|
return ("ColormapInstalled");
|
||||||
|
|
||||||
|
case ColormapUninstalled:
|
||||||
|
return ("ColormapUninstalled");
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ("?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a crossing detail */
|
||||||
|
static char *CrossingDetail(detail)
|
||||||
|
int detail;
|
||||||
|
{
|
||||||
|
switch (detail) {
|
||||||
|
case NotifyAncestor:
|
||||||
|
return ("NotifyAncestor");
|
||||||
|
|
||||||
|
case NotifyInferior:
|
||||||
|
return ("NotifyInferior");
|
||||||
|
|
||||||
|
case NotifyVirtual:
|
||||||
|
return ("NotifyVirtual");
|
||||||
|
|
||||||
|
case NotifyNonlinear:
|
||||||
|
return ("NotifyNonlinear");
|
||||||
|
|
||||||
|
case NotifyNonlinearVirtual:
|
||||||
|
return ("NotifyNonlinearVirtual");
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ("?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a focus change detail */
|
||||||
|
static char *FocusChangeDetail(detail)
|
||||||
|
int detail;
|
||||||
|
{
|
||||||
|
switch (detail) {
|
||||||
|
case NotifyAncestor:
|
||||||
|
return ("NotifyAncestor");
|
||||||
|
|
||||||
|
case NotifyInferior:
|
||||||
|
return ("NotifyInferior");
|
||||||
|
|
||||||
|
case NotifyVirtual:
|
||||||
|
return ("NotifyVirtual");
|
||||||
|
|
||||||
|
case NotifyNonlinear:
|
||||||
|
return ("NotifyNonlinear");
|
||||||
|
|
||||||
|
case NotifyNonlinearVirtual:
|
||||||
|
return ("NotifyNonlinearVirtual");
|
||||||
|
|
||||||
|
case NotifyPointer:
|
||||||
|
return ("NotifyPointer");
|
||||||
|
|
||||||
|
case NotifyPointerRoot:
|
||||||
|
return ("NotifyPointerRoot");
|
||||||
|
|
||||||
|
case NotifyDetailNone:
|
||||||
|
return ("NotifyDetailNone");
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ("?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a configure detail */
|
||||||
|
static char *ConfigureDetail(detail)
|
||||||
|
int detail;
|
||||||
|
{
|
||||||
|
switch (detail) {
|
||||||
|
case Above:
|
||||||
|
return ("Above");
|
||||||
|
|
||||||
|
case Below:
|
||||||
|
return ("Below");
|
||||||
|
|
||||||
|
case TopIf:
|
||||||
|
return ("TopIf");
|
||||||
|
|
||||||
|
case BottomIf:
|
||||||
|
return ("BottomIf");
|
||||||
|
|
||||||
|
case Opposite:
|
||||||
|
return ("Opposite");
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ("?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a grab mode */
|
||||||
|
static char *GrabMode(mode)
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
switch (mode) {
|
||||||
|
case NotifyNormal:
|
||||||
|
return ("NotifyNormal");
|
||||||
|
|
||||||
|
case NotifyGrab:
|
||||||
|
return ("NotifyGrab");
|
||||||
|
|
||||||
|
case NotifyUngrab:
|
||||||
|
return ("NotifyUngrab");
|
||||||
|
|
||||||
|
case NotifyWhileGrabbed:
|
||||||
|
return ("NotifyWhileGrabbed");
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ("?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a mapping request */
|
||||||
|
static char *MappingRequest(request)
|
||||||
|
int request;
|
||||||
|
{
|
||||||
|
switch (request) {
|
||||||
|
case MappingModifier:
|
||||||
|
return ("MappingModifier");
|
||||||
|
|
||||||
|
case MappingKeyboard:
|
||||||
|
return ("MappingKeyboard");
|
||||||
|
|
||||||
|
case MappingPointer:
|
||||||
|
return ("MappingPointer");
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ("?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a stacking order place */
|
||||||
|
static char *Place(place)
|
||||||
|
int place;
|
||||||
|
{
|
||||||
|
switch (place) {
|
||||||
|
case PlaceOnTop:
|
||||||
|
return ("PlaceOnTop");
|
||||||
|
|
||||||
|
case PlaceOnBottom:
|
||||||
|
return ("PlaceOnBottom");
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ("?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of a major code */
|
||||||
|
static char *MajorCode(code)
|
||||||
|
int code;
|
||||||
|
{
|
||||||
|
static char buffer[32];
|
||||||
|
|
||||||
|
switch (code) {
|
||||||
|
case X_CopyArea:
|
||||||
|
return ("X_CopyArea");
|
||||||
|
|
||||||
|
case X_CopyPlane:
|
||||||
|
return ("X_CopyPlane");
|
||||||
|
|
||||||
|
default:
|
||||||
|
sprintf(buffer, "0x%x", code);
|
||||||
|
return (buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent the keycode contained in the key event */
|
||||||
|
static char *Keycode(ev)
|
||||||
|
XKeyEvent *ev;
|
||||||
|
{
|
||||||
|
static char buffer[256];
|
||||||
|
KeySym keysym_str;
|
||||||
|
char *keysym_name;
|
||||||
|
char string[256];
|
||||||
|
|
||||||
|
XLookupString(ev, string, 64, &keysym_str, NULL);
|
||||||
|
|
||||||
|
if (keysym_str == NoSymbol)
|
||||||
|
keysym_name = "NoSymbol";
|
||||||
|
else if (!(keysym_name = XKeysymToString(keysym_str)))
|
||||||
|
keysym_name = "(no name)";
|
||||||
|
sprintf(buffer, "%u (keysym 0x%x \"%s\")",
|
||||||
|
ev->keycode, (unsigned)keysym_str, keysym_name);
|
||||||
|
return (buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns the string equivalent of an atom or "None"*/
|
||||||
|
static char *AtomName(dpy, atom)
|
||||||
|
Display *dpy;
|
||||||
|
Atom atom;
|
||||||
|
{
|
||||||
|
static char buffer[256];
|
||||||
|
char *atom_name;
|
||||||
|
|
||||||
|
if (atom == None)
|
||||||
|
return ("None");
|
||||||
|
|
||||||
|
atom_name = XGetAtomName(dpy, atom);
|
||||||
|
strncpy(buffer, atom_name, 256);
|
||||||
|
XFree(atom_name);
|
||||||
|
return (buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/**** Routines to print out readable values for the field of various events ***/
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
static void VerbMotion(XMotionEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("root=0x%x%s", (unsigned)ev->root, sep);
|
||||||
|
printf("subwindow=0x%x%s", (unsigned)ev->subwindow, sep);
|
||||||
|
printf("time=%s%s", ServerTime(ev->time), sep);
|
||||||
|
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||||
|
printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep);
|
||||||
|
printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep);
|
||||||
|
printf("is_hint=%s%s", IsHint(ev->is_hint), sep);
|
||||||
|
printf("same_screen=%s\n", TorF(ev->same_screen));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbButton(XButtonEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("root=0x%x%s", (unsigned)ev->root, sep);
|
||||||
|
printf("subwindow=0x%x%s", (unsigned)ev->subwindow, sep);
|
||||||
|
printf("time=%s%s", ServerTime(ev->time), sep);
|
||||||
|
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||||
|
printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep);
|
||||||
|
printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep);
|
||||||
|
printf("button=%s%s", ButtonAndOrModifierState(ev->button), sep);
|
||||||
|
printf("same_screen=%s\n", TorF(ev->same_screen));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbColormap(XColormapEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("colormap=%s%s", MaybeNone(ev->colormap), sep);
|
||||||
|
printf("new=%s%s", TorF(ev->new), sep);
|
||||||
|
printf("state=%s\n", ColormapState(ev->state));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbCrossing(XCrossingEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("root=0x%x%s", (unsigned)ev->root, sep);
|
||||||
|
printf("subwindow=0x%x%s", (unsigned)ev->subwindow, sep);
|
||||||
|
printf("time=%s%s", ServerTime(ev->time), sep);
|
||||||
|
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||||
|
printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep);
|
||||||
|
printf("mode=%s%s", GrabMode(ev->mode), sep);
|
||||||
|
printf("detail=%s%s", CrossingDetail(ev->detail), sep);
|
||||||
|
printf("same_screen=%s%s", TorF(ev->same_screen), sep);
|
||||||
|
printf("focus=%s%s", TorF(ev->focus), sep);
|
||||||
|
printf("state=%s\n", ButtonAndOrModifierState(ev->state));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbExpose(XExposeEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||||
|
printf("width=%d height=%d%s", ev->width, ev->height, sep);
|
||||||
|
printf("count=%d\n", ev->count);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbGraphicsExpose(XGraphicsExposeEvent *ev)
|
||||||
|
{
|
||||||
|
printf("drawable=0x%x%s", (unsigned)ev->drawable, sep);
|
||||||
|
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||||
|
printf("width=%d height=%d%s", ev->width, ev->height, sep);
|
||||||
|
printf("major_code=%s%s", MajorCode(ev->major_code), sep);
|
||||||
|
printf("minor_code=%d\n", ev->minor_code);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbNoExpose(XNoExposeEvent *ev)
|
||||||
|
{
|
||||||
|
printf("drawable=0x%x%s", (unsigned)ev->drawable, sep);
|
||||||
|
printf("major_code=%s%s", MajorCode(ev->major_code), sep);
|
||||||
|
printf("minor_code=%d\n", ev->minor_code);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbFocus(XFocusChangeEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("mode=%s%s", GrabMode(ev->mode), sep);
|
||||||
|
printf("detail=%s\n", FocusChangeDetail(ev->detail));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbKeymap(XKeymapEvent *ev)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("key_vector=");
|
||||||
|
for (i = 0; i < 32; i++)
|
||||||
|
printf("%02x", ev->key_vector[i]);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbKey(XKeyEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("root=0x%x%s", (unsigned)ev->root, sep);
|
||||||
|
printf("subwindow=0x%x%s", (unsigned)ev->subwindow, sep);
|
||||||
|
printf("time=%s%s", ServerTime(ev->time), sep);
|
||||||
|
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||||
|
printf("x_root=%d y_root=%d%s", ev->x_root, ev->y_root, sep);
|
||||||
|
printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep);
|
||||||
|
printf("keycode=%s%s", Keycode(ev), sep);
|
||||||
|
printf("same_screen=%s\n", TorF(ev->same_screen));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbProperty(XPropertyEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("atom=%s%s", AtomName(ev->display, ev->atom), sep);
|
||||||
|
printf("time=%s%s", ServerTime(ev->time), sep);
|
||||||
|
printf("state=%s\n", PropertyState(ev->state));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbResizeRequest(XResizeRequestEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("width=%d height=%d\n", ev->width, ev->height);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbCirculate(XCirculateEvent *ev)
|
||||||
|
{
|
||||||
|
printf("event=0x%x%s", (unsigned)ev->event, sep);
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("place=%s\n", Place(ev->place));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbConfigure(XConfigureEvent *ev)
|
||||||
|
{
|
||||||
|
printf("event=0x%x%s", (unsigned)ev->event, sep);
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||||
|
printf("width=%d height=%d%s", ev->width, ev->height, sep);
|
||||||
|
printf("border_width=%d%s", ev->border_width, sep);
|
||||||
|
printf("above=%s%s", MaybeNone(ev->above), sep);
|
||||||
|
printf("override_redirect=%s\n", TorF(ev->override_redirect));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbCreateWindow(XCreateWindowEvent *ev)
|
||||||
|
{
|
||||||
|
printf("parent=0x%x%s", (unsigned)ev->parent, sep);
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||||
|
printf("width=%d height=%d%s", ev->width, ev->height, sep);
|
||||||
|
printf("border_width=%d%s", ev->border_width, sep);
|
||||||
|
printf("override_redirect=%s\n", TorF(ev->override_redirect));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbDestroyWindow(XDestroyWindowEvent *ev)
|
||||||
|
{
|
||||||
|
printf("event=0x%x%s", (unsigned)ev->event, sep);
|
||||||
|
printf("window=0x%x\n", (unsigned)ev->window);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbGravity(XGravityEvent *ev)
|
||||||
|
{
|
||||||
|
printf("event=0x%x%s", (unsigned)ev->event, sep);
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("x=%d y=%d\n", ev->x, ev->y);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbMap(XMapEvent *ev)
|
||||||
|
{
|
||||||
|
printf("event=0x%x%s", (unsigned)ev->event, sep);
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("override_redirect=%s\n", TorF(ev->override_redirect));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbReparent(XReparentEvent *ev)
|
||||||
|
{
|
||||||
|
printf("event=0x%x%s", (unsigned)ev->event, sep);
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("parent=0x%x%s", (unsigned)ev->parent, sep);
|
||||||
|
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||||
|
printf("override_redirect=%s\n", TorF(ev->override_redirect));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbUnmap(XUnmapEvent *ev)
|
||||||
|
{
|
||||||
|
printf("event=0x%x%s", (unsigned)ev->event, sep);
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("from_configure=%s\n", TorF(ev->from_configure));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbCirculateRequest(XCirculateRequestEvent *ev)
|
||||||
|
{
|
||||||
|
printf("parent=0x%x%s", (unsigned)ev->parent, sep);
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("place=%s\n", Place(ev->place));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbConfigureRequest(XConfigureRequestEvent *ev)
|
||||||
|
{
|
||||||
|
printf("parent=0x%x%s", (unsigned)ev->parent, sep);
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||||
|
printf("width=%d height=%d%s", ev->width, ev->height, sep);
|
||||||
|
printf("border_width=%d%s", ev->border_width, sep);
|
||||||
|
printf("above=%s%s", MaybeNone(ev->above), sep);
|
||||||
|
printf("detail=%s%s", ConfigureDetail(ev->detail), sep);
|
||||||
|
printf("value_mask=%s\n", ConfigureValueMask(ev->value_mask));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbMapRequest(XMapRequestEvent *ev)
|
||||||
|
{
|
||||||
|
printf("parent=0x%x%s", (unsigned)ev->parent, sep);
|
||||||
|
printf("window=0x%x\n", (unsigned)ev->window);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbClient(XClientMessageEvent *ev)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("message_type=%s%s", AtomName(ev->display, ev->message_type), sep);
|
||||||
|
printf("format=%d\n", ev->format);
|
||||||
|
printf("data (shown as longs)=");
|
||||||
|
for (i = 0; i < 5; i++)
|
||||||
|
printf(" 0x%08lx", ev->data.l[i]);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbMapping(XMappingEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("request=%s%s", MappingRequest(ev->request), sep);
|
||||||
|
printf("first_keycode=0x%x%s", ev->first_keycode, sep);
|
||||||
|
printf("count=0x%x\n", ev->count);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbSelectionClear(XSelectionClearEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("selection=%s%s", AtomName(ev->display, ev->selection), sep);
|
||||||
|
printf("time=%s\n", ServerTime(ev->time));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbSelection(XSelectionEvent *ev)
|
||||||
|
{
|
||||||
|
printf("requestor=0x%x%s", (unsigned)ev->requestor, sep);
|
||||||
|
printf("selection=%s%s", AtomName(ev->display, ev->selection), sep);
|
||||||
|
printf("target=%s%s", AtomName(ev->display, ev->target), sep);
|
||||||
|
printf("property=%s%s", AtomName(ev->display, ev->property), sep);
|
||||||
|
printf("time=%s\n", ServerTime(ev->time));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbSelectionRequest(XSelectionRequestEvent *ev)
|
||||||
|
{
|
||||||
|
printf("owner=0x%x%s", (unsigned)ev->owner, sep);
|
||||||
|
printf("requestor=0x%x%s", (unsigned)ev->requestor, sep);
|
||||||
|
printf("selection=%s%s", AtomName(ev->display, ev->selection), sep);
|
||||||
|
printf("target=%s%s", AtomName(ev->display, ev->target), sep);
|
||||||
|
printf("property=%s%s", AtomName(ev->display, ev->property), sep);
|
||||||
|
printf("time=%s\n", ServerTime(ev->time));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VerbVisibility(XVisibilityEvent *ev)
|
||||||
|
{
|
||||||
|
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||||
|
printf("state=%s\n", VisibilityState(ev->state));
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/************ Return the string representation for type of an event ***********/
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
char *GetType(ev)
|
||||||
|
XEvent *ev;
|
||||||
|
{
|
||||||
|
switch (ev->type) {
|
||||||
|
case KeyPress:
|
||||||
|
return ("KeyPress");
|
||||||
|
case KeyRelease:
|
||||||
|
return ("KeyRelease");
|
||||||
|
case ButtonPress:
|
||||||
|
return ("ButtonPress");
|
||||||
|
case ButtonRelease:
|
||||||
|
return ("ButtonRelease");
|
||||||
|
case MotionNotify:
|
||||||
|
return ("MotionNotify");
|
||||||
|
case EnterNotify:
|
||||||
|
return ("EnterNotify");
|
||||||
|
case LeaveNotify:
|
||||||
|
return ("LeaveNotify");
|
||||||
|
case FocusIn:
|
||||||
|
return ("FocusIn");
|
||||||
|
case FocusOut:
|
||||||
|
return ("FocusOut");
|
||||||
|
case KeymapNotify:
|
||||||
|
return ("KeymapNotify");
|
||||||
|
case Expose:
|
||||||
|
return ("Expose");
|
||||||
|
case GraphicsExpose:
|
||||||
|
return ("GraphicsExpose");
|
||||||
|
case NoExpose:
|
||||||
|
return ("NoExpose");
|
||||||
|
case VisibilityNotify:
|
||||||
|
return ("VisibilityNotify");
|
||||||
|
case CreateNotify:
|
||||||
|
return ("CreateNotify");
|
||||||
|
case DestroyNotify:
|
||||||
|
return ("DestroyNotify");
|
||||||
|
case UnmapNotify:
|
||||||
|
return ("UnmapNotify");
|
||||||
|
case MapNotify:
|
||||||
|
return ("MapNotify");
|
||||||
|
case MapRequest:
|
||||||
|
return ("MapRequest");
|
||||||
|
case ReparentNotify:
|
||||||
|
return ("ReparentNotify");
|
||||||
|
case ConfigureNotify:
|
||||||
|
return ("ConfigureNotify");
|
||||||
|
case ConfigureRequest:
|
||||||
|
return ("ConfigureRequest");
|
||||||
|
case GravityNotify:
|
||||||
|
return ("GravityNotify");
|
||||||
|
case ResizeRequest:
|
||||||
|
return ("ResizeRequest");
|
||||||
|
case CirculateNotify:
|
||||||
|
return ("CirculateNotify");
|
||||||
|
case CirculateRequest:
|
||||||
|
return ("CirculateRequest");
|
||||||
|
case PropertyNotify:
|
||||||
|
return ("PropertyNotify");
|
||||||
|
case SelectionClear:
|
||||||
|
return ("SelectionClear");
|
||||||
|
case SelectionRequest:
|
||||||
|
return ("SelectionRequest");
|
||||||
|
case SelectionNotify:
|
||||||
|
return ("SelectionNotify");
|
||||||
|
case ColormapNotify:
|
||||||
|
return ("ColormapNotify");
|
||||||
|
case ClientMessage:
|
||||||
|
return ("ClientMessage");
|
||||||
|
case MappingNotify:
|
||||||
|
return ("MappingNotify");
|
||||||
|
}
|
||||||
|
return "???";
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/**************** Print the values of all fields for any event ****************/
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
void ShowEvent(XEvent *eev)
|
||||||
|
{
|
||||||
|
XAnyEvent *ev = (XAnyEvent*)eev;
|
||||||
|
/* determine which field separator to use */
|
||||||
|
if (use_separate_lines)
|
||||||
|
sep = "\n";
|
||||||
|
else
|
||||||
|
sep = " ";
|
||||||
|
|
||||||
|
printf("type=%s%s", GetType(ev), sep);
|
||||||
|
printf("serial=%ld%s", ev->serial, sep);
|
||||||
|
printf("send_event=%s%s", TorF(ev->send_event), sep);
|
||||||
|
printf("display=0x%x%s", (unsigned)ev->display, sep);
|
||||||
|
|
||||||
|
switch (ev->type) {
|
||||||
|
case MotionNotify:
|
||||||
|
VerbMotion((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ButtonPress:
|
||||||
|
case ButtonRelease:
|
||||||
|
VerbButton((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ColormapNotify:
|
||||||
|
VerbColormap((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EnterNotify:
|
||||||
|
case LeaveNotify:
|
||||||
|
VerbCrossing((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Expose:
|
||||||
|
VerbExpose((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GraphicsExpose:
|
||||||
|
VerbGraphicsExpose((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NoExpose:
|
||||||
|
VerbNoExpose((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FocusIn:
|
||||||
|
case FocusOut:
|
||||||
|
VerbFocus((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KeymapNotify:
|
||||||
|
VerbKeymap((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KeyPress:
|
||||||
|
case KeyRelease:
|
||||||
|
VerbKey((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PropertyNotify:
|
||||||
|
VerbProperty((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ResizeRequest:
|
||||||
|
VerbResizeRequest((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CirculateNotify:
|
||||||
|
VerbCirculate((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ConfigureNotify:
|
||||||
|
VerbConfigure((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CreateNotify:
|
||||||
|
VerbCreateWindow((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DestroyNotify:
|
||||||
|
VerbDestroyWindow((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GravityNotify:
|
||||||
|
VerbGravity((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MapNotify:
|
||||||
|
VerbMap((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ReparentNotify:
|
||||||
|
VerbReparent((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UnmapNotify:
|
||||||
|
VerbUnmap((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CirculateRequest:
|
||||||
|
VerbCirculateRequest((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ConfigureRequest:
|
||||||
|
VerbConfigureRequest((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MapRequest:
|
||||||
|
VerbMapRequest((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ClientMessage:
|
||||||
|
VerbClient((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MappingNotify:
|
||||||
|
VerbMapping((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SelectionClear:
|
||||||
|
VerbSelectionClear((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SelectionNotify:
|
||||||
|
VerbSelection((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SelectionRequest:
|
||||||
|
VerbSelectionRequest((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VisibilityNotify:
|
||||||
|
VerbVisibility((void*)ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
20
src/cmd/rio/showevent/ShowEvent.man
Normal file
20
src/cmd/rio/showevent/ShowEvent.man
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
.TH ShowEvent 3X11 "December 1988"
|
||||||
|
.SH NAME
|
||||||
|
.B ShowEvent \- display the fields of an event
|
||||||
|
.br
|
||||||
|
.B GetType - get a string representation of an event type
|
||||||
|
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B void ShowEvent(event)
|
||||||
|
.br
|
||||||
|
.B XEvent *event;
|
||||||
|
.PP
|
||||||
|
.B char *GetType(event)
|
||||||
|
.br
|
||||||
|
.B XEvent *event;
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
ShowEvent displays the fields of the specified event in a readable form.
|
||||||
|
.PP
|
||||||
|
GetType returns the string representation of the specified event type.
|
||||||
|
|
||||||
1103
src/cmd/rio/showevent/part01
Normal file
1103
src/cmd/rio/showevent/part01
Normal file
File diff suppressed because it is too large
Load diff
1
src/cmd/rio/showevent/patchlevel.h
Normal file
1
src/cmd/rio/showevent/patchlevel.h
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
#define PATCHLEVEL 0
|
||||||
48
src/cmd/rio/showevent/sample.c
Normal file
48
src/cmd/rio/showevent/sample.c
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
#include <X11/Intrinsic.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Disclaimer: No I don't actually code like this but this is a simple,
|
||||||
|
* "Quick-n-Dirty", plain, vanilla, "No ups, No extras" piece of code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
{
|
||||||
|
Display *dpy;
|
||||||
|
int screen;
|
||||||
|
Window window;
|
||||||
|
XEvent event;
|
||||||
|
extern Boolean use_separate_lines;
|
||||||
|
|
||||||
|
if (!(dpy = XOpenDisplay(""))) {
|
||||||
|
printf("Failed to open display...\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
screen = DefaultScreen(dpy);
|
||||||
|
|
||||||
|
window = XCreateSimpleWindow(dpy, RootWindow(dpy, screen), 100, 100,
|
||||||
|
300, 200, 2, BlackPixel(dpy, screen), WhitePixel(dpy, screen));
|
||||||
|
|
||||||
|
XSelectInput(dpy, window, KeyPressMask | KeyReleaseMask | ButtonPressMask |
|
||||||
|
ButtonReleaseMask | EnterWindowMask | LeaveWindowMask |
|
||||||
|
PointerMotionMask | PointerMotionHintMask | Button1MotionMask |
|
||||||
|
Button2MotionMask | Button3MotionMask | Button4MotionMask |
|
||||||
|
Button5MotionMask | ButtonMotionMask | KeymapStateMask |
|
||||||
|
ExposureMask | VisibilityChangeMask | StructureNotifyMask |
|
||||||
|
SubstructureNotifyMask | SubstructureRedirectMask | FocusChangeMask |
|
||||||
|
PropertyChangeMask | ColormapChangeMask | OwnerGrabButtonMask);
|
||||||
|
|
||||||
|
XMapWindow(dpy, window);
|
||||||
|
|
||||||
|
/* set this to false to make ShowEvent take up less vertival space */
|
||||||
|
use_separate_lines = True;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
XNextEvent(dpy, &event);
|
||||||
|
printf("Detail of %s event:\n", GetType(&event));
|
||||||
|
ShowEvent(&event);
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue