Re: Dialogue Screen Placement

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks, John, that works great!

cheers,

richard

On Sep 27, 2006, at 1:01 PM, John Cupitt wrote:

> 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

[Index of Archives]     [Touch Screen Library]     [GIMP Users]     [Gnome]     [KDE]     [Yosemite News]     [Steve's Art]

  Powered by Linux