#include "version.h"
#include "vroot.h"
+#ifndef isupper
+# define isupper(c) ((c) >= 'A' && (c) <= 'Z')
+#endif
+#ifndef _tolower
+# define _tolower(c) ((c) - 'A' + 'a')
+#endif
+
+
char *progname;
XrmDatabase db;
XtAppContext app;
*/
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") ||
}
+/* Notice when the user has requested a different visual or colormap
+ on a pre-existing window (e.g., "-root -visual truecolor" or
+ "-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)
+{
+ 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)
+ {
+ 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);
+ }
+
+ 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);
+ }
+}
+
+
int
main (int argc, char **argv)
{
Widget toplevel;
Display *dpy;
Window window;
+ Screen *screen;
Visual *visual;
Colormap cmap;
Bool root_p;
merged_options_size, &argc, argv,
merged_defaults, 0, 0);
dpy = XtDisplay (toplevel);
+ screen = XtScreen (toplevel);
db = XtDatabase (dpy);
+
XtGetApplicationNameAndClass (dpy, &progname, &progclass);
/* half-assed way of avoiding buffer-overrun attacks. */
XGetWindowAttributes (dpy, window, &xgwa);
cmap = xgwa.colormap;
visual = xgwa.visual;
+ visual_warning (screen, window, visual, cmap, True);
}
else if (root_p)
{
XGetWindowAttributes (dpy, window, &xgwa);
cmap = xgwa.colormap;
visual = xgwa.visual;
+ visual_warning (screen, window, visual, cmap, False);
}
else
{
Boolean def_visual_p;
- Screen *screen = XtScreen (toplevel);
visual = pick_visual (screen);
if (toplevel->core.width <= 0)
XtNcolormap, cmap,
XtNbackground, (Pixel) bg,
XtNborderColor, (Pixel) bd,
+ XtNinput, True, /* for WM_HINTS */
0);
XtDestroyWidget (toplevel);
toplevel = new;
}
else
{
- XtVaSetValues (toplevel, XtNmappedWhenManaged, False, 0);
+ XtVaSetValues (toplevel,
+ XtNmappedWhenManaged, False,
+ XtNinput, True, /* for WM_HINTS */
+ 0);
XtRealizeWidget (toplevel);
window = XtWindow (toplevel);
XIfEvent (dpy, &event, MapNotify_event_p, (XPointer) window);
XSync (dpy, False);
- srandom ((int) time ((time_t *) 0));
+
+ /* This is the one and only place that the random-number generator is
+ seeded in any screenhack. You do not need to seed the RNG again,
+ it is done for you before your code is invoked. */
+# undef ya_rand_init
+ ya_rand_init ((int) time ((time_t *) 0));
+
screenhack (dpy, window); /* doesn't return */
return 0;
}