2016-04-08 8 views
2

Я пытаюсь программно перемещать окно так, чтобы оно было частично на экране. Например, щелкнув строку заголовка VLC и перетащив ее так, чтобы только половина окна была видна, работает очень хорошо.Как переместить окно с экрана с помощью wmctrl

Когда я вывожу результаты wmctrl -lG это работает просто отлично:

0x04a00011 0 -293 138 600 420 HEVM002 VLC media player 

Однако, когда я затем переместить его обратно на экран и попытаться повторить свою позицию, он не работает и обрезает окно удаленная сторона:

wmctrl -r "VLC media player" -e 0,-200,0,800,600 

Я испытал на пару оконных менеджеров, и это, кажется, работает хорошо на xfwm, но НЕ на Compiz. Есть ли флаг или что-то в этом роде, которое я могу настроить, чтобы включить перемещение окон за кадром?

ответ

3

При работе под управлением окон это полностью зависит от оконного менеджера. Есть ли флаг для принудительной частичной внеэкранной позиции, зависит от того, какой он оконный менеджер.

Единственный оконный менеджер, способный достичь этого, делает окно окном override_redirect. Но, конечно, это означает, что окно больше не управляется. Если сделать это обычным окном, это приведет к тому, что диспетчер окон сможет снова управлять им, что, вероятно, снова в зависимости от диспетчера окон, означает снова заставить его быть в границах.

При этом, глядя на исходный код wmctrl, он использует _NET_MOVERESIZE_WINDOW, если он поддерживается диспетчером окон и возвращается к XMoveResizeWindow (или аналогичным) в противном случае. Тем не менее, в первом случае он отличает значения позиции до unsigned long, что фактически означает, что любые отрицательные значения будут потеряны в любом случае. Во втором случае отрицательные значения, по-видимому, сигнализируют «не двигаться», поэтому и удачи там нет.

Вместо этого вы можете попробовать использовать xdotool windowmove, который будет правильно обрабатывать отрицательные значения. Может быть, также рассмотреть вопрос о внесении ошибки в wmctrl?

+0

ура - xdotool windowmove произвел те же результаты, поэтому я, скорее всего, отредактирую компиляцию, чтобы добавить поддержку. – John

+0

Для меня (i3wm), xdotool работает, но wmctrl этого не делает. Поэтому в этом случае, вероятно, оконный менеджер отклоняет запрос. –