commit dd44aab1bd68368fd3d97145427c84d950015e34
parent 9c3eaaf2f3b66df7c27609da0fa76fbc0bae2888
Author: Cassandra <cassandra@techfo.xyz>
Date: Sun, 25 Mar 2018 13:16:00 -0400
add in more specific status text positioning
Diffstat:
| M | i3lock.c | | | 50 | +++++++++++++++++++++++++++++++------------------- |
| M | unlock_indicator.c | | | 50 | ++++++++++++++++++++++++++++++++++++++++++++++---- |
2 files changed, 77 insertions(+), 23 deletions(-)
diff --git a/i3lock.c b/i3lock.c
@@ -143,6 +143,10 @@ char status_x_expr[32] = "ix\0";
char status_y_expr[32] = "iy\0";
char modif_x_expr[32] = "ix\0";
char modif_y_expr[32] = "iy+28\0";
+char verif_x_expr[32] = "ix\0";
+char verif_y_expr[32] = "iy\0";
+char wrong_x_expr[32] = "ix\0";
+char wrong_y_expr[32] = "iy\0";
double time_size = 32.0;
double date_size = 14.0;
@@ -1160,10 +1164,12 @@ int main(int argc, char *argv[]) {
{"timepos", required_argument, NULL, 540},
{"datepos", required_argument, NULL, 541},
- {"layoutpos", required_argument, NULL, 542},
- {"statuspos", required_argument, NULL, 543},
- {"modifpos", required_argument, NULL, 544},
- {"indpos", required_argument, NULL, 545},
+ {"verifpos", required_argument, NULL, 542},
+ {"wrongpos", required_argument, NULL, 543},
+ {"layoutpos", required_argument, NULL, 544},
+ {"statuspos", required_argument, NULL, 545},
+ {"modifpos", required_argument, NULL, 546},
+ {"indpos", required_argument, NULL, 547},
// bar indicator stuff
@@ -1493,9 +1499,7 @@ int main(int argc, char *argv[]) {
break;
// Positions
case 540:
- //read in to time_x_expr and time_y_expr
if (strlen(optarg) > 31) {
- // this is overly restrictive since both the x and y string buffers have size 32, but it's easier to check.
errx(1, "time position string can be at most 31 characters\n");
}
arg = optarg;
@@ -1504,9 +1508,7 @@ int main(int argc, char *argv[]) {
}
break;
case 541:
- //read in to date_x_expr and date_y_expr
if (strlen(optarg) > 31) {
- // this is overly restrictive since both the x and y string buffers have size 32, but it's easier to check.
errx(1, "date position string can be at most 31 characters\n");
}
arg = optarg;
@@ -1515,9 +1517,25 @@ int main(int argc, char *argv[]) {
}
break;
case 542:
- //read in to time_x_expr and time_y_expr
if (strlen(optarg) > 31) {
- // this is overly restrictive since both the x and y string buffers have size 32, but it's easier to check.
+ errx(1, "verif position string can be at most 31 characters\n");
+ }
+ arg = optarg;
+ if (sscanf(arg, "%30[^:]:%30[^:]", verif_x_expr, verif_y_expr) != 2) {
+ errx(1, "verifpos must be of the form x:y\n");
+ }
+ break;
+ case 543:
+ if (strlen(optarg) > 31) {
+ errx(1, "\"wrong\" text position string can be at most 31 characters\n");
+ }
+ arg = optarg;
+ if (sscanf(arg, "%30[^:]:%30[^:]", wrong_x_expr, wrong_y_expr) != 2) {
+ errx(1, "verifpos must be of the form x:y\n");
+ }
+ break;
+ case 544:
+ if (strlen(optarg) > 31) {
errx(1, "layout position string can be at most 31 characters\n");
}
arg = optarg;
@@ -1525,10 +1543,8 @@ int main(int argc, char *argv[]) {
errx(1, "layoutpos must be of the form x:y\n");
}
break;
- case 543:
- //read in to time_x_expr and time_y_expr
+ case 545:
if (strlen(optarg) > 31) {
- // this is overly restrictive since both the x and y string buffers have size 32, but it's easier to check.
errx(1, "status position string can be at most 31 characters\n");
}
arg = optarg;
@@ -1536,10 +1552,8 @@ int main(int argc, char *argv[]) {
errx(1, "statuspos must be of the form x:y\n");
}
break;
- case 544:
- //read in to time_x_expr and time_y_expr
+ case 546:
if (strlen(optarg) > 31) {
- // this is overly restrictive since both the x and y string buffers have size 32, but it's easier to check.
errx(1, "modif position string can be at most 31 characters\n");
}
arg = optarg;
@@ -1547,10 +1561,8 @@ int main(int argc, char *argv[]) {
errx(1, "modifpos must be of the form x:y\n");
}
break;
- case 545:
- //read in to ind_x_expr and ind_y_expr
+ case 547:
if (strlen(optarg) > 31) {
- // this is overly restrictive since both the x and y string buffers have size 32, but it's easier to check.
errx(1, "indicator position string can be at most 31 characters\n");
}
arg = optarg;
diff --git a/unlock_indicator.c b/unlock_indicator.c
@@ -107,6 +107,10 @@ extern char layout_x_expr[32];
extern char layout_y_expr[32];
extern char status_x_expr[32];
extern char status_y_expr[32];
+extern char verif_x_expr[32];
+extern char verif_y_expr[32];
+extern char wrong_x_expr[32];
+extern char wrong_y_expr[32];
extern char modif_x_expr[32];
extern char modif_y_expr[32];
@@ -852,6 +856,10 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
te_expr *te_layout_y_expr = compile_expression("--layoutpos", layout_y_expr, vars, vars_size);
te_expr *te_status_x_expr = compile_expression("--statuspos", status_x_expr, vars, vars_size);
te_expr *te_status_y_expr = compile_expression("--statuspos", status_y_expr, vars, vars_size);
+ te_expr *te_verif_x_expr = compile_expression("--verifpos", verif_x_expr, vars, vars_size);
+ te_expr *te_verif_y_expr = compile_expression("--verifpos", verif_y_expr, vars, vars_size);
+ te_expr *te_wrong_x_expr = compile_expression("--wrongpos", wrong_x_expr, vars, vars_size);
+ te_expr *te_wrong_y_expr = compile_expression("--wrongpos", wrong_y_expr, vars, vars_size);
te_expr *te_modif_x_expr = compile_expression("--modifpos", modif_x_expr, vars, vars_size);
te_expr *te_modif_y_expr = compile_expression("--modifpos", modif_y_expr, vars, vars_size);
te_expr *te_bar_expr = compile_expression("--bar-position", bar_expr, vars, vars_size);
@@ -891,8 +899,24 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
draw_data.date_text.y = te_eval(te_date_y_expr);
draw_data.keylayout_text.x = te_eval(te_layout_x_expr);
draw_data.keylayout_text.y = te_eval(te_layout_y_expr);
- draw_data.status_text.x = te_eval(te_status_x_expr);
- draw_data.status_text.y = te_eval(te_status_y_expr);
+
+ switch (auth_state) {
+ case STATE_AUTH_VERIFY:
+ case STATE_AUTH_LOCK:
+ draw_data.status_text.x = te_eval(te_verif_x_expr);
+ draw_data.status_text.y = te_eval(te_verif_y_expr);
+ break;
+ case STATE_AUTH_WRONG:
+ case STATE_I3LOCK_LOCK_FAILED:
+ draw_data.status_text.x = te_eval(te_wrong_x_expr);
+ draw_data.status_text.y = te_eval(te_wrong_y_expr);
+ break;
+ default:
+ draw_data.status_text.x = te_eval(te_status_x_expr);
+ draw_data.status_text.y = te_eval(te_status_y_expr);
+ break;
+ }
+
draw_data.mod_text.x = te_eval(te_modif_x_expr);
draw_data.mod_text.y = te_eval(te_modif_y_expr);
@@ -923,8 +947,22 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
draw_data.date_text.y = te_eval(te_date_y_expr);
draw_data.keylayout_text.x = te_eval(te_layout_x_expr);
draw_data.keylayout_text.y = te_eval(te_layout_y_expr);
- draw_data.status_text.x = te_eval(te_status_x_expr);
- draw_data.status_text.y = te_eval(te_status_y_expr);
+ switch (auth_state) {
+ case STATE_AUTH_VERIFY:
+ case STATE_AUTH_LOCK:
+ draw_data.status_text.x = te_eval(te_verif_x_expr);
+ draw_data.status_text.y = te_eval(te_verif_y_expr);
+ break;
+ case STATE_AUTH_WRONG:
+ case STATE_I3LOCK_LOCK_FAILED:
+ draw_data.status_text.x = te_eval(te_wrong_x_expr);
+ draw_data.status_text.y = te_eval(te_wrong_y_expr);
+ break;
+ default:
+ draw_data.status_text.x = te_eval(te_status_x_expr);
+ draw_data.status_text.y = te_eval(te_status_y_expr);
+ break;
+ }
draw_data.mod_text.x = te_eval(te_modif_x_expr);
draw_data.mod_text.y = te_eval(te_modif_y_expr);
@@ -949,6 +987,10 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
te_free(te_layout_y_expr);
te_free(te_status_x_expr);
te_free(te_status_y_expr);
+ te_free(te_verif_x_expr);
+ te_free(te_verif_y_expr);
+ te_free(te_wrong_x_expr);
+ te_free(te_wrong_y_expr);
te_free(te_modif_x_expr);
te_free(te_modif_y_expr);
te_free(te_bar_expr);