@@ -1092,6 +1092,7 @@ pub enum WindowMessage {
10921092 Title ( Sender < String > ) ,
10931093 CurrentMonitor ( Sender < Option < MonitorHandle > > ) ,
10941094 PrimaryMonitor ( Sender < Option < MonitorHandle > > ) ,
1095+ MonitorFromPoint ( Sender < Option < MonitorHandle > > , ( f64 , f64 ) ) ,
10951096 AvailableMonitors ( Sender < Vec < MonitorHandle > > ) ,
10961097 #[ cfg( any(
10971098 target_os = "linux" ,
@@ -1578,6 +1579,21 @@ impl<T: UserEvent> WindowDispatch<T> for WryWindowDispatcher<T> {
15781579 Ok ( window_getter ! ( self , WindowMessage :: PrimaryMonitor ) ?. map ( |m| MonitorHandleWrapper ( m) . into ( ) ) )
15791580 }
15801581
1582+ fn monitor_from_point ( & self , x : f64 , y : f64 ) -> Result < Option < Monitor > > {
1583+ let ( tx, rx) = channel ( ) ;
1584+
1585+ let _ = send_user_message (
1586+ & self . context ,
1587+ Message :: Window ( self . window_id , WindowMessage :: MonitorFromPoint ( tx, ( x, y) ) ) ,
1588+ ) ;
1589+
1590+ Ok (
1591+ rx. recv ( )
1592+ . map_err ( |_| crate :: Error :: FailedToReceiveMessage ) ?
1593+ . map ( |m| MonitorHandleWrapper ( m) . into ( ) ) ,
1594+ )
1595+ }
1596+
15811597 fn available_monitors ( & self ) -> Result < Vec < Monitor > > {
15821598 Ok (
15831599 window_getter ! ( self , WindowMessage :: AvailableMonitors ) ?
@@ -2149,6 +2165,15 @@ impl<T: UserEvent> RuntimeHandle<T> for WryHandle<T> {
21492165 . map ( |m| MonitorHandleWrapper ( m) . into ( ) )
21502166 }
21512167
2168+ fn monitor_from_point ( & self , x : f64 , y : f64 ) -> Option < Monitor > {
2169+ self
2170+ . context
2171+ . main_thread
2172+ . window_target
2173+ . monitor_from_point ( x, y)
2174+ . map ( |m| MonitorHandleWrapper ( m) . into ( ) )
2175+ }
2176+
21522177 fn available_monitors ( & self ) -> Vec < Monitor > {
21532178 self
21542179 . context
@@ -2407,6 +2432,15 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
24072432 . map ( |m| MonitorHandleWrapper ( m) . into ( ) )
24082433 }
24092434
2435+ fn monitor_from_point ( & self , x : f64 , y : f64 ) -> Option < Monitor > {
2436+ self
2437+ . context
2438+ . main_thread
2439+ . window_target
2440+ . monitor_from_point ( x, y)
2441+ . map ( |m| MonitorHandleWrapper ( m) . into ( ) )
2442+ }
2443+
24102444 fn available_monitors ( & self ) -> Vec < Monitor > {
24112445 self
24122446 . context
@@ -2643,6 +2677,9 @@ fn handle_user_message<T: UserEvent>(
26432677 WindowMessage :: Title ( tx) => tx. send ( window. title ( ) ) . unwrap ( ) ,
26442678 WindowMessage :: CurrentMonitor ( tx) => tx. send ( window. current_monitor ( ) ) . unwrap ( ) ,
26452679 WindowMessage :: PrimaryMonitor ( tx) => tx. send ( window. primary_monitor ( ) ) . unwrap ( ) ,
2680+ WindowMessage :: MonitorFromPoint ( tx, ( x, y) ) => {
2681+ tx. send ( window. monitor_from_point ( x, y) ) . unwrap ( )
2682+ }
26462683 WindowMessage :: AvailableMonitors ( tx) => {
26472684 tx. send ( window. available_monitors ( ) . collect ( ) ) . unwrap ( )
26482685 }
0 commit comments