Store preferred output
This commit is contained in:
		
							
								
								
									
										13
									
								
								src/state.rs
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/state.rs
									
									
									
									
									
								
							@ -140,6 +140,12 @@ pub struct Application {
 | 
			
		||||
    pub im: InputMethod,
 | 
			
		||||
    pub visibility_override: visibility::State,
 | 
			
		||||
    pub physical_keyboard: Presence,
 | 
			
		||||
    /// The output on which the panel should appear.
 | 
			
		||||
    /// This is stored as part of the state
 | 
			
		||||
    /// because it's not clear how to derive the output from the rest of the state.
 | 
			
		||||
    /// It should probably follow the focused input,
 | 
			
		||||
    /// but not sure about being allowed on non-touch displays.
 | 
			
		||||
    pub preferred_output: Option<OutputId>,
 | 
			
		||||
    pub outputs: HashMap<OutputId, OutputState>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -155,6 +161,7 @@ impl Application {
 | 
			
		||||
            im: InputMethod::InactiveSince(now),
 | 
			
		||||
            visibility_override: visibility::State::NotForced,
 | 
			
		||||
            physical_keyboard: Presence::Missing,
 | 
			
		||||
            preferred_output: None,
 | 
			
		||||
            outputs: Default::default(),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -181,9 +188,15 @@ impl Application {
 | 
			
		||||
                match change {
 | 
			
		||||
                    outputs::ChangeType::Altered(state) => {
 | 
			
		||||
                        app.outputs.insert(output, state);
 | 
			
		||||
                        app.preferred_output = app.preferred_output.or(Some(output));
 | 
			
		||||
                    },
 | 
			
		||||
                    outputs::ChangeType::Removed => {
 | 
			
		||||
                        app.outputs.remove(&output);
 | 
			
		||||
                        if app.preferred_output == Some(output) {
 | 
			
		||||
                            // There's currently no policy to choose one output over another,
 | 
			
		||||
                            // so just take whichever comes first.
 | 
			
		||||
                            app.preferred_output = app.outputs.keys().next().map(|output| *output);
 | 
			
		||||
                        }
 | 
			
		||||
                    },
 | 
			
		||||
                };
 | 
			
		||||
                app
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user