В чём, собственно, проблема? ...
... Так что не надо у абстрактного класса убирать виртуальный деструктор, и компилятор всё правильно предупреждает.
проблемма в непонимании принципов работы виртуального деструктора - я подумал, что допустил какой-то косяк в определении абстрактного класса и из-за этого был вызван его деструктор
те я думал, что если деструктор виртуальный, то он вызывается только для класса с которого создавался объект, а оказалось он еще зачем то должен вызыватья для класса из которого создан указатель
а почему стандартная схема не используется начиная с вызова деструктора потомков, потом промежуточных, а потом деструтора базового класса?
да кстати относительно понимания: в xlib_window слова virtual уже лишние?
а может нужно было сделать в абстрактном классе деструктор тоже абстрактным?