¿Qué causa la desviación en el comando wmctrl window move?

9

Acerca de wmctrl

Con wmctrl (no instalado de forma predeterminada), podemos obtener información sobre Windows, su id, su geometría, el pid al que pertenecen, etc. También podemos mover o cambiar el tamaño ventanas con varios comandos. Sin embargo, en algunos aspectos, su comportamiento parece no ser lógico. Mi pregunta es sobre mover ventanas por wmctrl :

Obtención de información

Cuando ejecuto el comando:

wmctrl -lG

Obtengo (a.o.) la siguiente información sobre la ventana en la (s) siguiente (s) foto (s):

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

En la columna 3-5, la información de geometría nos dice las coordenadas x / y y el ancho / alto.

Mover / cambiar el tamaño de la ventana

Cuando coloque estas coordenadas en el comando wmctrl para mover / cambiar el tamaño de una ventana, no debería hacer nada, ya que las coordenadas no se modifican:

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

Desviación

Sin embargo, las imágenes siguientes muestran que la ventana se mueve hacia abajo (28px para ser precisos). Supuse que la razón era que el comando wmctrl ventana mover calculado con el área de trabajo (pantalla menos altura del panel), mientras que el comando wmctrl -lG calculado con el tamaño de pantalla total . Entonces todavía 4px es inexplicable sin embargo (el panel es 24px alto).

Aunque la desviación puede ser muy bien compensada en los guiones, el hecho de que no entiendo la causa no es satisfactorio, entonces la pregunta es:

¿Cuál es exactamente la causa de esta desviación?


Mover una ventana con las coordenadas exactas en la salida de wmctrl -lG no debe mover la ventana, pero sí

    
pregunta Jacob Vlijm 22.01.2015 - 16:27

2 respuestas

14

Lo que está sucediendo es que wmctrl está devolviendo la geometría de la ventana dentro de las decoraciones (es decir, sin incluir la barra de título y los bordes) pero está usando la posición más grande de la ventana para el movimiento.

(Algunas líneas de salida de comando eliminadas: xdotool podría no estar instalado)

$ 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

El siguiente comando solicita la ventana de interés y devuelve la ventana principal que incluye todas las decoraciones y varía según el tema de la ventana en uso.

$ xdotool selectwindow
25166060

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

Como puede ver, es una ventana diferente; la posición X comienza 2px a la izquierda (702-2) y el ancho total es mayor en 4px (900 + 2 + 2) porque el borde derecho también es 2px. Y es más alto (arriba del borde superior, si hay alguno, y la barra de título); la altura es más grande debido a todo eso más el borde inferior.

wmctrl mueve la ventana principal a la posición deseada [X, Y] de la ventana secundaria; ancho y alto se aplican correctamente al niño, como se muestra en "antes y después" a continuación.

$ 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

Editar: información adicional.

Geometría de escritorio, Viewport & amp; Área de trabajo

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

enlace

Re: @Sneetsher sugerencia en los comentarios

$ xprop | grep FRAME
_KDE_NET_WM_FRAME_STRUT(CARDINAL) = 2, 2, 23, 4
_NET_FRAME_EXTENTS(CARDINAL) = 2, 2, 23, 4
    
respondido por el Daxx 30.01.2015 - 07:49
0

Tuve el mismo problema y pude encontrar una solución alternativa.

Situación

Mi situación se basa en Mate 16.04 con Compiz instalado (que activa el administrador de ventanas gtk)

Estoy usando un script conectado a enlaces de teclas para colocar ventanas en lugares predefinidos. Este script falla si no estoy usando la opción maximizada.

Análisis

El problema podría activarse y desactivarse encendiendo y decorando la ventana en la configuración (compiz).

Solución temporal

Las decoraciones de las ventanas se pueden activar y desactivar usando Python para una ventana específica (usando combinaciones de teclas, es conveniente usar la ventana activa).

#!/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()

Luego puedes desactivar las decoraciones de las ventanas, mover la ventana y activar las decoraciones de las ventanas.

    
respondido por el Martijn Weterings 31.05.2017 - 18:01

Lea otras preguntas en las etiquetas