commit cf522a301f9a36eb9fe689755e93e0624e8aefca
parent 986608a1fb48e1e4b3fe8bce9352faab60a3a438
Author: Chris Guillott <chris@techfo.xyz>
Date: Tue, 9 Feb 2016 08:52:59 -0500
add a couple options for drawing the line color
Diffstat:
2 files changed, 69 insertions(+), 16 deletions(-)
diff --git a/i3lock.c b/i3lock.c
@@ -57,6 +57,8 @@ char linecolor[9] = "000000ff";
char textcolor[9] = "000000ff";
char keyhlcolor[9] = "33db00ff";
char bshlcolor[9] = "db3300ff";
+/* default is to use the supplied line color, 1 will be ring color, 2 will be to use the inside color for ver/wrong/etc */
+int internal_line_source = 0;
int inactivity_timeout = 30;
uint32_t last_resolution[2];
@@ -772,17 +774,19 @@ int main(int argc, char *argv[]) {
/* options for unlock indicator colors */
// defining a lot of different chars here for the options -- TODO find a nicer way for this, maybe not offering single character options at all
- {"insidevercolor", required_argument, NULL, 0},
- {"insidewrongcolor", required_argument, NULL, 0},
- {"insidecolor", required_argument, NULL, 0},
- {"ringvercolor", required_argument, NULL, 0},
- {"ringwrongcolor", required_argument, NULL, 0},
- {"ringcolor", required_argument, NULL, 0},
- {"linecolor", required_argument, NULL, 0},
- {"textcolor", required_argument, NULL, 0},
- {"keyhlcolor", required_argument, NULL, 0},
- {"bshlcolor", required_argument, NULL, 0},
-
+ {"insidevercolor", required_argument, NULL, 0}, // --i-v
+ {"insidewrongcolor", required_argument, NULL, 0}, // --i-w
+ {"insidecolor", required_argument, NULL, 0}, // --i-c
+ {"ringvercolor", required_argument, NULL, 0}, // --r-v
+ {"ringwrongcolor", required_argument, NULL, 0}, // --r-w
+ {"ringcolor", required_argument, NULL, 0}, // --r-c
+ {"linecolor", required_argument, NULL, 0}, // --l-c
+ {"textcolor", required_argument, NULL, 0}, // --t-c
+ {"keyhlcolor", required_argument, NULL, 0}, // --k-c
+ {"bshlcolor", required_argument, NULL, 0}, // --b-c
+ {"line-uses-ring", no_argument, NULL, 'r'},
+ {"line-uses-inside", no_argument, NULL, 's'},
+ /* s for in_s_ide; ideally I'd use -I but that's used for timeout, which should use -T, but compatibility argh */
{"ignore-empty-password", no_argument, NULL, 'e'},
{"inactivity-timeout", required_argument, NULL, 'I'},
{"show-failed-attempts", no_argument, NULL, 'f'},
@@ -793,7 +797,7 @@ int main(int argc, char *argv[]) {
if ((username = pw->pw_name) == NULL)
errx(EXIT_FAILURE, "pw->pw_name is NULL.\n");
- char *optstring = "hvnbdc:p:ui:teI:f";
+ char *optstring = "hvnbdc:p:ui:teI:frs";
while ((o = getopt_long(argc, argv, optstring, longopts, &optind)) != -1) {
switch (o) {
case 'v':
@@ -847,6 +851,18 @@ int main(int argc, char *argv[]) {
case 'e':
ignore_empty_password = true;
break;
+ case 'r':
+ if (internal_line_source != 0) {
+ errx(EXIT_FAILURE, "i3lock-color: Options line-uses-ring and line-uses-inside conflict.");
+ }
+ internal_line_source = 1; //sets the line drawn inside to use the inside color when drawn
+ break;
+ case 's':
+ if (internal_line_source != 0) {
+ errx(EXIT_FAILURE, "i3lock-color: Options line-uses-ring and line-uses-inside conflict.");
+ }
+ internal_line_source = 2;
+ break;
case 0:
if (strcmp(longopts[optind].name, "debug") == 0)
debug_mode = true;
@@ -955,8 +971,8 @@ int main(int argc, char *argv[]) {
show_failed_attempts = true;
break;
default:
- errx(EXIT_FAILURE, "Syntax: i3lock [-v] [-n] [-b] [-d] [-c color] [-u] [-p win|default]"
- " [-i image.png] [-t] [-e] [-I timeout] [-f]");
+ errx(EXIT_FAILURE, "Syntax: i3lock-color [-v] [-n] [-b] [-d] [-c color] [-u] [-p win|default]"
+ " [-i image.png] [-t] [-e] [-I timeout] [-f] [-r|s]");
}
}
@@ -965,7 +981,7 @@ int main(int argc, char *argv[]) {
srand(time(NULL));
/* Initialize PAM */
- if ((ret = pam_start("i3lock", username, &conv, &pam_handle)) != PAM_SUCCESS)
+ if ((ret = pam_start("i3lock-color", username, &conv, &pam_handle)) != PAM_SUCCESS)
errx(EXIT_FAILURE, "PAM: %s", pam_strerror(pam_handle, ret));
if ((ret = pam_set_item(pam_handle, PAM_TTY, getenv("DISPLAY"))) != PAM_SUCCESS)
diff --git a/unlock_indicator.c b/unlock_indicator.c
@@ -66,6 +66,7 @@ extern char linecolor[9];
extern char textcolor[9];
extern char keyhlcolor[9];
extern char bshlcolor[9];
+extern int internal_line_source;
/* Whether the failed attempts should be displayed. */
extern bool show_failed_attempts;
@@ -250,12 +251,30 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
switch (pam_state) {
case STATE_PAM_VERIFY:
cairo_set_source_rgba(ctx, (double)insidever16[0]/255, (double)insidever16[1]/255, (double)insidever16[2]/255, (double)insidever16[3]/255);
+ if (internal_line_source == 2) {
+ line16[0] = insidever16[0];
+ line16[1] = insidever16[1];
+ line16[2] = insidever16[2];
+ line16[3] = insidever16[3];
+ }
break;
case STATE_PAM_WRONG:
cairo_set_source_rgba(ctx, (double)insidewrong16[0]/255, (double)insidewrong16[1]/255, (double)insidewrong16[2]/255, (double)insidewrong16[3]/255);
+ if (internal_line_source == 2) {
+ line16[0] = insidewrong16[0];
+ line16[1] = insidewrong16[1];
+ line16[2] = insidewrong16[2];
+ line16[3] = insidewrong16[3];
+ }
break;
default:
cairo_set_source_rgba(ctx, (double)inside16[0]/255, (double)inside16[1]/255, (double)inside16[2]/255, (double)inside16[3]/255);
+ if (internal_line_source == 2) {
+ line16[0] = inside16[0];
+ line16[1] = inside16[1];
+ line16[2] = inside16[2];
+ line16[3] = inside16[3];
+ }
break;
}
cairo_fill_preserve(ctx);
@@ -263,12 +282,30 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
switch (pam_state) {
case STATE_PAM_VERIFY:
cairo_set_source_rgba(ctx, (double)ringver16[0]/255, (double)ringver16[1]/255, (double)ringver16[2]/255, (double)ringver16[3]/255);
+ if (internal_line_source == 1) {
+ line16[0] = ringver16[0];
+ line16[1] = ringver16[1];
+ line16[2] = ringver16[2];
+ line16[3] = ringver16[3];
+ }
break;
case STATE_PAM_WRONG:
cairo_set_source_rgba(ctx, (double)ringwrong16[0]/255, (double)ringwrong16[1]/255, (double)ringwrong16[2]/255, (double)ringwrong16[3]/255);
+ if (internal_line_source == 1) {
+ line16[0] = ringwrong16[0];
+ line16[1] = ringwrong16[1];
+ line16[2] = ringwrong16[2];
+ line16[3] = ringwrong16[3];
+ }
break;
case STATE_PAM_IDLE:
cairo_set_source_rgba(ctx, (double)ring16[0]/255, (double)ring16[1]/255, (double)ring16[2]/255, (double)ring16[3]/255);
+ if (internal_line_source == 1) {
+ line16[0] = ring16[0];
+ line16[1] = ring16[1];
+ line16[2] = ring16[2];
+ line16[3] = ring16[3];
+ }
break;
}
cairo_stroke(ctx);
@@ -308,7 +345,7 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
snprintf(buf, sizeof(buf), "%d", failed_attempts);
text = buf;
}
- cairo_set_source_rgb(ctx, 1, 0, 0);
+ cairo_set_source_rgba(ctx, (double)text16[0]/255, (double)text16[1]/255, (double)text16[2]/255, (double)text16[3]/255);
cairo_set_font_size(ctx, 32.0);
}
break;