anchor.diff:    fpg_listbox,
     fpg_dialogs;
   
  +const
  +  // internal popupmenu item names
  +  //ipmCut        = 'miDefaultCut';
  +  //ipmCopy       = 'miDefaultCopy';
  +  //ipmPaste      = 'miDefaultPaste';
  +  //ipmClearAll   = 'miDefaultClearAll';
  +  ipmCharmap    = 'miDefaultCharmap';
  +
   var
     OriginalFocusRoot: TfpgWidget;
   
  
positive.code:     function    GetText: string; virtual;
      function    HasText: boolean; virtual;
      procedure   SetText(const AValue: string); virtual;
      procedure   HandleResize(AWidth, AHeight: TfpgCoord); override;
      procedure   HandleKeyChar(var AText: TfpgChar; var shiftstate: TShiftState; var consumed: Boolean); override;
      procedure   HandleKeyPress(var keycode: word; var shiftstate: TShiftState; var consumed: Boolean); override;
      procedure   HandleLMouseDown(x, y: integer; shiftstate: TShiftState); override;
      procedure   HandleLMouseUp(x, y: integer; shiftstate: TShiftState); override;
      procedure   HandlePaint; override;
      property    AutoCompletion: Boolean read FAutocompletion write FAutoCompletion default False;
      property    AllowNew: TAllowNew read FAllowNew write SetAllowNew default anNo;
  
negative.code:   PaintInternalButton;
  end;
  
  procedure TfpgBaseEditCombo.HandleRMouseDown(x, y: integer;
    shiftstate: TShiftState);
  begin
    // keyMenu was pressed
    if shiftstate = [ssExtra1] then
      HandleRMouseUp(x, y, [])
    else
      inherited HandleRMouseDown(x, y, shiftstate);
  end;
  
  procedure TfpgBaseEditCombo.HandleRMouseUp(x, y: integer; shiftstate: TShiftState);
  begin
    inherited HandleRMouseUp(x, y, shiftstate);
    //if Assigned(PopupMenu) then
    //  PopupMenu.ShowAt(self, x, y)
    //else
      ShowDefaultPopupMenu(x, y, ShiftState);
  end;
  
  procedure TfpgBaseEditCombo.HandlePaint;
  var
    r: TfpgRect;
  