public boolean key_do_change_geometry () {
    int delta = shift_down ? 0 : DELTA_LARGE;

    switch (keysym) {
    case Misc.LEFT:            // `gravitate' or `gravitate-absolute'
      focus.x = space.x + delta;
      focus.move ();
      return false;

    case Misc.RIGHT:
      focus.x = space.x
        + space.width - focus.width - delta;
      focus.move ();
      return false;

    case Misc.UP:
      focus.y = space.y + delta;
      focus.move ();
      return false;

    case Misc.DOWN:
      focus.y = space.y
        + space.height - focus.height - delta;
      focus.move ();
      return false;

    case '2':			// `scale-two-third'
      scale_size (focus, 0.67);
      return false;

    case '3':			// `scale-one-and-half'
      scale_size (focus, 1.5);
      return false;

    case 'd':			// `scale-double'
      scale_size (focus, 2.0);
      return false;

    case 'h':			// `scale-half'
      scale_size (focus, 0.5);
      return false;

    default:
      alert_user ("Undefined keysym for 'change geometry': " + keysym);
      return false;
    }
  }