38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			38 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								USING: kernel io namespaces arrays sequences combinators math x11.xlib
							 | 
						||
| 
								 | 
							
								       mortar slot-accessors x ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								IN: x.widgets
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SYMBOL: <widget>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<widget> <window> { "mask" } accessors define-simple-class
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<widget> {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								"init-widget" !( widget -- widget )
							 | 
						||
| 
								 | 
							
								  [ <- init-window <- add-to-window-table dup $mask <-- select-input ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								"add-to-window-table" !( window -- window )
							 | 
						||
| 
								 | 
							
								  [ dup $dpy over <-- add-to-window-table ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								"remove-from-window-table" !( window -- window )
							 | 
						||
| 
								 | 
							
								  [ dup $dpy over <-- remove-from-window-table ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								"handle-event" !( event widget -- ) [ 
							 | 
						||
| 
								 | 
							
								  over XAnyEvent-type
							 | 
						||
| 
								 | 
							
								  { { [ dup Expose = ]           [ drop <- handle-expose ] }
							 | 
						||
| 
								 | 
							
								    { [ dup KeyPress = ]         [ drop <- handle-key-press ] }
							 | 
						||
| 
								 | 
							
								    { [ dup ButtonPress = ]      [ drop <- handle-button-press ] }
							 | 
						||
| 
								 | 
							
								    { [ dup EnterNotify = ]      [ drop <- handle-enter-window ] }
							 | 
						||
| 
								 | 
							
								    { [ dup DestroyNotify = ]    [ drop <- handle-destroy-window ] }
							 | 
						||
| 
								 | 
							
								    { [ dup MapRequest = ]       [ drop <- handle-map-request ] }
							 | 
						||
| 
								 | 
							
								    { [ dup MapNotify = ]        [ drop <- handle-map ] }
							 | 
						||
| 
								 | 
							
								    { [ dup ConfigureRequest = ] [ drop <- handle-configure-request ] }
							 | 
						||
| 
								 | 
							
								    { [ dup UnmapNotify = ]      [ drop <- handle-unmap ] }
							 | 
						||
| 
								 | 
							
								    { [ dup PropertyNotify = ]   [ drop <- handle-property ] }
							 | 
						||
| 
								 | 
							
								    { [ t ]                      [ "handle-event :: ignoring event"
							 | 
						||
| 
								 | 
							
								                                     print flush 3drop ] }
							 | 
						||
| 
								 | 
							
								  } cond ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} add-methods
							 |