1
0
Fork 0
forked from len0rd/rockbox

Commented out the KEY PRESSED and EVENT debug messages

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@400 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Robert Hak 2002-05-03 06:51:05 +00:00
parent 1118c88639
commit 0326934e91

View file

@ -97,77 +97,77 @@ static XrmOptionDescRec *merged_options;
static int merged_options_size;
static char **merged_defaults;
static void
merge_options (void)
static void merge_options (void)
{
int def_opts_size, opts_size;
int def_defaults_size, defaults_size;
int def_opts_size, opts_size;
int def_defaults_size, defaults_size;
for (def_opts_size = 0; default_options[def_opts_size].option;
def_opts_size++)
;
for (opts_size = 0; options[opts_size].option; opts_size++)
;
for (def_opts_size = 0; default_options[def_opts_size].option;
def_opts_size++)
;
for (opts_size = 0; options[opts_size].option; opts_size++)
;
merged_options_size = def_opts_size + opts_size;
merged_options = (XrmOptionDescRec *)
malloc ((merged_options_size + 1) * sizeof(*default_options));
memcpy (merged_options, default_options,
(def_opts_size * sizeof(*default_options)));
memcpy (merged_options + def_opts_size, options,
((opts_size + 1) * sizeof(*default_options)));
merged_options_size = def_opts_size + opts_size;
merged_options = (XrmOptionDescRec *)
malloc ((merged_options_size + 1) * sizeof(*default_options));
memcpy (merged_options, default_options,
(def_opts_size * sizeof(*default_options)));
memcpy (merged_options + def_opts_size, options,
((opts_size + 1) * sizeof(*default_options)));
for (def_defaults_size = 0; default_defaults[def_defaults_size];
def_defaults_size++)
;
for (defaults_size = 0; defaults[defaults_size]; defaults_size++)
;
merged_defaults = (char **)
malloc ((def_defaults_size + defaults_size + 1) * sizeof (*defaults));;
memcpy (merged_defaults, default_defaults,
def_defaults_size * sizeof(*defaults));
memcpy (merged_defaults + def_defaults_size, defaults,
(defaults_size + 1) * sizeof(*defaults));
for (def_defaults_size = 0; default_defaults[def_defaults_size];
def_defaults_size++)
;
for (defaults_size = 0; defaults[defaults_size]; defaults_size++)
;
/* This totally sucks. Xt should behave like this by default.
If the string in `defaults' looks like ".foo", change that
to "Progclass.foo".
*/
{
char **s;
for (s = merged_defaults; *s; s++)
if (**s == '.')
{
const char *oldr = *s;
char *newr = (char *) malloc(strlen(oldr) + strlen(progclass) + 3);
strcpy (newr, progclass);
strcat (newr, oldr);
*s = newr;
}
}
merged_defaults = (char **)
malloc ((def_defaults_size + defaults_size + 1) * sizeof (*defaults));
memcpy (merged_defaults, default_defaults,
def_defaults_size * sizeof(*defaults));
memcpy (merged_defaults + def_defaults_size, defaults,
(defaults_size + 1) * sizeof(*defaults));
/* This totally sucks. Xt should behave like this by default.
If the string in `defaults' looks like ".foo", change that
to "Progclass.foo".
*/
{
char **s;
for (s = merged_defaults; *s; s++)
if (**s == '.')
{
const char *oldr = *s;
char *newr = (char *) malloc(strlen(oldr)
+ strlen(progclass) + 3);
strcpy (newr, progclass);
strcat (newr, oldr);
*s = newr;
}
}
}
/* Make the X errors print out the name of this program, so we have some
clue which one has a bug when they die under the screensaver.
*/
static int
screenhack_ehandler (Display *dpy, XErrorEvent *error)
static int screenhack_ehandler (Display *dpy, XErrorEvent *error)
{
fprintf (stderr, "\nX error in %s:\n", progname);
if (XmuPrintDefaultErrorMessage (dpy, error, stderr))
exit (-1);
else
fprintf (stderr, " (nonfatal.)\n");
return 0;
fprintf (stderr, "\nX error in %s:\n", progname);
if (XmuPrintDefaultErrorMessage (dpy, error, stderr))
exit (-1);
else
fprintf (stderr, " (nonfatal.)\n");
return 0;
}
static Bool
MapNotify_event_p (Display *dpy, XEvent *event, XPointer window)
static Bool MapNotify_event_p (Display *dpy, XEvent *event, XPointer window)
{
return (event->xany.type == MapNotify &&
event->xvisibility.window == (Window) window);
return (event->xany.type == MapNotify &&
event->xvisibility.window == (Window) window);
}
@ -181,8 +181,7 @@ static Atom XA_WM_PROTOCOLS, XA_WM_DELETE_WINDOW;
/* Dead-trivial event handling: exits if "q" or "ESC" are typed.
Exit if the WM_PROTOCOLS WM_DELETE_WINDOW ClientMessage is received.
*/
int
screenhack_handle_event (Display *dpy, XEvent *event)
int screenhack_handle_event (Display *dpy, XEvent *event)
{
int key=0;
switch (event->xany.type)
@ -193,26 +192,28 @@ screenhack_handle_event (Display *dpy, XEvent *event)
unsigned char c = 0;
XLookupString (&event->xkey, &c, 1, &keysym, 0);
if (! (keysym >= XK_Shift_L && keysym <= XK_Hyper_R))
XBell (dpy, 0); /* beep for non-chord keys */
XBell (dpy, 0); /* beep for non-chord keys */
key = keysym;
fprintf(stderr, "KEY PRESSED: %c (%02x)\n", c, c);
/* fprintf(stderr, "KEY PRESSED: %c (%02x)\n", c, c); */
}
break;
case ResizeRequest:
screen_resized(event->xresizerequest.width, event->xresizerequest.height);
screen_resized(event->xresizerequest.width,
event->xresizerequest.height);
screen_redraw();
fprintf(stderr, "WINDOW RESIZED to width %d height %d\n",
event->xresizerequest.width, event->xresizerequest.height);
event->xresizerequest.width, event->xresizerequest.height);
break;
default:
fprintf(stderr, "EVENT: %d (see /usr/include/X11/X.h)\n",
event->xany.type);
/* fprintf(stderr, "EVENT: %d (see /usr/include/X11/X.h)\n",
event->xany.type);
*/
break;
case Expose:
screen_redraw();
fprintf(stderr, "EXPOSE: x: %d y: %d width: %d height: %d\n",
event->xexpose.x, event->xexpose.y,
event->xexpose.width, event->xexpose.height);
event->xexpose.x, event->xexpose.y,
event->xexpose.width, event->xexpose.height);
break;
case ButtonPress:
fprintf(stderr, "BUTTON PRESSED\n");
@ -221,23 +222,23 @@ screenhack_handle_event (Display *dpy, XEvent *event)
{
if (event->xclient.message_type != XA_WM_PROTOCOLS)
{
char *s = XGetAtomName(dpy, event->xclient.message_type);
if (!s) s = "(null)";
fprintf (stderr, "%s: unknown ClientMessage %s received!\n",
progname, s);
char *s = XGetAtomName(dpy, event->xclient.message_type);
if (!s) s = "(null)";
fprintf (stderr, "%s: unknown ClientMessage %s received!\n",
progname, s);
}
else if (event->xclient.data.l[0] != XA_WM_DELETE_WINDOW)
{
char *s1 = XGetAtomName(dpy, event->xclient.message_type);
char *s2 = XGetAtomName(dpy, event->xclient.data.l[0]);
if (!s1) s1 = "(null)";
if (!s2) s2 = "(null)";
fprintf (stderr, "%s: unknown ClientMessage %s[%s] received!\n",
progname, s1, s2);
char *s1 = XGetAtomName(dpy, event->xclient.message_type);
char *s2 = XGetAtomName(dpy, event->xclient.data.l[0]);
if (!s1) s1 = "(null)";
if (!s2) s2 = "(null)";
fprintf (stderr, "%s: unknown ClientMessage %s[%s] received!\n",
progname, s1, s2);
}
else
{
exit (0);
exit (0);
}
}
break;
@ -246,15 +247,14 @@ screenhack_handle_event (Display *dpy, XEvent *event)
}
int
screenhack_handle_events (void)
int screenhack_handle_events (void)
{
int key=0;
while (XPending (dpy))
{
XEvent event;
XNextEvent (dpy, &event);
key=screenhack_handle_event (dpy, &event);
XEvent event;
XNextEvent (dpy, &event);
key=screenhack_handle_event (dpy, &event);
}
return key;
}
@ -264,33 +264,34 @@ static Visual *
pick_visual (Screen *screen)
{
#ifdef USE_GL
/* If we're linking against GL (that is, this is the version of screenhack.o
that the GL hacks will use, which is different from the one that the
non-GL hacks will use) then try to pick the "best" visual by interrogating
the GL library instead of by asking Xlib. GL knows better.
*/
Visual *v = 0;
char *string = get_string_resource ("visualID", "VisualID");
char *s;
/* If we're linking against GL (that is, this is the version of
screenhack.o that the GL hacks will use, which is different from the
one that the non-GL hacks will use) then try to pick the "best" visual
by interrogating the GL library instead of by asking Xlib. GL knows
better.
*/
Visual *v = 0;
char *string = get_string_resource ("visualID", "VisualID");
char *s;
if (string)
for (s = string; *s; s++)
if (isupper (*s)) *s = _tolower (*s);
if (string)
for (s = string; *s; s++)
if (isupper (*s)) *s = _tolower (*s);
if (!string || !*string ||
!strcmp (string, "gl") ||
!strcmp (string, "best") ||
!strcmp (string, "color") ||
!strcmp (string, "default"))
v = get_gl_visual (screen); /* from ../utils/visual-gl.c */
if (!string || !*string ||
!strcmp (string, "gl") ||
!strcmp (string, "best") ||
!strcmp (string, "color") ||
!strcmp (string, "default"))
v = get_gl_visual (screen); /* from ../utils/visual-gl.c */
if (string)
free (string);
if (v)
return v;
if (string)
free (string);
if (v)
return v;
#endif /* USE_GL */
return get_visual_resource (screen, "visualID", "VisualID", False);
return get_visual_resource (screen, "visualID", "VisualID", False);
}
@ -299,278 +300,278 @@ pick_visual (Screen *screen)
"-window-id 0x2c00001 -install") and complain, since when drawing
on an existing window, we have no choice about these things.
*/
static void
visual_warning (Screen *screen, Window window, Visual *visual, Colormap cmap,
Bool window_p)
static void visual_warning (Screen *screen, Window window, Visual *visual,
Colormap cmap, Bool window_p)
{
char *visual_string = get_string_resource ("visualID", "VisualID");
Visual *desired_visual = pick_visual (screen);
char win[100];
char why[100];
char *visual_string = get_string_resource ("visualID", "VisualID");
Visual *desired_visual = pick_visual (screen);
char win[100];
char why[100];
if (window == RootWindowOfScreen (screen))
strcpy (win, "root window");
else
sprintf (win, "window 0x%x", (unsigned long) window);
if (window == RootWindowOfScreen (screen))
strcpy (win, "root window");
else
sprintf (win, "window 0x%x", (unsigned long) window);
if (window_p)
sprintf (why, "-window-id 0x%x", (unsigned long) window);
else
strcpy (why, "-root");
if (window_p)
sprintf (why, "-window-id 0x%x", (unsigned long) window);
else
strcpy (why, "-root");
if (visual_string && *visual_string)
if (visual_string && *visual_string)
{
char *s;
for (s = visual_string; *s; s++)
if (isupper (*s)) *s = _tolower (*s);
char *s;
for (s = visual_string; *s; s++)
if (isupper (*s)) *s = _tolower (*s);
if (!strcmp (visual_string, "default") ||
!strcmp (visual_string, "default") ||
!strcmp (visual_string, "best"))
/* don't warn about these, just silently DWIM. */
;
else if (visual != desired_visual)
if (!strcmp (visual_string, "default") ||
!strcmp (visual_string, "default") ||
!strcmp (visual_string, "best"))
/* don't warn about these, just silently DWIM. */
;
else if (visual != desired_visual)
{
fprintf (stderr, "%s: ignoring `-visual %s' because of `%s'.\n",
progname, visual_string, why);
fprintf (stderr, "%s: using %s's visual 0x%x.\n",
progname, win, XVisualIDFromVisual (visual));
fprintf (stderr, "%s: ignoring `-visual %s' because of `%s'.\n",
progname, visual_string, why);
fprintf (stderr, "%s: using %s's visual 0x%x.\n",
progname, win, XVisualIDFromVisual (visual));
}
free (visual_string);
free (visual_string);
}
if (visual == DefaultVisualOfScreen (screen) &&
has_writable_cells (screen, visual) &&
get_boolean_resource ("installColormap", "InstallColormap"))
if (visual == DefaultVisualOfScreen (screen) &&
has_writable_cells (screen, visual) &&
get_boolean_resource ("installColormap", "InstallColormap"))
{
fprintf (stderr, "%s: ignoring `-install' because of `%s'.\n",
progname, why);
fprintf (stderr, "%s: using %s's colormap 0x%x.\n",
progname, win, (unsigned long) cmap);
fprintf (stderr, "%s: ignoring `-install' because of `%s'.\n",
progname, why);
fprintf (stderr, "%s: using %s's colormap 0x%x.\n",
progname, win, (unsigned long) cmap);
}
}
int
main (int argc, char **argv)
int main (int argc, char **argv)
{
Widget toplevel;
Display *dpy;
Window window;
Screen *screen;
Visual *visual;
Colormap cmap;
Bool root_p;
Window on_window = 0;
XEvent event;
Boolean dont_clear /*, dont_map */;
char version[255];
Widget toplevel;
Display *dpy;
Window window;
Screen *screen;
Visual *visual;
Colormap cmap;
Bool root_p;
Window on_window = 0;
XEvent event;
Boolean dont_clear /*, dont_map */;
char version[255];
#ifdef XLOCKMORE
pre_merge_options ();
pre_merge_options ();
#endif
merge_options ();
merge_options ();
#ifdef __sgi
/* We have to do this on SGI to prevent the background color from being
overridden by the current desktop color scheme (we'd like our backgrounds
to be black, thanks.) This should be the same as setting the
"*useSchemes: none" resource, but it's not -- if that resource is
present in the `default_defaults' above, it doesn't work, though it
does work when passed as an -xrm arg on the command line. So screw it,
turn them off from C instead.
*/
SgiUseSchemes ("none");
/* We have to do this on SGI to prevent the background color from being
overridden by the current desktop color scheme (we'd like our
backgrounds to be black, thanks.) This should be the same as setting
the "*useSchemes: none" resource, but it's not -- if that resource is
present in the `default_defaults' above, it doesn't work, though it
does work when passed as an -xrm arg on the command line. So screw it,
turn them off from C instead.
*/
SgiUseSchemes ("none");
#endif /* __sgi */
toplevel = XtAppInitialize (&app, progclass, merged_options,
merged_options_size, &argc, argv,
merged_defaults, 0, 0);
dpy = XtDisplay (toplevel);
screen = XtScreen (toplevel);
db = XtDatabase (dpy);
toplevel = XtAppInitialize (&app, progclass, merged_options,
merged_options_size, &argc, argv,
merged_defaults, 0, 0);
dpy = XtDisplay (toplevel);
screen = XtScreen (toplevel);
db = XtDatabase (dpy);
XtGetApplicationNameAndClass (dpy, &progname, &progclass);
XtGetApplicationNameAndClass (dpy, &progname, &progclass);
/* half-assed way of avoiding buffer-overrun attacks. */
if (strlen (progname) >= 100) progname[100] = 0;
/* half-assed way of avoiding buffer-overrun attacks. */
if (strlen (progname) >= 100) progname[100] = 0;
XSetErrorHandler (screenhack_ehandler);
XSetErrorHandler (screenhack_ehandler);
XA_WM_PROTOCOLS = XInternAtom (dpy, "WM_PROTOCOLS", False);
XA_WM_DELETE_WINDOW = XInternAtom (dpy, "WM_DELETE_WINDOW", False);
XA_WM_PROTOCOLS = XInternAtom (dpy, "WM_PROTOCOLS", False);
XA_WM_DELETE_WINDOW = XInternAtom (dpy, "WM_DELETE_WINDOW", False);
if (argc > 1)
if (argc > 1)
{
const char *s;
int i;
int x = 18;
int end = 78;
Bool help_p = !strcmp(argv[1], "-help");
fprintf (stderr, "%s\n", version);
for (s = progclass; *s; s++) fprintf(stderr, " ");
fprintf (stderr, " eXcellent GUI\n\n");
const char *s;
int i;
int x = 18;
int end = 78;
Bool help_p = !strcmp(argv[1], "-help");
fprintf (stderr, "%s\n", version);
for (s = progclass; *s; s++) fprintf(stderr, " ");
fprintf (stderr, " eXcellent GUI\n\n");
if (!help_p)
fprintf(stderr, "Unrecognised option: %s\n", argv[1]);
fprintf (stderr, "Options include: ");
for (i = 0; i < merged_options_size; i++)
{
char *sw = merged_options [i].option;
Bool argp = (merged_options [i].argKind == XrmoptionSepArg);
int size = strlen (sw) + (argp ? 6 : 0) + 2;
if (x + size >= end)
{
fprintf (stderr, "\n\t\t ");
x = 18;
}
x += size;
fprintf (stderr, "%s", sw);
if (argp) fprintf (stderr, " <arg>");
if (i != merged_options_size - 1) fprintf (stderr, ", ");
}
fprintf (stderr, ".\n");
exit (help_p ? 0 : 1);
if (!help_p)
fprintf(stderr, "Unrecognised option: %s\n", argv[1]);
fprintf (stderr, "Options include: ");
for (i = 0; i < merged_options_size; i++)
{
char *sw = merged_options [i].option;
Bool argp = (merged_options [i].argKind == XrmoptionSepArg);
int size = strlen (sw) + (argp ? 6 : 0) + 2;
if (x + size >= end)
{
fprintf (stderr, "\n\t\t ");
x = 18;
}
x += size;
fprintf (stderr, "%s", sw);
if (argp) fprintf (stderr, " <arg>");
if (i != merged_options_size - 1) fprintf (stderr, ", ");
}
fprintf (stderr, ".\n");
exit (help_p ? 0 : 1);
}
dont_clear = get_boolean_resource ("dontClearRoot", "Boolean");
/*dont_map = get_boolean_resource ("dontMapWindow", "Boolean"); */
mono_p = get_boolean_resource ("mono", "Boolean");
if (CellsOfScreen (DefaultScreenOfDisplay (dpy)) <= 2)
mono_p = True;
dont_clear = get_boolean_resource ("dontClearRoot", "Boolean");
/*dont_map = get_boolean_resource ("dontMapWindow", "Boolean"); */
mono_p = get_boolean_resource ("mono", "Boolean");
if (CellsOfScreen (DefaultScreenOfDisplay (dpy)) <= 2)
mono_p = True;
root_p = get_boolean_resource ("root", "Boolean");
root_p = get_boolean_resource ("root", "Boolean");
{
char *s = get_string_resource ("windowID", "WindowID");
if (s && *s)
on_window = get_integer_resource ("windowID", "WindowID");
if (s) free (s);
}
if (on_window)
{
XWindowAttributes xgwa;
window = (Window) on_window;
XtDestroyWidget (toplevel);
XGetWindowAttributes (dpy, window, &xgwa);
cmap = xgwa.colormap;
visual = xgwa.visual;
visual_warning (screen, window, visual, cmap, True);
char *s = get_string_resource ("windowID", "WindowID");
if (s && *s)
on_window = get_integer_resource ("windowID", "WindowID");
if (s) free (s);
}
else if (root_p)
if (on_window)
{
XWindowAttributes xgwa;
window = RootWindowOfScreen (XtScreen (toplevel));
XtDestroyWidget (toplevel);
XGetWindowAttributes (dpy, window, &xgwa);
cmap = xgwa.colormap;
visual = xgwa.visual;
visual_warning (screen, window, visual, cmap, False);
XWindowAttributes xgwa;
window = (Window) on_window;
XtDestroyWidget (toplevel);
XGetWindowAttributes (dpy, window, &xgwa);
cmap = xgwa.colormap;
visual = xgwa.visual;
visual_warning (screen, window, visual, cmap, True);
}
else
else if (root_p)
{
Boolean def_visual_p;
visual = pick_visual (screen);
XWindowAttributes xgwa;
window = RootWindowOfScreen (XtScreen (toplevel));
XtDestroyWidget (toplevel);
XGetWindowAttributes (dpy, window, &xgwa);
cmap = xgwa.colormap;
visual = xgwa.visual;
visual_warning (screen, window, visual, cmap, False);
}
else
{
Boolean def_visual_p;
visual = pick_visual (screen);
if (toplevel->core.width <= 0)
toplevel->core.width = 600;
if (toplevel->core.height <= 0)
toplevel->core.height = 480;
if (toplevel->core.width <= 0)
toplevel->core.width = 600;
if (toplevel->core.height <= 0)
toplevel->core.height = 480;
def_visual_p = (visual == DefaultVisualOfScreen (screen));
def_visual_p = (visual == DefaultVisualOfScreen (screen));
if (!def_visual_p)
{
unsigned int bg, bd;
Widget new;
if (!def_visual_p)
{
unsigned int bg, bd;
Widget new;
cmap = XCreateColormap (dpy, RootWindowOfScreen(screen),
visual, AllocNone);
bg = get_pixel_resource ("background", "Background", dpy, cmap);
bd = get_pixel_resource ("borderColor", "Foreground", dpy, cmap);
cmap = XCreateColormap (dpy, RootWindowOfScreen(screen),
visual, AllocNone);
bg = get_pixel_resource ("background", "Background", dpy, cmap);
bd = get_pixel_resource ("borderColor", "Foreground", dpy, cmap);
new = XtVaAppCreateShell (progname, progclass,
topLevelShellWidgetClass, dpy,
XtNmappedWhenManaged, False,
XtNvisual, visual,
XtNdepth, visual_depth (screen, visual),
XtNwidth, toplevel->core.width,
XtNheight, toplevel->core.height,
XtNcolormap, cmap,
XtNbackground, (Pixel) bg,
XtNborderColor, (Pixel) bd,
XtNinput, True, /* for WM_HINTS */
0);
XtDestroyWidget (toplevel);
toplevel = new;
XtRealizeWidget (toplevel);
window = XtWindow (toplevel);
}
else
{
XtVaSetValues (toplevel,
XtNmappedWhenManaged, False,
XtNinput, True, /* for WM_HINTS */
0);
XtRealizeWidget (toplevel);
window = XtWindow (toplevel);
new = XtVaAppCreateShell (progname, progclass,
topLevelShellWidgetClass, dpy,
XtNmappedWhenManaged, False,
XtNvisual, visual,
XtNdepth, visual_depth (screen, visual),
XtNwidth, toplevel->core.width,
XtNheight, toplevel->core.height,
XtNcolormap, cmap,
XtNbackground, (Pixel) bg,
XtNborderColor, (Pixel) bd,
XtNinput, True, /* for WM_HINTS */
0);
XtDestroyWidget (toplevel);
toplevel = new;
XtRealizeWidget (toplevel);
window = XtWindow (toplevel);
}
else
{
XtVaSetValues (toplevel,
XtNmappedWhenManaged, False,
XtNinput, True, /* for WM_HINTS */
0);
XtRealizeWidget (toplevel);
window = XtWindow (toplevel);
if (get_boolean_resource ("installColormap", "InstallColormap"))
{
cmap = XCreateColormap (dpy, window,
DefaultVisualOfScreen (XtScreen (toplevel)),
AllocNone);
XSetWindowColormap (dpy, window, cmap);
}
else
{
cmap = DefaultColormap (dpy, DefaultScreen (dpy));
}
}
if (get_boolean_resource ("installColormap", "InstallColormap"))
{
cmap = XCreateColormap (dpy, window,
DefaultVisualOfScreen (XtScreen
(toplevel)),
AllocNone);
XSetWindowColormap (dpy, window, cmap);
}
else
{
cmap = DefaultColormap (dpy, DefaultScreen (dpy));
}
}
/*
if (dont_map)
{
XtVaSetValues (toplevel, XtNmappedWhenManaged, False, 0);
XtRealizeWidget (toplevel);
}
else
if (dont_map)
{
XtVaSetValues (toplevel, XtNmappedWhenManaged, False, 0);
XtRealizeWidget (toplevel);
}
else
*/
{
XtPopup (toplevel, XtGrabNone);
}
{
XtPopup (toplevel, XtGrabNone);
}
XtVaSetValues(toplevel, XtNtitle, version, 0);
XtVaSetValues(toplevel, XtNtitle, version, 0);
/* For screenhack_handle_events(): select KeyPress, and
announce that we accept WM_DELETE_WINDOW. */
{
XWindowAttributes xgwa;
XGetWindowAttributes (dpy, window, &xgwa);
XSelectInput (dpy, window,
xgwa.your_event_mask | KeyPressMask | ButtonPressMask | ResizeRedirectMask | ExposureMask);
XChangeProperty (dpy, window, XA_WM_PROTOCOLS, XA_ATOM, 32,
PropModeReplace,
(unsigned char *) &XA_WM_DELETE_WINDOW, 1);
}
/* For screenhack_handle_events(): select KeyPress, and
announce that we accept WM_DELETE_WINDOW. */
{
XWindowAttributes xgwa;
XGetWindowAttributes (dpy, window, &xgwa);
XSelectInput (dpy, window,
xgwa.your_event_mask | KeyPressMask |
ButtonPressMask | ResizeRedirectMask | ExposureMask);
XChangeProperty (dpy, window, XA_WM_PROTOCOLS, XA_ATOM, 32,
PropModeReplace,
(unsigned char *) &XA_WM_DELETE_WINDOW, 1);
}
}
if (!dont_clear)
if (!dont_clear)
{
XSetWindowBackground (dpy, window,
get_pixel_resource ("background", "Background",
dpy, cmap));
XClearWindow (dpy, window);
XSetWindowBackground (dpy, window,
get_pixel_resource ("background", "Background",
dpy, cmap));
XClearWindow (dpy, window);
}
if (!root_p && !on_window)
/* wait for it to be mapped */
XIfEvent (dpy, &event, MapNotify_event_p, (XPointer) window);
if (!root_p && !on_window)
/* wait for it to be mapped */
XIfEvent (dpy, &event, MapNotify_event_p, (XPointer) window);
XSync (dpy, False);
XSync (dpy, False);
screenhack (dpy, window); /* doesn't return */
return 0;
screenhack (dpy, window); /* doesn't return */
return 0;
}