layer_shika_domain/value_objects/
popup_behavior.rs

1/// Wayland-compatible constraint adjustment
2///
3/// Maps directly to `XdgPositioner` `constraint_adjustment` flags. Compositor
4/// handles the actual repositioning logic.
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
6pub enum ConstraintAdjustment {
7    /// No adjustment (manual clamping)
8    #[default]
9    None,
10
11    /// Slide along axis to fit
12    Slide,
13
14    /// Flip to opposite side if doesn't fit
15    Flip,
16
17    /// Resize to fit
18    Resize,
19
20    /// Combination strategies
21    SlideAndResize,
22    FlipAndSlide,
23    All,
24}
25
26#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
27pub enum OutputMigrationPolicy {
28    /// Move to primary when output disconnects
29    #[default]
30    MigrateToPrimary,
31
32    /// Move to currently active output
33    MigrateToActive,
34
35    /// Close when output disconnects
36    Close,
37}
38
39/// Behavioral configuration
40#[derive(Debug, Clone, Default)]
41#[allow(clippy::struct_excessive_bools)]
42pub struct PopupBehavior {
43    /// Grab keyboard and pointer input
44    pub grab: bool,
45
46    /// Modal (blocks interaction with parent)
47    pub modal: bool,
48
49    /// Auto-close on outside click
50    pub close_on_click_outside: bool,
51
52    /// Auto-close on escape key
53    pub close_on_escape: bool,
54
55    /// How to handle screen edge constraints
56    pub constraint_adjustment: ConstraintAdjustment,
57
58    /// How to handle output disconnect for this popup
59    pub output_migration: OutputMigrationPolicy,
60}