@@ -93,7 +93,7 @@ def render(self) -> RenderableType:
9393 # yield from segments
9494
9595 def get_widget_at (
96- self , x : int , y : int , offset_x : int = 0 , offset_y : int = 0 , deep : bool = False
96+ self , x : int , y : int , deep : bool = False
9797 ) -> Tuple [Widget , Region ]:
9898
9999 for layout , (layout_region , render ) in self .layout .map .items ():
@@ -102,14 +102,13 @@ def get_widget_at(
102102 widget = layout .renderable
103103 if deep and isinstance (layout .renderable , View ):
104104
105- if isinstance (layout .renderable , View ):
106- view = layout .renderable
107- translate_x = region .x
108- translate_y = region .y
109- widget , region = view .get_widget_at (
110- x - region .x , y - region .y , deep = True
111- )
112- region = region .translate (translate_x , translate_y )
105+ view = layout .renderable
106+ translate_x = region .x
107+ translate_y = region .y
108+ widget , region = view .get_widget_at (
109+ x - region .x , y - region .y , deep = True
110+ )
111+ region = region .translate (translate_x , translate_y )
113112
114113 if isinstance (widget , WidgetBase ):
115114 return widget , region
@@ -182,6 +181,7 @@ async def on_resize(self, event: events.Resize) -> None:
182181 async def _on_mouse_move (self , event : events .MouseMove ) -> None :
183182 try :
184183 widget , region = self .get_widget_at (event .x , event .y , deep = True )
184+ log .debug ("MOVE =%r %r" , widget , region )
185185 log .debug ("mouse over %r %r" , widget , region )
186186 except NoWidget :
187187 await self .app .set_mouse_over (None )
@@ -206,24 +206,20 @@ async def forward_event(self, event: events.Event) -> None:
206206 if isinstance (event , (events .Enter , events .Leave )):
207207 await self .post_message (event )
208208
209- elif isinstance (event , (events .MouseDown )):
210- try :
211- widget , _region = self .get_widget_at (event .x , event .y , deep = True )
212- except NoWidget :
213- await self .app .set_focus (None )
214- else :
215- await self .app .set_focus (widget )
216-
217209 elif isinstance (event , events .MouseMove ):
218210 await self ._on_mouse_move (event )
219211
220212 elif isinstance (event , events .MouseEvent ):
213+ log .debug ("MOUSE %r" , event )
221214 try :
222- widget , region = self .get_widget_at (event .x , event .y )
215+ widget , region = self .get_widget_at (event .x , event .y , deep = True )
223216 except NoWidget :
224- pass
217+ if isinstance (event , events .MouseDown ):
218+ await self .app .set_focus (None )
225219 else :
226- await widget .forward_event (event )
220+ if isinstance (event , events .MouseDown ):
221+ await self .app .set_focus (widget )
222+ await widget .forward_event (event .offset (- region .x , - region .y ))
227223
228224 elif isinstance (event , (events .MouseScrollDown , events .MouseScrollUp )):
229225 widget , _region = self .get_widget_at (event .x , event .y )
0 commit comments