@@ -42,8 +42,14 @@ pub enum PointerFocusTarget {
42
42
surface : WlSurface ,
43
43
toplevel : Option < PointerFocusToplevel > ,
44
44
} ,
45
- StackUI ( CosmicStack ) ,
46
- WindowUI ( CosmicWindow ) ,
45
+ StackUI {
46
+ stack : CosmicStack ,
47
+ is_border : bool ,
48
+ } ,
49
+ WindowUI {
50
+ window : CosmicWindow ,
51
+ is_border : bool ,
52
+ } ,
47
53
ResizeFork ( ResizeForkTarget ) ,
48
54
ZoomUI ( ZoomFocusTarget ) ,
49
55
}
@@ -114,8 +120,8 @@ impl PointerFocusTarget {
114
120
fn inner_pointer_target ( & self ) -> & dyn PointerTarget < State > {
115
121
match self {
116
122
PointerFocusTarget :: WlSurface { surface, .. } => surface,
117
- PointerFocusTarget :: StackUI ( u ) => u ,
118
- PointerFocusTarget :: WindowUI ( u ) => u ,
123
+ PointerFocusTarget :: StackUI { stack , .. } => stack ,
124
+ PointerFocusTarget :: WindowUI { window , .. } => window ,
119
125
PointerFocusTarget :: ResizeFork ( f) => f,
120
126
PointerFocusTarget :: ZoomUI ( e) => e,
121
127
}
@@ -124,8 +130,8 @@ impl PointerFocusTarget {
124
130
fn inner_touch_target ( & self ) -> & dyn TouchTarget < State > {
125
131
match self {
126
132
PointerFocusTarget :: WlSurface { surface, .. } => surface,
127
- PointerFocusTarget :: StackUI ( u ) => u ,
128
- PointerFocusTarget :: WindowUI ( u ) => u ,
133
+ PointerFocusTarget :: StackUI { stack , .. } => stack ,
134
+ PointerFocusTarget :: WindowUI { window , .. } => window ,
129
135
PointerFocusTarget :: ResizeFork ( f) => f,
130
136
PointerFocusTarget :: ZoomUI ( e) => e,
131
137
}
@@ -174,8 +180,8 @@ impl PointerFocusTarget {
174
180
. find ( |( w, _) | w. wl_surface ( ) . map ( |s2| s == * s2) . unwrap_or ( false ) )
175
181
. map ( |( s, _) | s)
176
182
} ) ,
177
- PointerFocusTarget :: StackUI ( stack) => Some ( stack. active ( ) ) ,
178
- PointerFocusTarget :: WindowUI ( window) => Some ( window. surface ( ) ) ,
183
+ PointerFocusTarget :: StackUI { stack, .. } => Some ( stack. active ( ) ) ,
184
+ PointerFocusTarget :: WindowUI { window, .. } => Some ( window. surface ( ) ) ,
179
185
_ => None ,
180
186
}
181
187
}
@@ -188,6 +194,15 @@ impl PointerFocusTarget {
188
194
_ => false ,
189
195
}
190
196
}
197
+
198
+ pub fn should_follow_focus ( & self ) -> bool {
199
+ match self {
200
+ PointerFocusTarget :: WlSurface { .. } => true ,
201
+ PointerFocusTarget :: StackUI { is_border, .. }
202
+ | PointerFocusTarget :: WindowUI { is_border, .. } => !* is_border,
203
+ PointerFocusTarget :: ResizeFork ( _) | PointerFocusTarget :: ZoomUI ( _) => false ,
204
+ }
205
+ }
191
206
}
192
207
193
208
impl KeyboardFocusTarget {
@@ -259,8 +274,8 @@ impl IsAlive for PointerFocusTarget {
259
274
match self {
260
275
// XXX? does this change anything
261
276
PointerFocusTarget :: WlSurface { surface, .. } => surface. alive ( ) ,
262
- PointerFocusTarget :: StackUI ( e ) => e . alive ( ) ,
263
- PointerFocusTarget :: WindowUI ( e ) => e . alive ( ) ,
277
+ PointerFocusTarget :: StackUI { stack , .. } => stack . alive ( ) ,
278
+ PointerFocusTarget :: WindowUI { window , .. } => window . alive ( ) ,
264
279
PointerFocusTarget :: ResizeFork ( f) => f. alive ( ) ,
265
280
PointerFocusTarget :: ZoomUI ( _) => true ,
266
281
}
@@ -547,8 +562,8 @@ impl WaylandFocus for PointerFocusTarget {
547
562
Some ( match self {
548
563
PointerFocusTarget :: WlSurface { surface, .. } => Cow :: Borrowed ( surface) ,
549
564
PointerFocusTarget :: ResizeFork ( _)
550
- | PointerFocusTarget :: StackUI ( _ )
551
- | PointerFocusTarget :: WindowUI ( _ )
565
+ | PointerFocusTarget :: StackUI { .. }
566
+ | PointerFocusTarget :: WindowUI { .. }
552
567
| PointerFocusTarget :: ZoomUI ( _) => {
553
568
return None ;
554
569
}
@@ -557,12 +572,12 @@ impl WaylandFocus for PointerFocusTarget {
557
572
fn same_client_as ( & self , object_id : & ObjectId ) -> bool {
558
573
match self {
559
574
PointerFocusTarget :: WlSurface { surface, .. } => surface. id ( ) . same_client_as ( object_id) ,
560
- PointerFocusTarget :: StackUI ( stack) => stack
575
+ PointerFocusTarget :: StackUI { stack, .. } => stack
561
576
. active ( )
562
577
. wl_surface ( )
563
578
. map ( |s| s. id ( ) . same_client_as ( object_id) )
564
579
. unwrap_or ( false ) ,
565
- PointerFocusTarget :: WindowUI ( window) => window
580
+ PointerFocusTarget :: WindowUI { window, .. } => window
566
581
. wl_surface ( )
567
582
. map ( |s| s. id ( ) . same_client_as ( object_id) )
568
583
. unwrap_or ( false ) ,
0 commit comments