Переместитесь/измените размер окно в любую часть modifier+touchpad (не нажатие, просто коснувшись)

Какой-либо менеджер окон имеет возможность перемещения/изменения размеров окна при помощи Модификатора + Сенсорная панель путем ответвления (не нажимающий) ни в какой части окна?

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

Идеально, я хотел бы переместить окно Высоким звуком + Сенсорная панель и изменить размер Супер + Сенсорная панель. Я имею в виду, я удержал бы Высокий звук, и только с ответвлением и шевелить моим пальцем, я хотел бы переместить окно. Какой-либо менеджер окон может сделать это? В противном случае там какой-либо взлом должен выполнить это?

В настоящее время я использую xfce4 с xfwm. Было бы лучше, если я мог бы сделать это только с заменой xfwm с другим wm, или с использованием некоторой внешней утилиты сверху xfwm.

0
задан 25 November 2019 в 16:08

2 ответа

Я думаю, что fusuma и после плагинов полезны.

https://github.com/iberianpig/fusuma-plugin-wmctrl https://github.com/iberianpig/fusuma-plugin-keypress

0
ответ дан 21 December 2019 в 23:50

Я создал немного программы, которая вводит события нажатия мыши в X-сервер, когда нажатая кнопка Alt/Win и существует касание. Путь устройств события должен быть изменен для указания на клавиатуру и сенсорную панель соответственно (это работает на меня для event0 и event5, но на другом машины они, вероятно, будут отличаться). Менеджер окон должен быть настроен, что Alt+LeftClick является перемещением, и Win+RightClick, изменяют размер. Вот исходный код:

#include <X11/extensions/XTest.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>

int main() {
    Display *display = XOpenDisplay(nullptr);

    int kfd = open("/dev/input/event0", O_RDONLY);
    int tfd = open("/dev/input/event5", O_RDONLY);
    int mfd = kfd;
    if (tfd>mfd) mfd = tfd;
    bool leftAltDown = false;
    bool leftWinDown = false;
    bool touch = false;
    bool leftClickStateOnServer = false;
    bool rightClickStateOnServer = false;
    for (;;) {
        fd_set readfds;
        FD_ZERO(&readfds);
        FD_SET(kfd, &readfds);
        FD_SET(tfd, &readfds);
        int e = select(mfd+1, &readfds, nullptr, nullptr, nullptr);
        if (e>=0) {
            if (FD_ISSET(kfd, &readfds)) {
                input_event e;
                if (read(kfd, &e, sizeof(e))==sizeof(e)) {
                    if (e.type==EV_KEY) {
                        if (e.code==56) leftAltDown = e.value;
                        if (e.code==125) leftWinDown = e.value;
                    }
                }
            }
            if (FD_ISSET(tfd, &readfds)) {
                input_event e;
                read(tfd, &e, sizeof(e));
                if (e.type==EV_KEY&&e.code==BTN_TOUCH) {
                    touch = e.value;
                }
            }
        }

        bool leftClick = leftAltDown&&touch;
        bool rightClick = leftWinDown&&touch;

        if (leftClickStateOnServer!=leftClick) {
            leftClickStateOnServer = leftClick;
            XTestFakeButtonEvent(display, Button1, leftClick, CurrentTime);
            XSync(display, false);
        }
        if (rightClickStateOnServer!=rightClick) {
            rightClickStateOnServer = rightClick;
            XTestFakeButtonEvent(display, Button3, rightClick, CurrentTime);
            XSync(display, false);
        }
    }
}
0
ответ дан 21 December 2019 в 23:50

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

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