2

を使用してウィンドウの位置を設定したい gtk_window_set_position

しかし、ウィンドウが作成された後はgtk_window_set_position有効にならないようです。ウィンドウが表示された後、つまりボタンイベント
を呼び出す方法を知りたいですか?gtk_window_set_position

4

1 に答える 1

4

2 つのアプローチを実装する最小限の実例を書きました。1 つのアプローチは を使用gtk_window_moveし、もう1 つは を使用しgtk_window_set_positionます。

手元に gtk+ のリファレンスがあれば、コードは一目瞭然です。

#include <gtk/gtk.h>
#include <glib.h>

void
button1_clicked_cb (GtkWidget * widget, GtkWindow * window)
{
    GdkWindow *root;
    gint width, height, rwidth, rheight;

    gtk_window_get_size (window, &width, &height);
    root = gtk_widget_get_root_window (GTK_WIDGET (window));
    gdk_window_get_geometry (root, NULL, NULL, &rwidth,
                             &rheight);

    gtk_window_move (window, (rwidth - width) / 2,
                     (rheight - height) / 2);
}

void
button2_clicked_cb (GtkWidget * widget, GtkWindow * window)
{
    gtk_widget_hide (GTK_WIDGET (window));
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_widget_show_all (GTK_WIDGET (window));
}

int
main (int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *box;
    GtkWidget *button1;
    GtkWidget *button2;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    button1 = gtk_button_new_with_label ("approach 1");
    button2 = gtk_button_new_with_label ("approach 2");

    box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
    gtk_box_pack_start (GTK_BOX (box), button1, TRUE, TRUE,
                        10);
    gtk_box_pack_start (GTK_BOX (box), button2, TRUE, TRUE,
                        10);

    gtk_container_add (GTK_CONTAINER (window), box);
    gtk_widget_show_all (window);

    g_signal_connect (window, "destroy",
                      G_CALLBACK (gtk_main_quit), NULL);
    g_signal_connect (button1, "clicked",
                      G_CALLBACK (button1_clicked_cb),
                      window);
    g_signal_connect (button2, "clicked",
                      G_CALLBACK (button2_clicked_cb),
                      window);

    gtk_main ();

    return 0;
}
于 2013-07-26T18:41:10.077 に答える