summaryrefslogtreecommitdiffstats
path: root/x11vnc/unixpw.c
diff options
context:
space:
mode:
Diffstat (limited to 'x11vnc/unixpw.c')
-rw-r--r--x11vnc/unixpw.c60
1 files changed, 51 insertions, 9 deletions
diff --git a/x11vnc/unixpw.c b/x11vnc/unixpw.c
index ac41523..2130e00 100644
--- a/x11vnc/unixpw.c
+++ b/x11vnc/unixpw.c
@@ -109,9 +109,16 @@ void unixpw_screen(int init) {
zero_fb(0, 0, dpy_x, dpy_y);
+ mark_rect_as_modified(0, 0, dpy_x, dpy_y, 0);
+
x = nfix(dpy_x / 2 - strlen(log) * char_w, dpy_x);
y = dpy_y / 4;
+ if (scaling) {
+ x = (int) (x * scale_fac);
+ y = (int) (y * scale_fac);
+ }
+
rfbDrawString(screen, &default8x16Font, x, y, log, white());
char_x = x;
@@ -120,7 +127,11 @@ void unixpw_screen(int init) {
char_row = 0;
}
- mark_rect_as_modified(0, 0, dpy_x, dpy_y, 0);
+ if (scaling) {
+ mark_rect_as_modified(0, 0, dpy_x, dpy_y, 1);
+ } else {
+ mark_rect_as_modified(0, 0, dpy_x, dpy_y, 0);
+ }
}
@@ -322,7 +333,7 @@ int crypt_verify(char *user, char *pass) {
if (pass[n-1] == '\n') {
pass[n-1] = '\0';
}
- cr = crypt(pass, realpw);
+ cr = (char *) crypt(pass, realpw);
if (cr == NULL) {
return 0;
}
@@ -741,7 +752,11 @@ if (db) fprintf(stderr, "unixpw_verify: '%s' '%s'\n", user, db > 1 ? pass : "***
char_col = strlen(log);
- mark_rect_as_modified(0, 0, dpy_x, dpy_y, 0);
+ if (scaling) {
+ mark_rect_as_modified(0, 0, dpy_x, dpy_y, 1);
+ } else {
+ mark_rect_as_modified(0, 0, dpy_x, dpy_y, 0);
+ }
unixpw_last_try_time = time(0);
unixpw_keystroke(0, 0, 2);
@@ -805,9 +820,20 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
user[u_cnt-1] = '\0';
x = text_x();
y = text_y();
- zero_fb(x - char_w, y - char_h, x, y);
- mark_rect_as_modified(x - char_w, y - char_h,
- x, y, 0);
+ if (scaling) {
+ int x2 = x / scale_fac;
+ int y2 = y / scale_fac;
+ int w2 = char_w / scale_fac;
+ int h2 = char_h / scale_fac;
+
+ zero_fb(x2 - w2, y2 - h2, x2, y2);
+ mark_rect_as_modified(x2 - w2,
+ y2 - h2, x2, y2, 0);
+ } else {
+ zero_fb(x - char_w, y - char_h, x, y);
+ mark_rect_as_modified(x - char_w,
+ y - char_h, x, y, 0);
+ }
char_col--;
u_cnt--;
}
@@ -836,7 +862,11 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
white());
char_col = strlen(pw);
- mark_rect_as_modified(0, 0, dpy_x, dpy_y, 0);
+ if (scaling) {
+ mark_rect_as_modified(0, 0, dpy_x, dpy_y, 1);
+ } else {
+ mark_rect_as_modified(0, 0, dpy_x, dpy_y, 0);
+ }
return;
}
if (keysym <= ' ' || keysym >= 0x7f) {
@@ -862,7 +892,11 @@ if (db && db <= 2) fprintf(stderr, "u_cnt: %d %d/%d ks: 0x%x %s\n", u_cnt, x, y
keystr[1] = '\0';
rfbDrawString(screen, &default8x16Font, x, y, keystr, white());
- mark_rect_as_modified(x, y-char_h, x+char_w, y, 0);
+ if (scaling) {
+ mark_rect_as_modified(x, y-char_h, x+char_w, y, 1);
+ } else {
+ mark_rect_as_modified(x, y-char_h, x+char_w, y, 0);
+ }
char_col++;
} else if (in_passwd) {
@@ -920,6 +954,10 @@ static void apply_opts (char *user) {
ClientData *cd = (ClientData *) unixpw_client->clientData;
rfbClientPtr cl = unixpw_client;
int i;
+
+ if (! cd) {
+ return;
+ }
if (user) {
if (cd->unixname) {
@@ -1000,7 +1038,11 @@ void unixpw_deny(void) {
y = char_y + char_row * char_h;
rfbDrawString(screen, &default8x16Font, x, y, pd, white());
- mark_rect_as_modified(0, 0, dpy_x, dpy_y, 0);
+ if (scaling) {
+ mark_rect_as_modified(0, 0, dpy_x, dpy_y, 1);
+ } else {
+ mark_rect_as_modified(0, 0, dpy_x, dpy_y, 0);
+ }
for (i=0; i<5; i++) {
rfbPE(-1);