ui: add a "system-alert" hook that can raise a system modal dialog without involving any potentially stripped gadget, io, or debugger code

db4
Joe Groff 2010-02-23 19:28:57 -08:00
parent 0975b9a268
commit f6183703b2
5 changed files with 28 additions and 0 deletions

View File

@ -39,6 +39,7 @@ SYNTAX: IMPORT: scan [ ] import-objc-class ;
[
{
"NSAlert"
"NSApplication"
"NSArray"
"NSAutoreleasePool"

View File

@ -213,6 +213,16 @@ M: cocoa-ui-backend offscreen-pixels ( world -- alien w h )
M: cocoa-ui-backend beep ( -- )
NSBeep ;
M: cocoa-ui-backend system-alert
NSAlert -> alloc -> init -> autorelease [
{
[ swap <NSString> -> setInformativeText: ]
[ swap <NSString> -> setMessageText: ]
[ "OK" <NSString> -> addButtonWithTitle: drop ]
[ -> runModal drop ]
} cleave
] [ 2drop ] if* ;
CLASS: {
{ +superclass+ "NSObject" }
{ +name+ "FactorApplicationDelegate" }

View File

@ -783,6 +783,9 @@ M: windows-ui-backend (with-ui)
M: windows-ui-backend beep ( -- )
0 MessageBeep drop ;
M: windows-ui-backend system-alert
[ f ] 2dip swap MB_OK MessageBox drop ;
: fullscreen-RECT ( hwnd -- RECT )
MONITOR_DEFAULTTONEAREST MonitorFromWindow
MONITORINFOEX <struct>

View File

@ -8,6 +8,7 @@ strings ui ui.backend ui.clipboards ui.event-loop ui.gadgets
ui.gadgets.private ui.gadgets.worlds ui.gestures ui.pixel-formats
ui.pixel-formats.private ui.private x11 x11.clipboard x11.constants
x11.events x11.glx x11.io x11.windows x11.xim x11.xlib ;
FROM: unix.ffi => system ;
IN: ui.backend.x11
SINGLETON: x11-ui-backend
@ -326,6 +327,17 @@ M: x11-ui-backend (with-ui) ( quot -- )
M: x11-ui-backend beep ( -- )
dpy get 100 XBell drop ;
<PRIVATE
: escape-' ( string -- string' )
[ dup CHAR: ' = [ drop "'\''" ] [ 1string ] if ] { } map-as concat ;
: xmessage ( string -- )
escape-' "/usr/X11R6/bin/xmessage '" "'" surround system ;
PRIVATE>
M: x11-ui-backend system-alert
"\n\n" glue xmessage ;
: black ( -- xcolor ) 0 0 0 0 0 0 XColor <struct-boa> ; inline
M:: x11-ui-backend (grab-input) ( handle -- )

View File

@ -243,6 +243,8 @@ M: object close-window
HOOK: beep ui-backend ( -- )
HOOK: system-alert ui-backend ( caption text -- )
: parse-main-window-attributes ( class -- attributes )
"{" expect dup all-slots parse-tuple-literal-slots ;