Re: Dialogue Screen Placement

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

 



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