X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Flock.c;h=6a73ee0c70853de3b9712f08073e78ac67a1f3e0;hb=96bdd7cf6ea60c418a76921acaf0e34d6f5be930;hp=47c1b4ee515b3ed3082dc6a9aa814b59bbb5aa81;hpb=40eacb5812ef7c0e3374fb139afbb4f5bc8bbfb5;p=xscreensaver diff --git a/driver/lock.c b/driver/lock.c index 47c1b4ee..6a73ee0c 100644 --- a/driver/lock.c +++ b/driver/lock.c @@ -407,7 +407,11 @@ make_passwd_window (saver_info *si) attrmask, &attrs); XSetWindowBackground (si->dpy, si->passwd_dialog, pw->background); - pw->logo_pixmap = xscreensaver_logo (ssi->screen, ssi->current_visual, + /* We use the default visual, not ssi->visual, so that the logo pixmap's + visual matches that of the si->passwd_dialog window. */ + pw->logo_pixmap = xscreensaver_logo (ssi->screen, + /* ssi->current_visual, */ + DefaultVisualOfScreen(screen), si->passwd_dialog, cmap, pw->background, &pw->logo_pixels, &pw->logo_npixels, @@ -878,6 +882,16 @@ destroy_passwd_window (saver_info *si) } +static Bool error_handler_hit_p = False; + +static int +ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) +{ + error_handler_hit_p = True; + return 0; +} + + #ifdef HAVE_XHPDISABLERESET /* This function enables and disables the C-Sh-Reset hot-key, which normally resets the X server (logging out the logged-in user.) @@ -923,7 +937,16 @@ static void xfree_lock_grab_smasher (saver_info *si, Bool lock_p) { saver_preferences *p = &si->prefs; - int status = XF86MiscSetGrabKeysState (si->dpy, !lock_p); + int status; + + XErrorHandler old_handler; + XSync (si->dpy, False); + error_handler_hit_p = False; + old_handler = XSetErrorHandler (ignore_all_errors_ehandler); + XSync (si->dpy, False); + status = XF86MiscSetGrabKeysState (si->dpy, !lock_p); + XSync (si->dpy, False); + if (error_handler_hit_p) status = 666; if (p->verbose_p && status != MiscExtGrabStateSuccess) fprintf (stderr, "%s: error: XF86MiscSetGrabKeysState returned %s\n", @@ -931,7 +954,12 @@ xfree_lock_grab_smasher (saver_info *si, Bool lock_p) (status == MiscExtGrabStateSuccess ? "MiscExtGrabStateSuccess" : status == MiscExtGrabStateLocked ? "MiscExtGrabStateLocked" : status == MiscExtGrabStateAlready ? "MiscExtGrabStateAlready" : + status == 666 ? "an X error" : "unknown value")); + + XSync (si->dpy, False); + XSetErrorHandler (old_handler); + XSync (si->dpy, False); } #endif /* HAVE_XF86MISCSETGRABKEYSSTATE */ @@ -1007,9 +1035,6 @@ linux_lock_vt_switch (saver_info *si, Bool lock_p) */ #ifdef HAVE_XF86VMODE -static int ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error); -static Bool vp_got_error = False; - static void xfree_lock_mode_switch (saver_info *si, Bool lock_p) { @@ -1029,10 +1054,11 @@ xfree_lock_mode_switch (saver_info *si, Bool lock_p) { XSync (si->dpy, False); old_handler = XSetErrorHandler (ignore_all_errors_ehandler); + error_handler_hit_p = False; status = XF86VidModeLockModeSwitch (si->dpy, screen, lock_p); XSync (si->dpy, False); XSetErrorHandler (old_handler); - if (vp_got_error) status = False; + if (error_handler_hit_p) status = False; if (status) any_mode_locked_p = lock_p; @@ -1048,14 +1074,6 @@ xfree_lock_mode_switch (saver_info *si, Bool lock_p) blurb(), screen, (lock_p ? "locked" : "unlocked")); } } - -static int -ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) -{ - vp_got_error = True; - return 0; -} - #endif /* HAVE_XF86VMODE */