Как получить размер оконного оформления в пикселях в LUA - PullRequest
0 голосов
/ 15 января 2019

Я использую rdesktop с seamlessrdp. Таким образом, я могу открывать приложения Windows на своих машинах с Linux. Также я добавил devilspie2 в микс, чтобы контролировать оформление окон. devilspie2 использует lua для управления конфигурацией. Я заставил все работать. Единственная оставшаяся проблема - переместить открывающие (диалоговые) окна на пару пикселей, потому что окна VNC будут выглядеть так, как будто у них есть украшения (но без них). Я получил работающий код, жестко запрограммировав количество пикселей, необходимое для перемещения. Проблема в том, что у нас есть несколько дистрибутивов, и они имеют разные размеры пикселей для своих оконных декораций.

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

Вот фрагмент кода, который делает это atm:

if get_window_class()=="SeamlessRDP" then
    undecorate_window();

    --x-1 and y-28 works for one distro but for the other I need to use x-6 and y-27
    if get_window_type()=="WINDOW_TYPE_DIALOG" then
        x, y = xy();
        xy(x-1, y-28);
    end
end

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

РЕДАКТИРОВАТЬ (ОТВЕТ):

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

--get x and y's for decorated and non-decorated windows
x1, y1, width1, height1 = get_window_geometry();
x2, y2, width2, height2 = get_window_client_geometry();

--calculate pixels to slide window
xpixel = x2-x1;
ypixel = y2-y1;


--check if class is seamlessrdp
if get_window_class()=="SeamlessRDP" then
    undecorate_window();

    --if window is a dialog then move it
    if get_window_type()=="WINDOW_TYPE_DIALOG" then
        xy(x1-xpixel, y1-ypixel);
    end
end

1 Ответ

0 голосов
/ 15 января 2019

devilspie2 предоставляет только два способа получения размера окна, get_window_geometry и get_window_client_geometry.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...