大規模な (100 以上のファイル) 8 年前の GTK+ アプリケーションを Red Hat 2.4 から Ubuntu Lucid に移植しています。これは産業用コントロール パネル用のフル スクリーン アプリケーションであり、オペレータは基盤となる OS にアクセスできません。
メイン アプリケーションの前に表示されるさまざまなポップアップ (タッチ キーボードなど) があります。ただし、Ubuntu Lucid でコンパイルして実行すると、ポップアップはメイン画面の後ろに隠れたままになります。
アプリケーションと同じ GTK+ 呼び出しを使用するこのプログラムは、問題を示しています。
#include <gtk/gtk.h>
#include <glib.h>
#include <glib/gprintf.h>
int main(int argc, char *argv[])
{
GtkWidget *mainwindow;
GtkWidget *popwindow;
GtkWidget *label;
gtk_init(&argc, &argv);
mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(mainwindow), GTK_WIN_POS_CENTER);
gtk_window_set_decorated(GTK_WINDOW(mainwindow), FALSE);
gtk_window_fullscreen(GTK_WINDOW(mainwindow));
gtk_widget_show_all(mainwindow);
popwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_keep_above(GTK_WINDOW(popwindow), TRUE);
gtk_window_set_modal(GTK_WINDOW(popwindow), TRUE);
gtk_window_set_decorated (GTK_WINDOW (popwindow), FALSE);
gtk_window_set_resizable (GTK_WINDOW(popwindow), FALSE);
gtk_window_set_position( GTK_WINDOW (popwindow), (GtkWindowPosition)GTK_WIN_POS_CENTER);
gtk_window_set_transient_for(GTK_WINDOW(popwindow),GTK_WINDOW(mainwindow));
label = gtk_label_new(g_strdup_printf ("My GTK version is %d.%d.%d", gtk_major_version, gtk_minor_version, gtk_micro_version));
gtk_container_add(GTK_CONTAINER(popwindow), label);
gtk_widget_show(label);
gtk_widget_show(popwindow);
gtk_main();
return 0;
}
ポップアップは非表示のままで、Alt-Tab で別のウィンドウ (メインウィンドウではない) に移動した場合にのみ表示されます。gtk_window_set_transient_for() の呼び出しを削除すると、ポップアップは表示されますが、デスクトップ パネルも表示され、基になるオペレーティング システムにアクセスできます。
目的の動作を取得する方法はありますか? Ubuntu Lucid は GTK+ 2.20.1 を使用します
助けてくれてありがとう
リチャード