anchor.diff:    Msg.xclient.data.l[1] := 0;
     if (FDNDDataType <> None) and (FActionType = XdndActionCopy) and (lAccept = 1) then  // we only accept copy action for now
       Msg.xclient.data.l[1] := 1; // 0 xor (1 shl 0); // 0-bit set so we accept drop
  -
  +  {$IFDEF DNDDEBUG}
  +  if FDNDDataType = None then
  +    writeln('No suitable data type found, so we refuse drop');
  +  if FActionType <> XdndActionCopy then
  +    writeln('No suitable action found, so we refuse drop');
  +  {$ENDIF}
     Msg.xclient.data.l[2] := 0; // (Left shl 16) or Top;  // x & y co-ordinates
     Msg.xclient.data.l[3] := 0; // (Width shl 16) or Height; // w & h co-ordinates
     Msg.xclient.data.l[4] := FActionType; // this should be the action we accept
   
     XSendEvent(FDisplay, FSrcWinHandle, False, NoEventMask, @Msg);
  +end;
  +
  +procedure TfpgX11Application.HandleDNDdrop(ATopLevelWindow: TfpgX11Window;
  +    const ASource: TWindow; const ATimestamp: x.TTime);
  +var
  +  Msg: TXEvent;
  +begin
  +  {$IFDEF DEBUG}
  +  writeln('XdndDrop event received!');
  +  {$ENDIF}
  +  XConvertSelection(FDisplay, XdndSelection, FDNDDataType, XdndSelection, ATopLevelWindow.FWinHandle, ATimestamp);
  +
  +  { send message to confirm drop will be accepted in specified rectangle }
  +  FillChar(Msg, SizeOf(Msg), 0);
  +  Msg.xany._type            := ClientMessage;
  +  Msg.xany.display          := FDisplay;
  +  Msg.xclient.window        := FSrcWinHandle; // source winhandle msg is going to
  +  Msg.xclient.message_type  := XdndFinished;
  +  Msg.xclient.format        := 32;
  +
  +  Msg.xclient.data.l[0] := ATopLevelWindow.FWinHandle;  // winhandle of target window
  +  Msg.xclient.data.l[1] := 1; // drop accepted - target can remove the data
  +  Msg.xclient.data.l[2] := FActionType; // this should be the action we accepted
  +
  +  XSendEvent(FDisplay, FSrcWinHandle, False, NoEventMask, @Msg);
  +  ResetDNDVariables;
   end;
   
   function TfpgX11Application.DoGetFontFaceList: TStringList;
  
positive.code:     if Assigned(w) then
      begin
        lTargetWinHandle := w.WinHandle;
        if w is TfpgWidget then      // TODO: We could use Interfaces here eg: IDragDropEnabled
        begin
          if FLastDropTarget <> lTargetWinHandle then
  
negative.code:     function    StartComposing(const Event: TXEvent): TKeySym;
      procedure   XdndInit;
      procedure   ResetDNDVariables;
      procedure   HandleDNDenter(ATopLevelWindow: TfpgX11Window; const ASource: TWindow; const ev: TXEvent);
      procedure   HandleDNDleave(ATopLevelWindow: TfpgX11Window; const ASource: TWindow);
      procedure   HandleDNDposition(ATopLevelWindow: TfpgX11Window; const ASource: TWindow; const x_root: integer; const y_root: integer; const AAction: TAtom; const ATimestamp: x.TTime);
      procedure   HandleDNDdrop(ATopLevelWindow: TfpgX11Window; const ASource: TWindow; const ATimestamp: x.TTime);
    protected
      FDisplay: PXDisplay;
      DisplayDepth: integer;
  