@@ -42,8 +42,14 @@ pub enum PointerFocusTarget {
4242 surface : WlSurface ,
4343 toplevel : Option < PointerFocusToplevel > ,
4444 } ,
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+ } ,
4753 ResizeFork ( ResizeForkTarget ) ,
4854 ZoomUI ( ZoomFocusTarget ) ,
4955}
@@ -114,8 +120,8 @@ impl PointerFocusTarget {
114120 fn inner_pointer_target ( & self ) -> & dyn PointerTarget < State > {
115121 match self {
116122 PointerFocusTarget :: WlSurface { surface, .. } => surface,
117- PointerFocusTarget :: StackUI ( u ) => u ,
118- PointerFocusTarget :: WindowUI ( u ) => u ,
123+ PointerFocusTarget :: StackUI { stack , .. } => stack ,
124+ PointerFocusTarget :: WindowUI { window , .. } => window ,
119125 PointerFocusTarget :: ResizeFork ( f) => f,
120126 PointerFocusTarget :: ZoomUI ( e) => e,
121127 }
@@ -124,8 +130,8 @@ impl PointerFocusTarget {
124130 fn inner_touch_target ( & self ) -> & dyn TouchTarget < State > {
125131 match self {
126132 PointerFocusTarget :: WlSurface { surface, .. } => surface,
127- PointerFocusTarget :: StackUI ( u ) => u ,
128- PointerFocusTarget :: WindowUI ( u ) => u ,
133+ PointerFocusTarget :: StackUI { stack , .. } => stack ,
134+ PointerFocusTarget :: WindowUI { window , .. } => window ,
129135 PointerFocusTarget :: ResizeFork ( f) => f,
130136 PointerFocusTarget :: ZoomUI ( e) => e,
131137 }
@@ -174,8 +180,8 @@ impl PointerFocusTarget {
174180 . find ( |( w, _) | w. wl_surface ( ) . map ( |s2| s == * s2) . unwrap_or ( false ) )
175181 . map ( |( s, _) | s)
176182 } ) ,
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 ( ) ) ,
179185 _ => None ,
180186 }
181187 }
@@ -188,6 +194,15 @@ impl PointerFocusTarget {
188194 _ => false ,
189195 }
190196 }
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+ }
191206}
192207
193208impl KeyboardFocusTarget {
@@ -259,8 +274,8 @@ impl IsAlive for PointerFocusTarget {
259274 match self {
260275 // XXX? does this change anything
261276 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 ( ) ,
264279 PointerFocusTarget :: ResizeFork ( f) => f. alive ( ) ,
265280 PointerFocusTarget :: ZoomUI ( _) => true ,
266281 }
@@ -547,8 +562,8 @@ impl WaylandFocus for PointerFocusTarget {
547562 Some ( match self {
548563 PointerFocusTarget :: WlSurface { surface, .. } => Cow :: Borrowed ( surface) ,
549564 PointerFocusTarget :: ResizeFork ( _)
550- | PointerFocusTarget :: StackUI ( _ )
551- | PointerFocusTarget :: WindowUI ( _ )
565+ | PointerFocusTarget :: StackUI { .. }
566+ | PointerFocusTarget :: WindowUI { .. }
552567 | PointerFocusTarget :: ZoomUI ( _) => {
553568 return None ;
554569 }
@@ -557,12 +572,12 @@ impl WaylandFocus for PointerFocusTarget {
557572 fn same_client_as ( & self , object_id : & ObjectId ) -> bool {
558573 match self {
559574 PointerFocusTarget :: WlSurface { surface, .. } => surface. id ( ) . same_client_as ( object_id) ,
560- PointerFocusTarget :: StackUI ( stack) => stack
575+ PointerFocusTarget :: StackUI { stack, .. } => stack
561576 . active ( )
562577 . wl_surface ( )
563578 . map ( |s| s. id ( ) . same_client_as ( object_id) )
564579 . unwrap_or ( false ) ,
565- PointerFocusTarget :: WindowUI ( window) => window
580+ PointerFocusTarget :: WindowUI { window, .. } => window
566581 . wl_surface ( )
567582 . map ( |s| s. id ( ) . same_client_as ( object_id) )
568583 . unwrap_or ( false ) ,
0 commit comments