On 9/27/06, Richard Boaz <riboaz@xxxxxxxxx> wrote: > Below is a small program demonstrating my problem. Here's a working version of your prog. The main problem was that you were setting the position hint after showing the dialog. So when the WM was selecting a position, there was no position hint set by you. I noticed a couple of other minor things, though I guess you know these anyway and this is just a test prog: - use gtk_window_set_default_size() to set the start size for your main window - best to let the WM position the main window for you, rather than setting the CENTER hint (that's mostly for things like splash screens I think) - the dialog should be positioned with GTK_WIN_POS_CENTER_ON_PARENT - you need to use gtk_window_set_transient_for() to get the WM to preserve your main window / dialog stacking order ... this is especially important on win32 ----------------- #include <gtk/gtk.h> int nums[3] = { 0, 1, 2 }; void doDialogue (GtkButton * but, int *action) { static GtkWidget *dialogue; GtkWidget *button; switch (*action) { case 0: // make and realize dialogue widget if (!dialogue) { dialogue = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_transient_for (GTK_WINDOW (dialogue), GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (but)))); gtk_window_set_position (GTK_WINDOW (dialogue), GTK_WIN_POS_CENTER_ON_PARENT); g_signal_connect (dialogue, "destroy", G_CALLBACK (doDialogue), &nums[2]); button = gtk_button_new_with_label ("Cancel"); g_signal_connect ((button), "clicked", G_CALLBACK (doDialogue), &nums[1]); gtk_container_add (GTK_CONTAINER (dialogue), button); gtk_widget_show_all (dialogue); } gtk_widget_show (dialogue); break; case 1: // hide the dialogue gtk_widget_hide (dialogue); break; case 2: // dialogue has been destroyed, record dialogue = NULL; break; } } int main (int argc, char **argv) { GtkWidget *mainWin, *button; gtk_init (&argc, &argv); mainWin = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (mainWin, "destroy", G_CALLBACK (gtk_main_quit), NULL); button = gtk_button_new_with_label ("Dialogue"); g_signal_connect ((button), "clicked", G_CALLBACK (doDialogue), &nums[0]); gtk_container_add (GTK_CONTAINER (mainWin), button); gtk_window_set_default_size ( GTK_WINDOW (mainWin), 250, 250); gtk_widget_show_all (mainWin); gtk_main (); } --------------------- _______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gtk-list