mirror of https://github.com/i3/i3lock.git
adding option to choose background color
parent
c1a91badbe
commit
9c4dee2e86
8
i3lock.1
8
i3lock.1
|
@ -21,10 +21,12 @@ i3lock \- slightly improved version of slock
|
||||||
.RB [\|\-d\|]
|
.RB [\|\-d\|]
|
||||||
.RB [\|\-i
|
.RB [\|\-i
|
||||||
.IR image.xpm \|]
|
.IR image.xpm \|]
|
||||||
|
.RB [\|\-c
|
||||||
|
.IR color \|]
|
||||||
|
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.B i3lock
|
.B i3lock
|
||||||
locks your screen by making it white. To quit
|
locks your screen by making it white (default). To quit
|
||||||
.B i3lock
|
.B i3lock
|
||||||
just enter your password.
|
just enter your password.
|
||||||
|
|
||||||
|
@ -71,6 +73,10 @@ you did not disable this in your X server).
|
||||||
Display the given XPM image instead of a blank screen. You can convert an image to
|
Display the given XPM image instead of a blank screen. You can convert an image to
|
||||||
XPM by using convert(1) from ImageMagick or GIMP for example.
|
XPM by using convert(1) from ImageMagick or GIMP for example.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-c, \-\-color
|
||||||
|
Turns the screen into the given color instead of white. Color must be given in 6-byte format: rrggbb (i.e. ff0000 is red)
|
||||||
|
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Michael Stapelberg <michael+i3lock at stapelberg dot de>
|
Michael Stapelberg <michael+i3lock at stapelberg dot de>
|
||||||
|
|
||||||
|
|
38
i3lock.c
38
i3lock.c
|
@ -20,6 +20,7 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -44,6 +45,27 @@ static void die(const char *errstr, ...) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the colorpixel to use for the given hex color (think of HTML).
|
||||||
|
*
|
||||||
|
* The hex_color may not start with #, for example FF00FF works.
|
||||||
|
*
|
||||||
|
* NOTE that get_colorpixel() does _NOT_ check the given color code for validity.
|
||||||
|
* This has to be done by the caller.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
uint32_t get_colorpixel(char *hex) {
|
||||||
|
char strgroups[3][3] = {{hex[0], hex[1], '\0'},
|
||||||
|
{hex[2], hex[3], '\0'},
|
||||||
|
{hex[4], hex[5], '\0'}};
|
||||||
|
uint32_t rgb16[3] = {(strtol(strgroups[0], NULL, 16)),
|
||||||
|
(strtol(strgroups[1], NULL, 16)),
|
||||||
|
(strtol(strgroups[2], NULL, 16))};
|
||||||
|
|
||||||
|
return (rgb16[0] << 16) + (rgb16[1] << 8) + rgb16[2];
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if given file can be opened => exists
|
* Check if given file can be opened => exists
|
||||||
*
|
*
|
||||||
|
@ -131,6 +153,7 @@ int main(int argc, char *argv[]) {
|
||||||
bool dpms = false;
|
bool dpms = false;
|
||||||
bool xpm_image = false;
|
bool xpm_image = false;
|
||||||
char xpm_image_path[256];
|
char xpm_image_path[256];
|
||||||
|
char color[7] = "ffffff"; // white
|
||||||
Cursor invisible;
|
Cursor invisible;
|
||||||
Display *dpy;
|
Display *dpy;
|
||||||
KeySym ksym;
|
KeySym ksym;
|
||||||
|
@ -151,10 +174,11 @@ int main(int argc, char *argv[]) {
|
||||||
{"beep", no_argument, NULL, 'b'},
|
{"beep", no_argument, NULL, 'b'},
|
||||||
{"dpms", no_argument, NULL, 'd'},
|
{"dpms", no_argument, NULL, 'd'},
|
||||||
{"image", required_argument, NULL, 'i'},
|
{"image", required_argument, NULL, 'i'},
|
||||||
|
{"color", required_argument, NULL, 'c'},
|
||||||
{NULL, no_argument, NULL, 0}
|
{NULL, no_argument, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
while ((opt = getopt_long(argc, argv, "vnbdi:", long_options, &optind)) != -1) {
|
while ((opt = getopt_long(argc, argv, "vnbdi:c:", long_options, &optind)) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'v':
|
case 'v':
|
||||||
die("i3lock-"VERSION", © 2009 Michael Stapelberg\n"
|
die("i3lock-"VERSION", © 2009 Michael Stapelberg\n"
|
||||||
|
@ -172,8 +196,16 @@ int main(int argc, char *argv[]) {
|
||||||
strncpy(xpm_image_path, optarg, 255);
|
strncpy(xpm_image_path, optarg, 255);
|
||||||
xpm_image = true;
|
xpm_image = true;
|
||||||
break;
|
break;
|
||||||
|
case 'c':
|
||||||
|
strncpy(color, optarg, 6);
|
||||||
|
color[6] = 0;
|
||||||
|
|
||||||
|
char parsed_color[7];
|
||||||
|
if (strlen(color) != 6 || sscanf(color, "%06[0-9a-fA-F]", parsed_color) != 1)
|
||||||
|
die("color is invalid, color must be given in 6-byte format: rrggbb\n");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
die("i3lock: Unknown option. Syntax: i3lock [-v] [-n] [-b] [-d] [-i image.xpm]\n");
|
die("i3lock: Unknown option. Syntax: i3lock [-v] [-n] [-b] [-d] [-i image.xpm] [-c color]\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,7 +228,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
/* init */
|
/* init */
|
||||||
wa.override_redirect = 1;
|
wa.override_redirect = 1;
|
||||||
wa.background_pixel = WhitePixel(dpy, screen);
|
wa.background_pixel = get_colorpixel(color);
|
||||||
w = XCreateWindow(dpy, root, 0, 0, DisplayWidth(dpy, screen), DisplayHeight(dpy, screen),
|
w = XCreateWindow(dpy, root, 0, 0, DisplayWidth(dpy, screen), DisplayHeight(dpy, screen),
|
||||||
0, DefaultDepth(dpy, screen), CopyFromParent,
|
0, DefaultDepth(dpy, screen), CopyFromParent,
|
||||||
DefaultVisual(dpy, screen), CWOverrideRedirect | CWBackPixel, &wa);
|
DefaultVisual(dpy, screen), CWOverrideRedirect | CWBackPixel, &wa);
|
||||||
|
|
Loading…
Reference in New Issue