diff options
Diffstat (limited to 'uisimulator')
-rw-r--r-- | uisimulator/x11/screenhack.c | 669 |
1 files changed, 335 insertions, 334 deletions
diff --git a/uisimulator/x11/screenhack.c b/uisimulator/x11/screenhack.c index f4f5aaa348..34613dfab4 100644 --- a/uisimulator/x11/screenhack.c +++ b/uisimulator/x11/screenhack.c @@ -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; - - 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))); - - 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)); - - /* 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; - } - } + 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++) + ; + + 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)); + + /* 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 (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) - free (string); - if (v) - return v; + /* 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 || !*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; #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]; - - 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 (visual_string && *visual_string) + 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_p) + sprintf (why, "-window-id 0x%x", (unsigned long) window); + else + strcpy (why, "-root"); + + if (visual_string && *visual_string) { - 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) + 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) { - 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"); - - 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); + 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); } - 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); - } + { + char *s = get_string_resource ("windowID", "WindowID"); + if (s && *s) + on_window = get_integer_resource ("windowID", "WindowID"); + if (s) free (s); + } - if (on_window) + 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); + 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 if (root_p) + else if (root_p) { - 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 = RootWindowOfScreen (XtScreen (toplevel)); + XtDestroyWidget (toplevel); + XGetWindowAttributes (dpy, window, &xgwa); + cmap = xgwa.colormap; + visual = xgwa.visual; + visual_warning (screen, window, visual, cmap, False); } - else + else { - Boolean def_visual_p; - visual = pick_visual (screen); + 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; - - 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); - - 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 (!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); + + 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 (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; } |