rebol [ Author: "Romano Paolo Tenca" Version: 1.0.4 History: [ 1.0.4 "some changes - include win-offset? and screen-offset?" 1.0.3 "added do event for show-popup/window 'time and 'inactive" ] ] win-offset?: func [ {Given any face, returns its window offset. Patched by Ana} face [object!] /window-edge /local xy ][ xy: 0x0 if face/parent-face [ xy: face/offset while [face: face/parent-face][ either face/parent-face [ xy: xy + face/offset + either face/edge [face/edge/size][0] ][ if window-edge [xy: xy + either face/edge [face/edge/size][0]] ] ] ] xy ] screen-offset?: func [ {Given any face, returns its screen absolute offset. Patched by Ana} face [object!] /local xy ][ xy: face/offset while [face: face/parent-face][ xy: xy + face/offset + either face/edge [face/edge/size][0] ] xy ] system/view/wake-event: func[ "Patched by Ana - with the esc key handler found in beta 1.2.8" port /local event no-btn p-f ] bind [ event: pick port 1 if none? event [ if debug [print "Event port awoke, but no event was present."] return false ] either not p-f: pop-face [ do event empty? screen-face/pane ] [ either all [ event/type = 'key event/key = escape ] [hide-popup] [ either any [ p-f = event/face all [ event/face same? find-window p-f event/face not find [close offset inactive resize] event/type any [ find [scroll-line scroll-page key time] event/type within? event/offset win-offset? p-f p-f/size ] ] ][ no-btn: false if block? get in p-f 'pane [ no-btn: foreach item p-f/pane [if get in item 'action [break/return false] true] ] if any [all [event/type = 'up no-btn] event/type = 'close] [hide-popup] do event ] [ either p-f/action [ if event/type <> 'move [ either find [time inactive key] event/type [ do event ][ hide-popup if not find [down alt-down] event/type [do event] ] ] ][ if find [time inactive key resize offset] event/type [do event] ] ] none? find pop-list p-f ] ] ] in system/view 'self