Как заставить Qt согласиться с номером монитора GTK? - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь получить доступ к свойству X11 для каждого монитора через приложение GTK.Название объекта зависит от номера монитора.Приложение, обращающееся к свойству, использует Qt.Похоже, что Qt нумерует мониторы не так, как GTK, поэтому, когда я получаю свойство из программы Qt, оно получает неправильный монитор, потому что по какой-то причине GTK и Qt не согласуются с нумерацией мониторов.

Чтобы подтвердить это, я сделал два теста, чтобы проверить, что GTK и Qt дают мне для одного и того же монитора.Вот мой тестовый код GTK:

#include <iostream>
#include <gtk/gtk.h>

int main(int argc, char** argv)
{
    gtk_init(&argc, &argv);
    const auto widget=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(widget);
    while(gtk_events_pending())
        gtk_main_iteration();

    const auto window=gtk_widget_get_window(widget);
    const auto screen=gdk_window_get_screen(window);
    const auto monitor=gdk_screen_get_monitor_at_window(screen,window);
    std::cout << "GTK monitor number: " << monitor << "\n";
}

А вот код Qt:

#include <iostream>
#include <QWidget>
#include <QApplication>
#include <QDesktopWidget>

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QWidget widget;
    widget.show();
    app.processEvents();

    const auto desktop=app.desktop();
    std::cout << "Qt screen number: " << desktop->screenNumber(&widget) << "\n";
}

Вот что xrandr говорит:

$ xrandr
Screen 0: minimum 8 x 8, current 3200 x 1080, maximum 16384 x 16384
DVI-I-0 disconnected primary (normal left inverted right x axis y axis)
DVI-I-1 connected 1920x1080+1280+0 (normal left inverted right x axis y axis) 477mm x 268mm
   1920x1080      60.0*+   59.9     50.0  
<...>
HDMI-0 disconnected (normal left inverted right x axis y axis)
DVI-D-0 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 380mm x 300mm
   1280x1024      60.0 +   75.0* 
<...>

И со всем этимsetup Я получаю следующий вывод из тестов, когда курсор мыши находится на правом мониторе:

Qt screen number: 0
GTK monitor number: 1

И наоборот, когда курсор находится на левом мониторе.Диспетчер окон сконфигурирован для размещения окон на мониторе там, где находится курсор, поэтому GTK и Qt действительно по-разному нумеруют один и тот же монитор.

Итак, мой вопрос : как мне узнатьномер монитора, который вернул бы GTK gdk_screen_get_monitor_at_window, но из приложения Qt?

...