Russian Qt Forum
Октябрь 02, 2024, 11:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с Drag & Drop в самодельном оконном менеджере..  (Прочитано 2000 раз)
sse
Гость
« : Июль 11, 2011, 11:33 »

Добрый день. Вот такая проблема:
Имеется Qt, 4.6.3, Linux МСВС, делаю свой простенький оконный менеджер, на основе Antico. Столкнулся с такой проблемой: после вызова XReparentWindow для любого клиентского окна в моем менеджере, перестают работать механизмы Drag & Drop. Т.е. если в чистых иксах в клиенте работает Drag Drop, то уже после запуска моего WM, не работает.
Понятно, что после XReparent, сообщения  (ClientMessage) XdndEnter и XdndPosition и др. перехватываются уже главной формой, в которой теперь находится наше клиентское окно, и дальше не идут. Как доставить эти сообщения до клиента?? Пробовал в главной форме полученные сообщения вручную, через XSendEvent доставлять до клиента. Доходят, но обратно не получаю XdndStatus, что-бы его так-же обратно доставить клиенту, в результате чего на этом процесс  останавливается. Я так понимаю, некоторые сообщения съедаются в недрах QApplication(как пишут разработчики, умный код).
Есть у кого идеи, как запустить драг дроп? Вторую неделю бьюсь. Спасибо.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июль 11, 2011, 13:35 »

Понятно, что после XReparent, сообщения  (ClientMessage) XdndEnter и XdndPosition и др. перехватываются уже главной формой, в которой теперь находится наше клиентское окно, и дальше не идут. Как доставить эти сообщения до клиента??
Откуда такие умозаключения? D'n'd и WM никоим образом не должны пересекаться.
Записан

Qt 5.11/4.8.7 (X11/Win)
sse
Гость
« Ответ #2 : Июль 11, 2011, 14:22 »

Понятно, что после XReparent, сообщения  (ClientMessage) XdndEnter и XdndPosition и др. перехватываются уже главной формой, в которой теперь находится наше клиентское окно, и дальше не идут. Как доставить эти сообщения до клиента??
Откуда такие умозаключения? D'n'd и WM никоим образом не должны пересекаться.
Потому, что если окно 1 поместить в окно 2 (XReparentWindow(QX11Info::display(), winId_1, winId_2, , ); ), то после этого в x11EventFilter(XEvent *event) окна 2, при перемещении объектов в окне 1, возникают события типа XdndEnter и XdndPosition ..,
а так-же вызываются обработчики dragEnterEvent(), dragMoveEvent().., окна 2 !!! Т.е. получается, что новоиспеченное окно родитель (2) думает, что на него хотят что-то перетащить, хотя это не так, просто мы таскаем какой-то элемент на его окне потомке(2). В общем, фигня какая-то получается.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.297 секунд. Запросов: 22.