IN: concurrent-widgets USING: io namespaces kernel hashtables math generic threads concurrency lists sequences arrays xlib x ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TUPLE: window display id ; ! dpy get create-window ! window-object [ { 100 100 } move-window ] with-window-object : create-window-object dpy get create-window ; : with-window-object ( quot -- ) [ swap dup window-display dpy set window-id win set call ] with-scope ; inline ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! window-table add-to-window-table ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SYMBOL: window-table 10 window-table set : add-to-window-table ( -- ) dup window-id window-table get set-hash ; ! The window-table is keyed on window ids. If support is added for ! multiple displays, then perhaps there should be a window table for ! each open display. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! handle-event ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! GENERIC: handle-key-press-event GENERIC: handle-key-release-event GENERIC: handle-button-press-event GENERIC: handle-button-release-event GENERIC: handle-expose-event GENERIC: handle-configure-event GENERIC: handle-enter-window-event GENERIC: handle-leave-window-event GENERIC: handle-destroy-window-event GENERIC: handle-map-request-event GENERIC: handle-map-event GENERIC: handle-configure-request-event GENERIC: handle-unmap-event GENERIC: handle-property-event : handle-event ( event obj -- ) over XAnyEvent-type { { [ dup Expose = ] [ drop handle-expose-event ] } { [ dup KeyPress = ] [ drop handle-key-press-event ] } { [ dup KeyRelease = ] [ drop handle-key-release-event ] } { [ dup ButtonPress = ] [ drop handle-button-press-event ] } { [ dup ButtonRelease = ] [ drop handle-button-release-event ] } { [ dup ConfigureNotify = ] [ drop handle-configure-event ] } { [ dup EnterNotify = ] [ drop handle-enter-window-event ] } { [ dup LeaveNotify = ] [ drop handle-leave-window-event ] } { [ dup DestroyNotify = ] [ drop handle-destroy-window-event ] } { [ dup MapRequest = ] [ drop handle-map-request-event ] } { [ dup MapNotify = ] [ drop handle-map-event ] } { [ dup ConfigureRequest = ] [ drop handle-configure-request-event ] } { [ dup UnmapNotify = ] [ drop handle-unmap-event ] } { [ dup PropertyNotify = ] [ drop handle-property-event ] } { [ t ] [ "handle-event ignoring event" print 3drop ] } } cond ; M: window handle-configure-event ( event obj -- ) "Basic handle-configure-event called" print drop drop ; M: window handle-destroy-window-event ( event obj -- ) "Basic handle-destroy-window-event called" print drop drop ; M: window handle-map-event ( event obj -- ) "Basic handle-map-event called" print drop drop ; M: window handle-expose-event ( event obj -- ) "Basic handle-expose-event called" print drop drop ; M: window handle-button-release-event ( event obj -- ) "Basic handle-button-release-event called" print drop drop ; M: window handle-unmap-event ( event obj -- ) "Basic handle-unmap-event called" print drop drop ; M: window handle-key-press-event ( event obj -- ) "Basic handle-key-press-event called" print drop drop ; M: window handle-key-release-event ( event obj -- ) "Basic handle-key-release-event called" print drop drop ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !