anchor.diff:                if not blockmsg then
                   fpgPostMessage(nil, FindWindowByHandle(ev.xclient.window), FPGM_CLOSE);
                end;
  -          end; // WM_PROTOCOLS
  +          end
  +          { XDND protocol - XdndEnter }
  +          else if Assigned(w) and (ev.xclient.message_type = XdndEnter) then
  +          begin
  +            HandleDNDenter(w, ev.xclient.data.l[0], ev);
  +          end
  +          { XDND protocol - XdndPosition }
  +          else if Assigned(w) and (ev.xclient.message_type = XdndPosition) then
  +          begin
  +            HandleDNDposition(w,                            // top level window
  +                ev.xclient.data.l[0],                       // Source window
  +                (ev.xclient.data.l[2] shr 16) and $FFFF,    // x_root
  +                ev.xclient.data.l[2] and $FFFF,             // y_root
  +                ev.xclient.data.l[4],                       // action
  +                ev.xclient.data.l[3]);                      // timestamp
  +          end
  +          { XDND protocol - XdndStatus }
  +          else if Assigned(w) and (ev.xclient.message_type = XdndStatus) then
  +          begin
  +            {$IFDEF DNDDEBUG}
  +            writeln('XdndStatus event received!');
  +            {$ENDIF}
  +          end
  +          { XDND protocol - XdndLeave }
  +          else if Assigned(w) and (ev.xclient.message_type = XdndLeave) then
  +          begin
  +            HandleDNDleave(w, ev.xclient.data.l[0]);
  +          end
  +          { XDND protocol - XdndDrop }
  +          else if Assigned(w) and (ev.xclient.message_type = XdndDrop) then
  +          begin
  +            HandleDNDdrop(w, ev.xclient.data.l[0], ev.xclient.data.l[2]);
  +          end
  +          { XDND protocol - XdndFinished }
  +          else if Assigned(w) and (ev.xclient.message_type = XdndFinished) then
  +          begin
  +            {$IFDEF DNDDEBUG}
  +            writeln('XdndFinished event received!');
  +            {$ENDIF}
  +          end;
           end;
   
       X.ConfigureNotify:
  
positive.code:   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
  
    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;
  
  function TfpgX11Application.DoGetFontFaceList: TStringList;
  
negative.code:   lAccept: clong = 0;
    msgp: TfpgMessageParams;
  begin
    {$IFDEF DNDDEBUG}
    writeln('XdndPosition event received!');
    {$ENDIF}
    FSrcWinHandle := ASource;
    FActionType   := AAction;
    FSrcTimeStamp := ATimeStamp;
  