summaryrefslogtreecommitdiff
path: root/i3lock.c
diff options
context:
space:
mode:
authorMichael Stapelberg <michael@stapelberg.de>2009-06-27 22:35:59 +0200
committerMichael Stapelberg <michael@stapelberg.de>2009-06-27 22:35:59 +0200
commit69a987db550678b640d0f59246e6ac2cd7ce2657 (patch)
tree5c2b1307575b98416249be36acbc29ef696994a9 /i3lock.c
parent189ee55bc074c14d61a900d428401580614a5618 (diff)
Handle error codes when loading the pixmap
Diffstat (limited to 'i3lock.c')
-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);