diff -ruN xkbd-0.8.15/src/xkbd.c xkbd-0.8.15-new/src/xkbd.c --- xkbd-0.8.15/src/xkbd.c 2003-09-29 10:29:35.000000000 -0700 +++ xkbd-0.8.15-new/src/xkbd.c 2008-03-23 02:43:20.000000000 -0700 @@ -307,19 +307,20 @@ 0, BlackPixel(display, screen_num), WhitePixel(display, screen_num)); + wret = DisplayWidth(display, screen_num); + hret = DisplayHeight(display, screen_num)/4; + xret = 0; + yret = DisplayHeight(display, screen_num) - hret; + if (geometry != NULL) { - XParseGeometry(geometry, &xret, &yret, &wret, &hret ); - } - else - { - if (wm_type != WM_MATCHBOX) - { - wret = DisplayWidth(display, screen_num); - hret = DisplayHeight(display, screen_num)/4; - xret = 0; - yret = DisplayHeight(display, screen_num) - hret; - } + int flags; + + flags = XParseGeometry(geometry, &xret, &yret, &wret, &hret ); + if( flags & XNegative ) + xret += DisplayWidth( display, screen_num ) - wret; + if( flags & YNegative ) + yret += DisplayHeight( display, screen_num ) - hret; } /* check for user selected keyboard conf file */