mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-21 06:55:39 +00:00
Fix drag-n-drop on MS-Windows
* src/w32fns.c (struct w32_drop_target): New member 'ref_count'. (w32_drop_target_AddRef): Increment reference count. (w32_drop_target_Release): Decrement reference count, and free the target only if the reference count is zero. (w32_createwindow): Initialize reference count. (Bug#74312)
This commit is contained in:
parent
70273dc9f7
commit
b83a45eab5
@ -2562,6 +2562,7 @@ struct w32_drop_target {
|
||||
/* i_drop_target must be the first member. */
|
||||
IDropTarget i_drop_target;
|
||||
HWND hwnd;
|
||||
int ref_count;
|
||||
};
|
||||
|
||||
static HRESULT STDMETHODCALLTYPE
|
||||
@ -2573,13 +2574,16 @@ w32_drop_target_QueryInterface (IDropTarget *t, REFIID ri, void **r)
|
||||
static ULONG STDMETHODCALLTYPE
|
||||
w32_drop_target_AddRef (IDropTarget *This)
|
||||
{
|
||||
return 1;
|
||||
struct w32_drop_target *target = (struct w32_drop_target *) This;
|
||||
return ++target->ref_count;
|
||||
}
|
||||
|
||||
static ULONG STDMETHODCALLTYPE
|
||||
w32_drop_target_Release (IDropTarget *This)
|
||||
{
|
||||
struct w32_drop_target *target = (struct w32_drop_target *) This;
|
||||
if (--target->ref_count > 0)
|
||||
return target->ref_count;
|
||||
free (target->i_drop_target.lpVtbl);
|
||||
free (target);
|
||||
return 0;
|
||||
@ -2770,6 +2774,7 @@ w32_createwindow (struct frame *f, int *coords)
|
||||
if (vtbl != NULL)
|
||||
{
|
||||
drop_target->hwnd = hwnd;
|
||||
drop_target->ref_count = 0;
|
||||
drop_target->i_drop_target.lpVtbl = vtbl;
|
||||
vtbl->QueryInterface = w32_drop_target_QueryInterface;
|
||||
vtbl->AddRef = w32_drop_target_AddRef;
|
||||
|
Loading…
Reference in New Issue
Block a user