/* open connection to server and set X variables */
if ((dpy = XOpenDisplay(NULL)) == NULL)
- errx(1, "cannot open display");
+ errx(1, "could not open display");
screen = DefaultScreen(dpy);
visual = DefaultVisual(dpy, screen);
rootwin = RootWindow(dpy, screen);
i = 0;
while (isspace(*p))
p++;
- while (i < sizeof buf && *p != '\0' && *p != ',') {
+ while (i < sizeof buf && *p != '\0' && *p != ',')
buf[i++] = *p++;
- }
if (i >= sizeof buf)
errx(1, "font name too long");
if (*p == ',')
if ((dc.pattern = FcNameParse((FcChar8 *)buf)) == NULL)
errx(1, "the first font in the cache must be loaded from a font string");
if ((dc.fonts[nfont++] = XftFontOpenName(dpy, screen, buf)) == NULL)
- errx(1, "cannot load font");
+ errx(1, "could not load font");
}
}
ealloccolor(const char *s, XftColor *color)
{
if(!XftColorAllocName(dpy, visual, colormap, s, color))
- errx(1, "cannot allocate color: %s", s);
+ errx(1, "could not allocate color: %s", s);
}
/* query monitor information and cursor position */
if ((info = XineramaQueryScreens(dpy, &nmons)) != NULL) {
int selmon = 0;
- if (!mflag || (mflag && (config.monitor < 0 || config.monitor >= nmons))) {
+ if (!mflag || config.monitor < 0 || config.monitor >= nmons) {
for (i = 0; i < nmons; i++) {
if (BETWEEN(cursx, info[i].x_org, info[i].x_org + info[i].width) &&
BETWEEN(cursy, info[i].y_org, info[i].y_org + info[i].height)) {
mon.y = info[selmon].y_org;
mon.w = info[selmon].width;
mon.h = info[selmon].height;
+
+ XFree(info);
}
if (!pflag) {
static void
initresources(void)
{
- char *xrm;
long n;
char *type;
+ char *xrm;
XrmDatabase xdb;
XrmValue xval;
menu = menu->parent, i++)
;
if (menu == NULL)
- errx(1, "reached NULL menu");
+ errx(1, "improper indentation detected");
/* find last item in the new menu */
for (item = menu->list; item->next != NULL; item = item->next)
return;
nanosleep(&ts, NULL);
}
- errx(1, "cannot grab keyboard");
+ errx(1, "could not grab pointer");
}
/* try to grab keyboard, we may have to wait for another process to ungrab */
return;
nanosleep(&ts, NULL);
}
- errx(1, "cannot grab keyboard");
+ errx(1, "could not grab keyboard");
}
/* load and scale icon */
loadicon(const char *file)
{
Imlib_Image icon;
+ Imlib_Load_Error errcode;
+ const char *errstr;
int width;
int height;
int imgsize;
- icon = imlib_load_image(file);
- if (icon == NULL)
- errx(1, "cannot load icon %s", file);
+ icon = imlib_load_image_with_error_return(file, &errcode);
+ if (*file == '\0') {
+ warnx("could not load icon (file name is blank)");
+ return NULL;
+ } else if (icon == NULL) {
+ switch (errcode) {
+ case IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST:
+ errstr = "file does not exist";
+ break;
+ case IMLIB_LOAD_ERROR_FILE_IS_DIRECTORY:
+ errstr = "file is directory";
+ break;
+ case IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_READ:
+ case IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_WRITE:
+ errstr = "permission denied";
+ break;
+ case IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT:
+ errstr = "unknown file format";
+ break;
+ case IMLIB_LOAD_ERROR_PATH_TOO_LONG:
+ errstr = "path too long";
+ break;
+ case IMLIB_LOAD_ERROR_PATH_COMPONENT_NON_EXISTANT:
+ case IMLIB_LOAD_ERROR_PATH_COMPONENT_NOT_DIRECTORY:
+ case IMLIB_LOAD_ERROR_PATH_POINTS_OUTSIDE_ADDRESS_SPACE:
+ errstr = "improper path";
+ break;
+ case IMLIB_LOAD_ERROR_TOO_MANY_SYMBOLIC_LINKS:
+ errstr = "too many symbolic links";
+ break;
+ case IMLIB_LOAD_ERROR_OUT_OF_MEMORY:
+ errstr = "out of memory";
+ break;
+ case IMLIB_LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS:
+ errstr = "out of file descriptors";
+ break;
+ default:
+ errstr = "unknown error";
+ break;
+ }
+ warnx("could not load icon (%s): %s", errstr, file);
+ return NULL;
+ }
imlib_context_set_image(icon);
Convex, CoordModeOrigin);
}
- /* draw icon */
- if (item->file != NULL && !iflag) {
+ /* try to load icon */
+ if (item->file && !iflag) {
item->icon = loadicon(item->file);
+ free(item->file);
+ }
+ /* draw icon if properly loaded */
+ if (item->icon) {
imlib_context_set_image(item->icon);
imlib_context_set_drawable(item->sel);
imlib_render_image_on_drawable(config.horzpadding, config.iconpadding);
imlib_context_set_drawable(item->unsel);
imlib_render_image_on_drawable(config.horzpadding, config.iconpadding);
+ imlib_context_set_image(item->icon);
+ imlib_free_image();
}
}
}
if (tmp->label != tmp->output)
free(tmp->label);
free(tmp->output);
- if (tmp->file != NULL) {
- free(tmp->file);
- if (tmp->icon != NULL) {
- imlib_context_set_image(tmp->icon);
- imlib_free_image();
- }
- }
item = item->next;
free(tmp);
}