Что вызывает отклонение в команде перемещения окна wmctrl

О wmctrl

С помощью wmctrl (по умолчанию не установлено) мы можем получить информацию об окнах, их идентификаторе, геометрии, pid, к которому они принадлежат и т. Д. Мы также можем переместить или изменяют размер окна с помощью нескольких команд. Однако в некоторых отношениях его поведение кажется нелогичным. Мой вопрос касается перемещения окон на wmctrl:

Получение информации

Когда я запускаю команду:

wmctrl -lG

Я получаю (ао) следующую информацию об окне на картинке (-ах) ниже:

0x04200085  0 746  443  468  205  jacob-System-Product-Name Niet-opgeslagen document 1 - gedit

В столбце 3-5 информация о геометрии сообщает нам координаты х / у и ширину / рост.

Перемещение / изменение размера окна

Когда я помещаю эти координаты в команду wmctrl для перемещения / изменения размера окна, оно должно сделать ничего, поскольку координаты не изменились:

wmctrl -ir 0x04200085 -e 0,746,443,468,205

Отклонение

Однако на рисунках ниже показано, что окно смещено вниз (если быть точным, 28px). Я предположил, что причина была в том, что команда перемещения окна wmctrl рассчитывалась с помощью рабочей области (экран минус высота панели), а команда wmctrl -lG рассчитывалась с суммой . Размер экрана . Тогда все еще 4px необъяснимо (панель высотой 24px).

Хотя в сценариях отклонение вполне можно компенсировать, тот факт, что я не понимаю причину, не удовлетворяет, поэтому возникает вопрос:

В чем именно причина этого отклонения?


Перемещение окна с точными координатами на выходе wmctrl -lG не должно перемещать окно, но это

enter image description here

enter image description here

10
задан 23 January 2015 в 00:29

2 ответа

То, что происходит, - то, что wmctrl возвращает геометрию окна в художественных оформлениях (т.е. не включая строку заголовка и границы), но использует большее положение окна для перемещения.

(Некоторая команда произвела удаленные строки: xdotool не мог бы быть установлен)

$ wmctrl -lG
0x04000040  0 702  23   900  950  KMatrix dave@KMatrix: test – Konsole

$ xdotool getwindowgeometry 0x04000040
Window 67108928
  Position: 702,23 (screen: 0)
  Geometry: 900x950

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

$ xdotool selectwindow
25166060

$ xdotool getwindowgeometry 0x18000ec
Window 25166060
  Position: 700,0 (screen: 0)
  Geometry: 904x977

, Как Вы видите, это - другое окно; X положений запускают 2 пкс левым (702-2), и общая ширина больше на 4 пкс (900+2+2), потому что правильная граница - также 2 пкс. Y выше (выше верхней границы, если таковые имеются, и строки заголовка); высота больше из-за всего этого плюс нижняя граница.

wmctrl перемещает родительское окно в желаемое [X, Y] положение дочернего окна; ширина и высота применяются правильно к ребенку, как показано в "прежде & после" ниже.

$ wmctrl -lG
0x04000040  0 702  23   900  950  KMatrix dave@KMatrix: test – Konsole

$ xdotool getwindowgeometry 0x18000ec   # (PARENT)
Window 25166060
  Position: 700,0 (screen: 0)
  Geometry: 904x977

$ xdotool getwindowgeometry 0x04000040  # (CHILD)
Window 67108928
  Position: 702,23 (screen: 0)
  Geometry: 900x950

$ wmctrl -ir 0x04000040 -e 0,702,23,900,950   # <----- "MOVE/RESIZE" *****

$ wmctrl -lG
0x04000040  0 704  46   900  950  KMatrix dave@KMatrix: test – Konsole

$ xdotool getwindowgeometry 0x18000ec   # (PARENT)
Window 25166060
  Position: 702,23 (screen: 0)    <----- Desired [X,Y] applied to parent
  Geometry: 904x977

$ xdotool getwindowgeometry 0x04000040  # (CHILD)
Window 67108928
  Position: 704,46 (screen: 0)
  Geometry: 900x950               <----- Desired [W,H] applied to child

Редактирование: дополнительная информация

Настольная геометрия, Область просмотра & Рабочая область

$ wmctrl -d    # (KDE)
0  * DG: 1680x1050  VP: 0,0  WA: 0,0 1680x1015  Desktop 1
$ xdotool -v
xdotool version 3.20140217.1

https://ре github.com/jordansissel/xdotool

: @Sneetsher снабжают подсказкой в комментариях

$ xprop | grep FRAME
_KDE_NET_WM_FRAME_STRUT(CARDINAL) = 2, 2, 23, 4
_NET_FRAME_EXTENTS(CARDINAL) = 2, 2, 23, 4
15
ответ дан 23 January 2015 в 00:29

Я имел ту же проблему и мог найти обходное решение.

<час>

ситуация

Моя ситуация основана на Помощнике 16.04 с установленным Compiz (который активирует gtk менеджер окон)

, я использую сценарий, подключенный к привязкам клавиш для размещения окон в предопределенные места. Этот сценарий перестал работать, если я не использую максимизируемую опцию.

<час>

Анализ

проблема могла быть включена и выключена путем включения и художественных оформлений окна в настройках (compiz).

<час>

Обходное решение

художественные оформления окна могут быть включены и от использования Python для определенного окна (использующий привязки клавиш, удобно использовать активное окно).

#!/usr/bin/python
from gtk.gdk import *
import gtk.gdk
import time
import sys

w = gtk.gdk.get_default_root_window().get_screen().get_active_window()
w.set_decorations(0) #use 1 to turn on decorations
window_process_all_updates()
gtk.gdk.flush()

Затем можно выключить художественные оформления окна, переместить окно и включить художественные оформления окна.

0
ответ дан 23 January 2015 в 00:29

Другие вопросы по тегам:

Похожие вопросы: