| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -15,8 +15,8 @@ TRANSPARENT_PEN = to_pen{tile=0, ch=0}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				KEEP_LOWER_PEN = to_pen{ch=32, fg=0, bg=0, keep_lower=true}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				local MOUSE_KEYS = {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _MOUSE_L = true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _MOUSE_R = true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _MOUSE_L = function(is_set) df.global.enabler.mouse_lbut = is_set and 1 or 0 end,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _MOUSE_R = function(is_set) df.global.enabler.mouse_rbut = is_set and 1 or 0 end,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _MOUSE_M = true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _MOUSE_L_DOWN = true,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    _MOUSE_R_DOWN = true,
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -27,7 +27,7 @@ local FAKE_INPUT_KEYS = copyall(MOUSE_KEYS)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				FAKE_INPUT_KEYS._STRING = true
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				function simulateInput(screen,...)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    local keys = {}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    local keys, enabled_mouse_keys = {}, {}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    local function push_key(arg)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        local kv = arg
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if type(arg) == 'string' then
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -35,6 +35,10 @@ function simulateInput(screen,...)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if kv == nil and not FAKE_INPUT_KEYS[arg] then
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                error('Invalid keycode: '..arg)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if MOUSE_KEYS[arg] then
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                df.global.enabler.tracking_on = 1
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                enabled_mouse_keys[arg] = true
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if type(kv) == 'number' then
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            keys[#keys+1] = kv
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -57,6 +61,11 @@ function simulateInput(screen,...)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    for mk, fn in pairs(MOUSE_KEYS) do
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if type(fn) == 'function' then
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            fn(enabled_mouse_keys[mk])
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    dscreen._doSimulateInput(screen, keys)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -696,17 +705,6 @@ end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				DEFAULT_INITIAL_PAUSE = true
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				-- ensure underlying DF screens don't also react to handled clicks
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				function markMouseClicksHandled(keys)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if keys._MOUSE_L then
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        df.global.enabler.mouse_lbut = 0
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if keys._MOUSE_R then
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        df.global.enabler.mouse_rbut_down = 0
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        df.global.enabler.mouse_rbut = 0
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				ZScreen = defclass(ZScreen, Screen)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				ZScreen.ATTRS{
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    defocusable=true,
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -791,23 +789,17 @@ function ZScreen:onInput(keys)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            self:raise()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        else
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            self:sendInputToParent(keys)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            return
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            return true
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if ZScreen.super.onInput(self, keys) then
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        markMouseClicksHandled(keys)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    if self.pass_mouse_clicks and keys._MOUSE_L and not has_mouse then
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        -- noop
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    elseif self.pass_mouse_clicks and keys._MOUSE_L and not has_mouse then
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.defocused = self.defocusable
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self:sendInputToParent(keys)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    elseif keys.LEAVESCREEN or keys._MOUSE_R then
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self:dismiss()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        markMouseClicksHandled(keys)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    else
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        local passit = self.pass_pause and keys.D_PAUSE
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if not passit and self.pass_mouse_clicks then
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -829,8 +821,8 @@ function ZScreen:onInput(keys)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if passit then
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            self:sendInputToParent(keys)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    return true
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				end
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				function ZScreen:raise()
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |