build-scripts/mkinstalldirs
author Sam Lantinga <slouken@libsdl.org>
Sun, 17 Aug 2014 14:57:52 -0700
changeset 9086 c5e33f9a0d03
parent 1361 19418e4422cb
child 12335 5e68900d2232
permissions -rwxr-xr-x
Fixed bug 2655 - OSX: Window position and global mouse coord spaces are different

Tim McDaniel

On OSX, with revision 8729, the coordinate space for window position and the coordinate space for global mouse position don't match. For a non-fullscreen window, the window position is global relative to the bottom of the menubar. The global mouse position is relative to the top of the screen. This affects Cocoa_WarpMouse and potentially other things as well. Further, the coordinate system for window position is now affected by what screen it is on. For example, if I have two equal size screens oriented side by side such that the tops of the screens are equal in global space, with the menubar on one screen, and a window straddles the two screens, the window's y position makes no sense. The window's y position depends on what screen "most" of the window is on. So if I move the window horizontally just a bit, the y position of my window is now different by the size of the menubar, even though the window was not moved vertically.

I'd like to reiterate that this was a fairly fundamental change (and a breaking change for us). If SDL OSX is to really support multi-display configurations, this is especially problematic.

If the real concern is preventing windows from going under the menubar, then perhaps a solution involving something like overriding [NSWindow constrainFrameRect] would be less problematic than redefining the global window coord space for the main display.
     1 #! /bin/sh
     2 # mkinstalldirs --- make directory hierarchy
     3 # Author: Noah Friedman <friedman@prep.ai.mit.edu>
     4 # Created: 1993-05-16
     5 # Public domain
     6 
     7 errstatus=0
     8 dirmode=""
     9 
    10 usage="\
    11 Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
    12 
    13 # process command line arguments
    14 while test $# -gt 0 ; do
    15    case "${1}" in
    16      -h | --help | --h* )			# -h for help
    17 	echo "${usage}" 1>&2; exit 0 ;;
    18      -m )					# -m PERM arg
    19 	shift
    20 	test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
    21 	dirmode="${1}"
    22 	shift ;;
    23      -- ) shift; break ;;			# stop option processing
    24      -* ) echo "${usage}" 1>&2; exit 1 ;;	# unknown option
    25      * )  break ;;				# first non-opt arg
    26    esac
    27 done
    28 
    29 for file
    30 do
    31   if test -d "$file"; then
    32     shift
    33   else
    34     break
    35   fi
    36 done
    37 
    38 case $# in
    39 0) exit 0 ;;
    40 esac
    41 
    42 case $dirmode in
    43 '')
    44   if mkdir -p -- . 2>/dev/null; then
    45     echo "mkdir -p -- $*"
    46     exec mkdir -p -- "$@"
    47   fi ;;
    48 *)
    49   if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
    50     echo "mkdir -m $dirmode -p -- $*"
    51     exec mkdir -m "$dirmode" -p -- "$@"
    52   fi ;;
    53 esac
    54 
    55 for file
    56 do
    57    set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
    58    shift
    59 
    60    pathcomp=
    61    for d
    62    do
    63      pathcomp="$pathcomp$d"
    64      case "$pathcomp" in
    65        -* ) pathcomp=./$pathcomp ;;
    66      esac
    67 
    68      if test ! -d "$pathcomp"; then
    69 	echo "mkdir $pathcomp"
    70 
    71 	mkdir "$pathcomp" || lasterr=$?
    72 
    73 	if test ! -d "$pathcomp"; then
    74 	  errstatus=$lasterr
    75 	else
    76 	  if test ! -z "$dirmode"; then
    77 	     echo "chmod $dirmode $pathcomp"
    78 
    79 	     lasterr=""
    80 	     chmod "$dirmode" "$pathcomp" || lasterr=$?
    81 
    82 	     if test ! -z "$lasterr"; then
    83 	       errstatus=$lasterr
    84 	     fi
    85 	  fi
    86 	fi
    87      fi
    88 
    89      pathcomp="$pathcomp/"
    90    done
    91 done
    92 
    93 exit $errstatus
    94 
    95 # Local Variables:
    96 # mode: shell-script
    97 # sh-indentation: 3
    98 # End:
    99 # mkinstalldirs ends here