fix clang-format, no sort includes!
This commit is contained in:
parent
2281498ceb
commit
1af2175f2e
20 changed files with 4586 additions and 5023 deletions
18
.clang-format
Normal file
18
.clang-format
Normal file
|
@ -0,0 +1,18 @@
|
|||
TabWidth: 2
|
||||
IndentWidth: 2
|
||||
ContinuationIndentWidth: 2
|
||||
UseTab: Never
|
||||
AllowShortBlocksOnASingleLine: Always
|
||||
AllowShortCaseLabelsOnASingleLine: true
|
||||
AllowShortEnumsOnASingleLine: true
|
||||
AllowShortIfStatementsOnASingleLine: true
|
||||
AllowShortLoopsOnASingleLine: true
|
||||
AlwaysBreakAfterDefinitionReturnType: TopLevel
|
||||
IndentCaseLabels: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
AlignAfterOpenBracket: AlwaysBreak
|
||||
BinPackArguments: false
|
||||
BinPackArguments: false
|
||||
PointerAlignment: Left
|
||||
BreakBeforeBraces: Attach
|
||||
SortIncludes: false
|
168
client.c
Executable file → Normal file
168
client.c
Executable file → Normal file
|
@ -14,12 +14,10 @@ Client *clients;
|
|||
Client* current;
|
||||
|
||||
void
|
||||
setactive(Client *c, int on)
|
||||
{
|
||||
setactive(Client* c, int on) {
|
||||
/* dbg("setactive client %x %d", c->window, c->on); */
|
||||
|
||||
if(c->parent == c->screen->root)
|
||||
return;
|
||||
if (c->parent == c->screen->root) return;
|
||||
|
||||
if (on) {
|
||||
XUngrabButton(dpy, AnyButton, AnyModifier, c->parent);
|
||||
|
@ -30,15 +28,23 @@ setactive(Client *c, int on)
|
|||
} else {
|
||||
if (c->proto & Plosefocus)
|
||||
sendcmessage(c->window, wm_protocols, wm_lose_focus, 0, 1);
|
||||
XGrabButton(dpy, AnyButton, AnyModifier, c->parent, False,
|
||||
ButtonMask, GrabModeAsync, GrabModeSync, None, None);
|
||||
XGrabButton(
|
||||
dpy,
|
||||
AnyButton,
|
||||
AnyModifier,
|
||||
c->parent,
|
||||
False,
|
||||
ButtonMask,
|
||||
GrabModeAsync,
|
||||
GrabModeSync,
|
||||
None,
|
||||
None);
|
||||
}
|
||||
draw_border(c, on);
|
||||
}
|
||||
|
||||
void
|
||||
draw_border(Client *c, int active)
|
||||
{
|
||||
draw_border(Client* c, int active) {
|
||||
unsigned long pixel;
|
||||
|
||||
if (active) {
|
||||
|
@ -53,49 +59,47 @@ draw_border(Client *c, int active)
|
|||
pixel = c->screen->inactiveborder;
|
||||
}
|
||||
|
||||
if(debug) fprintf(stderr, "draw_border %p pixel %ld active %d hold %d\n", (void*)c, pixel, active, c->hold);
|
||||
if (debug)
|
||||
fprintf(
|
||||
stderr,
|
||||
"draw_border %p pixel %ld active %d hold %d\n",
|
||||
(void*)c,
|
||||
pixel,
|
||||
active,
|
||||
c->hold);
|
||||
XSetWindowBackground(dpy, c->parent, pixel);
|
||||
XClearWindow(dpy, c->parent);
|
||||
}
|
||||
|
||||
void
|
||||
active(Client *c)
|
||||
{
|
||||
active(Client* c) {
|
||||
Client* cc;
|
||||
|
||||
|
||||
if (c == 0) {
|
||||
fprintf(stderr, "ryudo: active(c==0)\n");
|
||||
return;
|
||||
}
|
||||
if(c == current)
|
||||
return;
|
||||
if (c == current) return;
|
||||
#ifdef AUTOSTICK
|
||||
if (isautostick(c))
|
||||
return;
|
||||
if (isautostick(c)) return;
|
||||
#endif
|
||||
if (current) {
|
||||
setactive(current, 0);
|
||||
if(current->screen != c->screen)
|
||||
cmapnofocus(current->screen);
|
||||
if (current->screen != c->screen) cmapnofocus(current->screen);
|
||||
}
|
||||
setactive(c, 1);
|
||||
for (cc = clients; cc; cc = cc->next)
|
||||
if(cc->revert == c)
|
||||
cc->revert = c->revert;
|
||||
if (cc->revert == c) cc->revert = c->revert;
|
||||
c->revert = current;
|
||||
while(c->revert && !normal(c->revert))
|
||||
c->revert = c->revert->revert;
|
||||
while (c->revert && !normal(c->revert)) c->revert = c->revert->revert;
|
||||
current = c;
|
||||
#ifdef DEBUG
|
||||
if(debug)
|
||||
dump_revert();
|
||||
if (debug) dump_revert();
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
nofocus(void)
|
||||
{
|
||||
nofocus(void) {
|
||||
static Window w = 0;
|
||||
int mask;
|
||||
XSetWindowAttributes attr;
|
||||
|
@ -116,16 +120,26 @@ nofocus(void)
|
|||
mask = CWOverrideRedirect /*|CWColormap*/;
|
||||
attr.override_redirect = 1;
|
||||
/* attr.colormap = screens[0].def_cmap;*/
|
||||
w = XCreateWindow(dpy, screens[0].root, 0, 0, 1, 1, 0,
|
||||
0 /*screens[0].depth*/, InputOnly, screens[0].vis, mask, &attr);
|
||||
w = XCreateWindow(
|
||||
dpy,
|
||||
screens[0].root,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0 /*screens[0].depth*/,
|
||||
InputOnly,
|
||||
screens[0].vis,
|
||||
mask,
|
||||
&attr);
|
||||
XMapWindow(dpy, w);
|
||||
}
|
||||
XSetInputFocus(dpy, w, RevertToPointerRoot, timestamp());
|
||||
}
|
||||
|
||||
void
|
||||
top(Client *c)
|
||||
{
|
||||
top(Client* c) {
|
||||
Client **l, *cc;
|
||||
|
||||
l = &clients;
|
||||
|
@ -142,19 +156,15 @@ top(Client *c)
|
|||
}
|
||||
|
||||
Client*
|
||||
getclient(Window w, int create)
|
||||
{
|
||||
getclient(Window w, int create) {
|
||||
Client* c;
|
||||
|
||||
if(w == 0 || getscreen(w))
|
||||
return 0;
|
||||
if (w == 0 || getscreen(w)) return 0;
|
||||
|
||||
for (c = clients; c; c = c->next)
|
||||
if(c->window == w || c->parent == w)
|
||||
return c;
|
||||
if (c->window == w || c->parent == w) return c;
|
||||
|
||||
if(!create)
|
||||
return 0;
|
||||
if (!create) return 0;
|
||||
|
||||
c = (Client*)malloc(sizeof(Client));
|
||||
memset(c, 0, sizeof(Client));
|
||||
|
@ -179,25 +189,19 @@ getclient(Window w, int create)
|
|||
}
|
||||
|
||||
void
|
||||
rmclient(Client *c)
|
||||
{
|
||||
rmclient(Client* c) {
|
||||
Client* cc;
|
||||
|
||||
for (cc = current; cc && cc->revert; cc = cc->revert)
|
||||
if(cc->revert == c)
|
||||
cc->revert = cc->revert->revert;
|
||||
if (cc->revert == c) cc->revert = cc->revert->revert;
|
||||
|
||||
if(c == clients)
|
||||
clients = c->next;
|
||||
if (c == clients) clients = c->next;
|
||||
for (cc = clients; cc && cc->next; cc = cc->next)
|
||||
if(cc->next == c)
|
||||
cc->next = cc->next->next;
|
||||
if (cc->next == c) cc->next = cc->next->next;
|
||||
|
||||
if(hidden(c))
|
||||
unhidec(c, 0);
|
||||
if (hidden(c)) unhidec(c, 0);
|
||||
|
||||
if(c->parent != c->screen->root)
|
||||
XDestroyWindow(dpy, c->parent);
|
||||
if (c->parent != c->screen->root) XDestroyWindow(dpy, c->parent);
|
||||
|
||||
c->parent = c->window = None; /* paranoia */
|
||||
if (current == c) {
|
||||
|
@ -205,8 +209,7 @@ rmclient(Client *c)
|
|||
if (current == 0)
|
||||
nofocus();
|
||||
else {
|
||||
if(current->screen != c->screen)
|
||||
cmapnofocus(c->screen);
|
||||
if (current->screen != c->screen) cmapnofocus(c->screen);
|
||||
setactive(current, 1);
|
||||
}
|
||||
}
|
||||
|
@ -214,69 +217,62 @@ rmclient(Client *c)
|
|||
XFree((char*)c->cmapwins);
|
||||
free((char*)c->wmcmaps);
|
||||
}
|
||||
if(c->iconname != 0)
|
||||
XFree((char*) c->iconname);
|
||||
if(c->name != 0)
|
||||
XFree((char*) c->name);
|
||||
if(c->instance != 0)
|
||||
XFree((char*) c->instance);
|
||||
if(c->class != 0)
|
||||
XFree((char*) c->class);
|
||||
if (c->iconname != 0) XFree((char*)c->iconname);
|
||||
if (c->name != 0) XFree((char*)c->name);
|
||||
if (c->instance != 0) XFree((char*)c->instance);
|
||||
if (c->class != 0) XFree((char*)c->class);
|
||||
memset(c, 0, sizeof(Client)); /* paranoia */
|
||||
free(c);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void
|
||||
dump_revert(void)
|
||||
{
|
||||
dump_revert(void) {
|
||||
Client* c;
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
for (c = current; c; c = c->revert) {
|
||||
fprintf(stderr, "%s(%x:%d)", c->label ? c->label : "?", (int)c->window, c->state);
|
||||
if(i++ > 100)
|
||||
break;
|
||||
if(c->revert)
|
||||
fprintf(stderr, " -> ");
|
||||
fprintf(
|
||||
stderr, "%s(%x:%d)", c->label ? c->label : "?", (int)c->window, c->state);
|
||||
if (i++ > 100) break;
|
||||
if (c->revert) fprintf(stderr, " -> ");
|
||||
}
|
||||
if(current == 0)
|
||||
fprintf(stderr, "empty");
|
||||
if (current == 0) fprintf(stderr, "empty");
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
||||
void
|
||||
dump_clients(void)
|
||||
{
|
||||
dump_clients(void) {
|
||||
Client* c;
|
||||
|
||||
for (c = clients; c; c = c->next)
|
||||
fprintf(stderr, "w 0x%x parent 0x%x @ (%d, %d)\n", (int)c->window, (int)c->parent, c->x, c->y);
|
||||
fprintf(
|
||||
stderr,
|
||||
"w 0x%x parent 0x%x @ (%d, %d)\n",
|
||||
(int)c->window,
|
||||
(int)c->parent,
|
||||
c->x,
|
||||
c->y);
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
shuffle(int up)
|
||||
{
|
||||
shuffle(int up) {
|
||||
Client **l, *c;
|
||||
|
||||
if(clients == 0 || clients->next == 0)
|
||||
return;
|
||||
if (clients == 0 || clients->next == 0) return;
|
||||
if (!up) {
|
||||
c = 0;
|
||||
/*for(c=clients; c->next; c=c->next) */
|
||||
/* ; */
|
||||
for (l = &clients; (*l)->next; l = &(*l)->next)
|
||||
#ifdef AUTOSTICK
|
||||
if ((*l)->state == 1 && !isautostick(*l))
|
||||
c = *l;
|
||||
if ((*l)->state == 1 && !isautostick(*l)) c = *l;
|
||||
#else
|
||||
if ((*l)->state == 1)
|
||||
c = *l;
|
||||
if ((*l)->state == 1) c = *l;
|
||||
#endif
|
||||
if (c == 0)
|
||||
return;
|
||||
if (c == 0) return;
|
||||
XMapRaised(dpy, c->parent);
|
||||
top(c);
|
||||
active(c);
|
||||
|
@ -296,18 +292,14 @@ shuffle(int up)
|
|||
|
||||
#ifdef AUTOSTICK
|
||||
int
|
||||
isautostick(Client *c)
|
||||
{
|
||||
isautostick(Client* c) {
|
||||
static char* autostick[] = AUTOSTICK;
|
||||
char** a = autostick;
|
||||
|
||||
while (*a) {
|
||||
if(c && c->class && strstr(c->class, *a)) {
|
||||
return 1;
|
||||
}
|
||||
if (c && c->class && strstr(c->class, *a)) { return 1; }
|
||||
++a;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
6
color.c
Executable file → Normal file
6
color.c
Executable file → Normal file
|
@ -8,8 +8,9 @@
|
|||
#include "fns.h"
|
||||
|
||||
unsigned long
|
||||
colorpixel(Display *dpy, ScreenInfo *s, int depth, unsigned long rgb, unsigned long def)
|
||||
{
|
||||
colorpixel(
|
||||
Display* dpy, ScreenInfo* s, int depth, unsigned long rgb,
|
||||
unsigned long def) {
|
||||
int r, g, b;
|
||||
|
||||
r = rgb >> 16;
|
||||
|
@ -42,4 +43,3 @@ colorpixel(Display *dpy, ScreenInfo *s, int depth, unsigned long rgb, unsigned l
|
|||
return rgb;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
20
config.h
Executable file → Normal file
20
config.h
Executable file → Normal file
|
@ -86,23 +86,15 @@
|
|||
* Remember the backslash at the end of non-terminating lines!
|
||||
*/
|
||||
|
||||
#define AUTOSTICK {\
|
||||
"XOsview",\
|
||||
"XClock",\
|
||||
0\
|
||||
}
|
||||
#define AUTOSTICK \
|
||||
{ "XOsview", "XClock", 0 }
|
||||
|
||||
/* List of fonts to try, in order, for rendering the menus.
|
||||
* Remember the backslash at the end of non-terminating lines!
|
||||
*/
|
||||
|
||||
#define FONTLIST {\
|
||||
"*-lucidatypewriter-medium-*-12-*-75-*",\
|
||||
"lucm.latin1.9",\
|
||||
"blit",\
|
||||
"*-lucidatypewriter-bold-*-14-*-75-*",\
|
||||
"9x15bold",\
|
||||
"fixed",\
|
||||
"*",\
|
||||
0\
|
||||
#define FONTLIST \
|
||||
{ \
|
||||
"*-lucidatypewriter-medium-*-12-*-75-*", "lucm.latin1.9", "blit", \
|
||||
"*-lucidatypewriter-bold-*-14-*-75-*", "9x15bold", "fixed", "*", 0 \
|
||||
}
|
||||
|
|
220
cursor.c
Executable file → Normal file
220
cursor.c
Executable file → Normal file
|
@ -16,133 +16,120 @@ typedef struct {
|
|||
Cursordata bigarrow = {
|
||||
16,
|
||||
{0, 0},
|
||||
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x3F,
|
||||
0xFF, 0x0F, 0xFF, 0x0F, 0xFF, 0x1F, 0xFF, 0x3F,
|
||||
0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x3F,
|
||||
0xCF, 0x1F, 0x8F, 0x0F, 0x07, 0x07, 0x03, 0x02,
|
||||
{
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x3F, 0xFF, 0x0F, 0xFF,
|
||||
0x0F, 0xFF, 0x1F, 0xFF, 0x3F, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F,
|
||||
0xFF, 0x3F, 0xCF, 0x1F, 0x8F, 0x0F, 0x07, 0x07, 0x03, 0x02,
|
||||
},
|
||||
{ 0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x3F, 0xFE, 0x0F,
|
||||
0xFE, 0x07, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x1F,
|
||||
0xFE, 0x3F, 0xFE, 0x7F, 0xFE, 0x3F, 0xCE, 0x1F,
|
||||
0x86, 0x0F, 0x06, 0x07, 0x02, 0x02, 0x00, 0x00,
|
||||
}
|
||||
};
|
||||
{
|
||||
0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x3F, 0xFE, 0x0F, 0xFE, 0x07, 0xFE,
|
||||
0x07, 0xFE, 0x0F, 0xFE, 0x1F, 0xFE, 0x3F, 0xFE, 0x7F, 0xFE, 0x3F,
|
||||
0xCE, 0x1F, 0x86, 0x0F, 0x06, 0x07, 0x02, 0x02, 0x00, 0x00,
|
||||
}};
|
||||
|
||||
Cursordata sweep0data = {
|
||||
16,
|
||||
{7, 7},
|
||||
{0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03,
|
||||
0xC0, 0x03, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xC0, 0x03,
|
||||
0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03},
|
||||
{0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
|
||||
0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFE, 0x7F,
|
||||
0xFE, 0x7F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
|
||||
0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00}
|
||||
};
|
||||
{0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0,
|
||||
0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03,
|
||||
0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03},
|
||||
{0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
|
||||
0x01, 0x80, 0x01, 0xFE, 0x7F, 0xFE, 0x7F, 0x80, 0x01, 0x80, 0x01,
|
||||
0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00}};
|
||||
|
||||
Cursordata boxcursdata = {
|
||||
16,
|
||||
{7, 7},
|
||||
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8,
|
||||
0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F,
|
||||
0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70,
|
||||
0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70,
|
||||
0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00}
|
||||
};
|
||||
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
|
||||
0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0x0E, 0x70, 0x0E,
|
||||
0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70,
|
||||
0x0E, 0x70, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00}};
|
||||
|
||||
Cursordata sightdata = {
|
||||
16,
|
||||
{7, 7},
|
||||
{0xF8, 0x1F, 0xFC, 0x3F, 0xFE, 0x7F, 0xDF, 0xFB,
|
||||
0xCF, 0xF3, 0xC7, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xE3, 0xCF, 0xF3,
|
||||
0xDF, 0x7B, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F,},
|
||||
{0x00, 0x00, 0xF0, 0x0F, 0x8C, 0x31, 0x84, 0x21,
|
||||
0x82, 0x41, 0x82, 0x41, 0x82, 0x41, 0xFE, 0x7F,
|
||||
0xFE, 0x7F, 0x82, 0x41, 0x82, 0x41, 0x82, 0x41,
|
||||
0x84, 0x21, 0x8C, 0x31, 0xF0, 0x0F, 0x00, 0x00,}
|
||||
};
|
||||
{
|
||||
0xF8, 0x1F, 0xFC, 0x3F, 0xFE, 0x7F, 0xDF, 0xFB, 0xCF, 0xF3, 0xC7,
|
||||
0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xE3,
|
||||
0xCF, 0xF3, 0xDF, 0x7B, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F,
|
||||
},
|
||||
{
|
||||
0x00, 0x00, 0xF0, 0x0F, 0x8C, 0x31, 0x84, 0x21, 0x82, 0x41, 0x82,
|
||||
0x41, 0x82, 0x41, 0xFE, 0x7F, 0xFE, 0x7F, 0x82, 0x41, 0x82, 0x41,
|
||||
0x82, 0x41, 0x84, 0x21, 0x8C, 0x31, 0xF0, 0x0F, 0x00, 0x00,
|
||||
}};
|
||||
|
||||
Cursordata arrowdata = {
|
||||
16,
|
||||
{1, 1},
|
||||
{0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x03, 0xFF, 0x00,
|
||||
0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0x07,
|
||||
0xE7, 0x0F, 0xC7, 0x1F, 0x83, 0x3F, 0x00, 0x7F,
|
||||
0x00, 0xFE, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x10,},
|
||||
{0x00, 0x00, 0xFE, 0x03, 0xFE, 0x00, 0x3E, 0x00,
|
||||
0x7E, 0x00, 0xFE, 0x00, 0xF6, 0x01, 0xE6, 0x03,
|
||||
0xC2, 0x07, 0x82, 0x0F, 0x00, 0x1F, 0x00, 0x3E,
|
||||
0x00, 0x7C, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00,}
|
||||
};
|
||||
{
|
||||
0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x03, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
|
||||
0x01, 0xFF, 0x03, 0xFF, 0x07, 0xE7, 0x0F, 0xC7, 0x1F, 0x83, 0x3F,
|
||||
0x00, 0x7F, 0x00, 0xFE, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x10,
|
||||
},
|
||||
{
|
||||
0x00, 0x00, 0xFE, 0x03, 0xFE, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0xFE,
|
||||
0x00, 0xF6, 0x01, 0xE6, 0x03, 0xC2, 0x07, 0x82, 0x0F, 0x00, 0x1F,
|
||||
0x00, 0x3E, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00,
|
||||
}};
|
||||
|
||||
Cursordata whitearrow = {
|
||||
16,
|
||||
{0, 0},
|
||||
{0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x03, 0xFF, 0x00,
|
||||
0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0x07,
|
||||
0xE7, 0x0F, 0xC7, 0x1F, 0x83, 0x3F, 0x00, 0x7F,
|
||||
0x00, 0xFE, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x10,},
|
||||
{0xFF, 0x07, 0xFF, 0x07, 0x83, 0x03, 0xC3, 0x00,
|
||||
0xC3, 0x00, 0x83, 0x01, 0x1B, 0x03, 0x3F, 0x06,
|
||||
0x67, 0x0C, 0xC7, 0x18, 0x83, 0x31, 0x00, 0x63,
|
||||
0x00, 0xC6, 0x00, 0x6C, 0x00, 0x38, 0x00, 0x10,}
|
||||
};
|
||||
{
|
||||
0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x03, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
|
||||
0x01, 0xFF, 0x03, 0xFF, 0x07, 0xE7, 0x0F, 0xC7, 0x1F, 0x83, 0x3F,
|
||||
0x00, 0x7F, 0x00, 0xFE, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x10,
|
||||
},
|
||||
{
|
||||
0xFF, 0x07, 0xFF, 0x07, 0x83, 0x03, 0xC3, 0x00, 0xC3, 0x00, 0x83,
|
||||
0x01, 0x1B, 0x03, 0x3F, 0x06, 0x67, 0x0C, 0xC7, 0x18, 0x83, 0x31,
|
||||
0x00, 0x63, 0x00, 0xC6, 0x00, 0x6C, 0x00, 0x38, 0x00, 0x10,
|
||||
}};
|
||||
|
||||
Cursordata blittarget = {
|
||||
18,
|
||||
{8, 8},
|
||||
{0xe0, 0x1f, 0x00, 0xf0, 0x3f, 0x00, 0xf8, 0x7f, 0x00,
|
||||
0xfc, 0xff, 0x00, 0xfe, 0xff, 0x01, 0xff, 0xff, 0x03,
|
||||
0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03,
|
||||
0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03,
|
||||
0xff, 0xff, 0x03, 0xfe, 0xff, 0x01, 0xfc, 0xff, 0x00,
|
||||
0xf8, 0x7f, 0x00, 0xf0, 0x3f, 0x00, 0xe0, 0x1f, 0x00},
|
||||
{0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xf0, 0x3f, 0x00,
|
||||
0x38, 0x73, 0x00, 0x8c, 0xc7, 0x00, 0xec, 0xdf, 0x00,
|
||||
0x66, 0x9b, 0x01, 0x36, 0xb3, 0x01, 0xfe, 0xff, 0x01,
|
||||
0xfe, 0xff, 0x01, 0x36, 0xb3, 0x01, 0x66, 0x9b, 0x01,
|
||||
0xec, 0xdf, 0x00, 0x8c, 0xc7, 0x00, 0x38, 0x73, 0x00,
|
||||
0xf0, 0x3f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00}
|
||||
};
|
||||
{0xe0, 0x1f, 0x00, 0xf0, 0x3f, 0x00, 0xf8, 0x7f, 0x00, 0xfc, 0xff,
|
||||
0x00, 0xfe, 0xff, 0x01, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff,
|
||||
0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03,
|
||||
0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xfe, 0xff, 0x01, 0xfc, 0xff,
|
||||
0x00, 0xf8, 0x7f, 0x00, 0xf0, 0x3f, 0x00, 0xe0, 0x1f, 0x00},
|
||||
{0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xf0, 0x3f, 0x00, 0x38, 0x73,
|
||||
0x00, 0x8c, 0xc7, 0x00, 0xec, 0xdf, 0x00, 0x66, 0x9b, 0x01, 0x36,
|
||||
0xb3, 0x01, 0xfe, 0xff, 0x01, 0xfe, 0xff, 0x01, 0x36, 0xb3, 0x01,
|
||||
0x66, 0x9b, 0x01, 0xec, 0xdf, 0x00, 0x8c, 0xc7, 0x00, 0x38, 0x73,
|
||||
0x00, 0xf0, 0x3f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00}};
|
||||
|
||||
Cursordata blitarrow = {
|
||||
18,
|
||||
{1, 1},
|
||||
{0xff, 0x0f, 0x00, 0xff, 0x07, 0x00, 0xff, 0x03, 0x00,
|
||||
0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x01, 0x00,
|
||||
0xff, 0x03, 0x00, 0xff, 0x07, 0x00, 0xe7, 0x0f, 0x00,
|
||||
0xc7, 0x1f, 0x00, 0x87, 0x3f, 0x00, 0x03, 0x7f, 0x00,
|
||||
0x01, 0xfe, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xf8, 0x03,
|
||||
0x00, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00},
|
||||
{0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0xfe, 0x00, 0x00,
|
||||
0x3e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xfe, 0x00, 0x00,
|
||||
0xf6, 0x01, 0x00, 0xe6, 0x03, 0x00, 0xc2, 0x07, 0x00,
|
||||
0x82, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00,
|
||||
0x00, 0x7c, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x01,
|
||||
0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00}
|
||||
};
|
||||
{0xff, 0x0f, 0x00, 0xff, 0x07, 0x00, 0xff, 0x03, 0x00, 0xff, 0x00,
|
||||
0x00, 0xff, 0x00, 0x00, 0xff, 0x01, 0x00, 0xff, 0x03, 0x00, 0xff,
|
||||
0x07, 0x00, 0xe7, 0x0f, 0x00, 0xc7, 0x1f, 0x00, 0x87, 0x3f, 0x00,
|
||||
0x03, 0x7f, 0x00, 0x01, 0xfe, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xf8,
|
||||
0x03, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00},
|
||||
{0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0xfe, 0x00, 0x00, 0x3e, 0x00,
|
||||
0x00, 0x7e, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xf6, 0x01, 0x00, 0xe6,
|
||||
0x03, 0x00, 0xc2, 0x07, 0x00, 0x82, 0x0f, 0x00, 0x00, 0x1f, 0x00,
|
||||
0x00, 0x3e, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf0,
|
||||
0x01, 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00}};
|
||||
|
||||
Cursordata blitsweep = {
|
||||
18,
|
||||
{8, 8},
|
||||
{0xc4, 0xff, 0x03, 0xce, 0xff, 0x03, 0xdf, 0xff, 0x03,
|
||||
0x3e, 0x80, 0x03, 0x7c, 0x83, 0x03, 0xf8, 0x83, 0x03,
|
||||
0xf7, 0x83, 0x03, 0xe7, 0x83, 0x03, 0xf7, 0x83, 0x03,
|
||||
0xf7, 0x83, 0x03, 0x07, 0x80, 0x03, 0x07, 0x80, 0x03,
|
||||
0x07, 0x80, 0x03, 0x07, 0x80, 0x03, 0x07, 0x80, 0x03,
|
||||
0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03},
|
||||
{0x00, 0x00, 0x00, 0x84, 0xff, 0x01, 0x0e, 0x00, 0x01,
|
||||
0x1c, 0x00, 0x01, 0x38, 0x00, 0x01, 0x70, 0x01, 0x01,
|
||||
0xe0, 0x01, 0x01, 0xc2, 0x01, 0x01, 0xe2, 0x01, 0x01,
|
||||
0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
|
||||
0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
|
||||
0x02, 0x00, 0x01, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00}
|
||||
};
|
||||
{0xc4, 0xff, 0x03, 0xce, 0xff, 0x03, 0xdf, 0xff, 0x03, 0x3e, 0x80,
|
||||
0x03, 0x7c, 0x83, 0x03, 0xf8, 0x83, 0x03, 0xf7, 0x83, 0x03, 0xe7,
|
||||
0x83, 0x03, 0xf7, 0x83, 0x03, 0xf7, 0x83, 0x03, 0x07, 0x80, 0x03,
|
||||
0x07, 0x80, 0x03, 0x07, 0x80, 0x03, 0x07, 0x80, 0x03, 0x07, 0x80,
|
||||
0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03},
|
||||
{0x00, 0x00, 0x00, 0x84, 0xff, 0x01, 0x0e, 0x00, 0x01, 0x1c, 0x00,
|
||||
0x01, 0x38, 0x00, 0x01, 0x70, 0x01, 0x01, 0xe0, 0x01, 0x01, 0xc2,
|
||||
0x01, 0x01, 0xe2, 0x01, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
|
||||
0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00,
|
||||
0x01, 0x02, 0x00, 0x01, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00}};
|
||||
|
||||
/*
|
||||
* Grey tile pattern for root background
|
||||
|
@ -150,54 +137,50 @@ Cursordata blitsweep = {
|
|||
|
||||
#define grey_width 4
|
||||
#define grey_height 2
|
||||
static char grey_bits[] = {
|
||||
0x01, 0x04
|
||||
};
|
||||
static char grey_bits[] = {0x01, 0x04};
|
||||
|
||||
static XColor bl, wh;
|
||||
|
||||
Cursor
|
||||
getcursor(c, s)
|
||||
Cursordata *c;
|
||||
Cursor getcursor(c, s) Cursordata* c;
|
||||
ScreenInfo* s;
|
||||
{
|
||||
Pixmap f, m;
|
||||
|
||||
f = XCreatePixmapFromBitmapData(dpy, s->root, (char *)c->fore,
|
||||
c->width, c->width, 1, 0, 1);
|
||||
m = XCreatePixmapFromBitmapData(dpy, s->root, (char *)c->mask,
|
||||
c->width, c->width, 1, 0, 1);
|
||||
return XCreatePixmapCursor(dpy, f, m, &bl, &wh,
|
||||
c->hot[0], c->hot[1]);
|
||||
f = XCreatePixmapFromBitmapData(
|
||||
dpy, s->root, (char*)c->fore, c->width, c->width, 1, 0, 1);
|
||||
m = XCreatePixmapFromBitmapData(
|
||||
dpy, s->root, (char*)c->mask, c->width, c->width, 1, 0, 1);
|
||||
return XCreatePixmapCursor(dpy, f, m, &bl, &wh, c->hot[0], c->hot[1]);
|
||||
}
|
||||
|
||||
void
|
||||
initcurs(s)
|
||||
ScreenInfo *s;
|
||||
void initcurs(s) ScreenInfo* s;
|
||||
{
|
||||
XColor dummy;
|
||||
|
||||
XAllocNamedColor(dpy, DefaultColormap(dpy, s->num),
|
||||
"black", &bl, &dummy);
|
||||
XAllocNamedColor(dpy, DefaultColormap(dpy, s->num),
|
||||
"white", &wh, &dummy);
|
||||
XAllocNamedColor(dpy, DefaultColormap(dpy, s->num), "black", &bl, &dummy);
|
||||
XAllocNamedColor(dpy, DefaultColormap(dpy, s->num), "white", &wh, &dummy);
|
||||
|
||||
if (nostalgia) {
|
||||
s->arrow = getcursor(&blitarrow, s);
|
||||
s->target = getcursor(&blittarget, s);
|
||||
s->sweep0 = getcursor(&blitsweep, s);
|
||||
s->boxcurs = getcursor(&blitsweep, s);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
s->arrow = getcursor(&bigarrow, s);
|
||||
s->target = getcursor(&sightdata, s);
|
||||
s->sweep0 = getcursor(&sweep0data, s);
|
||||
s->boxcurs = getcursor(&boxcursdata, s);
|
||||
}
|
||||
|
||||
s->root_pixmap = XCreatePixmapFromBitmapData(dpy,
|
||||
s->root, grey_bits, grey_width, grey_height,
|
||||
s->black, s->white, s->depth);
|
||||
s->root_pixmap = XCreatePixmapFromBitmapData(
|
||||
dpy,
|
||||
s->root,
|
||||
grey_bits,
|
||||
grey_width,
|
||||
grey_height,
|
||||
s->black,
|
||||
s->white,
|
||||
s->depth);
|
||||
|
||||
s->bordcurs[BorderN] = XCreateFontCursor(dpy, 138);
|
||||
s->bordcurs[BorderNNE] = XCreateFontCursor(dpy, 136);
|
||||
|
@ -213,7 +196,6 @@ ScreenInfo *s;
|
|||
s->bordcurs[BorderNNW] = s->bordcurs[BorderWNW];
|
||||
}
|
||||
|
||||
|
||||
/* RIO
|
||||
|
||||
Cursor crosscursor = {
|
||||
|
|
4
dat.h
Executable file → Normal file
4
dat.h
Executable file → Normal file
|
@ -13,8 +13,8 @@
|
|||
#endif
|
||||
#define NUMVIRTUALS 12
|
||||
|
||||
#define AllButtonMask (Button1Mask|Button2Mask|Button3Mask \
|
||||
|Button4Mask|Button5Mask)
|
||||
#define AllButtonMask \
|
||||
(Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask)
|
||||
#define ButtonMask (ButtonPressMask | ButtonReleaseMask)
|
||||
#define MenuMask (ButtonMask | ButtonMotionMask | ExposureMask)
|
||||
#define MenuGrabMask (ButtonMask | ButtonMotionMask | StructureNotifyMask)
|
||||
|
|
64
error.c
Executable file → Normal file
64
error.c
Executable file → Normal file
|
@ -11,8 +11,7 @@
|
|||
int ignore_badwindow;
|
||||
|
||||
void
|
||||
fatal(char *s)
|
||||
{
|
||||
fatal(char* s) {
|
||||
fprintf(stderr, "ryudo: ");
|
||||
perror(s);
|
||||
fprintf(stderr, "\n");
|
||||
|
@ -20,23 +19,28 @@ fatal(char *s)
|
|||
}
|
||||
|
||||
int
|
||||
handler(Display *d, XErrorEvent *e)
|
||||
{
|
||||
handler(Display* d, XErrorEvent* e) {
|
||||
char msg[80], req[80], number[80];
|
||||
|
||||
if(initting && (e->request_code == X_ChangeWindowAttributes) && (e->error_code == BadAccess)){
|
||||
fprintf(stderr, "ryudo: it looks like there's already a window manager running; ryudo not started\n");
|
||||
if (
|
||||
initting && (e->request_code == X_ChangeWindowAttributes) &&
|
||||
(e->error_code == BadAccess)) {
|
||||
fprintf(
|
||||
stderr,
|
||||
"ryudo: it looks like there's already a window manager running; ryudo "
|
||||
"not started\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if(ignore_badwindow && (e->error_code == BadWindow || e->error_code == BadColor))
|
||||
if (
|
||||
ignore_badwindow &&
|
||||
(e->error_code == BadWindow || e->error_code == BadColor))
|
||||
return 0;
|
||||
|
||||
XGetErrorText(d, e->error_code, msg, sizeof(msg));
|
||||
sprintf(number, "%d", e->request_code);
|
||||
XGetErrorDatabaseText(d, "XRequest", number, "", req, sizeof(req));
|
||||
if(req[0] == '\0')
|
||||
sprintf(req, "<request-code-%d>", (int)e->request_code);
|
||||
if (req[0] == '\0') sprintf(req, "<request-code-%d>", (int)e->request_code);
|
||||
|
||||
fprintf(stderr, "ryudo: %s(0x%x): %s\n", req, (int)e->resourceid, msg);
|
||||
|
||||
|
@ -48,29 +52,17 @@ handler(Display *d, XErrorEvent *e)
|
|||
}
|
||||
|
||||
void
|
||||
graberror(char *f, int err)
|
||||
{
|
||||
graberror(char* f, int err) {
|
||||
#ifdef DEBUG /* sick of "bug" reports; grab errors "just happen" */
|
||||
char* s;
|
||||
|
||||
switch (err) {
|
||||
case GrabNotViewable:
|
||||
s = "not viewable";
|
||||
break;
|
||||
case AlreadyGrabbed:
|
||||
s = "already grabbed";
|
||||
break;
|
||||
case GrabFrozen:
|
||||
s = "grab frozen";
|
||||
break;
|
||||
case GrabInvalidTime:
|
||||
s = "invalid time";
|
||||
break;
|
||||
case GrabSuccess:
|
||||
return;
|
||||
default:
|
||||
fprintf(stderr, "ryudo: %s: grab error: %d\n", f, err);
|
||||
return;
|
||||
case GrabNotViewable: s = "not viewable"; break;
|
||||
case AlreadyGrabbed: s = "already grabbed"; break;
|
||||
case GrabFrozen: s = "grab frozen"; break;
|
||||
case GrabInvalidTime: s = "invalid time"; break;
|
||||
case GrabSuccess: return;
|
||||
default: fprintf(stderr, "ryudo: %s: grab error: %d\n", f, err); return;
|
||||
}
|
||||
fprintf(stderr, "ryudo: %s: grab error: %s\n", f, s);
|
||||
#endif
|
||||
|
@ -83,14 +75,20 @@ graberror(char *f, int err)
|
|||
#ifdef DEBUG
|
||||
|
||||
void
|
||||
dotrace(char *s, Client *c, XEvent *e)
|
||||
{
|
||||
if(debug == 0)
|
||||
return;
|
||||
dotrace(char* s, Client* c, XEvent* e) {
|
||||
if (debug == 0) return;
|
||||
setbuf(stdout, 0);
|
||||
fprintf(stderr, "ryudo: %s: c=%p", s, (void*)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);
|
||||
#ifdef DEBUG_EV
|
||||
if (e) {
|
||||
fprintf(stderr, "\n\t");
|
||||
|
|
286
event.c
Executable file → Normal file
286
event.c
Executable file → Normal file
|
@ -18,8 +18,7 @@
|
|||
#include "config.h"
|
||||
|
||||
void
|
||||
mainloop(int shape_event)
|
||||
{
|
||||
mainloop(int shape_event) {
|
||||
XEvent ev;
|
||||
|
||||
for (;;) {
|
||||
|
@ -39,44 +38,19 @@ mainloop(int shape_event)
|
|||
#endif
|
||||
fprintf(stderr, "ryudo: unknown ev.type %d\n", ev.type);
|
||||
break;
|
||||
case KeyPress:
|
||||
keypress(&ev.xkey);
|
||||
break;
|
||||
case KeyRelease:
|
||||
keyrelease(&ev.xkey);
|
||||
break;
|
||||
case ButtonPress:
|
||||
button(&ev.xbutton);
|
||||
break;
|
||||
case ButtonRelease:
|
||||
break;
|
||||
case MapRequest:
|
||||
mapreq(&ev.xmaprequest);
|
||||
break;
|
||||
case ConfigureRequest:
|
||||
configurereq(&ev.xconfigurerequest);
|
||||
break;
|
||||
case CirculateRequest:
|
||||
circulatereq(&ev.xcirculaterequest);
|
||||
break;
|
||||
case UnmapNotify:
|
||||
unmap(&ev.xunmap);
|
||||
break;
|
||||
case CreateNotify:
|
||||
newwindow(&ev.xcreatewindow);
|
||||
break;
|
||||
case DestroyNotify:
|
||||
destroy(ev.xdestroywindow.window);
|
||||
break;
|
||||
case ClientMessage:
|
||||
clientmesg(&ev.xclient);
|
||||
break;
|
||||
case ColormapNotify:
|
||||
cmap(&ev.xcolormap);
|
||||
break;
|
||||
case PropertyNotify:
|
||||
property(&ev.xproperty);
|
||||
break;
|
||||
case KeyPress: keypress(&ev.xkey); break;
|
||||
case KeyRelease: keyrelease(&ev.xkey); break;
|
||||
case ButtonPress: button(&ev.xbutton); break;
|
||||
case ButtonRelease: break;
|
||||
case MapRequest: mapreq(&ev.xmaprequest); break;
|
||||
case ConfigureRequest: configurereq(&ev.xconfigurerequest); break;
|
||||
case CirculateRequest: circulatereq(&ev.xcirculaterequest); break;
|
||||
case UnmapNotify: unmap(&ev.xunmap); break;
|
||||
case CreateNotify: newwindow(&ev.xcreatewindow); break;
|
||||
case DestroyNotify: destroy(ev.xdestroywindow.window); break;
|
||||
case ClientMessage: clientmesg(&ev.xclient); break;
|
||||
case ColormapNotify: cmap(&ev.xcolormap); break;
|
||||
case PropertyNotify: property(&ev.xproperty); break;
|
||||
case SelectionClear:
|
||||
fprintf(stderr, "ryudo: SelectionClear (this should not happen)\n");
|
||||
break;
|
||||
|
@ -86,21 +60,11 @@ mainloop(int shape_event)
|
|||
case SelectionRequest:
|
||||
fprintf(stderr, "ryudo: SelectionRequest (this should not happen)\n");
|
||||
break;
|
||||
case EnterNotify:
|
||||
enter(&ev.xcrossing);
|
||||
break;
|
||||
case LeaveNotify:
|
||||
leave(&ev.xcrossing);
|
||||
break;
|
||||
case ReparentNotify:
|
||||
reparent(&ev.xreparent);
|
||||
break;
|
||||
case FocusIn:
|
||||
focusin(&ev.xfocus);
|
||||
break;
|
||||
case MotionNotify:
|
||||
motionnotify(&ev.xmotion);
|
||||
break;
|
||||
case EnterNotify: enter(&ev.xcrossing); break;
|
||||
case LeaveNotify: leave(&ev.xcrossing); break;
|
||||
case ReparentNotify: reparent(&ev.xreparent); break;
|
||||
case FocusIn: focusin(&ev.xfocus); break;
|
||||
case MotionNotify: motionnotify(&ev.xmotion); break;
|
||||
case Expose:
|
||||
case NoExpose:
|
||||
case FocusOut:
|
||||
|
@ -115,10 +79,8 @@ mainloop(int shape_event)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
configurereq(XConfigureRequestEvent *e)
|
||||
{
|
||||
configurereq(XConfigureRequestEvent* e) {
|
||||
XWindowChanges wc;
|
||||
Client* c;
|
||||
|
||||
|
@ -129,16 +91,11 @@ configurereq(XConfigureRequestEvent *e)
|
|||
e->value_mask &= ~CWSibling;
|
||||
|
||||
if (c) {
|
||||
if(e->value_mask & CWX)
|
||||
c->x = e->x;
|
||||
if(e->value_mask & CWY)
|
||||
c->y = e->y;
|
||||
if(e->value_mask & CWWidth)
|
||||
c->dx = e->width;
|
||||
if(e->value_mask & CWHeight)
|
||||
c->dy = e->height;
|
||||
if(e->value_mask & CWBorderWidth)
|
||||
c->border = e->border_width;
|
||||
if (e->value_mask & CWX) c->x = e->x;
|
||||
if (e->value_mask & CWY) c->y = e->y;
|
||||
if (e->value_mask & CWWidth) c->dx = e->width;
|
||||
if (e->value_mask & CWHeight) c->dy = e->height;
|
||||
if (e->value_mask & CWBorderWidth) c->border = e->border_width;
|
||||
|
||||
if (c->dx >= c->screen->width && c->dy >= c->screen->height)
|
||||
c->border = 0;
|
||||
|
@ -188,8 +145,7 @@ configurereq(XConfigureRequestEvent *e)
|
|||
}
|
||||
|
||||
void
|
||||
mapreq(XMapRequestEvent *e)
|
||||
{
|
||||
mapreq(XMapRequestEvent* e) {
|
||||
Client* c;
|
||||
int i;
|
||||
|
||||
|
@ -199,10 +155,12 @@ mapreq(XMapRequestEvent *e)
|
|||
|
||||
if (c == 0 || c->window != e->window) {
|
||||
/* workaround for stupid NCDware */
|
||||
fprintf(stderr, "ryudo: bad mapreq c %p w %x, rescanning\n",
|
||||
(void*)c, (int)e->window);
|
||||
for(i = 0; i < num_screens; i++)
|
||||
scanwins(&screens[i]);
|
||||
fprintf(
|
||||
stderr,
|
||||
"ryudo: bad mapreq c %p w %x, rescanning\n",
|
||||
(void*)c,
|
||||
(int)e->window);
|
||||
for (i = 0; i < num_screens; i++) scanwins(&screens[i]);
|
||||
c = getclient(e->window, 0);
|
||||
if (c == 0 || c->window != e->window) {
|
||||
fprintf(stderr, "ryudo: window not found after rescan\n");
|
||||
|
@ -213,8 +171,7 @@ mapreq(XMapRequestEvent *e)
|
|||
switch (c->state) {
|
||||
case WithdrawnState:
|
||||
if (c->parent == c->screen->root) {
|
||||
if(!manage(c, 0))
|
||||
return;
|
||||
if (!manage(c, 0)) return;
|
||||
break;
|
||||
}
|
||||
XReparentWindow(dpy, c->window, c->parent, BORDER - 1, BORDER - 1);
|
||||
|
@ -225,18 +182,14 @@ mapreq(XMapRequestEvent *e)
|
|||
XMapRaised(dpy, c->parent);
|
||||
top(c);
|
||||
setstate(c, NormalState);
|
||||
if(c->trans != None && current && c->trans == current->window)
|
||||
active(c);
|
||||
break;
|
||||
case IconicState:
|
||||
unhidec(c, 1);
|
||||
if (c->trans != None && current && c->trans == current->window) active(c);
|
||||
break;
|
||||
case IconicState: unhidec(c, 1); break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
unmap(XUnmapEvent *e)
|
||||
{
|
||||
unmap(XUnmapEvent* e) {
|
||||
Client* c;
|
||||
|
||||
curtime = CurrentTime;
|
||||
|
@ -250,10 +203,8 @@ unmap(XUnmapEvent *e)
|
|||
}
|
||||
break;
|
||||
case NormalState:
|
||||
if(c == current)
|
||||
nofocus();
|
||||
if(!c->reparenting)
|
||||
withdraw(c);
|
||||
if (c == current) nofocus();
|
||||
if (!c->reparenting) withdraw(c);
|
||||
break;
|
||||
}
|
||||
c->reparenting = 0;
|
||||
|
@ -261,23 +212,19 @@ unmap(XUnmapEvent *e)
|
|||
}
|
||||
|
||||
void
|
||||
circulatereq(XCirculateRequestEvent *e)
|
||||
{
|
||||
circulatereq(XCirculateRequestEvent* e) {
|
||||
fprintf(stderr, "It must be the warlock Krill!\n"); /* ☺ */
|
||||
}
|
||||
|
||||
void
|
||||
newwindow(XCreateWindowEvent *e)
|
||||
{
|
||||
newwindow(XCreateWindowEvent* e) {
|
||||
Client* c;
|
||||
ScreenInfo* s;
|
||||
static XWindowAttributes ra;
|
||||
XGetWindowAttributes(dpy, DefaultRootWindow(dpy), &ra);
|
||||
|
||||
|
||||
/* we don't set curtime as nothing here uses it */
|
||||
if(e->override_redirect)
|
||||
return;
|
||||
if (e->override_redirect) return;
|
||||
c = getclient(e->window, 1);
|
||||
if (c && c->window == e->window && (s = getscreen(e->parent))) {
|
||||
c->x = e->x;
|
||||
|
@ -286,32 +233,28 @@ newwindow(XCreateWindowEvent *e)
|
|||
c->dy = e->height;
|
||||
c->border = e->border_width;
|
||||
c->screen = s;
|
||||
if(c->parent == None)
|
||||
c->parent = c->screen->root;
|
||||
if (c->parent == None) c->parent = c->screen->root;
|
||||
}
|
||||
if (kbLaunch)
|
||||
{
|
||||
if (kbLaunch) {
|
||||
usleep(100000);
|
||||
quickreshape(c, ra.width/6, GAPSZ, 2*ra.width/3, ra.height - 2*GAPSZ);
|
||||
quickreshape(
|
||||
c, ra.width / 6, GAPSZ, 2 * ra.width / 3, ra.height - 2 * GAPSZ);
|
||||
kbLaunch = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
destroy(Window w)
|
||||
{
|
||||
destroy(Window w) {
|
||||
int i;
|
||||
Client* c;
|
||||
|
||||
curtime = CurrentTime;
|
||||
c = getclient(w, 0);
|
||||
if(c == 0)
|
||||
return;
|
||||
if (c == 0) return;
|
||||
|
||||
if (numvirtuals > 1)
|
||||
for (i = 0; i < numvirtuals; i++)
|
||||
if(currents[i] == c)
|
||||
currents[i] = 0;
|
||||
if (currents[i] == c) currents[i] = 0;
|
||||
|
||||
rmclient(c);
|
||||
|
||||
|
@ -322,8 +265,7 @@ destroy(Window w)
|
|||
}
|
||||
|
||||
void
|
||||
clientmesg(XClientMessageEvent *e)
|
||||
{
|
||||
clientmesg(XClientMessageEvent* e) {
|
||||
Client* c;
|
||||
|
||||
curtime = CurrentTime;
|
||||
|
@ -338,35 +280,42 @@ clientmesg(XClientMessageEvent *e)
|
|||
perror("ryudo: exec failed");
|
||||
exit(1);
|
||||
}
|
||||
if(e->message_type == wm_protocols)
|
||||
return;
|
||||
if (e->message_type == wm_protocols) return;
|
||||
if (e->message_type == wm_change_state) {
|
||||
c = getclient(e->window, 0);
|
||||
if (e->format == 32 && e->data.l[0] == IconicState && c != 0) {
|
||||
if(normal(c))
|
||||
hide(c);
|
||||
}
|
||||
else
|
||||
fprintf(stderr, "ryudo: WM_CHANGE_STATE: format %d data %d w 0x%x\n",
|
||||
(int)e->format, (int)e->data.l[0], (int)e->window);
|
||||
if (normal(c)) hide(c);
|
||||
} else
|
||||
fprintf(
|
||||
stderr,
|
||||
"ryudo: WM_CHANGE_STATE: format %d data %d w 0x%x\n",
|
||||
(int)e->format,
|
||||
(int)e->data.l[0],
|
||||
(int)e->window);
|
||||
return;
|
||||
}
|
||||
if (e->message_type == wm_state) {
|
||||
// c = getclient(e->window, 0);
|
||||
// if(e->format == 32 && e->data.l[1] == wm_state_fullscreen){
|
||||
// }else
|
||||
fprintf(stderr, "ryudo: WM_STATE: format %d data %d %d w 0x%x\n",
|
||||
(int)e->format, (int)e->data.l[0], (int)e->data.l[1],
|
||||
fprintf(
|
||||
stderr,
|
||||
"ryudo: WM_STATE: format %d data %d %d w 0x%x\n",
|
||||
(int)e->format,
|
||||
(int)e->data.l[0],
|
||||
(int)e->data.l[1],
|
||||
(int)e->window);
|
||||
return;
|
||||
}
|
||||
fprintf(stderr, "ryudo: strange ClientMessage, type 0x%x window 0x%x\n",
|
||||
(int)e->message_type, (int)e->window);
|
||||
fprintf(
|
||||
stderr,
|
||||
"ryudo: strange ClientMessage, type 0x%x window 0x%x\n",
|
||||
(int)e->message_type,
|
||||
(int)e->window);
|
||||
}
|
||||
|
||||
void
|
||||
cmap(XColormapEvent *e)
|
||||
{
|
||||
cmap(XColormapEvent* e) {
|
||||
Client* c;
|
||||
int i;
|
||||
|
||||
|
@ -375,16 +324,13 @@ cmap(XColormapEvent *e)
|
|||
c = getclient(e->window, 0);
|
||||
if (c) {
|
||||
c->cmap = e->colormap;
|
||||
if(c == current)
|
||||
cmapfocus(c);
|
||||
}
|
||||
else
|
||||
if (c == current) cmapfocus(c);
|
||||
} else
|
||||
for (c = clients; c; c = c->next) {
|
||||
for (i = 0; i < c->ncmapwins; i++)
|
||||
if (c->cmapwins[i] == e->window) {
|
||||
c->wmcmaps[i] = e->colormap;
|
||||
if(c == current)
|
||||
cmapfocus(c);
|
||||
if (c == current) cmapfocus(c);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -392,8 +338,7 @@ cmap(XColormapEvent *e)
|
|||
}
|
||||
|
||||
void
|
||||
property(XPropertyEvent *e)
|
||||
{
|
||||
property(XPropertyEvent* e) {
|
||||
Atom a;
|
||||
int delete;
|
||||
Client* c;
|
||||
|
@ -403,59 +348,51 @@ property(XPropertyEvent *e)
|
|||
a = e->atom;
|
||||
delete = (e->state == PropertyDelete);
|
||||
c = getclient(e->window, 0);
|
||||
if(c == 0)
|
||||
return;
|
||||
if (c == 0) return;
|
||||
|
||||
switch (a) {
|
||||
case XA_WM_ICON_NAME:
|
||||
if(c->iconname != 0)
|
||||
XFree((char*) c->iconname);
|
||||
if (c->iconname != 0) XFree((char*)c->iconname);
|
||||
c->iconname = delete ? 0 : getprop(c->window, a);
|
||||
setlabel(c);
|
||||
renamec(c, c->label);
|
||||
return;
|
||||
case XA_WM_NAME:
|
||||
if(c->name != 0)
|
||||
XFree((char*) c->name);
|
||||
if (c->name != 0) XFree((char*)c->name);
|
||||
c->name = delete ? 0 : getprop(c->window, a);
|
||||
setlabel(c);
|
||||
renamec(c, c->label);
|
||||
return;
|
||||
case XA_WM_TRANSIENT_FOR:
|
||||
gettrans(c);
|
||||
return;
|
||||
case XA_WM_TRANSIENT_FOR: gettrans(c); return;
|
||||
case XA_WM_HINTS:
|
||||
case XA_WM_SIZE_HINTS:
|
||||
case XA_WM_ZOOM_HINTS:
|
||||
/* placeholders to not forget. ignore for now. -Axel */
|
||||
return;
|
||||
case XA_WM_NORMAL_HINTS:
|
||||
if(XGetWMNormalHints(dpy, c->window, &c->size, &msize) == 0 || c->size.flags == 0)
|
||||
if (
|
||||
XGetWMNormalHints(dpy, c->window, &c->size, &msize) == 0 ||
|
||||
c->size.flags == 0)
|
||||
c->size.flags = PSize; /* not specified - punt */
|
||||
return;
|
||||
}
|
||||
if (a == _rio_hold_mode) {
|
||||
c->hold = getiprop(c->window, _rio_hold_mode);
|
||||
if(c == current)
|
||||
draw_border(c, 1);
|
||||
}
|
||||
else if(a == wm_colormaps){
|
||||
if (c == current) draw_border(c, 1);
|
||||
} else if (a == wm_colormaps) {
|
||||
getcmaps(c);
|
||||
if(c == current)
|
||||
cmapfocus(c);
|
||||
if (c == current) cmapfocus(c);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
reparent(XReparentEvent *e)
|
||||
{
|
||||
reparent(XReparentEvent* e) {
|
||||
Client* c;
|
||||
XWindowAttributes attr;
|
||||
ScreenInfo* s;
|
||||
|
||||
/* we don't set curtime as nothing here uses it */
|
||||
if(!getscreen(e->event) || e->override_redirect)
|
||||
return;
|
||||
if (!getscreen(e->event) || e->override_redirect) return;
|
||||
if ((s = getscreen(e->parent)) != 0) {
|
||||
c = getclient(e->window, 1);
|
||||
if (c != 0 && (c->dx == 0 || c->dy == 0)) {
|
||||
|
@ -471,70 +408,58 @@ reparent(XReparentEvent *e)
|
|||
c->dy = attr.height;
|
||||
c->border = attr.border_width;
|
||||
c->screen = s;
|
||||
if(c->parent == None)
|
||||
c->parent = c->screen->root;
|
||||
if (c->parent == None) c->parent = c->screen->root;
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
c = getclient(e->window, 0);
|
||||
if(c != 0 && (c->parent == c->screen->root || withdrawn(c)))
|
||||
rmclient(c);
|
||||
if (c != 0 && (c->parent == c->screen->root || withdrawn(c))) rmclient(c);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SHAPE
|
||||
void
|
||||
shapenotify(XShapeEvent *e)
|
||||
{
|
||||
shapenotify(XShapeEvent* e) {
|
||||
Client* c;
|
||||
|
||||
/* we don't set curtime as nothing here uses it */
|
||||
c = getclient(e->window, 0);
|
||||
if(c == 0)
|
||||
return;
|
||||
if (c == 0) return;
|
||||
|
||||
setshape(c);
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
enter(XCrossingEvent *e)
|
||||
{
|
||||
enter(XCrossingEvent* e) {
|
||||
Client* c;
|
||||
|
||||
curtime = e->time;
|
||||
if (!ffm)
|
||||
if(e->mode != NotifyGrab || e->detail != NotifyNonlinearVirtual)
|
||||
return;
|
||||
if (e->mode != NotifyGrab || e->detail != NotifyNonlinearVirtual) return;
|
||||
c = getclient(e->window, 0);
|
||||
if (c != 0 && c != current) {
|
||||
/* someone grabbed the pointer; make them current */
|
||||
if(!ffm)
|
||||
XMapRaised(dpy, c->parent);
|
||||
if (!ffm) XMapRaised(dpy, c->parent);
|
||||
top(c);
|
||||
active(c);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
leave(XCrossingEvent *e)
|
||||
{
|
||||
leave(XCrossingEvent* e) {
|
||||
Client* c;
|
||||
|
||||
c = getclient(e->window, 0);
|
||||
if(c)
|
||||
XUndefineCursor(dpy, c->parent);
|
||||
if (c) XUndefineCursor(dpy, c->parent);
|
||||
/* XDefineCursor(dpy, c->parent, c->screen->arrow); */
|
||||
}
|
||||
|
||||
void
|
||||
focusin(XFocusChangeEvent *e)
|
||||
{
|
||||
focusin(XFocusChangeEvent* e) {
|
||||
Client* c;
|
||||
|
||||
curtime = CurrentTime;
|
||||
if(e->detail != NotifyNonlinearVirtual)
|
||||
return;
|
||||
if (e->detail != NotifyNonlinearVirtual) return;
|
||||
c = getclient(e->window, 0);
|
||||
if (c != 0 && c->window == e->window && c != current) {
|
||||
#ifdef AUTOSTICK
|
||||
|
@ -551,8 +476,7 @@ focusin(XFocusChangeEvent *e)
|
|||
}
|
||||
|
||||
BorderOrient
|
||||
borderorient(Client *c, int x, int y)
|
||||
{
|
||||
borderorient(Client* c, int x, int y) {
|
||||
if (x <= BORDER) {
|
||||
if (y <= CORNER) {
|
||||
if (debug) fprintf(stderr, "topleft\n");
|
||||
|
@ -562,8 +486,7 @@ borderorient(Client *c, int x, int y)
|
|||
if (debug) fprintf(stderr, "botleft\n");
|
||||
return BorderWSW;
|
||||
}
|
||||
if(y > CORNER &&
|
||||
y < (c->dy + 2*BORDER) - CORNER){
|
||||
if (y > CORNER && y < (c->dy + 2 * BORDER) - CORNER) {
|
||||
if (debug) fprintf(stderr, "left\n");
|
||||
return BorderW;
|
||||
}
|
||||
|
@ -585,8 +508,7 @@ borderorient(Client *c, int x, int y)
|
|||
if (debug) fprintf(stderr, "botright\n");
|
||||
return BorderESE;
|
||||
}
|
||||
if(y > CORNER &&
|
||||
y < (c->dy + 2*BORDER) - CORNER){
|
||||
if (y > CORNER && y < (c->dy + 2 * BORDER) - CORNER) {
|
||||
if (debug) fprintf(stderr, "right\n");
|
||||
return BorderE;
|
||||
}
|
||||
|
@ -599,8 +521,7 @@ borderorient(Client *c, int x, int y)
|
|||
if (debug) fprintf(stderr, "botright\n");
|
||||
return BorderSSE;
|
||||
}
|
||||
} else if(x > CORNER &&
|
||||
x < (c->dx + 2*BORDER) - CORNER){
|
||||
} else if (x > CORNER && x < (c->dx + 2 * BORDER) - CORNER) {
|
||||
if (y <= BORDER) {
|
||||
if (debug) fprintf(stderr, "top\n");
|
||||
return BorderN;
|
||||
|
@ -614,8 +535,7 @@ borderorient(Client *c, int x, int y)
|
|||
}
|
||||
|
||||
void
|
||||
motionnotify(XMotionEvent *e)
|
||||
{
|
||||
motionnotify(XMotionEvent* e) {
|
||||
Client* c;
|
||||
BorderOrient bl;
|
||||
|
||||
|
|
5
fns.h
Executable file → Normal file
5
fns.h
Executable file → Normal file
|
@ -8,9 +8,9 @@
|
|||
|
||||
#define setstate setstaterio
|
||||
|
||||
|
||||
/* color.c */
|
||||
unsigned long colorpixel(Display*, ScreenInfo*, int, unsigned long, unsigned long);
|
||||
unsigned long
|
||||
colorpixel(Display*, ScreenInfo*, int, unsigned long, unsigned long);
|
||||
|
||||
/* main.c */
|
||||
void usage();
|
||||
|
@ -85,7 +85,6 @@ void switch_to();
|
|||
void switch_to_c();
|
||||
void stick();
|
||||
|
||||
|
||||
/* client.c */
|
||||
void setactive();
|
||||
void draw_border();
|
||||
|
|
246
grab.c
Executable file → Normal file
246
grab.c
Executable file → Normal file
|
@ -17,56 +17,64 @@ nobuttons(XButtonEvent *e) /* Einstuerzende */
|
|||
}
|
||||
|
||||
int
|
||||
grab(Window w, Window constrain, int mask, Cursor curs, int t)
|
||||
{
|
||||
grab(Window w, Window constrain, int mask, Cursor curs, int t) {
|
||||
int status;
|
||||
|
||||
if(t == 0)
|
||||
t = timestamp();
|
||||
status = XGrabPointer(dpy, w, False, mask,
|
||||
GrabModeAsync, GrabModeAsync, constrain, curs, t);
|
||||
if (t == 0) t = timestamp();
|
||||
status = XGrabPointer(
|
||||
dpy, w, False, mask, GrabModeAsync, GrabModeAsync, constrain, curs, t);
|
||||
return status;
|
||||
}
|
||||
|
||||
void
|
||||
ungrab(XButtonEvent *e)
|
||||
{
|
||||
ungrab(XButtonEvent* e) {
|
||||
XEvent ev;
|
||||
|
||||
if (!nobuttons(e))
|
||||
for (;;) {
|
||||
XMaskEvent(dpy, ButtonMask | ButtonMotionMask, &ev);
|
||||
if(ev.type == MotionNotify)
|
||||
continue;
|
||||
if (ev.type == MotionNotify) continue;
|
||||
e = &ev.xbutton;
|
||||
if(nobuttons(e))
|
||||
break;
|
||||
if (nobuttons(e)) break;
|
||||
}
|
||||
XUngrabPointer(dpy, e->time);
|
||||
curtime = e->time;
|
||||
}
|
||||
|
||||
static void
|
||||
drawstring(Display *dpy, ScreenInfo *s, Menu *m, int wide, int high, int i, int selected)
|
||||
{
|
||||
drawstring(
|
||||
Display* dpy, ScreenInfo* s, Menu* m, int wide, int high, int i,
|
||||
int selected) {
|
||||
int tx, ty;
|
||||
|
||||
tx = (wide - XTextWidth(font, m->item[i], strlen(m->item[i]))) / 2;
|
||||
ty = i * high + font->ascent + 1;
|
||||
XFillRectangle(dpy, s->menuwin, selected ? s->gcmenubgs : s->gcmenubg, 0, i*high, wide, high);
|
||||
XDrawString(dpy, s->menuwin, selected ? s->gcmenufgs : s->gcmenufg, tx, ty, m->item[i], strlen(m->item[i]));
|
||||
XFillRectangle(
|
||||
dpy,
|
||||
s->menuwin,
|
||||
selected ? s->gcmenubgs : s->gcmenubg,
|
||||
0,
|
||||
i * high,
|
||||
wide,
|
||||
high);
|
||||
XDrawString(
|
||||
dpy,
|
||||
s->menuwin,
|
||||
selected ? s->gcmenufgs : s->gcmenufg,
|
||||
tx,
|
||||
ty,
|
||||
m->item[i],
|
||||
strlen(m->item[i]));
|
||||
}
|
||||
|
||||
int
|
||||
menuhit(XButtonEvent *e, Menu *m)
|
||||
{
|
||||
menuhit(XButtonEvent* e, Menu* m) {
|
||||
XEvent ev;
|
||||
int i, n, cur, old, wide, high, status, drawn, warp;
|
||||
int x, y, dx, dy, xmax, ymax;
|
||||
ScreenInfo* s;
|
||||
|
||||
if(font == 0)
|
||||
return -1;
|
||||
if (font == 0) return -1;
|
||||
s = getscreen(e->root);
|
||||
if (s == 0 || e->window == s->menuwin) /* ugly event mangling */
|
||||
return -1;
|
||||
|
@ -74,13 +82,11 @@ menuhit(XButtonEvent *e, Menu *m)
|
|||
dx = 0;
|
||||
for (n = 0; m->item[n]; n++) {
|
||||
wide = XTextWidth(font, m->item[n], strlen(m->item[n])) + 4;
|
||||
if(wide > dx)
|
||||
dx = wide;
|
||||
if (wide > dx) dx = wide;
|
||||
}
|
||||
wide = dx;
|
||||
cur = m->lasthit;
|
||||
if(cur >= n)
|
||||
cur = n - 1;
|
||||
if (cur >= n) cur = n - 1;
|
||||
|
||||
high = font->ascent + font->descent + 1;
|
||||
dy = n * high;
|
||||
|
@ -109,8 +115,7 @@ menuhit(XButtonEvent *e, Menu *m)
|
|||
y = ymax - dy;
|
||||
warp++;
|
||||
}
|
||||
if(warp)
|
||||
setmouse(e->x, e->y, s);
|
||||
if (warp) setmouse(e->x, e->y, s);
|
||||
XMoveResizeWindow(dpy, s->menuwin, x, y, dx, dy);
|
||||
XSelectInput(dpy, s->menuwin, MenuMask);
|
||||
XMapRaised(dpy, s->menuwin);
|
||||
|
@ -127,11 +132,9 @@ menuhit(XButtonEvent *e, Menu *m)
|
|||
default:
|
||||
fprintf(stderr, "ryudo: menuhit: unknown ev.type %d\n", ev.type);
|
||||
break;
|
||||
case ButtonPress:
|
||||
break;
|
||||
case ButtonPress: break;
|
||||
case ButtonRelease:
|
||||
if(ev.xbutton.button != e->button)
|
||||
break;
|
||||
if (ev.xbutton.button != e->button) break;
|
||||
x = ev.xbutton.x;
|
||||
y = ev.xbutton.y;
|
||||
i = y / high;
|
||||
|
@ -143,14 +146,12 @@ menuhit(XButtonEvent *e, Menu *m)
|
|||
i = -1;
|
||||
else
|
||||
m->lasthit = i;
|
||||
if(!nobuttons(&ev.xbutton))
|
||||
i = -1;
|
||||
if (!nobuttons(&ev.xbutton)) i = -1;
|
||||
ungrab(&ev.xbutton);
|
||||
XUnmapWindow(dpy, s->menuwin);
|
||||
return i;
|
||||
case MotionNotify:
|
||||
if(!drawn)
|
||||
break;
|
||||
if (!drawn) break;
|
||||
x = ev.xbutton.x;
|
||||
y = ev.xbutton.y;
|
||||
old = cur;
|
||||
|
@ -161,25 +162,20 @@ menuhit(XButtonEvent *e, Menu *m)
|
|||
cur = -1;
|
||||
else if (cur < 0 || cur >= n)
|
||||
cur = -1;
|
||||
if(cur == old)
|
||||
break;
|
||||
if(old >= 0 && old < n)
|
||||
drawstring(dpy, s, m, wide, high, old, 0);
|
||||
if(cur >= 0 && cur < n)
|
||||
drawstring(dpy, s, m, wide, high, cur, 1);
|
||||
if (cur == old) break;
|
||||
if (old >= 0 && old < n) drawstring(dpy, s, m, wide, high, old, 0);
|
||||
if (cur >= 0 && cur < n) drawstring(dpy, s, m, wide, high, cur, 1);
|
||||
break;
|
||||
case Expose:
|
||||
XClearWindow(dpy, s->menuwin);
|
||||
for(i = 0; i < n; i++)
|
||||
drawstring(dpy, s, m, wide, high, i, cur==i);
|
||||
for (i = 0; i < n; i++) drawstring(dpy, s, m, wide, high, i, cur == i);
|
||||
drawn = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Client*
|
||||
selectwin(int release, int *shift, ScreenInfo *s)
|
||||
{
|
||||
selectwin(int release, int* shift, ScreenInfo* s) {
|
||||
XEvent ev;
|
||||
XButtonEvent* e;
|
||||
int status;
|
||||
|
@ -204,27 +200,22 @@ selectwin(int release, int *shift, ScreenInfo *s)
|
|||
w = e->subwindow;
|
||||
if (!release) {
|
||||
c = getclient(w, 0);
|
||||
if(c == 0)
|
||||
ungrab(e);
|
||||
if(shift != 0)
|
||||
*shift = (e->state&ShiftMask) != 0;
|
||||
if (c == 0) ungrab(e);
|
||||
if (shift != 0) *shift = (e->state & ShiftMask) != 0;
|
||||
return c;
|
||||
}
|
||||
break;
|
||||
case ButtonRelease:
|
||||
ungrab(e);
|
||||
if(e->button != Button3 || e->subwindow != w)
|
||||
return 0;
|
||||
if(shift != 0)
|
||||
*shift = (e->state&ShiftMask) != 0;
|
||||
if (e->button != Button3 || e->subwindow != w) return 0;
|
||||
if (shift != 0) *shift = (e->state & ShiftMask) != 0;
|
||||
return getclient(w, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
sweepcalc(Client *c, int x, int y, BorderOrient bl, int ignored)
|
||||
{
|
||||
sweepcalc(Client* c, int x, int y, BorderOrient bl, int ignored) {
|
||||
int dx, dy, sx, sy;
|
||||
|
||||
dx = x - c->x;
|
||||
|
@ -245,10 +236,8 @@ sweepcalc(Client *c, int x, int y, BorderOrient bl, int ignored)
|
|||
dy -= 2 * BORDER;
|
||||
|
||||
if (!c->is9term) {
|
||||
if(dx < c->min_dx)
|
||||
dx = c->min_dx;
|
||||
if(dy < c->min_dy)
|
||||
dy = c->min_dy;
|
||||
if (dx < c->min_dx) dx = c->min_dx;
|
||||
if (dy < c->min_dy) dy = c->min_dy;
|
||||
}
|
||||
|
||||
if (c->size.flags & PResizeInc) {
|
||||
|
@ -257,10 +246,8 @@ sweepcalc(Client *c, int x, int y, BorderOrient bl, int ignored)
|
|||
}
|
||||
|
||||
if (c->size.flags & PMaxSize) {
|
||||
if(dx > c->size.max_width)
|
||||
dx = c->size.max_width;
|
||||
if(dy > c->size.max_height)
|
||||
dy = c->size.max_height;
|
||||
if (dx > c->size.max_width) dx = c->size.max_width;
|
||||
if (dy > c->size.max_height) dy = c->size.max_height;
|
||||
}
|
||||
c->dx = sx * (dx + 2 * BORDER);
|
||||
c->dy = sy * (dy + 2 * BORDER);
|
||||
|
@ -269,8 +256,7 @@ sweepcalc(Client *c, int x, int y, BorderOrient bl, int ignored)
|
|||
}
|
||||
|
||||
int
|
||||
dragcalc(Client *c, int x, int y, BorderOrient bl, int ignored)
|
||||
{
|
||||
dragcalc(Client* c, int x, int y, BorderOrient bl, int ignored) {
|
||||
c->x += x;
|
||||
c->y += y;
|
||||
|
||||
|
@ -278,8 +264,7 @@ dragcalc(Client *c, int x, int y, BorderOrient bl, int ignored)
|
|||
}
|
||||
|
||||
int
|
||||
pullcalc(Client *c, int x, int y, BorderOrient bl, int init)
|
||||
{
|
||||
pullcalc(Client* c, int x, int y, BorderOrient bl, int init) {
|
||||
int dx, dy, sx, sy, px, py, spx, spy, rdx, rdy, xoff, yoff, xcorn, ycorn;
|
||||
|
||||
px = c->x;
|
||||
|
@ -348,33 +333,44 @@ pullcalc(Client *c, int x, int y, BorderOrient bl, int init)
|
|||
xoff = x - c->x;
|
||||
yoff = (c->y + c->dy) - y;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
switch (bl) {
|
||||
case BorderNNW:
|
||||
case BorderNNE:
|
||||
case BorderSSW:
|
||||
case BorderSSE:
|
||||
xcorn = 1;
|
||||
break;
|
||||
case BorderSSE: xcorn = 1; break;
|
||||
case BorderWNW:
|
||||
case BorderENE:
|
||||
case BorderWSW:
|
||||
case BorderESE:
|
||||
ycorn = 1;
|
||||
break;
|
||||
case BorderESE: ycorn = 1; break;
|
||||
}
|
||||
if(!init
|
||||
|| xoff < 0 || (xcorn && xoff > CORNER) || (!xcorn && xoff > BORDER)
|
||||
|| yoff < 0 || (ycorn && yoff > CORNER) || (!ycorn && yoff > BORDER)){
|
||||
if (
|
||||
!init || xoff < 0 || (xcorn && xoff > CORNER) ||
|
||||
(!xcorn && xoff > BORDER) || yoff < 0 || (ycorn && yoff > CORNER) ||
|
||||
(!ycorn && yoff > BORDER)) {
|
||||
xoff = 0;
|
||||
yoff = 0;
|
||||
init = 0;
|
||||
}
|
||||
|
||||
if(debug) fprintf(stderr, "c %dx%d+%d+%d m +%d+%d r %dx%d+%d+%d sp (%d,%d) bl %d\n",
|
||||
c->dx, c->dy, c->x, c->y, x, y, dx, dy, px, py, spx, spy, bl);
|
||||
if (debug)
|
||||
fprintf(
|
||||
stderr,
|
||||
"c %dx%d+%d+%d m +%d+%d r %dx%d+%d+%d sp (%d,%d) bl %d\n",
|
||||
c->dx,
|
||||
c->dy,
|
||||
c->x,
|
||||
c->y,
|
||||
x,
|
||||
y,
|
||||
dx,
|
||||
dy,
|
||||
px,
|
||||
py,
|
||||
spx,
|
||||
spy,
|
||||
bl);
|
||||
if (dx < 0) {
|
||||
dx = -dx;
|
||||
sx = -1;
|
||||
|
@ -395,10 +391,8 @@ pullcalc(Client *c, int x, int y, BorderOrient bl, int init)
|
|||
dy -= (2 * BORDER - yoff);
|
||||
|
||||
if (!c->is9term) {
|
||||
if(dx < c->min_dx)
|
||||
dx = c->min_dx;
|
||||
if(dy < c->min_dy)
|
||||
dy = c->min_dy;
|
||||
if (dx < c->min_dx) dx = c->min_dx;
|
||||
if (dy < c->min_dy) dy = c->min_dy;
|
||||
}
|
||||
|
||||
if (c->size.flags & PResizeInc) {
|
||||
|
@ -407,10 +401,8 @@ pullcalc(Client *c, int x, int y, BorderOrient bl, int init)
|
|||
}
|
||||
|
||||
if (c->size.flags & PMaxSize) {
|
||||
if(dx > c->size.max_width)
|
||||
dx = c->size.max_width;
|
||||
if(dy > c->size.max_height)
|
||||
dy = c->size.max_height;
|
||||
if (dx > c->size.max_width) dx = c->size.max_width;
|
||||
if (dy > c->size.max_height) dy = c->size.max_height;
|
||||
}
|
||||
|
||||
/* set size and position */
|
||||
|
@ -420,17 +412,16 @@ pullcalc(Client *c, int x, int y, BorderOrient bl, int init)
|
|||
c->y = py;
|
||||
|
||||
/* compensate position for size changed due to size hints */
|
||||
if(spx)
|
||||
c->x -= c->dx - rdx;
|
||||
if(spy)
|
||||
c->y -= c->dy - rdy;
|
||||
if (spx) c->x -= c->dx - rdx;
|
||||
if (spy) c->y -= c->dy - rdy;
|
||||
|
||||
return init;
|
||||
}
|
||||
|
||||
static void
|
||||
xcopy(int fwd, Display *dpy, Drawable src, Drawable dst, GC gc, int x, int y, int dx, int dy, int x1, int y1)
|
||||
{
|
||||
xcopy(
|
||||
int fwd, Display* dpy, Drawable src, Drawable dst, GC gc, int x, int y,
|
||||
int dx, int dy, int x1, int y1) {
|
||||
if (fwd)
|
||||
XCopyArea(dpy, src, dst, gc, x, y, dx, dy, x1, y1);
|
||||
else
|
||||
|
@ -438,12 +429,13 @@ xcopy(int fwd, Display *dpy, Drawable src, Drawable dst, GC gc, int x, int y, in
|
|||
}
|
||||
|
||||
void
|
||||
drawbound(Client *c, int drawing)
|
||||
{
|
||||
drawbound(Client* c, int drawing) {
|
||||
int x, y, dx, dy;
|
||||
ScreenInfo* s;
|
||||
|
||||
if(debug) fprintf(stderr, "drawbound %d %dx%d+%d+%d\n", drawing, c->dx, c->dy, c->x, c->y);
|
||||
if (debug)
|
||||
fprintf(
|
||||
stderr, "drawbound %d %dx%d+%d+%d\n", drawing, c->dx, c->dy, c->x, c->y);
|
||||
|
||||
s = c->screen;
|
||||
x = c->x;
|
||||
|
@ -458,8 +450,7 @@ drawbound(Client *c, int drawing)
|
|||
y += dy;
|
||||
dy = -dy;
|
||||
}
|
||||
if(dx <= 2 || dy <= 2)
|
||||
return;
|
||||
if (dx <= 2 || dy <= 2) return;
|
||||
|
||||
if (solidsweep) {
|
||||
if (drawing == -1) {
|
||||
|
@ -480,13 +471,34 @@ drawbound(Client *c, int drawing)
|
|||
return;
|
||||
}
|
||||
|
||||
if(drawing == -1)
|
||||
return;
|
||||
if (drawing == -1) return;
|
||||
|
||||
xcopy(drawing, dpy, s->root, s->bkup[0], s->gccopy, x, y, dx, BORDER, 0, 0);
|
||||
xcopy(drawing, dpy, s->root, s->bkup[0], s->gccopy, x, y+dy-BORDER, dx, BORDER, dx, 0);
|
||||
xcopy(
|
||||
drawing,
|
||||
dpy,
|
||||
s->root,
|
||||
s->bkup[0],
|
||||
s->gccopy,
|
||||
x,
|
||||
y + dy - BORDER,
|
||||
dx,
|
||||
BORDER,
|
||||
dx,
|
||||
0);
|
||||
xcopy(drawing, dpy, s->root, s->bkup[1], s->gccopy, x, y, BORDER, dy, 0, 0);
|
||||
xcopy(drawing, dpy, s->root, s->bkup[1], s->gccopy, x+dx-BORDER, y, BORDER, dy, 0, dy);
|
||||
xcopy(
|
||||
drawing,
|
||||
dpy,
|
||||
s->root,
|
||||
s->bkup[1],
|
||||
s->gccopy,
|
||||
x + dx - BORDER,
|
||||
y,
|
||||
BORDER,
|
||||
dy,
|
||||
0,
|
||||
dy);
|
||||
|
||||
if (drawing) {
|
||||
XFillRectangle(dpy, s->root, s->gcred, x, y, dx, BORDER);
|
||||
|
@ -497,8 +509,7 @@ drawbound(Client *c, int drawing)
|
|||
}
|
||||
|
||||
void
|
||||
misleep(int msec)
|
||||
{
|
||||
misleep(int msec) {
|
||||
struct timeval t;
|
||||
|
||||
t.tv_sec = msec / 1000;
|
||||
|
@ -507,8 +518,9 @@ misleep(int msec)
|
|||
}
|
||||
|
||||
int
|
||||
sweepdrag(Client *c, int but, XButtonEvent *e0, BorderOrient bl, int (*recalc)(Client*, int, int, BorderOrient, int))
|
||||
{
|
||||
sweepdrag(
|
||||
Client* c, int but, XButtonEvent* e0, BorderOrient bl,
|
||||
int (*recalc)(Client*, int, int, BorderOrient, int)) {
|
||||
XEvent ev;
|
||||
int idle;
|
||||
int cx, cy, rx, ry;
|
||||
|
@ -530,9 +542,7 @@ sweepdrag(Client *c, int but, XButtonEvent *e0, BorderOrient bl, int (*recalc)(C
|
|||
else
|
||||
getmouse(&c->x, &c->y, c->screen);
|
||||
XGrabServer(dpy);
|
||||
if(bl != BorderUnknown){
|
||||
notmoved = recalc(c, cx, cy, bl, notmoved);
|
||||
}
|
||||
if (bl != BorderUnknown) { notmoved = recalc(c, cx, cy, bl, notmoved); }
|
||||
drawbound(c, 1);
|
||||
idle = 0;
|
||||
for (;;) {
|
||||
|
@ -566,8 +576,7 @@ sweepdrag(Client *c, int but, XButtonEvent *e0, BorderOrient bl, int (*recalc)(C
|
|||
drawbound(c, 0);
|
||||
ungrab(e);
|
||||
XUngrabServer(dpy);
|
||||
if(e->button != but && c->init)
|
||||
goto bad;
|
||||
if (e->button != but && c->init) goto bad;
|
||||
if (c->dx < 0) {
|
||||
c->x += c->dx;
|
||||
c->dx = -c->dx;
|
||||
|
@ -596,8 +605,7 @@ bad:
|
|||
}
|
||||
|
||||
int
|
||||
sweep(Client *c, int but, XButtonEvent *ignored)
|
||||
{
|
||||
sweep(Client* c, int but, XButtonEvent* ignored) {
|
||||
XEvent ev;
|
||||
int status;
|
||||
XButtonEvent* e;
|
||||
|
@ -623,8 +631,7 @@ sweep(Client *c, int but, XButtonEvent *ignored)
|
|||
}
|
||||
|
||||
int
|
||||
pull(Client *c, int but, XButtonEvent *e)
|
||||
{
|
||||
pull(Client* c, int but, XButtonEvent* e) {
|
||||
int status;
|
||||
ScreenInfo* s;
|
||||
BorderOrient bl;
|
||||
|
@ -643,8 +650,7 @@ pull(Client *c, int but, XButtonEvent *e)
|
|||
}
|
||||
|
||||
int
|
||||
drag(Client *c, int but)
|
||||
{
|
||||
drag(Client* c, int but) {
|
||||
int status;
|
||||
ScreenInfo* s;
|
||||
|
||||
|
@ -658,8 +664,7 @@ drag(Client *c, int but)
|
|||
}
|
||||
|
||||
void
|
||||
getmouse(int *x, int *y, ScreenInfo *s)
|
||||
{
|
||||
getmouse(int* x, int* y, ScreenInfo* s) {
|
||||
Window dw1, dw2;
|
||||
int t1, t2;
|
||||
unsigned int t3;
|
||||
|
@ -669,7 +674,6 @@ getmouse(int *x, int *y, ScreenInfo *s)
|
|||
}
|
||||
|
||||
void
|
||||
setmouse(int x, int y, ScreenInfo *s)
|
||||
{
|
||||
setmouse(int x, int y, ScreenInfo* s) {
|
||||
XWarpPointer(dpy, None, s->root, None, None, None, None, x, y);
|
||||
}
|
||||
|
|
217
key.c
Executable file → Normal file
217
key.c
Executable file → Normal file
|
@ -18,11 +18,7 @@
|
|||
#include "fns.h"
|
||||
#include "patchlevel.h"
|
||||
|
||||
enum
|
||||
{
|
||||
GrabAltTab,
|
||||
GrabAltAny
|
||||
};
|
||||
enum { GrabAltTab, GrabAltAny };
|
||||
|
||||
/*static int tabcode = 0x17; */
|
||||
/*static int altcode = 0x40; */
|
||||
|
@ -32,8 +28,7 @@ enum
|
|||
static void alttab(int shift);
|
||||
|
||||
void
|
||||
keysetup(void)
|
||||
{
|
||||
keysetup(void) {
|
||||
int i;
|
||||
int tabcode = XKeysymToKeycode(dpy, XK_Tab);
|
||||
int dcode = XKeysymToKeycode(dpy, DESTROY_KEY);
|
||||
|
@ -61,40 +56,89 @@ keysetup(void)
|
|||
#endif
|
||||
|
||||
for (i = 0; i < num_screens; i++) {
|
||||
XGrabKey(dpy, tabcode, Mod1Mask, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, dcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, icode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, ucode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, rcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, vcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, mcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, scode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, hcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, lcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, jcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, kcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, qcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, wcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, ocode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, pcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, ccode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, leftcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, rightcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, slcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, tabcode, Mod1Mask|ShiftMask, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, tabcode, Mod1Mask, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, dcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, icode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, ucode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, rcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, vcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, mcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, scode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, hcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, lcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, jcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, kcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, qcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, wcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, ocode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, pcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, ccode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy,
|
||||
leftcode,
|
||||
SHORTCUTMOD,
|
||||
screens[i].root,
|
||||
0,
|
||||
GrabModeSync,
|
||||
GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy,
|
||||
rightcode,
|
||||
SHORTCUTMOD,
|
||||
screens[i].root,
|
||||
0,
|
||||
GrabModeSync,
|
||||
GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy,
|
||||
slcode,
|
||||
SHORTCUTMOD,
|
||||
screens[i].root,
|
||||
0,
|
||||
GrabModeSync,
|
||||
GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy,
|
||||
tabcode,
|
||||
Mod1Mask | ShiftMask,
|
||||
screens[i].root,
|
||||
0,
|
||||
GrabModeSync,
|
||||
GrabModeAsync);
|
||||
#ifdef DEVEL
|
||||
XGrabKey(dpy, tcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(dpy, bcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, tcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
XGrabKey(
|
||||
dpy, bcode, SHORTCUTMOD, screens[i].root, 0, GrabModeSync, GrabModeAsync);
|
||||
#endif
|
||||
/* XGrabKey(dpy, pgupcode, Mod1Mask, screens[i].root, 0, GrabModeSync, GrabModeAsync); */
|
||||
/* XGrabKey(dpy, pgdowncode, Mod1Mask, screens[i].root, 0, GrabModeSync, GrabModeAsync); */
|
||||
/* XGrabKey(dpy, altcode, 0, screens[i].root, 0, GrabModeSync, GrabModeAsync); */
|
||||
/* XGrabKey(dpy, pgupcode, Mod1Mask, screens[i].root, 0, GrabModeSync,
|
||||
* GrabModeAsync); */
|
||||
/* XGrabKey(dpy, pgdowncode, Mod1Mask, screens[i].root, 0, GrabModeSync,
|
||||
* GrabModeAsync); */
|
||||
/* XGrabKey(dpy, altcode, 0, screens[i].root, 0, GrabModeSync,
|
||||
* GrabModeAsync); */
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
keypress(XKeyEvent *e)
|
||||
{
|
||||
keypress(XKeyEvent* e) {
|
||||
/*
|
||||
* process key press here
|
||||
*/
|
||||
|
@ -126,7 +170,6 @@ keypress(XKeyEvent *e)
|
|||
static XWindowAttributes ra;
|
||||
XGetWindowAttributes(dpy, DefaultRootWindow(dpy), &ra);
|
||||
|
||||
|
||||
/* basic wm functionality */
|
||||
if (e->keycode == tabcode && (e->state & Mod1Mask) == (1 << 3))
|
||||
alttab(e->state & ShiftMask);
|
||||
|
@ -141,29 +184,62 @@ keypress(XKeyEvent *e)
|
|||
else if (e->keycode == rcode && (e->state & SHORTCUTMOD) == (MODBITS))
|
||||
reshape(current, Button3, sweep, 0);
|
||||
else if (e->keycode == mcode && (e->state & SHORTCUTMOD) == (MODBITS))
|
||||
quickreshape(current, -BORDER, -BORDER, ra.width + 2*BORDER, ra.height + 2*BORDER);
|
||||
quickreshape(
|
||||
current, -BORDER, -BORDER, ra.width + 2 * BORDER, ra.height + 2 * BORDER);
|
||||
else if (e->keycode == scode && (e->state & SHORTCUTMOD) == (MODBITS))
|
||||
stick(current);
|
||||
|
||||
/* half snap */
|
||||
else if (e->keycode == hcode && (e->state & SHORTCUTMOD) == (MODBITS))
|
||||
quickreshape(current, GAPSZ, GAPSZ, ra.width/2 - 1.5*GAPSZ, ra.height - 2*GAPSZ);
|
||||
quickreshape(
|
||||
current, GAPSZ, GAPSZ, ra.width / 2 - 1.5 * GAPSZ, ra.height - 2 * GAPSZ);
|
||||
else if (e->keycode == lcode && (e->state & SHORTCUTMOD) == (MODBITS))
|
||||
quickreshape(current, ra.width/2 + 0.5*GAPSZ, GAPSZ, ra.width/2 - 1.5*GAPSZ, ra.height - 2*GAPSZ);
|
||||
quickreshape(
|
||||
current,
|
||||
ra.width / 2 + 0.5 * GAPSZ,
|
||||
GAPSZ,
|
||||
ra.width / 2 - 1.5 * GAPSZ,
|
||||
ra.height - 2 * GAPSZ);
|
||||
else if (e->keycode == jcode && (e->state & SHORTCUTMOD) == (MODBITS))
|
||||
quickreshape(current, GAPSZ, ra.height/2 + 0.5*GAPSZ, ra.width - 2*GAPSZ, ra.height/2 - 1.5*GAPSZ);
|
||||
quickreshape(
|
||||
current,
|
||||
GAPSZ,
|
||||
ra.height / 2 + 0.5 * GAPSZ,
|
||||
ra.width - 2 * GAPSZ,
|
||||
ra.height / 2 - 1.5 * GAPSZ);
|
||||
else if (e->keycode == kcode && (e->state & SHORTCUTMOD) == (MODBITS))
|
||||
quickreshape(current, GAPSZ, GAPSZ, ra.width - 2*GAPSZ, ra.height/2 - 1.5*GAPSZ);
|
||||
quickreshape(
|
||||
current, GAPSZ, GAPSZ, ra.width - 2 * GAPSZ, ra.height / 2 - 1.5 * GAPSZ);
|
||||
|
||||
/* quarter snap */
|
||||
else if (e->keycode == qcode && (e->state & SHORTCUTMOD) == (MODBITS))
|
||||
quickreshape(current, GAPSZ, GAPSZ, ra.width/2 - 1.5*GAPSZ, ra.height/2 - 1.5*GAPSZ);
|
||||
quickreshape(
|
||||
current,
|
||||
GAPSZ,
|
||||
GAPSZ,
|
||||
ra.width / 2 - 1.5 * GAPSZ,
|
||||
ra.height / 2 - 1.5 * GAPSZ);
|
||||
else if (e->keycode == wcode && (e->state & SHORTCUTMOD) == (MODBITS))
|
||||
quickreshape(current, GAPSZ, ra.height/2 + 0.5*GAPSZ, ra.width/2 - 1.5*GAPSZ, ra.height/2 - 1.5*GAPSZ);
|
||||
quickreshape(
|
||||
current,
|
||||
GAPSZ,
|
||||
ra.height / 2 + 0.5 * GAPSZ,
|
||||
ra.width / 2 - 1.5 * GAPSZ,
|
||||
ra.height / 2 - 1.5 * GAPSZ);
|
||||
else if (e->keycode == ocode && (e->state & SHORTCUTMOD) == (MODBITS))
|
||||
quickreshape(current, ra.width/2 + 0.5*GAPSZ, ra.height/2 + 0.5*GAPSZ, ra.width/2 - 1.5*GAPSZ, ra.height/2 - 1.5*GAPSZ);
|
||||
quickreshape(
|
||||
current,
|
||||
ra.width / 2 + 0.5 * GAPSZ,
|
||||
ra.height / 2 + 0.5 * GAPSZ,
|
||||
ra.width / 2 - 1.5 * GAPSZ,
|
||||
ra.height / 2 - 1.5 * GAPSZ);
|
||||
else if (e->keycode == pcode && (e->state & SHORTCUTMOD) == (MODBITS))
|
||||
quickreshape(current, ra.width/2 + 0.5*GAPSZ, GAPSZ, ra.width/2 - 1.5*GAPSZ, ra.height/2 - 1.5*GAPSZ);
|
||||
quickreshape(
|
||||
current,
|
||||
ra.width / 2 + 0.5 * GAPSZ,
|
||||
GAPSZ,
|
||||
ra.width / 2 - 1.5 * GAPSZ,
|
||||
ra.height / 2 - 1.5 * GAPSZ);
|
||||
|
||||
/* center snap */
|
||||
else if (e->keycode == ccode && (e->state & SHORTCUTMOD) == (MODBITS)) {
|
||||
|
@ -178,14 +254,12 @@ keypress(XKeyEvent *e)
|
|||
stickystack(0);
|
||||
#endif
|
||||
|
||||
|
||||
/* launch */
|
||||
if (e->keycode == slcode && (e->state & SHORTCUTMOD) == (MODBITS)) {
|
||||
kbLaunch = 1;
|
||||
if (fork() == 0) {
|
||||
close(ConnectionNumber(dpy));
|
||||
if(dpy != '\0')
|
||||
putenv(dpy);
|
||||
if (dpy != '\0') putenv(dpy);
|
||||
signal(SIGINT, SIG_DFL);
|
||||
signal(SIGTERM, SIG_DFL);
|
||||
signal(SIGHUP, SIG_DFL);
|
||||
|
@ -220,16 +294,13 @@ keypress(XKeyEvent *e)
|
|||
}
|
||||
|
||||
void
|
||||
keyrelease(XKeyEvent *e)
|
||||
{
|
||||
keyrelease(XKeyEvent* e) {
|
||||
XAllowEvents(dpy, SyncKeyboard, e->time);
|
||||
}
|
||||
|
||||
void
|
||||
quickreshape(Client *c, int x, int y, int dx, int dy)
|
||||
{
|
||||
if (c == 0)
|
||||
return;
|
||||
quickreshape(Client* c, int x, int y, int dx, int dy) {
|
||||
if (c == 0) return;
|
||||
XMoveResizeWindow(dpy, c->parent, x, y, dx, dy);
|
||||
c->x = x + BORDER;
|
||||
c->y = y + BORDER;
|
||||
|
@ -240,44 +311,46 @@ quickreshape(Client *c, int x, int y, int dx, int dy)
|
|||
}
|
||||
|
||||
void
|
||||
centercurrent(XWindowAttributes ra)
|
||||
{
|
||||
static int centeroffsetnum = CENTERNUM%2 == 0 ?
|
||||
CENTERDEN - CENTERNUM :
|
||||
(CENTERDEN - CENTERNUM)/2;
|
||||
centercurrent(XWindowAttributes ra) {
|
||||
static int centeroffsetnum =
|
||||
CENTERNUM % 2 == 0 ? CENTERDEN - CENTERNUM : (CENTERDEN - CENTERNUM) / 2;
|
||||
|
||||
static int centeroffsetden = CENTERNUM%2 == 0 ?
|
||||
CENTERDEN*2 :
|
||||
CENTERDEN;
|
||||
static int centeroffsetden = CENTERNUM % 2 == 0 ? CENTERDEN * 2 : CENTERDEN;
|
||||
|
||||
#ifdef CENTERVMAX
|
||||
quickreshape(current, centeroffsetnum*ra.width/centeroffsetden, GAPSZ, CENTERNUM*ra.width/CENTERDEN, ra.height - 2*GAPSZ);
|
||||
quickreshape(
|
||||
current,
|
||||
centeroffsetnum * ra.width / centeroffsetden,
|
||||
GAPSZ,
|
||||
CENTERNUM * ra.width / CENTERDEN,
|
||||
ra.height - 2 * GAPSZ);
|
||||
#else
|
||||
quickreshape(current, centeroffsetnum*ra.width/centerofsetden, centeroffsetnum*ra.height/centeroffsetden, CENTERNUM*ra.width/CENTERDEN, CENTERNUM*ra.height/CENTERDEN);
|
||||
quickreshape(
|
||||
current,
|
||||
centeroffsetnum * ra.width / centerofsetden,
|
||||
centeroffsetnum * ra.height / centeroffsetden,
|
||||
CENTERNUM * ra.width / CENTERDEN,
|
||||
CENTERNUM * ra.height / CENTERDEN);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
alttab(int shift)
|
||||
{
|
||||
alttab(int shift) {
|
||||
shuffle(shift);
|
||||
/* fprintf(stderr, "%sTab\n", shift ? "Back" : ""); */
|
||||
}
|
||||
|
||||
#ifdef DEVEL
|
||||
void
|
||||
stickystack(int toTop)
|
||||
{
|
||||
stickystack(int toTop) {
|
||||
Client* c;
|
||||
if (toTop) {
|
||||
for (c = clients; c->next; c = c->next) {
|
||||
if(c && isautostick(c))
|
||||
top(c);
|
||||
if (c && isautostick(c)) top(c);
|
||||
}
|
||||
} else {
|
||||
for (c = clients; c->next; c = c->next) {
|
||||
if(c && !isautostick(c))
|
||||
top(c);
|
||||
if (c && !isautostick(c)) top(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
185
main.c
Executable file → Normal file
185
main.c
Executable file → Normal file
|
@ -17,10 +17,10 @@
|
|||
#include "fns.h"
|
||||
#include "patchlevel.h"
|
||||
|
||||
char *version[] =
|
||||
{
|
||||
"ryudo version 0.4\nCopyright (c) 1994-1996 David Hogan,\n(c) 2004 Russ Cox,\n(c) 2019-2021 Derek Stevens", 0
|
||||
};
|
||||
char* version[] = {
|
||||
"ryudo version 0.4\nCopyright (c) 1994-1996 David Hogan,\n(c) 2004 Russ "
|
||||
"Cox,\n(c) 2019-2021 Derek Stevens",
|
||||
0};
|
||||
|
||||
Display* dpy;
|
||||
ScreenInfo* screens;
|
||||
|
@ -61,15 +61,16 @@ Atom wm_state;
|
|||
char* fontlist[] = FONTLIST;
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: ryudo [-ffm] [-font fname] [-s] [-term prog] [-version] [-virtuals num] [exit|restart]\n");
|
||||
usage(void) {
|
||||
fprintf(
|
||||
stderr,
|
||||
"usage: ryudo [-ffm] [-font fname] [-s] [-term prog] [-version] [-virtuals "
|
||||
"num] [exit|restart]\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
main(int argc, char* argv[]) {
|
||||
int i, do_exit, do_restart;
|
||||
char* fname;
|
||||
int shape_event;
|
||||
|
@ -95,26 +96,23 @@ main(int argc, char *argv[])
|
|||
else if (strcmp(argv[i], "-font") == 0 && i + 1 < argc) {
|
||||
i++;
|
||||
fname = argv[i];
|
||||
}
|
||||
else if(strcmp(argv[i], "-term") == 0 && i+1<argc)
|
||||
} else if (strcmp(argv[i], "-term") == 0 && i + 1 < argc)
|
||||
termprog = argv[++i];
|
||||
else if (strcmp(argv[i], "-virtuals") == 0 && i + 1 < argc) {
|
||||
numvirtuals = atoi(argv[++i]);
|
||||
if (numvirtuals < 0 || numvirtuals > 12) {
|
||||
fprintf(stderr, "ryudo: wrong number of virtual displays, defaulting to 4\n");
|
||||
fprintf(
|
||||
stderr, "ryudo: wrong number of virtual displays, defaulting to 4\n");
|
||||
numvirtuals = 4;
|
||||
}
|
||||
} else if (strcmp(argv[i], "-version") == 0) {
|
||||
fprintf(stderr, "%s", version[0]);
|
||||
if(PATCHLEVEL > 0)
|
||||
fprintf(stderr, "; patch level %d", PATCHLEVEL);
|
||||
if (PATCHLEVEL > 0) fprintf(stderr, "; patch level %d", PATCHLEVEL);
|
||||
fprintf(stderr, "\n");
|
||||
exit(0);
|
||||
}
|
||||
else if(strcmp(argv[i], "-s") == 0){
|
||||
} else if (strcmp(argv[i], "-s") == 0) {
|
||||
scrolling = 1;
|
||||
}
|
||||
else if(argv[i][0] == '-')
|
||||
} else if (argv[i][0] == '-')
|
||||
usage();
|
||||
else
|
||||
break;
|
||||
|
@ -126,25 +124,19 @@ main(int argc, char *argv[])
|
|||
else
|
||||
usage();
|
||||
|
||||
if(do_exit && do_restart)
|
||||
usage();
|
||||
if (do_exit && do_restart) usage();
|
||||
|
||||
shell = (char*)getenv("SHELL");
|
||||
if(shell == NULL)
|
||||
shell = DEFSHELL;
|
||||
if (shell == NULL) shell = DEFSHELL;
|
||||
|
||||
dpy = XOpenDisplay("");
|
||||
if(dpy == 0)
|
||||
fatal("can't open display");
|
||||
if (dpy == 0) fatal("can't open display");
|
||||
|
||||
initting = 1;
|
||||
XSetErrorHandler(handler);
|
||||
if(signal(SIGTERM, sighandler) == SIG_IGN)
|
||||
signal(SIGTERM, SIG_IGN);
|
||||
if(signal(SIGINT, sighandler) == SIG_IGN)
|
||||
signal(SIGINT, SIG_IGN);
|
||||
if(signal(SIGHUP, sighandler) == SIG_IGN)
|
||||
signal(SIGHUP, SIG_IGN);
|
||||
if (signal(SIGTERM, sighandler) == SIG_IGN) signal(SIGTERM, SIG_IGN);
|
||||
if (signal(SIGINT, sighandler) == SIG_IGN) signal(SIGINT, SIG_IGN);
|
||||
if (signal(SIGHUP, sighandler) == SIG_IGN) signal(SIGHUP, SIG_IGN);
|
||||
|
||||
exit_rio = XInternAtom(dpy, "9WM_EXIT", False);
|
||||
restart_rio = XInternAtom(dpy, "9WM_RESTART", False);
|
||||
|
@ -188,8 +180,7 @@ main(int argc, char *argv[])
|
|||
break;
|
||||
}
|
||||
font = XLoadQueryFont(dpy, fname);
|
||||
if(font != 0)
|
||||
break;
|
||||
if (font != 0) break;
|
||||
}
|
||||
}
|
||||
if (nostalgia) {
|
||||
|
@ -204,8 +195,7 @@ main(int argc, char *argv[])
|
|||
num_screens = ScreenCount(dpy);
|
||||
screens = (ScreenInfo*)malloc(sizeof(ScreenInfo) * num_screens);
|
||||
|
||||
for(i = 0; i < num_screens; i++)
|
||||
initscreen(&screens[i], i, 0);
|
||||
for (i = 0; i < num_screens; i++) initscreen(&screens[i], i, 0);
|
||||
|
||||
initb2menu(numvirtuals);
|
||||
|
||||
|
@ -218,8 +208,7 @@ main(int argc, char *argv[])
|
|||
|
||||
nofocus();
|
||||
|
||||
for(i = 0; i < num_screens; i++)
|
||||
scanwins(&screens[i]);
|
||||
for (i = 0; i < num_screens; i++) scanwins(&screens[i]);
|
||||
|
||||
keysetup();
|
||||
mainloop(shape_event);
|
||||
|
@ -227,8 +216,7 @@ main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
void
|
||||
initscreen(ScreenInfo *s, int i, int background)
|
||||
{
|
||||
initscreen(ScreenInfo* s, int i, int background) {
|
||||
char *ds, *colon, *dot1;
|
||||
unsigned long mask;
|
||||
unsigned long gmask;
|
||||
|
@ -246,30 +234,27 @@ initscreen(ScreenInfo *s, int i, int background)
|
|||
/*
|
||||
* Figure out underlying screen format.
|
||||
*/
|
||||
if(XMatchVisualInfo(dpy, i, 16, TrueColor, &xvi)
|
||||
|| XMatchVisualInfo(dpy, i, 16, DirectColor, &xvi)){
|
||||
if (
|
||||
XMatchVisualInfo(dpy, i, 16, TrueColor, &xvi) ||
|
||||
XMatchVisualInfo(dpy, i, 16, DirectColor, &xvi)) {
|
||||
s->vis = xvi.visual;
|
||||
s->depth = 16;
|
||||
}
|
||||
else
|
||||
if(XMatchVisualInfo(dpy, i, 15, TrueColor, &xvi)
|
||||
|| XMatchVisualInfo(dpy, i, 15, DirectColor, &xvi)){
|
||||
} else if (
|
||||
XMatchVisualInfo(dpy, i, 15, TrueColor, &xvi) ||
|
||||
XMatchVisualInfo(dpy, i, 15, DirectColor, &xvi)) {
|
||||
s->vis = xvi.visual;
|
||||
s->depth = 15;
|
||||
}
|
||||
else
|
||||
if(XMatchVisualInfo(dpy, i, 24, TrueColor, &xvi)
|
||||
|| XMatchVisualInfo(dpy, i, 24, DirectColor, &xvi)){
|
||||
} else if (
|
||||
XMatchVisualInfo(dpy, i, 24, TrueColor, &xvi) ||
|
||||
XMatchVisualInfo(dpy, i, 24, DirectColor, &xvi)) {
|
||||
s->vis = xvi.visual;
|
||||
s->depth = 24;
|
||||
}
|
||||
else
|
||||
if(XMatchVisualInfo(dpy, i, 8, PseudoColor, &xvi)
|
||||
|| XMatchVisualInfo(dpy, i, 8, StaticColor, &xvi)){
|
||||
} else if (
|
||||
XMatchVisualInfo(dpy, i, 8, PseudoColor, &xvi) ||
|
||||
XMatchVisualInfo(dpy, i, 8, StaticColor, &xvi)) {
|
||||
s->vis = xvi.visual;
|
||||
s->depth = 8;
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
s->depth = DefaultDepth(dpy, i);
|
||||
if (s->depth != 8) {
|
||||
fprintf(stderr, "can't understand depth %d screen", s->depth);
|
||||
|
@ -288,11 +273,9 @@ initscreen(ScreenInfo *s, int i, int background)
|
|||
strcat(s->display, ds);
|
||||
colon = s->display + 8 + (colon - ds); /* use version in buf */
|
||||
dot1 = index(colon, '.'); /* first period after colon */
|
||||
if(!dot1)
|
||||
dot1 = colon + strlen(colon); /* if not there, append */
|
||||
if (!dot1) dot1 = colon + strlen(colon); /* if not there, append */
|
||||
sprintf(dot1, ".%d", i);
|
||||
}
|
||||
else
|
||||
} else
|
||||
s->display[0] = '\0';
|
||||
|
||||
s->black = BlackPixel(dpy, i);
|
||||
|
@ -304,16 +287,18 @@ initscreen(ScreenInfo *s, int i, int background)
|
|||
s->red = colorpixel(dpy, s, s->depth, GHOSTCOL, s->white);
|
||||
s->width = WidthOfScreen(ScreenOfDisplay(dpy, i));
|
||||
s->height = HeightOfScreen(ScreenOfDisplay(dpy, i));
|
||||
s->bkup[0] = XCreatePixmap(dpy, s->root, 2*s->width, BORDER, DefaultDepth(dpy, i));
|
||||
s->bkup[1] = XCreatePixmap(dpy, s->root, BORDER, 2*s->height, DefaultDepth(dpy, i));
|
||||
s->bkup[0] =
|
||||
XCreatePixmap(dpy, s->root, 2 * s->width, BORDER, DefaultDepth(dpy, i));
|
||||
s->bkup[1] =
|
||||
XCreatePixmap(dpy, s->root, BORDER, 2 * s->height, DefaultDepth(dpy, i));
|
||||
|
||||
gv.foreground = s->black ^ s->white;
|
||||
gv.background = s->white;
|
||||
gv.function = GXxor;
|
||||
gv.line_width = 0;
|
||||
gv.subwindow_mode = IncludeInferiors;
|
||||
gmask = GCForeground | GCBackground | GCFunction | GCLineWidth
|
||||
| GCSubwindowMode;
|
||||
gmask =
|
||||
GCForeground | GCBackground | GCFunction | GCLineWidth | GCSubwindowMode;
|
||||
if (font != 0) {
|
||||
gv.font = font->fid;
|
||||
gmask |= GCFont;
|
||||
|
@ -332,10 +317,9 @@ initscreen(ScreenInfo *s, int i, int background)
|
|||
initcurs(s);
|
||||
|
||||
attr.cursor = s->arrow;
|
||||
attr.event_mask = SubstructureRedirectMask
|
||||
| SubstructureNotifyMask | ColormapChangeMask
|
||||
| ButtonPressMask | ButtonReleaseMask | PropertyChangeMask
|
||||
| KeyPressMask | EnterWindowMask;
|
||||
attr.event_mask = SubstructureRedirectMask | SubstructureNotifyMask |
|
||||
ColormapChangeMask | ButtonPressMask | ButtonReleaseMask |
|
||||
PropertyChangeMask | KeyPressMask | EnterWindowMask;
|
||||
mask = CWCursor | CWEventMask;
|
||||
XChangeWindowAttributes(dpy, s->root, mask, &attr);
|
||||
XSync(dpy, False);
|
||||
|
@ -344,14 +328,19 @@ initscreen(ScreenInfo *s, int i, int background)
|
|||
attrs.background_pixel = colorpixel(dpy, s, s->depth, MENUBGCOL, s->white);
|
||||
attrs.colormap = s->def_cmap;
|
||||
|
||||
s->menuwin = XCreateWindow(dpy, s->root, 0, 0, 1, 1, MENUBORDER,
|
||||
s->menuwin = XCreateWindow(
|
||||
dpy,
|
||||
s->root,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
MENUBORDER,
|
||||
s->depth,
|
||||
CopyFromParent,
|
||||
s->vis,
|
||||
CWBackPixel | CWBorderPixel | CWColormap,
|
||||
&attrs
|
||||
);
|
||||
|
||||
&attrs);
|
||||
|
||||
gv.foreground = colorpixel(dpy, s, s->depth, MENUBGCOL, s->black);
|
||||
s->gcmenubg = XCreateGC(dpy, s->menuwin, gmask, &gv);
|
||||
|
@ -370,35 +359,45 @@ initscreen(ScreenInfo *s, int i, int background)
|
|||
attrs.border_pixel = s->red;
|
||||
attrs.background_pixel = colorpixel(dpy, s, s->depth, 0xEEEEEE, s->black);
|
||||
attrs.colormap = s->def_cmap;
|
||||
s->sweepwin = XCreateWindow(dpy, s->root, 0, 0, 1, 1, 4,
|
||||
s->sweepwin = XCreateWindow(
|
||||
dpy,
|
||||
s->root,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
4,
|
||||
s->depth,
|
||||
CopyFromParent,
|
||||
s->vis,
|
||||
CWBackPixel | CWBorderPixel | CWColormap,
|
||||
&attrs
|
||||
);
|
||||
&attrs);
|
||||
}
|
||||
|
||||
ScreenInfo*
|
||||
getscreen(Window w)
|
||||
{
|
||||
getscreen(Window w) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num_screens; i++)
|
||||
if(screens[i].root == w)
|
||||
return &screens[i];
|
||||
if (screens[i].root == w) return &screens[i];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Time
|
||||
timestamp(void)
|
||||
{
|
||||
timestamp(void) {
|
||||
XEvent ev;
|
||||
|
||||
if (curtime == CurrentTime) {
|
||||
XChangeProperty(dpy, screens[0].root, _rio_running, _rio_running, 8,
|
||||
PropModeAppend, (unsigned char *)"", 0);
|
||||
XChangeProperty(
|
||||
dpy,
|
||||
screens[0].root,
|
||||
_rio_running,
|
||||
_rio_running,
|
||||
8,
|
||||
PropModeAppend,
|
||||
(unsigned char*)"",
|
||||
0);
|
||||
XMaskEvent(dpy, PropertyChangeMask, &ev);
|
||||
curtime = ev.xproperty.time;
|
||||
}
|
||||
|
@ -406,8 +405,7 @@ timestamp(void)
|
|||
}
|
||||
|
||||
void
|
||||
sendcmessage(Window w, Atom a, long x, int isroot, int usemask)
|
||||
{
|
||||
sendcmessage(Window w, Atom a, long x, int isroot, int usemask) {
|
||||
XEvent ev;
|
||||
int status;
|
||||
long mask;
|
||||
|
@ -428,13 +426,11 @@ sendcmessage(Window w, Atom a, long x, int isroot, int usemask)
|
|||
mask |= ExposureMask; /* not really correct but so be it */
|
||||
}
|
||||
status = XSendEvent(dpy, w, False, mask, &ev);
|
||||
if(status == 0)
|
||||
fprintf(stderr, "ryudo: sendcmessage failed\n");
|
||||
if (status == 0) fprintf(stderr, "ryudo: sendcmessage failed\n");
|
||||
}
|
||||
|
||||
void
|
||||
sendconfig(Client *c)
|
||||
{
|
||||
sendconfig(Client* c) {
|
||||
XConfigureEvent ce;
|
||||
|
||||
ce.type = ConfigureNotify;
|
||||
|
@ -451,14 +447,12 @@ sendconfig(Client *c)
|
|||
}
|
||||
|
||||
void
|
||||
sighandler(void)
|
||||
{
|
||||
sighandler(void) {
|
||||
signalled = 1;
|
||||
}
|
||||
|
||||
void
|
||||
getevent(XEvent *e)
|
||||
{
|
||||
getevent(XEvent* e) {
|
||||
int fd;
|
||||
fd_set rfds;
|
||||
struct timeval t;
|
||||
|
@ -493,8 +487,7 @@ getevent(XEvent *e)
|
|||
}
|
||||
|
||||
void
|
||||
cleanup(void)
|
||||
{
|
||||
cleanup(void) {
|
||||
Client *c, *cc[2], *next;
|
||||
XWindowChanges wc;
|
||||
int i;
|
||||
|
@ -511,8 +504,7 @@ cleanup(void)
|
|||
for (i = 0; i < 2; i++) {
|
||||
for (c = cc[i]; c; c = c->next) {
|
||||
if (!withdrawn(c)) {
|
||||
XReparentWindow(dpy, c->window, c->screen->root,
|
||||
c->x, c->y);
|
||||
XReparentWindow(dpy, c->window, c->screen->root, c->x, c->y);
|
||||
}
|
||||
wc.border_width = c->border;
|
||||
XConfigureWindow(dpy, c->window, CWBorderWidth, &wc);
|
||||
|
@ -520,7 +512,6 @@ cleanup(void)
|
|||
}
|
||||
|
||||
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, timestamp());
|
||||
for(i = 0; i < num_screens; i++)
|
||||
cmapnofocus(&screens[i]);
|
||||
for (i = 0; i < num_screens; i++) cmapnofocus(&screens[i]);
|
||||
XCloseDisplay(dpy);
|
||||
}
|
||||
|
|
245
manage.c
Executable file → Normal file
245
manage.c
Executable file → Normal file
|
@ -23,20 +23,22 @@
|
|||
int isNew;
|
||||
|
||||
int
|
||||
manage(Client *c, int mapped)
|
||||
{
|
||||
manage(Client* c, int mapped) {
|
||||
int fixsize, dohide, doreshape, state;
|
||||
long msize;
|
||||
XClassHint class;
|
||||
XWMHints* hints;
|
||||
XSetWindowAttributes attrs;
|
||||
|
||||
|
||||
static XWindowAttributes ra;
|
||||
XGetWindowAttributes(dpy, DefaultRootWindow(dpy), &ra);
|
||||
|
||||
trace("manage", c, 0);
|
||||
XSelectInput(dpy, c->window, ColormapChangeMask | EnterWindowMask | PropertyChangeMask | FocusChangeMask | KeyPressMask);
|
||||
XSelectInput(
|
||||
dpy,
|
||||
c->window,
|
||||
ColormapChangeMask | EnterWindowMask | PropertyChangeMask |
|
||||
FocusChangeMask | KeyPressMask);
|
||||
|
||||
/* Get loads of hints */
|
||||
|
||||
|
@ -45,14 +47,13 @@ manage(Client *c, int mapped)
|
|||
c->class = class.res_class;
|
||||
c->is9term = 0;
|
||||
if (isNew) {
|
||||
c->is9term = strstr(c->class, "term") || strstr(c->class, "Term")
|
||||
|| strstr(c->class, "urxvt") || strstr(c->class, "URxvt")
|
||||
|| strstr(c->class, "onsole") || strstr(c->class, "Alacritty");
|
||||
c->is9term = strstr(c->class, "term") || strstr(c->class, "Term") ||
|
||||
strstr(c->class, "urxvt") || strstr(c->class, "URxvt") ||
|
||||
strstr(c->class, "onsole") || strstr(c->class, "Alacritty");
|
||||
isNew = 0;
|
||||
}
|
||||
printf("%s: is9term = %d", c->class, c->is9term);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
c->instance = 0;
|
||||
c->class = 0;
|
||||
c->is9term = 0;
|
||||
|
@ -62,14 +63,15 @@ manage(Client *c, int mapped)
|
|||
setlabel(c);
|
||||
|
||||
hints = XGetWMHints(dpy, c->window);
|
||||
if(XGetWMNormalHints(dpy, c->window, &c->size, &msize) == 0 || c->size.flags == 0)
|
||||
if (
|
||||
XGetWMNormalHints(dpy, c->window, &c->size, &msize) == 0 ||
|
||||
c->size.flags == 0)
|
||||
c->size.flags = PSize; /* not specified - punt */
|
||||
|
||||
getcmaps(c);
|
||||
getproto(c);
|
||||
gettrans(c);
|
||||
if(c->is9term)
|
||||
c->hold = getiprop(c->window, _rio_hold_mode);
|
||||
if (c->is9term) c->hold = getiprop(c->window, _rio_hold_mode);
|
||||
|
||||
/* Figure out what to do with the window from hints */
|
||||
|
||||
|
@ -78,46 +80,50 @@ manage(Client *c, int mapped)
|
|||
dohide = (state == IconicState);
|
||||
|
||||
fixsize = 0;
|
||||
if((c->size.flags & (USSize|PSize)))
|
||||
fixsize = 1;
|
||||
if((c->size.flags & (PMinSize|PMaxSize)) == (PMinSize|PMaxSize) && c->size.min_width == c->size.max_width && c->size.min_height == c->size.max_height)
|
||||
if ((c->size.flags & (USSize | PSize))) fixsize = 1;
|
||||
if (
|
||||
(c->size.flags & (PMinSize | PMaxSize)) == (PMinSize | PMaxSize) &&
|
||||
c->size.min_width == c->size.max_width &&
|
||||
c->size.min_height == c->size.max_height)
|
||||
fixsize = 1;
|
||||
doreshape = !mapped;
|
||||
if (fixsize) {
|
||||
if(c->size.flags & USPosition)
|
||||
doreshape = 0;
|
||||
if(dohide && (c->size.flags & PPosition))
|
||||
doreshape = 0;
|
||||
if(c->trans != None)
|
||||
doreshape = 0;
|
||||
if (c->size.flags & USPosition) doreshape = 0;
|
||||
if (dohide && (c->size.flags & PPosition)) doreshape = 0;
|
||||
if (c->trans != None) doreshape = 0;
|
||||
}
|
||||
if(c->is9term)
|
||||
fixsize = 0;
|
||||
if (c->is9term) fixsize = 0;
|
||||
if (c->size.flags & PBaseSize) {
|
||||
c->min_dx = c->size.base_width;
|
||||
c->min_dy = c->size.base_height;
|
||||
}
|
||||
else if(c->size.flags & PMinSize){
|
||||
} else if (c->size.flags & PMinSize) {
|
||||
c->min_dx = c->size.min_width;
|
||||
c->min_dy = c->size.min_height;
|
||||
}
|
||||
else if(c->is9term){
|
||||
} else if (c->is9term) {
|
||||
c->min_dx = 100;
|
||||
c->min_dy = 50;
|
||||
}
|
||||
else
|
||||
} else
|
||||
c->min_dx = c->min_dy = 0;
|
||||
|
||||
if(hints)
|
||||
XFree(hints);
|
||||
if (hints) XFree(hints);
|
||||
|
||||
/* Now do it!!! */
|
||||
|
||||
if (doreshape) {
|
||||
if(0) fprintf(stderr, "in doreshape is9term=%d fixsize=%d, x=%d, y=%d, min_dx=%d, min_dy=%d, dx=%d, dy=%d\n",
|
||||
c->is9term, fixsize, c->x, c->y, c->min_dx, c->min_dy, c->dx, c->dy);
|
||||
if(current && current->screen == c->screen)
|
||||
cmapnofocus(c->screen);
|
||||
if (0)
|
||||
fprintf(
|
||||
stderr,
|
||||
"in doreshape is9term=%d fixsize=%d, x=%d, y=%d, min_dx=%d, min_dy=%d, "
|
||||
"dx=%d, dy=%d\n",
|
||||
c->is9term,
|
||||
fixsize,
|
||||
c->x,
|
||||
c->y,
|
||||
c->min_dx,
|
||||
c->min_dy,
|
||||
c->dx,
|
||||
c->dy);
|
||||
if (current && current->screen == c->screen) cmapnofocus(c->screen);
|
||||
if (!c->is9term && c->x == 0 && c->y == 0) {
|
||||
static int nwin;
|
||||
|
||||
|
@ -130,8 +136,7 @@ manage(Client *c, int mapped)
|
|||
if (c->is9term && !(fixsize ? drag(c, Button3) : sweep(c, Button3))) {
|
||||
XKillClient(dpy, c->window);
|
||||
rmclient(c);
|
||||
if(current && current->screen == c->screen)
|
||||
cmapfocus(current);
|
||||
if (current && current->screen == c->screen) cmapfocus(current);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -139,9 +144,13 @@ manage(Client *c, int mapped)
|
|||
attrs.border_pixel = c->screen->black;
|
||||
attrs.background_pixel = c->screen->white;
|
||||
attrs.colormap = c->screen->def_cmap;
|
||||
c->parent = XCreateWindow(dpy, c->screen->root,
|
||||
c->x - BORDER, c->y - BORDER,
|
||||
c->dx + 2*BORDER, c->dy + 2*BORDER,
|
||||
c->parent = XCreateWindow(
|
||||
dpy,
|
||||
c->screen->root,
|
||||
c->x - BORDER,
|
||||
c->y - BORDER,
|
||||
c->dx + 2 * BORDER,
|
||||
c->dy + 2 * BORDER,
|
||||
0,
|
||||
c->screen->depth,
|
||||
CopyFromParent,
|
||||
|
@ -149,11 +158,13 @@ manage(Client *c, int mapped)
|
|||
CWBackPixel | CWBorderPixel | CWColormap,
|
||||
&attrs);
|
||||
|
||||
XSelectInput(dpy, c->parent, SubstructureRedirectMask | SubstructureNotifyMask|ButtonPressMask| PointerMotionMask|LeaveWindowMask|KeyPressMask);
|
||||
if(mapped)
|
||||
c->reparenting = 1;
|
||||
if(doreshape && !fixsize)
|
||||
XResizeWindow(dpy, c->window, c->dx, c->dy);
|
||||
XSelectInput(
|
||||
dpy,
|
||||
c->parent,
|
||||
SubstructureRedirectMask | SubstructureNotifyMask | ButtonPressMask |
|
||||
PointerMotionMask | LeaveWindowMask | KeyPressMask);
|
||||
if (mapped) c->reparenting = 1;
|
||||
if (doreshape && !fixsize) XResizeWindow(dpy, c->window, c->dx, c->dy);
|
||||
XSetWindowBorderWidth(dpy, c->window, 0);
|
||||
|
||||
/*
|
||||
|
@ -164,9 +175,7 @@ manage(Client *c, int mapped)
|
|||
* (black (or white) border around black (or white) window
|
||||
* is not very helpful.
|
||||
*/
|
||||
if(c->screen->depth <= 8){
|
||||
XSetWindowBorderWidth(dpy, c->parent, 1);
|
||||
}
|
||||
if (c->screen->depth <= 8) { XSetWindowBorderWidth(dpy, c->parent, 1); }
|
||||
|
||||
XReparentWindow(dpy, c->window, c->parent, BORDER, BORDER);
|
||||
#ifdef SHAPE
|
||||
|
@ -194,8 +203,7 @@ manage(Client *c, int mapped)
|
|||
setactive(c, 0);
|
||||
setstate(c, NormalState);
|
||||
}
|
||||
if(current && (current != c))
|
||||
cmapfocus(current);
|
||||
if (current && (current != c)) cmapfocus(current);
|
||||
c->init = 1;
|
||||
|
||||
/* If the window is out of bounds of the screen, try to wrangle it */
|
||||
|
@ -203,9 +211,11 @@ manage(Client *c, int mapped)
|
|||
/* If it's bigger than the screen, try to set it maximized */
|
||||
if (c->dx >= ra.width || c->dy >= ra.width) {
|
||||
if (c->dx >= ra.width)
|
||||
quickreshape(c, -BORDER, c->y - BORDER, ra.width + 2*BORDER, c->dy + 2*BORDER);
|
||||
quickreshape(
|
||||
c, -BORDER, c->y - BORDER, ra.width + 2 * BORDER, c->dy + 2 * BORDER);
|
||||
if (c->dy >= ra.height)
|
||||
quickreshape(c, c->x - BORDER, -BORDER, c->dx + 2*BORDER, ra.height + 2*BORDER);
|
||||
quickreshape(
|
||||
c, c->x - BORDER, -BORDER, c->dx + 2 * BORDER, ra.height + 2 * BORDER);
|
||||
|
||||
/* and if it's got an edge out of bounds, nudge it into bounds */
|
||||
} else {
|
||||
|
@ -216,10 +226,20 @@ manage(Client *c, int mapped)
|
|||
quickreshape(c, c->x - BORDER, 0, c->dx + 2 * BORDER, c->dy + 2 * BORDER);
|
||||
}
|
||||
if (c->x + c->dx + BORDER > ra.width) {
|
||||
quickreshape(c, ra.width - (c->dx + 2*BORDER), c->y - BORDER, c->dx + 2*BORDER, c->dy + 2*BORDER);
|
||||
quickreshape(
|
||||
c,
|
||||
ra.width - (c->dx + 2 * BORDER),
|
||||
c->y - BORDER,
|
||||
c->dx + 2 * BORDER,
|
||||
c->dy + 2 * BORDER);
|
||||
}
|
||||
if (c->y + c->dy + BORDER > ra.height) {
|
||||
quickreshape(c, c->x - BORDER, ra.height - (c->dy + 2*BORDER), c->dx + 2*BORDER, c->dy + 2*BORDER);
|
||||
quickreshape(
|
||||
c,
|
||||
c->x - BORDER,
|
||||
ra.height - (c->dy + 2 * BORDER),
|
||||
c->dx + 2 * BORDER,
|
||||
c->dy + 2 * BORDER);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -230,14 +250,12 @@ manage(Client *c, int mapped)
|
|||
* I can't find a way to have them notice during initdraw, so
|
||||
* I solve the problem this way instead. -rsc
|
||||
*/
|
||||
if(c->is9term)
|
||||
sendconfig(c);
|
||||
if (c->is9term) sendconfig(c);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
scanwins(ScreenInfo *s)
|
||||
{
|
||||
scanwins(ScreenInfo* s) {
|
||||
unsigned int i, nwins;
|
||||
Client* c;
|
||||
Window dw1, dw2, *wins;
|
||||
|
@ -246,8 +264,7 @@ scanwins(ScreenInfo *s)
|
|||
XQueryTree(dpy, s->root, &dw1, &dw2, &wins, &nwins);
|
||||
for (i = 0; i < nwins; i++) {
|
||||
XGetWindowAttributes(dpy, wins[i], &attr);
|
||||
if(attr.override_redirect || wins[i] == s->menuwin)
|
||||
continue;
|
||||
if (attr.override_redirect || wins[i] == s->menuwin) continue;
|
||||
c = getclient(wins[i], 1);
|
||||
if (c != 0 && c->window == wins[i] && !c->init) {
|
||||
c->x = attr.x;
|
||||
|
@ -257,16 +274,14 @@ scanwins(ScreenInfo *s)
|
|||
c->border = attr.border_width;
|
||||
c->screen = s;
|
||||
c->parent = s->root;
|
||||
if(attr.map_state == IsViewable)
|
||||
manage(c, 1);
|
||||
if (attr.map_state == IsViewable) manage(c, 1);
|
||||
}
|
||||
}
|
||||
XFree((void*)wins); /* cast is to shut stoopid compiler up */
|
||||
}
|
||||
|
||||
void
|
||||
gettrans(Client *c)
|
||||
{
|
||||
gettrans(Client* c) {
|
||||
Window trans;
|
||||
|
||||
trans = None;
|
||||
|
@ -277,8 +292,7 @@ gettrans(Client *c)
|
|||
}
|
||||
|
||||
void
|
||||
withdraw(Client *c)
|
||||
{
|
||||
withdraw(Client* c) {
|
||||
XUnmapWindow(dpy, c->parent);
|
||||
XReparentWindow(dpy, c->window, c->screen->root, c->x, c->y);
|
||||
XRemoveFromSaveSet(dpy, c->window);
|
||||
|
@ -291,8 +305,7 @@ withdraw(Client *c)
|
|||
}
|
||||
|
||||
static void
|
||||
installcmap(ScreenInfo *s, Colormap cmap)
|
||||
{
|
||||
installcmap(ScreenInfo* s, Colormap cmap) {
|
||||
if (cmap == None)
|
||||
XInstallColormap(dpy, s->def_cmap);
|
||||
else
|
||||
|
@ -300,8 +313,7 @@ installcmap(ScreenInfo *s, Colormap cmap)
|
|||
}
|
||||
|
||||
void
|
||||
cmapfocus(Client *c)
|
||||
{
|
||||
cmapfocus(Client* c) {
|
||||
int i, found;
|
||||
Client* cc;
|
||||
|
||||
|
@ -311,27 +323,24 @@ cmapfocus(Client *c)
|
|||
found = 0;
|
||||
for (i = c->ncmapwins - 1; i >= 0; i--) {
|
||||
installcmap(c->screen, c->wmcmaps[i]);
|
||||
if(c->cmapwins[i] == c->window)
|
||||
found++;
|
||||
if (c->cmapwins[i] == c->window) found++;
|
||||
}
|
||||
if(!found)
|
||||
installcmap(c->screen, c->cmap);
|
||||
}
|
||||
else if(c->trans != None && (cc = getclient(c->trans, 0)) != 0 && cc->ncmapwins != 0)
|
||||
if (!found) installcmap(c->screen, c->cmap);
|
||||
} else if (
|
||||
c->trans != None && (cc = getclient(c->trans, 0)) != 0 &&
|
||||
cc->ncmapwins != 0)
|
||||
cmapfocus(cc);
|
||||
else
|
||||
installcmap(c->screen, c->cmap);
|
||||
}
|
||||
|
||||
void
|
||||
cmapnofocus(ScreenInfo *s)
|
||||
{
|
||||
cmapnofocus(ScreenInfo* s) {
|
||||
installcmap(s, None);
|
||||
}
|
||||
|
||||
void
|
||||
getcmaps(Client *c)
|
||||
{
|
||||
getcmaps(Client* c) {
|
||||
int n, i;
|
||||
Window* cw;
|
||||
XWindowAttributes attr;
|
||||
|
@ -374,8 +383,7 @@ getcmaps(Client *c)
|
|||
}
|
||||
|
||||
void
|
||||
setlabel(Client *c)
|
||||
{
|
||||
setlabel(Client* c) {
|
||||
char *label, *p, *lc;
|
||||
int i;
|
||||
|
||||
|
@ -389,8 +397,7 @@ setlabel(Client *c)
|
|||
label = c->class;
|
||||
else
|
||||
label = "no label";
|
||||
if((p = index(label, ':')) != 0)
|
||||
*p = '\0';
|
||||
if ((p = index(label, ':')) != 0) *p = '\0';
|
||||
for (i = 0, lc = label; *lc != '\0'; lc++, i++) {
|
||||
if (i >= 23) {
|
||||
label[22] = '~';
|
||||
|
@ -403,91 +410,93 @@ setlabel(Client *c)
|
|||
|
||||
#ifdef SHAPE
|
||||
void
|
||||
setshape(Client *c)
|
||||
{
|
||||
setshape(Client* c) {
|
||||
int n, order;
|
||||
XRectangle* rect;
|
||||
|
||||
/* don't try to add a border if the window is non-rectangular */
|
||||
rect = XShapeGetRectangles(dpy, c->window, ShapeBounding, &n, &order);
|
||||
if (n > 1)
|
||||
XShapeCombineShape(dpy, c->parent, ShapeBounding, BORDER, BORDER,
|
||||
c->window, ShapeBounding, ShapeSet);
|
||||
XShapeCombineShape(
|
||||
dpy,
|
||||
c->parent,
|
||||
ShapeBounding,
|
||||
BORDER,
|
||||
BORDER,
|
||||
c->window,
|
||||
ShapeBounding,
|
||||
ShapeSet);
|
||||
XFree((void*)rect);
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
_getprop(Window w, Atom a, Atom type, long len, unsigned char **p)
|
||||
{
|
||||
_getprop(Window w, Atom a, Atom type, long len, unsigned char** p) {
|
||||
Atom real_type;
|
||||
int format;
|
||||
unsigned long n, extra;
|
||||
int status;
|
||||
|
||||
status = XGetWindowProperty(dpy, w, a, 0L, len, False, type, &real_type, &format, &n, &extra, p);
|
||||
if(status != Success || *p == 0)
|
||||
return -1;
|
||||
if(n == 0)
|
||||
XFree((void*) *p);
|
||||
status = XGetWindowProperty(
|
||||
dpy, w, a, 0L, len, False, type, &real_type, &format, &n, &extra, p);
|
||||
if (status != Success || *p == 0) return -1;
|
||||
if (n == 0) XFree((void*)*p);
|
||||
/* could check real_type, format, extra here... */
|
||||
return n;
|
||||
}
|
||||
|
||||
char*
|
||||
getprop(Window w, Atom a)
|
||||
{
|
||||
getprop(Window w, Atom a) {
|
||||
unsigned char* p;
|
||||
|
||||
if(_getprop(w, a, XA_STRING, 100L, &p) <= 0)
|
||||
return 0;
|
||||
if (_getprop(w, a, XA_STRING, 100L, &p) <= 0) return 0;
|
||||
return (char*)p;
|
||||
}
|
||||
|
||||
int
|
||||
get1prop(Window w, Atom a, Atom type)
|
||||
{
|
||||
get1prop(Window w, Atom a, Atom type) {
|
||||
char **p, *x;
|
||||
|
||||
if(_getprop(w, a, type, 1L, (void*)&p) <= 0)
|
||||
return 0;
|
||||
if (_getprop(w, a, type, 1L, (void*)&p) <= 0) return 0;
|
||||
x = *p;
|
||||
XFree((void*)p);
|
||||
return (int)(uintptr_t)x;
|
||||
}
|
||||
|
||||
Window
|
||||
getwprop(Window w, Atom a)
|
||||
{
|
||||
getwprop(Window w, Atom a) {
|
||||
return get1prop(w, a, XA_WINDOW);
|
||||
}
|
||||
|
||||
int
|
||||
getiprop(Window w, Atom a)
|
||||
{
|
||||
getiprop(Window w, Atom a) {
|
||||
return get1prop(w, a, XA_INTEGER);
|
||||
}
|
||||
|
||||
void
|
||||
setstate(Client *c, int state)
|
||||
{
|
||||
setstate(Client* c, int state) {
|
||||
long data[2];
|
||||
|
||||
data[0] = (long)state;
|
||||
data[1] = (long)None;
|
||||
|
||||
c->state = state;
|
||||
XChangeProperty(dpy, c->window, wm_state, wm_state, 32,
|
||||
PropModeReplace, (unsigned char *)data, 2);
|
||||
XChangeProperty(
|
||||
dpy,
|
||||
c->window,
|
||||
wm_state,
|
||||
wm_state,
|
||||
32,
|
||||
PropModeReplace,
|
||||
(unsigned char*)data,
|
||||
2);
|
||||
}
|
||||
|
||||
int
|
||||
getstate(Window w, int *state)
|
||||
{
|
||||
getstate(Window w, int* state) {
|
||||
long* p = 0;
|
||||
|
||||
if(_getprop(w, wm_state, wm_state, 2L, (void*)&p) <= 0)
|
||||
return 0;
|
||||
if (_getprop(w, wm_state, wm_state, 2L, (void*)&p) <= 0) return 0;
|
||||
|
||||
*state = (int)*p;
|
||||
XFree((char*)p);
|
||||
|
@ -495,8 +504,7 @@ getstate(Window w, int *state)
|
|||
}
|
||||
|
||||
void
|
||||
getproto(Client *c)
|
||||
{
|
||||
getproto(Client* c) {
|
||||
Atom* p;
|
||||
int i;
|
||||
long n;
|
||||
|
@ -504,8 +512,7 @@ getproto(Client *c)
|
|||
|
||||
w = c->window;
|
||||
c->proto = 0;
|
||||
if((n = _getprop(w, wm_protocols, XA_ATOM, 20L, (void*)&p)) <= 0)
|
||||
return;
|
||||
if ((n = _getprop(w, wm_protocols, XA_ATOM, 20L, (void*)&p)) <= 0) return;
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
if (p[i] == wm_delete)
|
||||
|
|
264
menu.c
Executable file → Normal file
264
menu.c
Executable file → Normal file
|
@ -25,13 +25,9 @@ int numhidden;
|
|||
int virt;
|
||||
int reversehide = 1;
|
||||
|
||||
Client * currents[NUMVIRTUALS] =
|
||||
{
|
||||
NULL, NULL, NULL, NULL
|
||||
};
|
||||
Client* currents[NUMVIRTUALS] = {NULL, NULL, NULL, NULL};
|
||||
|
||||
char *b2items[NUMVIRTUALS+1] =
|
||||
{
|
||||
char* b2items[NUMVIRTUALS + 1] = {
|
||||
"One",
|
||||
"Two",
|
||||
"Three",
|
||||
|
@ -44,16 +40,11 @@ char *b2items[NUMVIRTUALS+1] =
|
|||
"Ten",
|
||||
"Eleven",
|
||||
"Twelve",
|
||||
0
|
||||
};
|
||||
0};
|
||||
|
||||
Menu b2menu =
|
||||
{
|
||||
b2items
|
||||
};
|
||||
Menu b2menu = {b2items};
|
||||
|
||||
char *b3items[B3FIXED+MAXHIDDEN+1] =
|
||||
{
|
||||
char* b3items[B3FIXED + MAXHIDDEN + 1] = {
|
||||
"New",
|
||||
"Reshape",
|
||||
"Move",
|
||||
|
@ -62,11 +53,9 @@ char *b3items[B3FIXED+MAXHIDDEN+1] =
|
|||
#ifdef SHOWSTICK
|
||||
"Stick",
|
||||
#endif
|
||||
0
|
||||
};
|
||||
0};
|
||||
|
||||
enum
|
||||
{
|
||||
enum {
|
||||
New,
|
||||
Reshape,
|
||||
Move,
|
||||
|
@ -79,19 +68,12 @@ enum
|
|||
#endif
|
||||
};
|
||||
|
||||
Menu b3menu =
|
||||
{
|
||||
b3items
|
||||
};
|
||||
Menu b3menu = {b3items};
|
||||
|
||||
Menu egg =
|
||||
{
|
||||
version
|
||||
};
|
||||
Menu egg = {version};
|
||||
|
||||
void
|
||||
button(XButtonEvent *e)
|
||||
{
|
||||
button(XButtonEvent* e) {
|
||||
int n, shift;
|
||||
Client* c;
|
||||
Window dw;
|
||||
|
@ -99,39 +81,40 @@ button(XButtonEvent *e)
|
|||
|
||||
curtime = e->time;
|
||||
s = getscreen(e->root);
|
||||
if(s == 0)
|
||||
return;
|
||||
if (s == 0) return;
|
||||
c = getclient(e->window, 0);
|
||||
if (c) {
|
||||
if(debug) fprintf(stderr, "but: e x=%d y=%d c x=%d y=%d dx=%d dy=%d BORDR %d\n",
|
||||
e->x, e->y, c->x, c->y, c->dx, c->dy, BORDER);
|
||||
if (debug)
|
||||
fprintf(
|
||||
stderr,
|
||||
"but: e x=%d y=%d c x=%d y=%d dx=%d dy=%d BORDR %d\n",
|
||||
e->x,
|
||||
e->y,
|
||||
c->x,
|
||||
c->y,
|
||||
c->dx,
|
||||
c->dy,
|
||||
BORDER);
|
||||
if (borderorient(c, e->x, e->y) != BorderUnknown) {
|
||||
switch (e->button) {
|
||||
case Button1:
|
||||
case Button2:
|
||||
reshape(c, e->button, pull, e);
|
||||
return;
|
||||
case Button3:
|
||||
move(c, Button3);
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
case Button2: reshape(c, e->button, pull, e); return;
|
||||
case Button3: move(c, Button3); return;
|
||||
default: return;
|
||||
}
|
||||
}
|
||||
e->x += c->x - BORDER;
|
||||
e->y += c->y - BORDER;
|
||||
} else if (e->window != e->root) {
|
||||
if(debug) fprintf(stderr, "but no client: e x=%d y=%d\n",
|
||||
e->x, e->y);
|
||||
XTranslateCoordinates(dpy, e->window, s->root, e->x, e->y,
|
||||
&e->x, &e->y, &dw);
|
||||
if (debug) fprintf(stderr, "but no client: e x=%d y=%d\n", e->x, e->y);
|
||||
XTranslateCoordinates(
|
||||
dpy, e->window, s->root, e->x, e->y, &e->x, &e->y, &dw);
|
||||
}
|
||||
switch (e->button) {
|
||||
case Button1:
|
||||
fflush(stdout);
|
||||
if (c) {
|
||||
if (ffm)
|
||||
XRaiseWindow(dpy, c->window);
|
||||
if (ffm) XRaiseWindow(dpy, c->window);
|
||||
XMapRaised(dpy, c->parent);
|
||||
top(c);
|
||||
active(c);
|
||||
|
@ -142,67 +125,48 @@ button(XButtonEvent *e)
|
|||
XMapRaised(dpy, c->parent);
|
||||
active(c);
|
||||
XAllowEvents(dpy, ReplayPointer, curtime);
|
||||
} else if((e->state&(ShiftMask|ControlMask))==(ShiftMask|ControlMask)){
|
||||
} else if (
|
||||
(e->state & (ShiftMask | ControlMask)) == (ShiftMask | ControlMask)) {
|
||||
menuhit(e, &egg);
|
||||
} else if (numvirtuals > 1 && (n = menuhit(e, &b2menu)) > -1)
|
||||
button2(n);
|
||||
return;
|
||||
case Button3:
|
||||
break;
|
||||
case Button3: break;
|
||||
case Button4:
|
||||
/* scroll up changes to previous virtual screen */
|
||||
if (!c && e->type == ButtonPress)
|
||||
if(numvirtuals > 1 && virt > 0)
|
||||
switch_to(virt - 1);
|
||||
if (numvirtuals > 1 && virt > 0) switch_to(virt - 1);
|
||||
return;
|
||||
case Button5:
|
||||
/* scroll down changes to next virtual screen */
|
||||
if (!c && e->type == ButtonPress)
|
||||
if(numvirtuals > 1 && virt < numvirtuals - 1)
|
||||
switch_to(virt + 1);
|
||||
return;
|
||||
default:
|
||||
if (numvirtuals > 1 && virt < numvirtuals - 1) switch_to(virt + 1);
|
||||
return;
|
||||
default: return;
|
||||
}
|
||||
|
||||
if(current && current->screen == s)
|
||||
cmapnofocus(s);
|
||||
if (current && current->screen == s) cmapnofocus(s);
|
||||
switch (n = menuhit(e, &b3menu)) {
|
||||
case New:
|
||||
spawn(s);
|
||||
break;
|
||||
case Reshape:
|
||||
reshape(selectwin(1, 0, s), Button3, sweep, 0);
|
||||
break;
|
||||
case Move:
|
||||
move(selectwin(0, 0, s), Button3);
|
||||
break;
|
||||
case New: spawn(s); break;
|
||||
case Reshape: reshape(selectwin(1, 0, s), Button3, sweep, 0); break;
|
||||
case Move: move(selectwin(0, 0, s), Button3); break;
|
||||
case Delete:
|
||||
shift = 0;
|
||||
c = selectwin(1, &shift, s);
|
||||
delete (c, shift);
|
||||
break;
|
||||
case Hide:
|
||||
hide(selectwin(1, 0, s));
|
||||
break;
|
||||
case Hide: hide(selectwin(1, 0, s)); break;
|
||||
#ifdef SHOWSTICK
|
||||
case Stick:
|
||||
stick(selectwin(1, 0, s));
|
||||
break;
|
||||
case Stick: stick(selectwin(1, 0, s)); break;
|
||||
#endif
|
||||
default: /* unhide window */
|
||||
unhide(n - B3FIXED, 1);
|
||||
break;
|
||||
case -1: /* nothing */
|
||||
break;
|
||||
default: /* unhide window */ unhide(n - B3FIXED, 1); break;
|
||||
case -1: /* nothing */ break;
|
||||
}
|
||||
if(current && current->screen == s)
|
||||
cmapfocus(current);
|
||||
if (current && current->screen == s) cmapfocus(current);
|
||||
}
|
||||
|
||||
void
|
||||
spawn(ScreenInfo *s)
|
||||
{
|
||||
spawn(ScreenInfo* s) {
|
||||
/*
|
||||
* ugly dance to cause sweeping for terminals.
|
||||
* the very next window created will require sweeping.
|
||||
|
@ -217,8 +181,7 @@ spawn(ScreenInfo *s)
|
|||
if (fork() == 0) {
|
||||
if (fork() == 0) {
|
||||
close(ConnectionNumber(dpy));
|
||||
if(s->display[0] != '\0')
|
||||
putenv(s->display);
|
||||
if (s->display[0] != '\0') putenv(s->display);
|
||||
signal(SIGINT, SIG_DFL);
|
||||
signal(SIGTERM, SIG_DFL);
|
||||
signal(SIGHUP, SIG_DFL);
|
||||
|
@ -239,21 +202,24 @@ spawn(ScreenInfo *s)
|
|||
}
|
||||
|
||||
void
|
||||
reshape(Client *c, int but, int (*fn)(Client*, int, XButtonEvent *), XButtonEvent *e)
|
||||
{
|
||||
reshape(
|
||||
Client* c, int but, int (*fn)(Client*, int, XButtonEvent*), XButtonEvent* e) {
|
||||
int odx, ody;
|
||||
|
||||
if(c == 0)
|
||||
return;
|
||||
if (c == 0) return;
|
||||
odx = c->dx;
|
||||
ody = c->dy;
|
||||
if(fn(c, but, e) == 0)
|
||||
return;
|
||||
if (fn(c, but, e) == 0) return;
|
||||
active(c);
|
||||
top(c);
|
||||
XRaiseWindow(dpy, c->parent);
|
||||
XMoveResizeWindow(dpy, c->parent, c->x-BORDER, c->y-BORDER,
|
||||
c->dx+2*BORDER, c->dy+2*BORDER);
|
||||
XMoveResizeWindow(
|
||||
dpy,
|
||||
c->parent,
|
||||
c->x - BORDER,
|
||||
c->y - BORDER,
|
||||
c->dx + 2 * BORDER,
|
||||
c->dy + 2 * BORDER);
|
||||
if (c->dx == odx && c->dy == ody)
|
||||
sendconfig(c);
|
||||
else
|
||||
|
@ -261,12 +227,9 @@ reshape(Client *c, int but, int (*fn)(Client*, int, XButtonEvent *), XButtonEven
|
|||
}
|
||||
|
||||
void
|
||||
move(Client *c, int but)
|
||||
{
|
||||
if(c == 0)
|
||||
return;
|
||||
if(drag(c, but) == 0)
|
||||
return;
|
||||
move(Client* c, int but) {
|
||||
if (c == 0) return;
|
||||
if (drag(c, but) == 0) return;
|
||||
active(c);
|
||||
top(c);
|
||||
XRaiseWindow(dpy, c->parent);
|
||||
|
@ -274,11 +237,8 @@ move(Client *c, int but)
|
|||
sendconfig(c);
|
||||
}
|
||||
|
||||
void
|
||||
delete(Client *c, int shift)
|
||||
{
|
||||
if(c == 0)
|
||||
return;
|
||||
void delete (Client* c, int shift) {
|
||||
if (c == 0) return;
|
||||
if ((c->proto & Pdelete) && !shift)
|
||||
sendcmessage(c->window, wm_protocols, wm_delete, 0, 0);
|
||||
else
|
||||
|
@ -286,10 +246,8 @@ delete(Client *c, int shift)
|
|||
}
|
||||
|
||||
void
|
||||
hide(Client *c)
|
||||
{
|
||||
if(c == 0 || numhidden == MAXHIDDEN)
|
||||
return;
|
||||
hide(Client* c) {
|
||||
if (c == 0 || numhidden == MAXHIDDEN) return;
|
||||
if (hidden(c)) {
|
||||
fprintf(stderr, "ryudo: already hidden: %s\n", c->label);
|
||||
return;
|
||||
|
@ -297,11 +255,11 @@ hide(Client *c)
|
|||
XUnmapWindow(dpy, c->parent);
|
||||
XUnmapWindow(dpy, c->window);
|
||||
setstate(c, IconicState);
|
||||
if(c == current)
|
||||
nofocus();
|
||||
if (c == current) nofocus();
|
||||
if (reversehide) {
|
||||
memmove(hiddenc + 1, hiddenc, numhidden * sizeof hiddenc[0]);
|
||||
memmove(b3items+B3FIXED+1, b3items+B3FIXED, numhidden*sizeof b3items[0]);
|
||||
memmove(
|
||||
b3items + B3FIXED + 1, b3items + B3FIXED, numhidden * sizeof b3items[0]);
|
||||
hiddenc[0] = c;
|
||||
b3items[B3FIXED] = c->label;
|
||||
} else {
|
||||
|
@ -313,8 +271,7 @@ hide(Client *c)
|
|||
}
|
||||
|
||||
void
|
||||
unhide(int n, int map)
|
||||
{
|
||||
unhide(int n, int map) {
|
||||
Client* c;
|
||||
int i;
|
||||
|
||||
|
@ -324,8 +281,11 @@ unhide(int n, int map)
|
|||
}
|
||||
c = hiddenc[n];
|
||||
if (!hidden(c)) {
|
||||
fprintf(stderr, "ryudo: unhide: not hidden: %s(0x%x)\n",
|
||||
c->label, (int)c->window);
|
||||
fprintf(
|
||||
stderr,
|
||||
"ryudo: unhide: not hidden: %s(0x%x)\n",
|
||||
c->label,
|
||||
(int)c->window);
|
||||
return;
|
||||
}
|
||||
c->virt = virt;
|
||||
|
@ -347,8 +307,7 @@ unhide(int n, int map)
|
|||
}
|
||||
|
||||
void
|
||||
unhidec(Client *c, int map)
|
||||
{
|
||||
unhidec(Client* c, int map) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < numhidden; i++)
|
||||
|
@ -356,28 +315,25 @@ unhidec(Client *c, int map)
|
|||
unhide(i, map);
|
||||
return;
|
||||
}
|
||||
fprintf(stderr, "ryudo: unhidec: not hidden: %s(0x%x)\n",
|
||||
c->label, (int)c->window);
|
||||
fprintf(
|
||||
stderr, "ryudo: unhidec: not hidden: %s(0x%x)\n", c->label, (int)c->window);
|
||||
}
|
||||
|
||||
void
|
||||
stick(Client *c)
|
||||
{
|
||||
stick(Client* c) {
|
||||
if (numvirtuals > 1 && c->virt >= 0)
|
||||
c->virt = -1;
|
||||
else c->virt = virt;
|
||||
else
|
||||
c->virt = virt;
|
||||
}
|
||||
|
||||
void
|
||||
renamec(Client *c, char *name)
|
||||
{
|
||||
renamec(Client* c, char* name) {
|
||||
int i;
|
||||
|
||||
if(name == 0)
|
||||
name = "???";
|
||||
if (name == 0) name = "???";
|
||||
c->label = name;
|
||||
if(!hidden(c))
|
||||
return;
|
||||
if (!hidden(c)) return;
|
||||
for (i = 0; i < numhidden; i++)
|
||||
if (c == hiddenc[i]) {
|
||||
b3items[B3FIXED + i] = name;
|
||||
|
@ -386,63 +342,49 @@ renamec(Client *c, char *name)
|
|||
}
|
||||
|
||||
void
|
||||
button2(int n)
|
||||
{
|
||||
button2(int n) {
|
||||
switch_to(n);
|
||||
if(current)
|
||||
cmapfocus(current);
|
||||
if (current) cmapfocus(current);
|
||||
}
|
||||
|
||||
void
|
||||
switch_to_c(int n, Client *c)
|
||||
{
|
||||
if(c == 0)
|
||||
return;
|
||||
switch_to_c(int n, Client* c) {
|
||||
if (c == 0) return;
|
||||
|
||||
if(c->next)
|
||||
switch_to_c(n, c->next);
|
||||
if (c->next) switch_to_c(n, c->next);
|
||||
|
||||
if(c->parent == DefaultRootWindow(dpy))
|
||||
return;
|
||||
if (c->parent == DefaultRootWindow(dpy)) return;
|
||||
|
||||
#ifdef AUTOSTICK
|
||||
if(c->virt >= 0 && isautostick(c)){
|
||||
stick(c);
|
||||
}
|
||||
if (c->virt >= 0 && isautostick(c)) { stick(c); }
|
||||
#endif
|
||||
|
||||
if (c->virt != virt && c->state == NormalState && c->virt >= 0) {
|
||||
XUnmapWindow(dpy, c->parent);
|
||||
XUnmapWindow(dpy, c->window);
|
||||
setstate(c, IconicState);
|
||||
if(c == current)
|
||||
nofocus();
|
||||
if (c == current) nofocus();
|
||||
} else if (c->virt == virt && c->state == IconicState) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < numhidden; i++)
|
||||
if(c == hiddenc[i])
|
||||
break;
|
||||
if (c == hiddenc[i]) break;
|
||||
|
||||
if (i == numhidden) {
|
||||
XMapWindow(dpy, c->window);
|
||||
XMapWindow(dpy, c->parent);
|
||||
setstate(c, NormalState);
|
||||
if(currents[virt] == c)
|
||||
active(c);
|
||||
|
||||
if (currents[virt] == c) active(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
switch_to(int n)
|
||||
{
|
||||
switch_to(int n) {
|
||||
#ifdef VIRTNOTIFY
|
||||
static char virtmsg[32];
|
||||
#endif
|
||||
if(n == virt)
|
||||
return;
|
||||
if (n == virt) return;
|
||||
currents[virt] = current;
|
||||
virt = n;
|
||||
|
||||
|
@ -454,23 +396,27 @@ switch_to(int n)
|
|||
switch_to_c(n, clients);
|
||||
current = currents[virt];
|
||||
top(current);
|
||||
if(fork() == 0)
|
||||
{
|
||||
if (fork() == 0) {
|
||||
close(ConnectionNumber(dpy));
|
||||
if(dpy != '\0')
|
||||
putenv(dpy);
|
||||
if (dpy != '\0') putenv(dpy);
|
||||
signal(SIGINT, SIG_DFL);
|
||||
signal(SIGTERM, SIG_DFL);
|
||||
signal(SIGHUP, SIG_DFL);
|
||||
#ifdef VIRTNOTIFY
|
||||
sprintf(virtmsg, VIRTMSG, b2items[virt]);
|
||||
execlp("notify-send", "notify-send", "-c", "virtual", VIRTHEADER, virtmsg, (char*)0);
|
||||
execlp(
|
||||
"notify-send",
|
||||
"notify-send",
|
||||
"-c",
|
||||
"virtual",
|
||||
VIRTHEADER,
|
||||
virtmsg,
|
||||
(char*)0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
initb2menu(int n)
|
||||
{
|
||||
initb2menu(int n) {
|
||||
b2items[n] = 0;
|
||||
}
|
||||
|
|
565
printevent.c
Executable file → Normal file
565
printevent.c
Executable file → Normal file
|
@ -56,59 +56,45 @@ static char* sep = " ";
|
|||
|
||||
/* Returns the string equivalent of a boolean parameter */
|
||||
static char*
|
||||
TorF(int bool)
|
||||
{
|
||||
TorF(int bool) {
|
||||
switch (bool) {
|
||||
case True:
|
||||
return ("True");
|
||||
case True: return ("True");
|
||||
|
||||
case False:
|
||||
return ("False");
|
||||
case False: return ("False");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a property notify state */
|
||||
static char*
|
||||
PropertyState(int state)
|
||||
{
|
||||
PropertyState(int state) {
|
||||
switch (state) {
|
||||
case PropertyNewValue:
|
||||
return ("PropertyNewValue");
|
||||
case PropertyNewValue: return ("PropertyNewValue");
|
||||
|
||||
case PropertyDelete:
|
||||
return ("PropertyDelete");
|
||||
case PropertyDelete: return ("PropertyDelete");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a visibility notify state */
|
||||
static char*
|
||||
VisibilityState(int state)
|
||||
{
|
||||
VisibilityState(int state) {
|
||||
switch (state) {
|
||||
case VisibilityUnobscured:
|
||||
return ("VisibilityUnobscured");
|
||||
case VisibilityUnobscured: return ("VisibilityUnobscured");
|
||||
|
||||
case VisibilityPartiallyObscured:
|
||||
return ("VisibilityPartiallyObscured");
|
||||
case VisibilityPartiallyObscured: return ("VisibilityPartiallyObscured");
|
||||
|
||||
case VisibilityFullyObscured:
|
||||
return ("VisibilityFullyObscured");
|
||||
case VisibilityFullyObscured: return ("VisibilityFullyObscured");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a timestamp */
|
||||
static char*
|
||||
ServerTime(Time time)
|
||||
{
|
||||
ServerTime(Time time) {
|
||||
unsigned long msec;
|
||||
unsigned long sec;
|
||||
unsigned long min;
|
||||
|
@ -127,8 +113,15 @@ ServerTime(Time time)
|
|||
day = time;
|
||||
|
||||
if (0)
|
||||
sprintf(buffer, "%lu day%s %02lu:%02lu:%02lu.%03lu",
|
||||
day, day == 1 ? "" : "(s)", hr, min, sec, msec);
|
||||
sprintf(
|
||||
buffer,
|
||||
"%lu day%s %02lu:%02lu:%02lu.%03lu",
|
||||
day,
|
||||
day == 1 ? "" : "(s)",
|
||||
hr,
|
||||
min,
|
||||
sec,
|
||||
msec);
|
||||
|
||||
sprintf(buffer, "%lud%luh%lum%lu.%03lds", day, hr, min, sec, msec);
|
||||
return (buffer);
|
||||
|
@ -136,16 +129,14 @@ if(0)
|
|||
|
||||
/* Simple structure to ease the interpretation of masks */
|
||||
typedef struct MaskType MaskType;
|
||||
struct MaskType
|
||||
{
|
||||
struct MaskType {
|
||||
unsigned int value;
|
||||
char* string;
|
||||
};
|
||||
|
||||
/* Returns the string equivalent of a mask of buttons and/or modifier keys */
|
||||
static char*
|
||||
ButtonAndOrModifierState(unsigned int state)
|
||||
{
|
||||
ButtonAndOrModifierState(unsigned int state) {
|
||||
static char buffer[256];
|
||||
static MaskType masks[] = {
|
||||
{Button1Mask, "Button1Mask"},
|
||||
|
@ -182,8 +173,7 @@ ButtonAndOrModifierState(unsigned int state)
|
|||
|
||||
/* Returns the string equivalent of a mask of configure window values */
|
||||
static char*
|
||||
ConfigureValueMask(unsigned int valuemask)
|
||||
{
|
||||
ConfigureValueMask(unsigned int valuemask) {
|
||||
static char buffer[256];
|
||||
static MaskType masks[] = {
|
||||
{CWX, "CWX"},
|
||||
|
@ -215,24 +205,19 @@ ConfigureValueMask(unsigned int valuemask)
|
|||
|
||||
/* Returns the string equivalent of a motion hint */
|
||||
static char*
|
||||
IsHint(char is_hint)
|
||||
{
|
||||
IsHint(char is_hint) {
|
||||
switch (is_hint) {
|
||||
case NotifyNormal:
|
||||
return ("NotifyNormal");
|
||||
case NotifyNormal: return ("NotifyNormal");
|
||||
|
||||
case NotifyHint:
|
||||
return ("NotifyHint");
|
||||
case NotifyHint: return ("NotifyHint");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of an id or the value "None" */
|
||||
static char*
|
||||
MaybeNone(int value)
|
||||
{
|
||||
MaybeNone(int value) {
|
||||
static char buffer[16];
|
||||
|
||||
if (value == None)
|
||||
|
@ -245,184 +230,135 @@ MaybeNone(int value)
|
|||
|
||||
/* Returns the string equivalent of a colormap state */
|
||||
static char*
|
||||
ColormapState(int state)
|
||||
{
|
||||
ColormapState(int state) {
|
||||
switch (state) {
|
||||
case ColormapInstalled:
|
||||
return ("ColormapInstalled");
|
||||
case ColormapInstalled: return ("ColormapInstalled");
|
||||
|
||||
case ColormapUninstalled:
|
||||
return ("ColormapUninstalled");
|
||||
case ColormapUninstalled: return ("ColormapUninstalled");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a crossing detail */
|
||||
static char*
|
||||
CrossingDetail(int detail)
|
||||
{
|
||||
CrossingDetail(int detail) {
|
||||
switch (detail) {
|
||||
case NotifyAncestor:
|
||||
return ("NotifyAncestor");
|
||||
case NotifyAncestor: return ("NotifyAncestor");
|
||||
|
||||
case NotifyInferior:
|
||||
return ("NotifyInferior");
|
||||
case NotifyInferior: return ("NotifyInferior");
|
||||
|
||||
case NotifyVirtual:
|
||||
return ("NotifyVirtual");
|
||||
case NotifyVirtual: return ("NotifyVirtual");
|
||||
|
||||
case NotifyNonlinear:
|
||||
return ("NotifyNonlinear");
|
||||
case NotifyNonlinear: return ("NotifyNonlinear");
|
||||
|
||||
case NotifyNonlinearVirtual:
|
||||
return ("NotifyNonlinearVirtual");
|
||||
case NotifyNonlinearVirtual: return ("NotifyNonlinearVirtual");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a focus change detail */
|
||||
static char*
|
||||
FocusChangeDetail(int detail)
|
||||
{
|
||||
FocusChangeDetail(int detail) {
|
||||
switch (detail) {
|
||||
case NotifyAncestor:
|
||||
return ("NotifyAncestor");
|
||||
case NotifyAncestor: return ("NotifyAncestor");
|
||||
|
||||
case NotifyInferior:
|
||||
return ("NotifyInferior");
|
||||
case NotifyInferior: return ("NotifyInferior");
|
||||
|
||||
case NotifyVirtual:
|
||||
return ("NotifyVirtual");
|
||||
case NotifyVirtual: return ("NotifyVirtual");
|
||||
|
||||
case NotifyNonlinear:
|
||||
return ("NotifyNonlinear");
|
||||
case NotifyNonlinear: return ("NotifyNonlinear");
|
||||
|
||||
case NotifyNonlinearVirtual:
|
||||
return ("NotifyNonlinearVirtual");
|
||||
case NotifyNonlinearVirtual: return ("NotifyNonlinearVirtual");
|
||||
|
||||
case NotifyPointer:
|
||||
return ("NotifyPointer");
|
||||
case NotifyPointer: return ("NotifyPointer");
|
||||
|
||||
case NotifyPointerRoot:
|
||||
return ("NotifyPointerRoot");
|
||||
case NotifyPointerRoot: return ("NotifyPointerRoot");
|
||||
|
||||
case NotifyDetailNone:
|
||||
return ("NotifyDetailNone");
|
||||
case NotifyDetailNone: return ("NotifyDetailNone");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a configure detail */
|
||||
static char*
|
||||
ConfigureDetail(int detail)
|
||||
{
|
||||
ConfigureDetail(int detail) {
|
||||
switch (detail) {
|
||||
case Above:
|
||||
return ("Above");
|
||||
case Above: return ("Above");
|
||||
|
||||
case Below:
|
||||
return ("Below");
|
||||
case Below: return ("Below");
|
||||
|
||||
case TopIf:
|
||||
return ("TopIf");
|
||||
case TopIf: return ("TopIf");
|
||||
|
||||
case BottomIf:
|
||||
return ("BottomIf");
|
||||
case BottomIf: return ("BottomIf");
|
||||
|
||||
case Opposite:
|
||||
return ("Opposite");
|
||||
case Opposite: return ("Opposite");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a grab mode */
|
||||
static char*
|
||||
GrabMode(int mode)
|
||||
{
|
||||
GrabMode(int mode) {
|
||||
switch (mode) {
|
||||
case NotifyNormal:
|
||||
return ("NotifyNormal");
|
||||
case NotifyNormal: return ("NotifyNormal");
|
||||
|
||||
case NotifyGrab:
|
||||
return ("NotifyGrab");
|
||||
case NotifyGrab: return ("NotifyGrab");
|
||||
|
||||
case NotifyUngrab:
|
||||
return ("NotifyUngrab");
|
||||
case NotifyUngrab: return ("NotifyUngrab");
|
||||
|
||||
case NotifyWhileGrabbed:
|
||||
return ("NotifyWhileGrabbed");
|
||||
case NotifyWhileGrabbed: return ("NotifyWhileGrabbed");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a mapping request */
|
||||
static char*
|
||||
MappingRequest(int request)
|
||||
{
|
||||
MappingRequest(int request) {
|
||||
switch (request) {
|
||||
case MappingModifier:
|
||||
return ("MappingModifier");
|
||||
case MappingModifier: return ("MappingModifier");
|
||||
|
||||
case MappingKeyboard:
|
||||
return ("MappingKeyboard");
|
||||
case MappingKeyboard: return ("MappingKeyboard");
|
||||
|
||||
case MappingPointer:
|
||||
return ("MappingPointer");
|
||||
case MappingPointer: return ("MappingPointer");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a stacking order place */
|
||||
static char*
|
||||
Place(int place)
|
||||
{
|
||||
Place(int place) {
|
||||
switch (place) {
|
||||
case PlaceOnTop:
|
||||
return ("PlaceOnTop");
|
||||
case PlaceOnTop: return ("PlaceOnTop");
|
||||
|
||||
case PlaceOnBottom:
|
||||
return ("PlaceOnBottom");
|
||||
case PlaceOnBottom: return ("PlaceOnBottom");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a major code */
|
||||
static char*
|
||||
MajorCode(int code)
|
||||
{
|
||||
MajorCode(int code) {
|
||||
static char buffer[32];
|
||||
|
||||
switch (code) {
|
||||
case X_CopyArea:
|
||||
return ("X_CopyArea");
|
||||
case X_CopyArea: return ("X_CopyArea");
|
||||
|
||||
case X_CopyPlane:
|
||||
return ("X_CopyPlane");
|
||||
case X_CopyPlane: return ("X_CopyPlane");
|
||||
|
||||
default:
|
||||
sprintf(buffer, "0x%x", code);
|
||||
return (buffer);
|
||||
default: sprintf(buffer, "0x%x", code); return (buffer);
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent the keycode contained in the key event */
|
||||
static char*
|
||||
Keycode(XKeyEvent *ev)
|
||||
{
|
||||
Keycode(XKeyEvent* ev) {
|
||||
static char buffer[256];
|
||||
KeySym keysym_str;
|
||||
char* keysym_name;
|
||||
|
@ -434,20 +370,22 @@ Keycode(XKeyEvent *ev)
|
|||
keysym_name = "NoSymbol";
|
||||
else if (!(keysym_name = XKeysymToString(keysym_str)))
|
||||
keysym_name = "(no name)";
|
||||
sprintf(buffer, "%u (keysym 0x%x \"%s\")",
|
||||
(int)ev->keycode, (int)keysym_str, keysym_name);
|
||||
sprintf(
|
||||
buffer,
|
||||
"%u (keysym 0x%x \"%s\")",
|
||||
(int)ev->keycode,
|
||||
(int)keysym_str,
|
||||
keysym_name);
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of an atom or "None"*/
|
||||
static char*
|
||||
AtomName(Display *dpy, Atom atom)
|
||||
{
|
||||
AtomName(Display* dpy, Atom atom) {
|
||||
static char buffer[256];
|
||||
char* atom_name;
|
||||
|
||||
if (atom == None)
|
||||
return ("None");
|
||||
if (atom == None) return ("None");
|
||||
|
||||
atom_name = XGetAtomName(dpy, atom);
|
||||
strncpy(buffer, atom_name, 256);
|
||||
|
@ -460,8 +398,7 @@ AtomName(Display *dpy, Atom atom)
|
|||
/******************************************************************************/
|
||||
|
||||
static void
|
||||
VerbMotion(XMotionEvent *ev)
|
||||
{
|
||||
VerbMotion(XMotionEvent* ev) {
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("root=0x%x%s", (int)ev->root, sep);
|
||||
printf("subwindow=0x%x%s", (int)ev->subwindow, sep);
|
||||
|
@ -474,8 +411,7 @@ VerbMotion(XMotionEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbButton(XButtonEvent *ev)
|
||||
{
|
||||
VerbButton(XButtonEvent* ev) {
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("root=0x%x%s", (int)ev->root, sep);
|
||||
printf("subwindow=0x%x%s", (int)ev->subwindow, sep);
|
||||
|
@ -488,8 +424,7 @@ VerbButton(XButtonEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbColormap(XColormapEvent *ev)
|
||||
{
|
||||
VerbColormap(XColormapEvent* ev) {
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("colormap=%s%s", MaybeNone(ev->colormap), sep);
|
||||
printf("new=%s%s", TorF(ev->new), sep);
|
||||
|
@ -497,8 +432,7 @@ VerbColormap(XColormapEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbCrossing(XCrossingEvent *ev)
|
||||
{
|
||||
VerbCrossing(XCrossingEvent* ev) {
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("root=0x%x%s", (int)ev->root, sep);
|
||||
printf("subwindow=0x%x%s", (int)ev->subwindow, sep);
|
||||
|
@ -513,8 +447,7 @@ VerbCrossing(XCrossingEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbExpose(XExposeEvent *ev)
|
||||
{
|
||||
VerbExpose(XExposeEvent* ev) {
|
||||
printf("window=0x%x%s", (int)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);
|
||||
|
@ -522,8 +455,7 @@ VerbExpose(XExposeEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbGraphicsExpose(XGraphicsExposeEvent *ev)
|
||||
{
|
||||
VerbGraphicsExpose(XGraphicsExposeEvent* ev) {
|
||||
printf("drawable=0x%x%s", (int)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);
|
||||
|
@ -532,48 +464,40 @@ VerbGraphicsExpose(XGraphicsExposeEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbNoExpose(XNoExposeEvent *ev)
|
||||
{
|
||||
VerbNoExpose(XNoExposeEvent* ev) {
|
||||
printf("drawable=0x%x%s", (int)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)
|
||||
{
|
||||
VerbFocus(XFocusChangeEvent* ev) {
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("mode=%s%s", GrabMode(ev->mode), sep);
|
||||
printf("detail=%s\n", FocusChangeDetail(ev->detail));
|
||||
}
|
||||
|
||||
static void
|
||||
VerbKeymap(XKeymapEvent *ev)
|
||||
{
|
||||
VerbKeymap(XKeymapEvent* ev) {
|
||||
int i;
|
||||
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("key_vector=");
|
||||
for (i = 0; i < 32; i++)
|
||||
printf("%02x", ev->key_vector[i]);
|
||||
for (i = 0; i < 32; i++) printf("%02x", ev->key_vector[i]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
static void
|
||||
VerbKey(XKeyEvent *ev)
|
||||
{
|
||||
VerbKey(XKeyEvent* ev) {
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("root=0x%x%s", (int)ev->root, sep);
|
||||
if(ev->subwindow)
|
||||
printf("subwindow=0x%x%s", (int)ev->subwindow, sep);
|
||||
if (ev->subwindow) printf("subwindow=0x%x%s", (int)ev->subwindow, sep);
|
||||
printf("time=%s%s", ServerTime(ev->time), sep);
|
||||
printf("[%d,%d]%s", ev->x, ev->y, sep);
|
||||
printf("root=[%d,%d]%s", ev->x_root, ev->y_root, sep);
|
||||
if(ev->state)
|
||||
printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep);
|
||||
if (ev->state) printf("state=%s%s", ButtonAndOrModifierState(ev->state), sep);
|
||||
printf("keycode=%s%s", Keycode(ev), sep);
|
||||
if(!ev->same_screen)
|
||||
printf("!same_screen", TorF(ev->same_screen));
|
||||
if (!ev->same_screen) printf("!same_screen", TorF(ev->same_screen));
|
||||
printf("\n");
|
||||
return;
|
||||
|
||||
|
@ -589,8 +513,7 @@ VerbKey(XKeyEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbProperty(XPropertyEvent *ev)
|
||||
{
|
||||
VerbProperty(XPropertyEvent* ev) {
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("atom=%s%s", AtomName(ev->display, ev->atom), sep);
|
||||
printf("time=%s%s", ServerTime(ev->time), sep);
|
||||
|
@ -598,23 +521,20 @@ VerbProperty(XPropertyEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbResizeRequest(XResizeRequestEvent *ev)
|
||||
{
|
||||
VerbResizeRequest(XResizeRequestEvent* ev) {
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("width=%d height=%d\n", ev->width, ev->height);
|
||||
}
|
||||
|
||||
static void
|
||||
VerbCirculate(XCirculateEvent *ev)
|
||||
{
|
||||
VerbCirculate(XCirculateEvent* ev) {
|
||||
printf("event=0x%x%s", (int)ev->event, sep);
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("place=%s\n", Place(ev->place));
|
||||
}
|
||||
|
||||
static void
|
||||
VerbConfigure(XConfigureEvent *ev)
|
||||
{
|
||||
VerbConfigure(XConfigureEvent* ev) {
|
||||
printf("event=0x%x%s", (int)ev->event, sep);
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||
|
@ -625,8 +545,7 @@ VerbConfigure(XConfigureEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbCreateWindow(XCreateWindowEvent *ev)
|
||||
{
|
||||
VerbCreateWindow(XCreateWindowEvent* ev) {
|
||||
printf("parent=0x%x%s", (int)ev->parent, sep);
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||
|
@ -636,31 +555,27 @@ VerbCreateWindow(XCreateWindowEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbDestroyWindow(XDestroyWindowEvent *ev)
|
||||
{
|
||||
VerbDestroyWindow(XDestroyWindowEvent* ev) {
|
||||
printf("event=0x%x%s", (int)ev->event, sep);
|
||||
printf("window=0x%x\n", (int)ev->window);
|
||||
}
|
||||
|
||||
static void
|
||||
VerbGravity(XGravityEvent *ev)
|
||||
{
|
||||
VerbGravity(XGravityEvent* ev) {
|
||||
printf("event=0x%x%s", (int)ev->event, sep);
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("x=%d y=%d\n", ev->x, ev->y);
|
||||
}
|
||||
|
||||
static void
|
||||
VerbMap(XMapEvent *ev)
|
||||
{
|
||||
VerbMap(XMapEvent* ev) {
|
||||
printf("event=0x%x%s", (int)ev->event, sep);
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("override_redirect=%s\n", TorF(ev->override_redirect));
|
||||
}
|
||||
|
||||
static void
|
||||
VerbReparent(XReparentEvent *ev)
|
||||
{
|
||||
VerbReparent(XReparentEvent* ev) {
|
||||
printf("event=0x%x%s", (int)ev->event, sep);
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("parent=0x%x%s", (int)ev->parent, sep);
|
||||
|
@ -669,24 +584,21 @@ VerbReparent(XReparentEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbUnmap(XUnmapEvent *ev)
|
||||
{
|
||||
VerbUnmap(XUnmapEvent* ev) {
|
||||
printf("event=0x%x%s", (int)ev->event, sep);
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("from_configure=%s\n", TorF(ev->from_configure));
|
||||
}
|
||||
|
||||
static void
|
||||
VerbCirculateRequest(XCirculateRequestEvent *ev)
|
||||
{
|
||||
VerbCirculateRequest(XCirculateRequestEvent* ev) {
|
||||
printf("parent=0x%x%s", (int)ev->parent, sep);
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("place=%s\n", Place(ev->place));
|
||||
}
|
||||
|
||||
static void
|
||||
VerbConfigureRequest(XConfigureRequestEvent *ev)
|
||||
{
|
||||
VerbConfigureRequest(XConfigureRequestEvent* ev) {
|
||||
printf("parent=0x%x%s", (int)ev->parent, sep);
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("x=%d y=%d%s", ev->x, ev->y, sep);
|
||||
|
@ -698,29 +610,25 @@ VerbConfigureRequest(XConfigureRequestEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbMapRequest(XMapRequestEvent *ev)
|
||||
{
|
||||
VerbMapRequest(XMapRequestEvent* ev) {
|
||||
printf("parent=0x%x%s", (int)ev->parent, sep);
|
||||
printf("window=0x%x\n", (int)ev->window);
|
||||
}
|
||||
|
||||
static void
|
||||
VerbClient(XClientMessageEvent *ev)
|
||||
{
|
||||
VerbClient(XClientMessageEvent* ev) {
|
||||
int i;
|
||||
|
||||
printf("window=0x%x%s", (int)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]);
|
||||
for (i = 0; i < 5; i++) printf(" 0x%08lx", ev->data.l[i]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
static void
|
||||
VerbMapping(XMappingEvent *ev)
|
||||
{
|
||||
VerbMapping(XMappingEvent* ev) {
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("request=%s%s", MappingRequest(ev->request), sep);
|
||||
printf("first_keycode=0x%x%s", ev->first_keycode, sep);
|
||||
|
@ -728,16 +636,14 @@ VerbMapping(XMappingEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbSelectionClear(XSelectionClearEvent *ev)
|
||||
{
|
||||
VerbSelectionClear(XSelectionClearEvent* ev) {
|
||||
printf("window=0x%x%s", (int)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)
|
||||
{
|
||||
VerbSelection(XSelectionEvent* ev) {
|
||||
printf("requestor=0x%x%s", (int)ev->requestor, sep);
|
||||
printf("selection=%s%s", AtomName(ev->display, ev->selection), sep);
|
||||
printf("target=%s%s", AtomName(ev->display, ev->target), sep);
|
||||
|
@ -746,8 +652,7 @@ VerbSelection(XSelectionEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbSelectionRequest(XSelectionRequestEvent *ev)
|
||||
{
|
||||
VerbSelectionRequest(XSelectionRequestEvent* ev) {
|
||||
printf("owner=0x%x%s", (int)ev->owner, sep);
|
||||
printf("requestor=0x%x%s", (int)ev->requestor, sep);
|
||||
printf("selection=%s%s", AtomName(ev->display, ev->selection), sep);
|
||||
|
@ -757,8 +662,7 @@ VerbSelectionRequest(XSelectionRequestEvent *ev)
|
|||
}
|
||||
|
||||
static void
|
||||
VerbVisibility(XVisibilityEvent *ev)
|
||||
{
|
||||
VerbVisibility(XVisibilityEvent* ev) {
|
||||
printf("window=0x%x%s", (int)ev->window, sep);
|
||||
printf("state=%s\n", VisibilityState(ev->state));
|
||||
}
|
||||
|
@ -767,77 +671,44 @@ VerbVisibility(XVisibilityEvent *ev)
|
|||
/************ Return the string representation for type of an event ***********/
|
||||
/******************************************************************************/
|
||||
|
||||
char *eventtype(XEvent *ev)
|
||||
{
|
||||
char*
|
||||
eventtype(XEvent* ev) {
|
||||
static char buffer[20];
|
||||
|
||||
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");
|
||||
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");
|
||||
}
|
||||
sprintf(buffer, "%d", ev->type);
|
||||
return buffer;
|
||||
|
@ -847,13 +718,12 @@ char *eventtype(XEvent *ev)
|
|||
/**************** Print the values of all fields for any event ****************/
|
||||
/******************************************************************************/
|
||||
|
||||
void printevent(XEvent *e)
|
||||
{
|
||||
void
|
||||
printevent(XEvent* e) {
|
||||
XAnyEvent* ev = (void*)e;
|
||||
|
||||
printf("%3ld %-20s ", ev->serial, eventtype(e));
|
||||
if(ev->send_event)
|
||||
printf("(sendevent) ");
|
||||
if (ev->send_event) printf("(sendevent) ");
|
||||
if (0) {
|
||||
printf("type=%s%s", eventtype(e), sep);
|
||||
printf("serial=%lu%s", ev->serial, sep);
|
||||
|
@ -862,125 +732,66 @@ void printevent(XEvent *e)
|
|||
}
|
||||
|
||||
switch (ev->type) {
|
||||
case MotionNotify:
|
||||
VerbMotion((void*)ev);
|
||||
break;
|
||||
case MotionNotify: VerbMotion((void*)ev); break;
|
||||
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
VerbButton((void*)ev);
|
||||
break;
|
||||
case ButtonRelease: VerbButton((void*)ev); break;
|
||||
|
||||
case ColormapNotify:
|
||||
VerbColormap((void*)ev);
|
||||
break;
|
||||
case ColormapNotify: VerbColormap((void*)ev); break;
|
||||
|
||||
case EnterNotify:
|
||||
case LeaveNotify:
|
||||
VerbCrossing((void*)ev);
|
||||
break;
|
||||
case LeaveNotify: VerbCrossing((void*)ev); break;
|
||||
|
||||
case Expose:
|
||||
VerbExpose((void*)ev);
|
||||
break;
|
||||
case Expose: VerbExpose((void*)ev); break;
|
||||
|
||||
case GraphicsExpose:
|
||||
VerbGraphicsExpose((void*)ev);
|
||||
break;
|
||||
case GraphicsExpose: VerbGraphicsExpose((void*)ev); break;
|
||||
|
||||
case NoExpose:
|
||||
VerbNoExpose((void*)ev);
|
||||
break;
|
||||
case NoExpose: VerbNoExpose((void*)ev); break;
|
||||
|
||||
case FocusIn:
|
||||
case FocusOut:
|
||||
VerbFocus((void*)ev);
|
||||
break;
|
||||
case FocusOut: VerbFocus((void*)ev); break;
|
||||
|
||||
case KeymapNotify:
|
||||
VerbKeymap((void*)ev);
|
||||
break;
|
||||
case KeymapNotify: VerbKeymap((void*)ev); break;
|
||||
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
VerbKey((void*)ev);
|
||||
break;
|
||||
case KeyRelease: VerbKey((void*)ev); break;
|
||||
|
||||
case PropertyNotify:
|
||||
VerbProperty((void*)ev);
|
||||
break;
|
||||
case PropertyNotify: VerbProperty((void*)ev); break;
|
||||
|
||||
case ResizeRequest:
|
||||
VerbResizeRequest((void*)ev);
|
||||
break;
|
||||
case ResizeRequest: VerbResizeRequest((void*)ev); break;
|
||||
|
||||
case CirculateNotify:
|
||||
VerbCirculate((void*)ev);
|
||||
break;
|
||||
case CirculateNotify: VerbCirculate((void*)ev); break;
|
||||
|
||||
case ConfigureNotify:
|
||||
VerbConfigure((void*)ev);
|
||||
break;
|
||||
case ConfigureNotify: VerbConfigure((void*)ev); break;
|
||||
|
||||
case CreateNotify:
|
||||
VerbCreateWindow((void*)ev);
|
||||
break;
|
||||
case CreateNotify: VerbCreateWindow((void*)ev); break;
|
||||
|
||||
case DestroyNotify:
|
||||
VerbDestroyWindow((void*)ev);
|
||||
break;
|
||||
case DestroyNotify: VerbDestroyWindow((void*)ev); break;
|
||||
|
||||
case GravityNotify:
|
||||
VerbGravity((void*)ev);
|
||||
break;
|
||||
case GravityNotify: VerbGravity((void*)ev); break;
|
||||
|
||||
case MapNotify:
|
||||
VerbMap((void*)ev);
|
||||
break;
|
||||
case MapNotify: VerbMap((void*)ev); break;
|
||||
|
||||
case ReparentNotify:
|
||||
VerbReparent((void*)ev);
|
||||
break;
|
||||
case ReparentNotify: VerbReparent((void*)ev); break;
|
||||
|
||||
case UnmapNotify:
|
||||
VerbUnmap((void*)ev);
|
||||
break;
|
||||
case UnmapNotify: VerbUnmap((void*)ev); break;
|
||||
|
||||
case CirculateRequest:
|
||||
VerbCirculateRequest((void*)ev);
|
||||
break;
|
||||
case CirculateRequest: VerbCirculateRequest((void*)ev); break;
|
||||
|
||||
case ConfigureRequest:
|
||||
VerbConfigureRequest((void*)ev);
|
||||
break;
|
||||
case ConfigureRequest: VerbConfigureRequest((void*)ev); break;
|
||||
|
||||
case MapRequest:
|
||||
VerbMapRequest((void*)ev);
|
||||
break;
|
||||
case MapRequest: VerbMapRequest((void*)ev); break;
|
||||
|
||||
case ClientMessage:
|
||||
VerbClient((void*)ev);
|
||||
break;
|
||||
case ClientMessage: VerbClient((void*)ev); break;
|
||||
|
||||
case MappingNotify:
|
||||
VerbMapping((void*)ev);
|
||||
break;
|
||||
case MappingNotify: VerbMapping((void*)ev); break;
|
||||
|
||||
case SelectionClear:
|
||||
VerbSelectionClear((void*)ev);
|
||||
break;
|
||||
case SelectionClear: VerbSelectionClear((void*)ev); break;
|
||||
|
||||
case SelectionNotify:
|
||||
VerbSelection((void*)ev);
|
||||
break;
|
||||
case SelectionNotify: VerbSelection((void*)ev); break;
|
||||
|
||||
case SelectionRequest:
|
||||
VerbSelectionRequest((void*)ev);
|
||||
break;
|
||||
case SelectionRequest: VerbSelectionRequest((void*)ev); break;
|
||||
|
||||
case VisibilityNotify:
|
||||
VerbVisibility((void*)ev);
|
||||
break;
|
||||
case VisibilityNotify: VerbVisibility((void*)ev); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
0
printevent.h
Executable file → Normal file
0
printevent.h
Executable file → Normal file
579
showevent/ShowEvent.c
Executable file → Normal file
579
showevent/ShowEvent.c
Executable file → Normal file
|
@ -9,59 +9,45 @@ static char *sep;
|
|||
/******************************************************************************/
|
||||
|
||||
/* Returns the string equivalent of a boolean parameter */
|
||||
static char *TorF(bool)
|
||||
int bool;
|
||||
static char* TorF(bool) int bool;
|
||||
{
|
||||
switch (bool) {
|
||||
case True:
|
||||
return ("True");
|
||||
case True: return ("True");
|
||||
|
||||
case False:
|
||||
return ("False");
|
||||
case False: return ("False");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a property notify state */
|
||||
static char *PropertyState(state)
|
||||
int state;
|
||||
static char* PropertyState(state) int state;
|
||||
{
|
||||
switch (state) {
|
||||
case PropertyNewValue:
|
||||
return ("PropertyNewValue");
|
||||
case PropertyNewValue: return ("PropertyNewValue");
|
||||
|
||||
case PropertyDelete:
|
||||
return ("PropertyDelete");
|
||||
case PropertyDelete: return ("PropertyDelete");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a visibility notify state */
|
||||
static char *VisibilityState(state)
|
||||
int state;
|
||||
static char* VisibilityState(state) int state;
|
||||
{
|
||||
switch (state) {
|
||||
case VisibilityUnobscured:
|
||||
return ("VisibilityUnobscured");
|
||||
case VisibilityUnobscured: return ("VisibilityUnobscured");
|
||||
|
||||
case VisibilityPartiallyObscured:
|
||||
return ("VisibilityPartiallyObscured");
|
||||
case VisibilityPartiallyObscured: return ("VisibilityPartiallyObscured");
|
||||
|
||||
case VisibilityFullyObscured:
|
||||
return ("VisibilityFullyObscured");
|
||||
case VisibilityFullyObscured: return ("VisibilityFullyObscured");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a timestamp */
|
||||
static char *ServerTime(time)
|
||||
Time time;
|
||||
static char* ServerTime(time) Time time;
|
||||
{
|
||||
unsigned long msec;
|
||||
unsigned long sec;
|
||||
|
@ -80,8 +66,15 @@ Time time;
|
|||
time /= 24;
|
||||
day = time;
|
||||
|
||||
sprintf(buffer, "%ld day%s %02ld:%02ld:%02ld.%03ld",
|
||||
day, day == 1 ? "" : "(s)", hr, min, sec, msec);
|
||||
sprintf(
|
||||
buffer,
|
||||
"%ld day%s %02ld:%02ld:%02ld.%03ld",
|
||||
day,
|
||||
day == 1 ? "" : "(s)",
|
||||
hr,
|
||||
min,
|
||||
sec,
|
||||
msec);
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
|
@ -92,8 +85,7 @@ typedef struct _MaskType {
|
|||
} MaskType;
|
||||
|
||||
/* Returns the string equivalent of a mask of buttons and/or modifier keys */
|
||||
static char *ButtonAndOrModifierState(state)
|
||||
unsigned int state;
|
||||
static char* ButtonAndOrModifierState(state) unsigned int state;
|
||||
{
|
||||
static char buffer[256];
|
||||
static MaskType masks[] = {
|
||||
|
@ -130,8 +122,7 @@ unsigned int state;
|
|||
}
|
||||
|
||||
/* Returns the string equivalent of a mask of configure window values */
|
||||
static char *ConfigureValueMask(valuemask)
|
||||
unsigned int valuemask;
|
||||
static char* ConfigureValueMask(valuemask) unsigned int valuemask;
|
||||
{
|
||||
static char buffer[256];
|
||||
static MaskType masks[] = {
|
||||
|
@ -163,24 +154,19 @@ unsigned int valuemask;
|
|||
}
|
||||
|
||||
/* Returns the string equivalent of a motion hint */
|
||||
static char *IsHint(is_hint)
|
||||
char is_hint;
|
||||
static char* IsHint(is_hint) char is_hint;
|
||||
{
|
||||
switch (is_hint) {
|
||||
case NotifyNormal:
|
||||
return ("NotifyNormal");
|
||||
case NotifyNormal: return ("NotifyNormal");
|
||||
|
||||
case NotifyHint:
|
||||
return ("NotifyHint");
|
||||
case NotifyHint: return ("NotifyHint");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of an id or the value "None" */
|
||||
static char *MaybeNone(value)
|
||||
int value;
|
||||
static char* MaybeNone(value) int value;
|
||||
{
|
||||
static char buffer[16];
|
||||
|
||||
|
@ -193,184 +179,135 @@ int value;
|
|||
}
|
||||
|
||||
/* Returns the string equivalent of a colormap state */
|
||||
static char *ColormapState(state)
|
||||
int state;
|
||||
static char* ColormapState(state) int state;
|
||||
{
|
||||
switch (state) {
|
||||
case ColormapInstalled:
|
||||
return ("ColormapInstalled");
|
||||
case ColormapInstalled: return ("ColormapInstalled");
|
||||
|
||||
case ColormapUninstalled:
|
||||
return ("ColormapUninstalled");
|
||||
case ColormapUninstalled: return ("ColormapUninstalled");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a crossing detail */
|
||||
static char *CrossingDetail(detail)
|
||||
int detail;
|
||||
static char* CrossingDetail(detail) int detail;
|
||||
{
|
||||
switch (detail) {
|
||||
case NotifyAncestor:
|
||||
return ("NotifyAncestor");
|
||||
case NotifyAncestor: return ("NotifyAncestor");
|
||||
|
||||
case NotifyInferior:
|
||||
return ("NotifyInferior");
|
||||
case NotifyInferior: return ("NotifyInferior");
|
||||
|
||||
case NotifyVirtual:
|
||||
return ("NotifyVirtual");
|
||||
case NotifyVirtual: return ("NotifyVirtual");
|
||||
|
||||
case NotifyNonlinear:
|
||||
return ("NotifyNonlinear");
|
||||
case NotifyNonlinear: return ("NotifyNonlinear");
|
||||
|
||||
case NotifyNonlinearVirtual:
|
||||
return ("NotifyNonlinearVirtual");
|
||||
case NotifyNonlinearVirtual: return ("NotifyNonlinearVirtual");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a focus change detail */
|
||||
static char *FocusChangeDetail(detail)
|
||||
int detail;
|
||||
static char* FocusChangeDetail(detail) int detail;
|
||||
{
|
||||
switch (detail) {
|
||||
case NotifyAncestor:
|
||||
return ("NotifyAncestor");
|
||||
case NotifyAncestor: return ("NotifyAncestor");
|
||||
|
||||
case NotifyInferior:
|
||||
return ("NotifyInferior");
|
||||
case NotifyInferior: return ("NotifyInferior");
|
||||
|
||||
case NotifyVirtual:
|
||||
return ("NotifyVirtual");
|
||||
case NotifyVirtual: return ("NotifyVirtual");
|
||||
|
||||
case NotifyNonlinear:
|
||||
return ("NotifyNonlinear");
|
||||
case NotifyNonlinear: return ("NotifyNonlinear");
|
||||
|
||||
case NotifyNonlinearVirtual:
|
||||
return ("NotifyNonlinearVirtual");
|
||||
case NotifyNonlinearVirtual: return ("NotifyNonlinearVirtual");
|
||||
|
||||
case NotifyPointer:
|
||||
return ("NotifyPointer");
|
||||
case NotifyPointer: return ("NotifyPointer");
|
||||
|
||||
case NotifyPointerRoot:
|
||||
return ("NotifyPointerRoot");
|
||||
case NotifyPointerRoot: return ("NotifyPointerRoot");
|
||||
|
||||
case NotifyDetailNone:
|
||||
return ("NotifyDetailNone");
|
||||
case NotifyDetailNone: return ("NotifyDetailNone");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a configure detail */
|
||||
static char *ConfigureDetail(detail)
|
||||
int detail;
|
||||
static char* ConfigureDetail(detail) int detail;
|
||||
{
|
||||
switch (detail) {
|
||||
case Above:
|
||||
return ("Above");
|
||||
case Above: return ("Above");
|
||||
|
||||
case Below:
|
||||
return ("Below");
|
||||
case Below: return ("Below");
|
||||
|
||||
case TopIf:
|
||||
return ("TopIf");
|
||||
case TopIf: return ("TopIf");
|
||||
|
||||
case BottomIf:
|
||||
return ("BottomIf");
|
||||
case BottomIf: return ("BottomIf");
|
||||
|
||||
case Opposite:
|
||||
return ("Opposite");
|
||||
case Opposite: return ("Opposite");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a grab mode */
|
||||
static char *GrabMode(mode)
|
||||
int mode;
|
||||
static char* GrabMode(mode) int mode;
|
||||
{
|
||||
switch (mode) {
|
||||
case NotifyNormal:
|
||||
return ("NotifyNormal");
|
||||
case NotifyNormal: return ("NotifyNormal");
|
||||
|
||||
case NotifyGrab:
|
||||
return ("NotifyGrab");
|
||||
case NotifyGrab: return ("NotifyGrab");
|
||||
|
||||
case NotifyUngrab:
|
||||
return ("NotifyUngrab");
|
||||
case NotifyUngrab: return ("NotifyUngrab");
|
||||
|
||||
case NotifyWhileGrabbed:
|
||||
return ("NotifyWhileGrabbed");
|
||||
case NotifyWhileGrabbed: return ("NotifyWhileGrabbed");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a mapping request */
|
||||
static char *MappingRequest(request)
|
||||
int request;
|
||||
static char* MappingRequest(request) int request;
|
||||
{
|
||||
switch (request) {
|
||||
case MappingModifier:
|
||||
return ("MappingModifier");
|
||||
case MappingModifier: return ("MappingModifier");
|
||||
|
||||
case MappingKeyboard:
|
||||
return ("MappingKeyboard");
|
||||
case MappingKeyboard: return ("MappingKeyboard");
|
||||
|
||||
case MappingPointer:
|
||||
return ("MappingPointer");
|
||||
case MappingPointer: return ("MappingPointer");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a stacking order place */
|
||||
static char *Place(place)
|
||||
int place;
|
||||
static char* Place(place) int place;
|
||||
{
|
||||
switch (place) {
|
||||
case PlaceOnTop:
|
||||
return ("PlaceOnTop");
|
||||
case PlaceOnTop: return ("PlaceOnTop");
|
||||
|
||||
case PlaceOnBottom:
|
||||
return ("PlaceOnBottom");
|
||||
case PlaceOnBottom: return ("PlaceOnBottom");
|
||||
|
||||
default:
|
||||
return ("?");
|
||||
default: return ("?");
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the string equivalent of a major code */
|
||||
static char *MajorCode(code)
|
||||
int code;
|
||||
static char* MajorCode(code) int code;
|
||||
{
|
||||
static char buffer[32];
|
||||
|
||||
switch (code) {
|
||||
case X_CopyArea:
|
||||
return ("X_CopyArea");
|
||||
case X_CopyArea: return ("X_CopyArea");
|
||||
|
||||
case X_CopyPlane:
|
||||
return ("X_CopyPlane");
|
||||
case X_CopyPlane: return ("X_CopyPlane");
|
||||
|
||||
default:
|
||||
sprintf(buffer, "0x%x", code);
|
||||
return (buffer);
|
||||
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* Keycode(ev) XKeyEvent* ev;
|
||||
{
|
||||
static char buffer[256];
|
||||
KeySym keysym_str;
|
||||
|
@ -383,19 +320,22 @@ XKeyEvent *ev;
|
|||
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);
|
||||
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(Display *dpy, Atom atom)
|
||||
{
|
||||
static char*
|
||||
AtomName(Display* dpy, Atom atom) {
|
||||
static char buffer[256];
|
||||
char* atom_name;
|
||||
|
||||
if (atom == None)
|
||||
return ("None");
|
||||
if (atom == None) return ("None");
|
||||
|
||||
atom_name = XGetAtomName(dpy, atom);
|
||||
strncpy(buffer, atom_name, 256);
|
||||
|
@ -407,8 +347,8 @@ static char *AtomName(Display *dpy, Atom atom)
|
|||
/**** Routines to print out readable values for the field of various events ***/
|
||||
/******************************************************************************/
|
||||
|
||||
static void VerbMotion(XMotionEvent *ev)
|
||||
{
|
||||
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);
|
||||
|
@ -420,8 +360,8 @@ static void VerbMotion(XMotionEvent *ev)
|
|||
printf("same_screen=%s\n", TorF(ev->same_screen));
|
||||
}
|
||||
|
||||
static void VerbButton(XButtonEvent *ev)
|
||||
{
|
||||
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);
|
||||
|
@ -433,16 +373,16 @@ static void VerbButton(XButtonEvent *ev)
|
|||
printf("same_screen=%s\n", TorF(ev->same_screen));
|
||||
}
|
||||
|
||||
static void VerbColormap(XColormapEvent *ev)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
@ -456,16 +396,16 @@ static void VerbCrossing(XCrossingEvent *ev)
|
|||
printf("state=%s\n", ButtonAndOrModifierState(ev->state));
|
||||
}
|
||||
|
||||
static void VerbExpose(XExposeEvent *ev)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
@ -473,33 +413,32 @@ static void VerbGraphicsExpose(XGraphicsExposeEvent *ev)
|
|||
printf("minor_code=%d\n", ev->minor_code);
|
||||
}
|
||||
|
||||
static void VerbNoExpose(XNoExposeEvent *ev)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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]);
|
||||
for (i = 0; i < 32; i++) printf("%02x", ev->key_vector[i]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
static void VerbKey(XKeyEvent *ev)
|
||||
{
|
||||
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);
|
||||
|
@ -511,29 +450,29 @@ static void VerbKey(XKeyEvent *ev)
|
|||
printf("same_screen=%s\n", TorF(ev->same_screen));
|
||||
}
|
||||
|
||||
static void VerbProperty(XPropertyEvent *ev)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
@ -543,8 +482,8 @@ static void VerbConfigure(XConfigureEvent *ev)
|
|||
printf("override_redirect=%s\n", TorF(ev->override_redirect));
|
||||
}
|
||||
|
||||
static void VerbCreateWindow(XCreateWindowEvent *ev)
|
||||
{
|
||||
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);
|
||||
|
@ -553,28 +492,28 @@ static void VerbCreateWindow(XCreateWindowEvent *ev)
|
|||
printf("override_redirect=%s\n", TorF(ev->override_redirect));
|
||||
}
|
||||
|
||||
static void VerbDestroyWindow(XDestroyWindowEvent *ev)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
@ -582,22 +521,22 @@ static void VerbReparent(XReparentEvent *ev)
|
|||
printf("override_redirect=%s\n", TorF(ev->override_redirect));
|
||||
}
|
||||
|
||||
static void VerbUnmap(XUnmapEvent *ev)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
@ -608,42 +547,41 @@ static void VerbConfigureRequest(XConfigureRequestEvent *ev)
|
|||
printf("value_mask=%s\n", ConfigureValueMask(ev->value_mask));
|
||||
}
|
||||
|
||||
static void VerbMapRequest(XMapRequestEvent *ev)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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]);
|
||||
for (i = 0; i < 5; i++) printf(" 0x%08lx", ev->data.l[i]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
static void VerbMapping(XMappingEvent *ev)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
@ -651,8 +589,8 @@ static void VerbSelection(XSelectionEvent *ev)
|
|||
printf("time=%s\n", ServerTime(ev->time));
|
||||
}
|
||||
|
||||
static void VerbSelectionRequest(XSelectionRequestEvent *ev)
|
||||
{
|
||||
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);
|
||||
|
@ -661,8 +599,8 @@ static void VerbSelectionRequest(XSelectionRequestEvent *ev)
|
|||
printf("time=%s\n", ServerTime(ev->time));
|
||||
}
|
||||
|
||||
static void VerbVisibility(XVisibilityEvent *ev)
|
||||
{
|
||||
static void
|
||||
VerbVisibility(XVisibilityEvent* ev) {
|
||||
printf("window=0x%x%s", (unsigned)ev->window, sep);
|
||||
printf("state=%s\n", VisibilityState(ev->state));
|
||||
}
|
||||
|
@ -671,76 +609,42 @@ static void VerbVisibility(XVisibilityEvent *ev)
|
|||
/************ Return the string representation for type of an event ***********/
|
||||
/******************************************************************************/
|
||||
|
||||
char *GetType(ev)
|
||||
XEvent *ev;
|
||||
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");
|
||||
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 "???";
|
||||
}
|
||||
|
@ -749,8 +653,8 @@ XEvent *ev;
|
|||
/**************** Print the values of all fields for any event ****************/
|
||||
/******************************************************************************/
|
||||
|
||||
void ShowEvent(XEvent *eev)
|
||||
{
|
||||
void
|
||||
ShowEvent(XEvent* eev) {
|
||||
XAnyEvent* ev = (XAnyEvent*)eev;
|
||||
/* determine which field separator to use */
|
||||
if (use_separate_lines)
|
||||
|
@ -764,125 +668,66 @@ void ShowEvent(XEvent *eev)
|
|||
printf("display=0x%p%s", ev->display, sep);
|
||||
|
||||
switch (ev->type) {
|
||||
case MotionNotify:
|
||||
VerbMotion((void*)ev);
|
||||
break;
|
||||
case MotionNotify: VerbMotion((void*)ev); break;
|
||||
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
VerbButton((void*)ev);
|
||||
break;
|
||||
case ButtonRelease: VerbButton((void*)ev); break;
|
||||
|
||||
case ColormapNotify:
|
||||
VerbColormap((void*)ev);
|
||||
break;
|
||||
case ColormapNotify: VerbColormap((void*)ev); break;
|
||||
|
||||
case EnterNotify:
|
||||
case LeaveNotify:
|
||||
VerbCrossing((void*)ev);
|
||||
break;
|
||||
case LeaveNotify: VerbCrossing((void*)ev); break;
|
||||
|
||||
case Expose:
|
||||
VerbExpose((void*)ev);
|
||||
break;
|
||||
case Expose: VerbExpose((void*)ev); break;
|
||||
|
||||
case GraphicsExpose:
|
||||
VerbGraphicsExpose((void*)ev);
|
||||
break;
|
||||
case GraphicsExpose: VerbGraphicsExpose((void*)ev); break;
|
||||
|
||||
case NoExpose:
|
||||
VerbNoExpose((void*)ev);
|
||||
break;
|
||||
case NoExpose: VerbNoExpose((void*)ev); break;
|
||||
|
||||
case FocusIn:
|
||||
case FocusOut:
|
||||
VerbFocus((void*)ev);
|
||||
break;
|
||||
case FocusOut: VerbFocus((void*)ev); break;
|
||||
|
||||
case KeymapNotify:
|
||||
VerbKeymap((void*)ev);
|
||||
break;
|
||||
case KeymapNotify: VerbKeymap((void*)ev); break;
|
||||
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
VerbKey((void*)ev);
|
||||
break;
|
||||
case KeyRelease: VerbKey((void*)ev); break;
|
||||
|
||||
case PropertyNotify:
|
||||
VerbProperty((void*)ev);
|
||||
break;
|
||||
case PropertyNotify: VerbProperty((void*)ev); break;
|
||||
|
||||
case ResizeRequest:
|
||||
VerbResizeRequest((void*)ev);
|
||||
break;
|
||||
case ResizeRequest: VerbResizeRequest((void*)ev); break;
|
||||
|
||||
case CirculateNotify:
|
||||
VerbCirculate((void*)ev);
|
||||
break;
|
||||
case CirculateNotify: VerbCirculate((void*)ev); break;
|
||||
|
||||
case ConfigureNotify:
|
||||
VerbConfigure((void*)ev);
|
||||
break;
|
||||
case ConfigureNotify: VerbConfigure((void*)ev); break;
|
||||
|
||||
case CreateNotify:
|
||||
VerbCreateWindow((void*)ev);
|
||||
break;
|
||||
case CreateNotify: VerbCreateWindow((void*)ev); break;
|
||||
|
||||
case DestroyNotify:
|
||||
VerbDestroyWindow((void*)ev);
|
||||
break;
|
||||
case DestroyNotify: VerbDestroyWindow((void*)ev); break;
|
||||
|
||||
case GravityNotify:
|
||||
VerbGravity((void*)ev);
|
||||
break;
|
||||
case GravityNotify: VerbGravity((void*)ev); break;
|
||||
|
||||
case MapNotify:
|
||||
VerbMap((void*)ev);
|
||||
break;
|
||||
case MapNotify: VerbMap((void*)ev); break;
|
||||
|
||||
case ReparentNotify:
|
||||
VerbReparent((void*)ev);
|
||||
break;
|
||||
case ReparentNotify: VerbReparent((void*)ev); break;
|
||||
|
||||
case UnmapNotify:
|
||||
VerbUnmap((void*)ev);
|
||||
break;
|
||||
case UnmapNotify: VerbUnmap((void*)ev); break;
|
||||
|
||||
case CirculateRequest:
|
||||
VerbCirculateRequest((void*)ev);
|
||||
break;
|
||||
case CirculateRequest: VerbCirculateRequest((void*)ev); break;
|
||||
|
||||
case ConfigureRequest:
|
||||
VerbConfigureRequest((void*)ev);
|
||||
break;
|
||||
case ConfigureRequest: VerbConfigureRequest((void*)ev); break;
|
||||
|
||||
case MapRequest:
|
||||
VerbMapRequest((void*)ev);
|
||||
break;
|
||||
case MapRequest: VerbMapRequest((void*)ev); break;
|
||||
|
||||
case ClientMessage:
|
||||
VerbClient((void*)ev);
|
||||
break;
|
||||
case ClientMessage: VerbClient((void*)ev); break;
|
||||
|
||||
case MappingNotify:
|
||||
VerbMapping((void*)ev);
|
||||
break;
|
||||
case MappingNotify: VerbMapping((void*)ev); break;
|
||||
|
||||
case SelectionClear:
|
||||
VerbSelectionClear((void*)ev);
|
||||
break;
|
||||
case SelectionClear: VerbSelectionClear((void*)ev); break;
|
||||
|
||||
case SelectionNotify:
|
||||
VerbSelection((void*)ev);
|
||||
break;
|
||||
case SelectionNotify: VerbSelection((void*)ev); break;
|
||||
|
||||
case SelectionRequest:
|
||||
VerbSelectionRequest((void*)ev);
|
||||
break;
|
||||
|
||||
case VisibilityNotify:
|
||||
VerbVisibility((void*)ev);
|
||||
break;
|
||||
case SelectionRequest: VerbSelectionRequest((void*)ev); break;
|
||||
|
||||
case VisibilityNotify: VerbVisibility((void*)ev); break;
|
||||
}
|
||||
}
|
||||
|
|
35
showevent/sample.c
Executable file → Normal file
35
showevent/sample.c
Executable file → Normal file
|
@ -5,8 +5,7 @@
|
|||
* "Quick-n-Dirty", plain, vanilla, "No ups, No extras" piece of code.
|
||||
*/
|
||||
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
main(argc, argv) int argc;
|
||||
char** argv;
|
||||
{
|
||||
Display* dpy;
|
||||
|
@ -21,17 +20,28 @@ char **argv;
|
|||
}
|
||||
screen = DefaultScreen(dpy);
|
||||
|
||||
window = XCreateSimpleWindow(dpy, RootWindow(dpy, screen), 100, 100,
|
||||
300, 200, 2, BlackPixel(dpy, screen), WhitePixel(dpy, screen));
|
||||
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);
|
||||
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);
|
||||
|
||||
|
@ -45,4 +55,3 @@ char **argv;
|
|||
printf("\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
35
xevents.c
Executable file → Normal file
35
xevents.c
Executable file → Normal file
|
@ -9,8 +9,7 @@
|
|||
#include "printevent.h"
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
main(int argc, char** argv) {
|
||||
int screen;
|
||||
Display* dpy;
|
||||
Window window;
|
||||
|
@ -23,17 +22,28 @@ main(int argc, char **argv)
|
|||
|
||||
screen = DefaultScreen(dpy);
|
||||
|
||||
window = XCreateSimpleWindow(dpy, RootWindow(dpy, screen), 100, 100,
|
||||
300, 200, 2, BlackPixel(dpy, screen), WhitePixel(dpy, screen));
|
||||
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);
|
||||
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);
|
||||
|
||||
|
@ -42,4 +52,3 @@ main(int argc, char **argv)
|
|||
printevent(&event);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
139
xshove.c
Executable file → Normal file
139
xshove.c
Executable file → Normal file
|
@ -9,8 +9,7 @@
|
|||
AUTOLIB(X11);
|
||||
|
||||
typedef struct Rectangle Rectangle;
|
||||
struct Rectangle
|
||||
{
|
||||
struct Rectangle {
|
||||
struct {
|
||||
int x;
|
||||
int y;
|
||||
|
@ -20,8 +19,7 @@ struct Rectangle
|
|||
#define Dy(r) ((r).max.y - (r).min.y)
|
||||
|
||||
typedef struct Win Win;
|
||||
struct Win
|
||||
{
|
||||
struct Win {
|
||||
Window xw;
|
||||
int x;
|
||||
int y;
|
||||
|
@ -45,30 +43,24 @@ int parsewinsize(char*, Rectangle*, int*, int*, int*);
|
|||
void shove(char*, char*);
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
usage(void) {
|
||||
fprint(2, "usage: xshove [window rectangle]\n");
|
||||
exits("usage");
|
||||
}
|
||||
|
||||
void
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
main(int argc, char** argv) {
|
||||
int screen;
|
||||
|
||||
screen = 0;
|
||||
ARGBEGIN {
|
||||
case 's':
|
||||
screen = atoi(EARGF(usage()));
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
break;
|
||||
}ARGEND
|
||||
case 's': screen = atoi(EARGF(usage())); break;
|
||||
default: usage(); break;
|
||||
}
|
||||
ARGEND
|
||||
|
||||
dpy = XOpenDisplay("");
|
||||
if(dpy == nil)
|
||||
sysfatal("open display: %r");
|
||||
if (dpy == nil) sysfatal("open display: %r");
|
||||
|
||||
root = RootWindow(dpy, screen);
|
||||
getinfo();
|
||||
|
@ -77,15 +69,13 @@ main(int argc, char **argv)
|
|||
listwindows();
|
||||
exits(0);
|
||||
}
|
||||
if(argc != 2)
|
||||
usage();
|
||||
if (argc != 2) usage();
|
||||
shove(argv[0], argv[1]);
|
||||
exits(0);
|
||||
}
|
||||
|
||||
char*
|
||||
getproperty(Window w, Atom a)
|
||||
{
|
||||
getproperty(Window w, Atom a) {
|
||||
uchar* p;
|
||||
int fmt;
|
||||
Atom type;
|
||||
|
@ -93,54 +83,45 @@ getproperty(Window w, Atom a)
|
|||
|
||||
n = 100;
|
||||
p = nil;
|
||||
XGetWindowProperty(dpy, w, a, 0, 100L, 0,
|
||||
AnyPropertyType, &type, &fmt,
|
||||
&n, &dummy, &p);
|
||||
if(p == nil || *p == 0)
|
||||
return nil;
|
||||
XGetWindowProperty(
|
||||
dpy, w, a, 0, 100L, 0, AnyPropertyType, &type, &fmt, &n, &dummy, &p);
|
||||
if (p == nil || *p == 0) return nil;
|
||||
return strdup((char*)p);
|
||||
}
|
||||
|
||||
Window
|
||||
findname(Window w)
|
||||
{
|
||||
findname(Window w) {
|
||||
int i;
|
||||
uint nxwin;
|
||||
Window dw1, dw2, *xwin;
|
||||
|
||||
if(getproperty(w, XA_WM_NAME))
|
||||
return w;
|
||||
if(!XQueryTree(dpy, w, &dw1, &dw2, &xwin, &nxwin))
|
||||
return 0;
|
||||
if (getproperty(w, XA_WM_NAME)) return w;
|
||||
if (!XQueryTree(dpy, w, &dw1, &dw2, &xwin, &nxwin)) return 0;
|
||||
for (i = 0; i < nxwin; i++)
|
||||
if((w = findname(xwin[i])) != 0)
|
||||
return w;
|
||||
if ((w = findname(xwin[i])) != 0) return w;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
getinfo(void)
|
||||
{
|
||||
getinfo(void) {
|
||||
int i;
|
||||
uint nxwin;
|
||||
Window dw1, dw2, *xwin;
|
||||
XClassHint class;
|
||||
XWindowAttributes attr;
|
||||
|
||||
if(!XQueryTree(dpy, root, &dw1, &dw2, &xwin, &nxwin))
|
||||
return;
|
||||
if (!XQueryTree(dpy, root, &dw1, &dw2, &xwin, &nxwin)) return;
|
||||
w = mallocz(nxwin * sizeof w[0], 1);
|
||||
if(w == 0)
|
||||
sysfatal("malloc: %r");
|
||||
if (w == 0) sysfatal("malloc: %r");
|
||||
|
||||
Win* ww = w;
|
||||
for (i = 0; i < nxwin; i++) {
|
||||
memset(&attr, 0, sizeof attr);
|
||||
xwin[i] = findname(xwin[i]);
|
||||
if(xwin[i] == 0)
|
||||
continue;
|
||||
if (xwin[i] == 0) continue;
|
||||
XGetWindowAttributes(dpy, xwin[i], &attr);
|
||||
if(attr.width <= 0 || attr.override_redirect || attr.map_state != IsViewable)
|
||||
if (
|
||||
attr.width <= 0 || attr.override_redirect || attr.map_state != IsViewable)
|
||||
continue;
|
||||
ww->xw = xwin[i];
|
||||
ww->x = attr.x;
|
||||
|
@ -160,25 +141,26 @@ getinfo(void)
|
|||
}
|
||||
|
||||
void
|
||||
listwindows(void)
|
||||
{
|
||||
listwindows(void) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < nw; i++) {
|
||||
Win* ww = &w[i];
|
||||
char rect[50];
|
||||
snprint(rect, sizeof rect, "%d,%d,%d,%d", ww->x, ww->y, ww->x+ww->dx, ww->y+ww->dy);
|
||||
print("%08x %-20s %-10s %s\n",
|
||||
(uint)ww->xw,
|
||||
snprint(
|
||||
rect,
|
||||
ww->instance,
|
||||
ww->class);
|
||||
sizeof rect,
|
||||
"%d,%d,%d,%d",
|
||||
ww->x,
|
||||
ww->y,
|
||||
ww->x + ww->dx,
|
||||
ww->y + ww->dy);
|
||||
print("%08x %-20s %-10s %s\n", (uint)ww->xw, rect, ww->instance, ww->class);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
shove(char *name, char *geom)
|
||||
{
|
||||
shove(char* name, char* geom) {
|
||||
int i;
|
||||
int isdelta, havemin, havesize;
|
||||
int old, new;
|
||||
|
@ -195,8 +177,9 @@ shove(char *name, char *geom)
|
|||
}
|
||||
for (i = 0; i < nw; i++) {
|
||||
Win* ww = &w[i];
|
||||
if(ww->instance && strstr(ww->instance, name)
|
||||
|| ww->class && strstr(ww->class, name)){
|
||||
if (
|
||||
ww->instance && strstr(ww->instance, name) ||
|
||||
ww->class && strstr(ww->class, name)) {
|
||||
int value_mask;
|
||||
XWindowChanges e;
|
||||
|
||||
|
@ -223,8 +206,7 @@ shove(char *name, char *geom)
|
|||
}
|
||||
|
||||
int
|
||||
parsewinsize(char *s, Rectangle *r, int *isdelta, int *havemin, int *havesize)
|
||||
{
|
||||
parsewinsize(char* s, Rectangle* r, int* isdelta, int* havemin, int* havesize) {
|
||||
char c, *os;
|
||||
int i, j, k, l;
|
||||
|
||||
|
@ -240,34 +222,26 @@ parsewinsize(char *s, Rectangle *r, int *isdelta, int *havemin, int *havesize)
|
|||
*havemin = 0;
|
||||
*havesize = 0;
|
||||
memset(r, 0, sizeof *r);
|
||||
if(!isdigit((uchar)*s))
|
||||
goto oops;
|
||||
if (!isdigit((uchar)*s)) goto oops;
|
||||
i = strtol(s, &s, 0);
|
||||
if (*s == 'x') {
|
||||
s++;
|
||||
if(!isdigit((uchar)*s))
|
||||
goto oops;
|
||||
if (!isdigit((uchar)*s)) goto oops;
|
||||
j = strtol(s, &s, 0);
|
||||
r->max.x = i;
|
||||
r->max.y = j;
|
||||
*havesize = 1;
|
||||
if(*s == 0)
|
||||
return 0;
|
||||
if(*s != '@')
|
||||
goto oops;
|
||||
if (*s == 0) return 0;
|
||||
if (*s != '@') goto oops;
|
||||
|
||||
s++;
|
||||
if(!isdigit((uchar)*s))
|
||||
goto oops;
|
||||
if (!isdigit((uchar)*s)) goto oops;
|
||||
i = strtol(s, &s, 0);
|
||||
if(*s != ',' && *s != ' ')
|
||||
goto oops;
|
||||
if (*s != ',' && *s != ' ') goto oops;
|
||||
s++;
|
||||
if(!isdigit((uchar)*s))
|
||||
goto oops;
|
||||
if (!isdigit((uchar)*s)) goto oops;
|
||||
j = strtol(s, &s, 0);
|
||||
if(*s != 0)
|
||||
goto oops;
|
||||
if (*s != 0) goto oops;
|
||||
r->min.x += i;
|
||||
r->max.x += i;
|
||||
r->min.y += j;
|
||||
|
@ -278,11 +252,9 @@ parsewinsize(char *s, Rectangle *r, int *isdelta, int *havemin, int *havesize)
|
|||
}
|
||||
|
||||
c = *s;
|
||||
if(c != ' ' && c != ',')
|
||||
goto oops;
|
||||
if (c != ' ' && c != ',') goto oops;
|
||||
s++;
|
||||
if(!isdigit((uchar)*s))
|
||||
goto oops;
|
||||
if (!isdigit((uchar)*s)) goto oops;
|
||||
j = strtol(s, &s, 0);
|
||||
if (*s == 0) {
|
||||
r->min.x = i;
|
||||
|
@ -290,20 +262,15 @@ parsewinsize(char *s, Rectangle *r, int *isdelta, int *havemin, int *havesize)
|
|||
*havemin = 1;
|
||||
return 0;
|
||||
}
|
||||
if(*s != c)
|
||||
goto oops;
|
||||
if (*s != c) goto oops;
|
||||
s++;
|
||||
if(!isdigit((uchar)*s))
|
||||
goto oops;
|
||||
if (!isdigit((uchar)*s)) goto oops;
|
||||
k = strtol(s, &s, 0);
|
||||
if(*s != c)
|
||||
goto oops;
|
||||
if (*s != c) goto oops;
|
||||
s++;
|
||||
if(!isdigit((uchar)*s))
|
||||
goto oops;
|
||||
if (!isdigit((uchar)*s)) goto oops;
|
||||
l = strtol(s, &s, 0);
|
||||
if(*s != 0)
|
||||
goto oops;
|
||||
if (*s != 0) goto oops;
|
||||
r->min.x = i;
|
||||
r->min.y = j;
|
||||
r->max.x = k;
|
||||
|
|
Loading…
Reference in a new issue