anchor.diff:      WMHints^.icon_pixmap := IconPixmap;
       WMHints^.flags := IconPixmapHint;
   
  -//    XSetWMProperties(fpgApplication.Display, FWinHandle, nil, nil, nil, 0, nil, nil, nil);
  +    { setup window grouping posibilities }
  +    if (not (waX11SkipWMHints in FWindowAttributes)) and (FWindowType = wtWindow) then
  +    begin
  +      WMHints^.flags := WMHints^.flags or WindowGroupHint;
  +      WMHints^.window_group := xapplication.FLeaderWindow;
  +    end;
  +
  +
       XSetWMProperties(fpgApplication.Display, FWinHandle, nil, nil, nil, 0, nil, WMHints, nil);
  +
  +    if (not (waX11SkipWMHints in FWindowAttributes)) and (FWindowType = wtWindow) then
  +    begin
  +      { set class group hint per top-level window }
  +      SetWindowGroup(FWinHandle);
  +      XChangeProperty(xapplication.display, FWinHandle, xapplication.FClientLeaderAtom, 33, 32,
  +        PropModeReplace, @xapplication.FLeaderWindow, 1);
  +    end;
  +
  +    { so newish window manager can close unresponsive programs }
       fpgApplication.netlayer.WindowSetPID(FWinHandle, GetProcessID);
       fpgApplication.netlayer.WindowSetSupportPING(FWinHandle);
   
  
positive.code:   FWinHandle := wh;
    FBackupWinHandle := wh;
  
    // so newish window manager can close unresponsive programs
    if AParent = nil then // is a toplevel window
    begin
      IconPixMap := XCreateBitmapFromData(fpgApplication.Display, FWinHandle,
        @IconBitmapBits, IconBitmapWidth, IconBitmapHeight);
  
  
negative.code:     FLastDropTarget: TfpgWinHandle;
      FDropPos: TPoint;
      FDrag: TfpgX11Drag;
      { X11 window grouping }
      FLeaderWindow: TfpgWinHandle;
      FClientLeaderAtom: TAtom;
      procedure   SetDrag(const AValue: TfpgX11Drag);
      function    ConvertShiftState(AState: Cardinal): TShiftState;
      function    KeySymToKeycode(KeySym: TKeySym): Word;
  