From 3095bd26ae6a96b6cc382bd067bb2a978094f3d3 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 24 Apr 2025 19:03:17 +0100 Subject: [PATCH] fix drag&drop coordinates on windows --- src/win/drop_target.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/win/drop_target.rs b/src/win/drop_target.rs index be19f79d..1b7835f1 100644 --- a/src/win/drop_target.rs +++ b/src/win/drop_target.rs @@ -7,7 +7,7 @@ use std::rc::{Rc, Weak}; use winapi::shared::guiddef::{IsEqualIID, REFIID}; use winapi::shared::minwindef::{DWORD, WPARAM}; use winapi::shared::ntdef::{HRESULT, ULONG}; -use winapi::shared::windef::POINTL; +use winapi::shared::windef::{POINT, POINTL}; use winapi::shared::winerror::{E_NOINTERFACE, E_UNEXPECTED, S_OK}; use winapi::shared::wtypes::DVASPECT_CONTENT; use winapi::um::objidl::{IDataObject, FORMATETC, STGMEDIUM, TYMED_HGLOBAL}; @@ -17,7 +17,7 @@ use winapi::um::oleidl::{ }; use winapi::um::shellapi::{DragQueryFileW, HDROP}; use winapi::um::unknwnbase::{IUnknown, IUnknownVtbl}; -use winapi::um::winuser::CF_HDROP; +use winapi::um::winuser::{ScreenToClient, CF_HDROP}; use winapi::Interface; use crate::{DropData, DropEffect, Event, EventStatus, MouseEvent, PhyPoint, Point}; @@ -114,7 +114,8 @@ impl DropTarget { let Some(window_state) = self.window_state.upgrade() else { return; }; - + let mut pt = POINT { x: pt.x, y: pt.y }; + unsafe { ScreenToClient(window_state.hwnd, &mut pt as *mut POINT) }; let phy_point = PhyPoint::new(pt.x, pt.y); self.drag_position = phy_point.to_logical(&window_state.window_info()); }