Кажется, что это происходит из-за разницы в том, как Gnome обрабатывает окна с разными «подсказками типов» ... он помещает их в свои собственные группы z-index:
https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#GdkWindowTypeHint
Диалог создается с помощью GDK_WINDOW_TYPE_HINT_DIALOG
, в то время как ваше другое окно, скорее всего, создается с GDK_WINDOW_TYPE_HINT_NORMAL
. Точка, в которой принимается это решение, находится в gtk/toplevel.cpp
и определяется тем фактом, что флаги «дополнительного» стиля содержат wxTOPLEVEL_EX_DIALOG
:
toplevel.cpp # L594
Это только два вызова gtk_window_set_type_hint
в кодовой базе wxWidgets GTK, за исключением кода заставки. Таким образом, изменение «лишних» битов стиля после факта не поможет. («Правильным» решением было бы исправление wxWidgets так, чтобы корректировка wxTOPLEVEL_EX_DIALOG
в дополнительных стилях выполняла правильную настройку подсказки типа окна.)
Вы не можете использовать класс wxDialog без запуска его конструктора, который вызывает не виртуальный метод wxDialog::Create
, который устанавливает дополнительный стиль на wxTOPLEVEL_EX_DIALOG
, а затем непосредственно переходит к созданию окна верхнего уровня:
dialog.cpp # L54
Так что, я думаю, у вас есть возможность попробовать это, что работает, если вы еще не открыли диалоговое окно:
#ifdef __WXGTK__
gtk_window_set_type_hint(
GTK_WINDOW(iShouldBeUsingQtDialog->GetHandle()),
GDK_WINDOW_TYPE_HINT_NORMAL);
#endif
... и если вы уже показали это диалоговое окно, вам нужно использовать его для его работы:
#ifdef __WXGTK__
gdk_window_set_type_hint(
iShouldBeUsingQtDialog->GetHandle()->window,
GDK_WINDOW_TYPE_HINT_NORMAL);
#endif
В обоих случаях вам потребуется добавить включаемый файл в ваш источник:
#ifdef __WXGTK__
#include "gtk/gtkwindow.h"
#endif
... и вам придется обновить свою сборку, чтобы найти GTK-включения. В командной строке для G ++ я попробовал это, и это сработало:
pkg-config --cflags --libs gtk+-2.0