gtk - fermer la fenêtre de formulaire avec le bouton C

J'ai une fenêtre principale avec un menu qui ouvre une autre fenêtre. Cette fenêtre secondaire a un bouton Fermer. Ce bouton a le signal clicked connecté. Mon problème est que je ne sais pas comment fermer/détruire que de la fenêtre parent. J'ai essayé avec gtk_widget_destroy, mais une erreur s'affiche parce que la fenêtre n'est pas un gadget .... Je n'ai pas trouvé de fonction pour détruire la fenêtre parent ....

Quelqu'un peut me montrer le chemin, s'il vous plaît?
Merci à l'avance.

-----------------------------------------------

Ok. Je poste un morceau de code. Lorsque j'exécute le programme, je clique dans "fenêtre Ouverte" sur le bouton. Une nouvelle fenêtre s'ouvre avec un bouton "Fermer". Si je clique sur "Fermer" - je obtenir de l'erreur suivante dans le terminal: (Windows:13801): Gtk-CRITICAL **: gtk_widget_destroy: assertion `GTK_IS_WIDGET (widget)' failed

Le code est:

#include <stdlib.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>

void open_window(GtkWidget *widget, gpointer window);
void close_window(GtkWidget *widget, gpointer window);

int main( int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *fixed;
    GtkWidget *button;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Windows");
    gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

    fixed = gtk_fixed_new();
    gtk_container_add(GTK_CONTAINER(window), fixed);

    button = gtk_button_new_with_label("Open window");

    gtk_fixed_put(GTK_FIXED(fixed), button, 50, 50);
    gtk_widget_set_size_request(button, 80, 35);

    g_signal_connect(G_OBJECT(button), "clicked",
                     G_CALLBACK(open_window), G_OBJECT(window));

    g_signal_connect_swapped(G_OBJECT(window), "destroy",
                             G_CALLBACK(gtk_main_quit), NULL);

    gtk_widget_show_all(window);

    gtk_main();

    return 0;

}


void open_window(GtkWidget *widget, gpointer window)
{
    GtkBuilder *builder;
    GtkWidget *secondWindow = NULL;

    builder = gtk_builder_new ();
    gtk_builder_add_from_file (builder, "secondWindow.glade", NULL);

    secondWindow = GTK_WIDGET (gtk_builder_get_object (builder, "secondWindow"));

    gtk_builder_connect_signals (builder, NULL);

    g_object_unref (G_OBJECT (builder));

    gtk_window_set_modal(GTK_WINDOW(secondWindow), TRUE);
    gtk_widget_show_all(secondWindow);
}

void close_window(GtkWidget *widget, gpointer window)
{
    gtk_widget_destroy(GTK_WIDGET(window));
}

Dans le fichier "secondWindow.la clairière" est définie d'une fenêtre, une table et un bouton placé dans la cellule du milieu de la table. Aussi, il est défini une poignée pour la "clique" de l'événement bouton nommé "close_window".

Lien vers le fichier glade si quelqu'un veut l'exécuter: https://sites.google.com/site/marvalsiteimages/secondWindow.glade

J'espère que cela pourrait vous aider à comprendre mon problème.
Merci.

-------------------------------------------------

Code Final en fonction de la réponse:

void open_window(GtkWidget *widget, gpointer window)
{
    GtkBuilder *builder;
    GtkWidget *secondWindow = NULL;
    GtkWidget *closeButton = NULL;

    builder = gtk_builder_new ();
    gtk_builder_add_from_file (builder, "secondWindow.glade", NULL);

    secondWindow = GTK_WIDGET (gtk_builder_get_object (builder, "secondWindow"));
    closeButton = GTK_WIDGET (gtk_builder_get_object (builder, "closeWindowButton"));

    g_signal_connect (G_OBJECT (closeButton),
                      "clicked",
                      G_CALLBACK (close_window),
                      G_OBJECT (secondWindow)); //here is the magic: the callback will get the window to close

    g_object_unref (G_OBJECT (builder));

    gtk_window_set_modal(GTK_WINDOW(secondWindow), TRUE);
    gtk_widget_show_all(secondWindow);
}
GtkWindow est un GtkWidget. Vous pouvez le masquer.
À partir d'une expérience utilisateur point de vue, avoir un clic sur une des fenêtres secondaires de clôture, le premier semble un peu bizarre. Qu'essayez-vous de réaliser? Il peut y avoir une meilleure façon de le faire. Veuillez préciser également vous GTK version.
Par la voie, gtk_widget_destroy sur un GtkWindow devrait fonctionner, comme GtkWindow est dérivé de GtkWidget. Merci de nous montrer un peu de code.
Il est le parent de la fenêtre du bouton fermer. Donc je voudrais fermer la deuxième fenêtre avec son bouton ... pas le principal ...
Puis gtk_widget_destroy est le chemin à parcourir. Merci de nous donner un peu de code.

OriginalL'auteur NEBUC | 2012-09-27