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

О wmctrl

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

move

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

wmctrl -lG

I get (ao) следующую информацию о окне на картинке ниже:

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

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

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

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

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

Отклонение

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

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

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

window move

enter image description here

1
задан 23 January 2015 в 01:29

1 ответ

У меня была та же проблема и я мог найти обходное решение.

Ситуация

Моя ситуация основана на Mate 16.04 с установленной Compiz (которая активирует gtk window manager)

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

Анализ

Проблема может быть включена и выключена включением и оформлением окна в настройках (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 May 2018 в 23:57

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

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