2014-02-06 110 views
2

我想打印小的警告消息。爲了實現這一點,我正在創建一個新窗口,並且我希望它在主窗口中居中。到目前爲止,我已嘗試使用GTK_WINDOW_POPUPGTK_WINDOW_TOPLEVEL設置其父母gtk_widget_set_parent,但沒有任何工作。如何在GTK的主窗口中居中對話窗口?

如何將窗口居中在主窗口上?

下面是該函數的代碼:

static void pop_warning(char *title, char *text) 
{ 
    GtkWidget *warning_window; 
    GtkWidget *box; 
    GtkWidget *label; 
    GtkWidget *button; 

    warning_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_title(GTK_WINDOW(warning_window), title); 
    g_signal_connect(GTK_WINDOW(warning_window), "destroy", G_CALLBACK(gtk_widget_destroy), NULL); 
    gtk_container_set_border_width(GTK_CONTAINER(warning_window), 20); 
    gtk_window_set_resizable(GTK_WINDOW(warning_window), FALSE);  

    //window is the main window 
    gtk_widget_set_parent(warning_window, window); 
    gtk_window_set_position(GTK_WINDOW(warning_window), GTK_WIN_POS_CENTER_ON_PARENT); 

    box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10); 
    gtk_container_add(GTK_CONTAINER(warning_window), box); 

    label = gtk_label_new(text); 
    gtk_box_pack_start(GTK_BOX(box), label, TRUE, FALSE, 0); 

    button = gtk_button_new_with_label("Ok"); 
    g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), warning_window); 
    gtk_box_pack_start(GTK_BOX(box), button, TRUE, FALSE, 0); 

    gtk_widget_show_all(warning_window);  
} 
+0

您可以添加屏幕截圖...以及您使用的是什麼窗口管理器? – drahnr

回答

2
gtk_window_set_position(GTK_WINDOW(warning_window), GTK_WIN_POS_CENTER_ON_PARENT); 

只有當你第一次調用

gtk_window_set_transient_for(GtkWindow *window, GtkWindow *parent); 

,如文檔中明確提到的作品。

你也可以嘗試使用沒有上述限制的GTK_WIN_POS_CENTER_ALWAYS - 至少不要按照文檔。

+0

我不知道對話做了同樣的事情,所以我刪除了我的答案。 – 2013Asker