この動作は、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 コードベースでの呼び出しはこれら 2 つだけです。したがって、事後に「余分な」スタイルビットを変更しても役に立ちません。(「正しい」解決策は、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