[Glade-users] Closing windows properly.

Tristan Van Berkom tristan.van.berkom at gmail.com
Sun May 26 08:44:05 UTC 2013


On Sun, May 26, 2013 at 5:30 PM, dE <de.techno at gmail.com> wrote:
> On 05/26/13 12:46, Tristan Van Berkom wrote:
>>
>> On Sun, May 26, 2013 at 4:04 PM, dE <de.techno at gmail.com> wrote:
>>>
>>> I happens that whenever I get a window opened, and then I close it (no
>>> signal associated with close), and then again if that windows is opened,
>>> all
>>> I get is a small blank window.
>>>
>>> I doubt this's cause the window is not closed properly (default handler
>>> is
>>> not good enough).
>>>
>>> So what should be done? Thanks for the help!
>>
>> I don't exactly understand what is going wrong... but if you want to
>> handle
>> the event where a window is closed, you should handle the "delete-event"
>> signal on your window:
>>
>>
>> https://developer.gnome.org/gtk3/unstable/GtkWidget.html#GtkWidget-delete-event
>>
>> Cheers,
>>      -Tristan
>>
>>
>>> _______________________________________________
>>> Glade-users maillist  -  Glade-users at lists.ximian.com
>>> http://lists.ximian.com/mailman/listinfo/glade-users
>
>
> You mean this shouldn't happen?

No, I mean I have no idea what it is that is happening, I'm just guessing
that you need to receive an event for closing a window.

> Even if I do not have any event related to
> closing of the window,

You do have an event, it's "delete-event", only that you are not
handling that event.

> it should appear again if the same function is
> evoked? Here's the code --
>
> void msgs (char *msg) {
>     GtkWidget *msg_window;
>     msg_window = GTK_WIDGET(gtk_builder_get_object( build_object, "dialog1"
> ));
>     gtk_label_set_text_with_mnemonic ( detect_object ("label3"), msg );
>     gtk_widget_show ( msg_window );
> }

No, if the 'msg_window' here is closed, the default behaviour for the
'delete-event'
is to call gtk_widget_destroy(), so it will not exist again.

If you want to reuse it, you should handle the 'delete-event' signal
and return TRUE
from there (and probably call gtk_widget_hide() to hide the window
when it's deleted).

> I'm using the same build object as for the main window of the application.

You can do that but I would recommend you split up your glade file into multiple
files.

Also I would recommend you get rid of the GtkBuilder object directly after
using it.

> If this function is evoked more than twice in a single run, all windows
> except the 1st one will open properly, all subsequent windows will be blank.

That's correct, because once you close the window it's destroyed, unless
you override that behaviour by handling the 'delete-event' signal.

Common practice is also to just rebuild the dialog from it's own glade file
whenever you need it.

Cheers,
    -Tristan


More information about the Glade-users mailing list