summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--i3lock.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/i3lock.c b/i3lock.c
index 5b495b5..a824c6a 100644
--- a/i3lock.c
+++ b/i3lock.c
@@ -48,7 +48,7 @@ static void die(const char *errstr, ...) {
* Check if given file can be opened => exists
*
*/
-bool file_exists(const char * filename)
+bool file_exists(const char *filename)
{
FILE * file = fopen(filename, "r");
if(file)
@@ -59,6 +59,31 @@ bool file_exists(const char * filename)
return false;
}
+/*
+ * Puts the given XPM error code to stderr
+ *
+ */
+void print_xpm_error(int err)
+{
+ switch (err) {
+ case XpmColorError:
+ fprintf(stderr, "XPM: Could not parse or alloc requested color\n");
+ break;
+ case XpmOpenFailed:
+ fprintf(stderr, "XPM: Cannot open file\n");
+ break;
+ case XpmFileInvalid:
+ fprintf(stderr, "XPM: invalid XPM file\n");
+ break;
+ case XpmNoMemory:
+ fprintf(stderr, "XPM: Not enough memory\n");
+ break;
+ case XpmColorFailed:
+ fprintf(stderr, "XPM: Color not found\n");
+ break;
+ }
+}
+
/*
* Callback function for PAM. We only react on password request callbacks.
@@ -188,12 +213,16 @@ int main(int argc, char *argv[]) {
int disp_width = DisplayWidth(dpy, screen);
int disp_height = DisplayHeight(dpy, screen);
Pixmap pix = XCreatePixmap(dpy, w, disp_width, disp_height, depth);
- XpmReadFileToPixmap(dpy, w, xpm_image_path, &pix, 0, 0);
+ int err = XpmReadFileToPixmap(dpy, w, xpm_image_path, &pix, 0, 0);
+ if (err != 0) {
+ print_xpm_error(err);
+ return 1;
+ }
XCopyArea(dpy, pix, w, gc, 0, 0, disp_width, disp_height, 0, 0);
}
for(len = 1000; len; len--) {
- if(XGrabPointer(dpy, root, False, ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
+ if(XGrabPointer(dpy, root, False, ButtonPressMask | ButtonReleaseMask,
GrabModeAsync, GrabModeAsync, None, invisible, CurrentTime) == GrabSuccess)
break;
usleep(1000);