anchor.diff:          end;
         end;
       end;
  -  end
  -  else
  -  begin
  -    if FLastDropTarget <> lTargetWinHandle then
  +  end;
  +
  +  for i := 0 to FDNDTypeList.Count-1 do
  +  begin
  +    { This list must be from most specific to least specific }
  +    if TDNDSrcType(FDNDTypeList[i]).Name = lMimeChoice then
       begin
  -      fillchar(msgp, sizeof(msgp), 0);
  -      fpgPostMessage(nil, FindWindowByHandle(FLastDropTarget), FPGM_DROPEXIT, msgp);
  +      FDNDDataType := TDNDSrcType(FDNDTypeList[i]).ID;
  +      break;
       end;
  -    FLastDropTarget := lTargetWinHandle;
  -  end;
  -
  +  end;
   
     // send message to confirm drop will be accepted in specified rectangle
     FillChar(Msg, SizeOf(Msg), 0);
  
positive.code:   xfd: integer;
    KeySym: TKeySym;
    Popup: TfpgWidget;
    status: TStatus;
    needToWait: boolean;
  
    // debug purposes only
  
negative.code:   {$ENDIF}
  
    if child <> 0 then
      w := FindWindowByHandle(child)
    else
      w := ATopLevelWindow;
  
    if Assigned(w) then
    begin
      lTargetWinHandle := w.WinHandle;
      {$IFDEF DNDDEBUG}
      writeln('dragging over window: ', w.Name);
      {$ENDIF}
      if w is TfpgWidget then      // TODO: We could use Interfaces here eg: IDragDropEnabled
      begin
        wg := TfpgWidget(w);
        if FLastDropTarget <> lTargetWinHandle then
        begin
          fillchar(msgp, sizeof(msgp), 0);
          fpgPostMessage(nil, FindWindowByHandle(FLastDropTarget), FPGM_DROPEXIT, msgp);
        end;
        FLastDropTarget := lTargetWinHandle;
        if wg.AcceptDrops then
        begin
          if Assigned(wg.OnDragEnter) then
          begin
            lDropAction := GetDropActionFromAtom(AAction);
            lMimeList := TStringList.Create;
            for i := 0 to FDNDTypeList.Count-1 do
              lMimeList.Add(TDNDSrcType(FDNDTypeList[i]).Name);
            { TODO: We need to populate the Source parameter. }
            wg.OnDragEnter(self, nil, lMimeList, lMimeChoice, lDropAction, lAccept);
            lMimeList.Free;
            FActionType := GetAtomFromDropAction(lDropAction);
          end;
  
          if lAccept then
          begin
            fillchar(msgp, sizeof(msgp), 0);
            msgp.mouse.x := dx;
            msgp.mouse.y := dy;
  