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}