state: Use dummy layout command
This commit is contained in:
		
							
								
								
									
										13
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/main.rs
									
									
									
									
									
								
							@ -174,6 +174,18 @@ mod c {
 | 
				
			|||||||
                )
 | 
					                )
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if let Some(commands::SetLayout { description }) = msg.layout_selection {
 | 
				
			||||||
 | 
					            dbg!(description);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub mod commands {
 | 
				
			||||||
 | 
					    use crate::animation;
 | 
				
			||||||
 | 
					    #[derive(Clone, Debug)]
 | 
				
			||||||
 | 
					    pub struct SetLayout {
 | 
				
			||||||
 | 
					        pub description: animation::Contents,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -184,4 +196,5 @@ pub struct Commands {
 | 
				
			|||||||
    pub panel_visibility: Option<panel::Command>,
 | 
					    pub panel_visibility: Option<panel::Command>,
 | 
				
			||||||
    pub layout_hint_set: Option<state::InputMethodDetails>,
 | 
					    pub layout_hint_set: Option<state::InputMethodDetails>,
 | 
				
			||||||
    pub dbus_visible_set: Option<bool>,
 | 
					    pub dbus_visible_set: Option<bool>,
 | 
				
			||||||
 | 
					    pub layout_selection: Option<commands::SetLayout>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										25
									
								
								src/state.rs
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								src/state.rs
									
									
									
									
									
								
							@ -9,6 +9,7 @@ use crate::animation;
 | 
				
			|||||||
use crate::debug;
 | 
					use crate::debug;
 | 
				
			||||||
use crate::imservice::{ ContentHint, ContentPurpose };
 | 
					use crate::imservice::{ ContentHint, ContentPurpose };
 | 
				
			||||||
use crate::layout::ArrangementKind;
 | 
					use crate::layout::ArrangementKind;
 | 
				
			||||||
 | 
					use crate::main;
 | 
				
			||||||
use crate::main::Commands;
 | 
					use crate::main::Commands;
 | 
				
			||||||
use crate::outputs;
 | 
					use crate::outputs;
 | 
				
			||||||
use crate::outputs::{Millimeter, OutputId, OutputState};
 | 
					use crate::outputs::{Millimeter, OutputId, OutputState};
 | 
				
			||||||
@ -153,10 +154,34 @@ impl Outcome {
 | 
				
			|||||||
            animation::Outcome::Hidden => (Some(false), Some(panel::Command::Hide)),
 | 
					            animation::Outcome::Hidden => (Some(false), Some(panel::Command::Hide)),
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Compare the old and new states as not to flood with updates,
 | 
				
			||||||
 | 
					        // which may look up in the file system.
 | 
				
			||||||
 | 
					        use animation::Outcome::*;
 | 
				
			||||||
 | 
					        let layout_selection = match &new_state.panel {
 | 
				
			||||||
 | 
					            Visible{ contents: new_contents, ..} => {
 | 
				
			||||||
 | 
					                let same
 | 
				
			||||||
 | 
					                    = if let Visible { contents, .. } = &self.panel {
 | 
				
			||||||
 | 
					                        contents == new_contents
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        false
 | 
				
			||||||
 | 
					                    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if !same {
 | 
				
			||||||
 | 
					                    Some(main::commands::SetLayout {
 | 
				
			||||||
 | 
					                        description: new_contents.clone()
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    None
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            animation::Outcome::Hidden => None,
 | 
				
			||||||
 | 
					        };        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Commands {
 | 
					        Commands {
 | 
				
			||||||
            panel_visibility,
 | 
					            panel_visibility,
 | 
				
			||||||
            layout_hint_set,
 | 
					            layout_hint_set,
 | 
				
			||||||
            dbus_visible_set,
 | 
					            dbus_visible_set,
 | 
				
			||||||
 | 
					            layout_selection,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user