Как перетащить окно?

Я могу захватить окно и переместить его, удерживая Alt нажатой. Я бы хотел, чтобы в моем приложении было такое же движение, но когда пользователь наводит курсор на заданную область окна, ему не нужно нажимать Alt, чтобы перетащить ее, нужно просто щелкнуть эту область, и он захватит окно для его перемещения.

Какое событие X11 я должен отправить, чтобы по запросу у меня был включен режим движения? Я хочу вызвать его при нажатии мыши в моем приложении.


person pepper_chico    schedule 25.03.2014    source источник
comment
Этот инструмент может это сделать: semicomplete.com/projects/xdotool ЕСЛИ вы посмотрите на источник для этого вы, вероятно, можете увидеть, как это сделать. Он использует расширение XTest X11.   -  person Jerry Jeremiah    schedule 26.03.2014
comment
Вы не должны отправлять какие-либо события, вы должны получать события движения мыши и вызывать XMoveWindow.   -  person n. 1.8e9-where's-my-share m.    schedule 27.03.2014
comment
@н.м. Я попробовал это с помощью своего набора инструментов для виджетов, Qt/QML, но я не знаю, почему, пытаясь получить новое положение мыши, вычисляя смещение и добавляя его к положению окна, оно сильно покачивается, если я перемещаю окно слишком быстро, поэтому я спрашиваю, как это сделать с помощью возможностей оконного менеджера, потому что таким образом он ведет себя хорошо.   -  person pepper_chico    schedule 27.03.2014
comment
Вы сейчас задаете другой вопрос. Покажи свой код.   -  person n. 1.8e9-where's-my-share m.    schedule 27.03.2014
comment
@н.м. Простите, но я не, как я уже сказал, я хочу включить перетаскивание, как я могу это сделать, нажав Alt, но без нажатия Alt, с помощью любых программных средств. Неважно, использует ли мой текущий код Qt, QML или что-то еще, поскольку я могу убедиться, что с помощью обычной реализации он покачивается. Если на то пошло, я предоставил отзыв об этом здесь и здесь. Там есть код, который мне не подходит.   -  person pepper_chico    schedule 27.03.2014
comment
Пожалуйста, опубликуйте любой код, с которым у вас возникла проблема, в самом вопросе. Попробуйте отбросить события мыши, если в очереди есть еще такие события. Вычисляйте координаты для таких событий, но не перемещайте окно. Также попробуйте использовать дельты с координатами мыши, которые были у вас в начале перетаскивания, а не с предыдущим событием.   -  person n. 1.8e9-where's-my-share m.    schedule 27.03.2014
comment
@н.м. Я не понимаю, что ты пытаешься сказать. В моей среде Qt/QML у меня просто есть новое событие движения мыши, и единственное, что я могу сделать, это доверять ему. Если я доверяю этим данным о движении мыши, мой единственный вариант - использовать их для смещения окна, более того, как я могу не использовать их для фактического перемещения окна, что мне тогда с ними делать? В любом случае, это ответ на другой вопрос, от которого я отказался. Вопрос, который я задаю на SO, идет в другом направлении, что связано с тем, что делает оконный менеджер, и могу ли я управлять режимом движения окна оконного менеджера.   -  person pepper_chico    schedule 27.03.2014
comment
@н.м. В любом случае, вы заставили меня задуматься, я думаю, что это покачивание связано с тем, что я имею дело с позиционированием мыши над окном, возможно, я мог бы удалить его, если бы я мог иметь дело с абсолютным позиционированием мыши по экрану, или просто необработанные координаты мыши, используемые для позиционирования окна относительно исходного положения окна. Я не уверен, что смогу получить такие данные в своей среде QML, но я посмотрю на это.   -  person pepper_chico    schedule 27.03.2014
comment
возможно, я мог бы удалить его, если бы я мог иметь дело с абсолютным позиционированием мыши --- это правильно, причина покачивания, вероятно, заключается в том, что вы просите X11 переместить окно, но это не дает немедленного эффекта. Ваш следующий шаг, скорее всего, будет использовать неверное предположение о текущих координатах окна.   -  person n. 1.8e9-where's-my-share m.    schedule 27.03.2014
comment
@н.м. правда, если я добьюсь успеха в QML, я отвечу на этот вопрос или сделаю еще один, более специфичный для QML, и отвечу на него.   -  person pepper_chico    schedule 27.03.2014