Я пытаюсь получить доступ к свойству 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?