i3lock-color

The world's most popular non-default computer lockscreen.
Index Commits Files Refs README LICENSE
commit 69a987db550678b640d0f59246e6ac2cd7ce2657
parent 189ee55bc074c14d61a900d428401580614a5618
Author: Michael Stapelberg <michael@stapelberg.de>
Date:   Sat, 27 Jun 2009 22:35:59 +0200

Handle error codes when loading the pixmap

Diffstat:
Mi3lock.c | 35++++++++++++++++++++++++++++++++---
1 file changed, 32 insertions(+), 3 deletions(-)
diff --git 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);