Re: emitting a signal (deleting a window)
- From: Gus Koppel <gtk spamkiller bytechase cx>
- To: gtk-app-devel-list gnome org
- Subject: Re: emitting a signal (deleting a window)
- Date: Wed, 4 Feb 2004 23:27:27 +0100
Richard Gipps wrote:
I am having trouble making an application close when I use my
File->Exit menu. I have a File Exit signal handler:
void on_File_Exit_activate(GtkMenuItem* menuitem,GtkWidget* Main_wnd)
{
gtk_signal_emit_by_name(GTK_OBJECT(Main_wnd),
"delete_event");
}
which I thought would 'send' a delete_event to the main Window which
has the following signal handlers:
gboolean on_Event_Delete(GtkWidget* widget,GdkEvent* event,gpointer
user_data){
if(is_object_created == TRUE) //free memory allocated for the
CAD object (*object_delete_func_ptr)(network);
return(FALSE); //do not prevent window from being closed
(destroyed)}
void on_Event_Destroy(GtkWidget* widget,GdkEvent* event,gpointer
user_data){
gtk_main_quit();
}
This works correctly for the delete_event which is emitted when I
press the X in the corner of the window, but not using the File->Exit
menu. Any help would be much appreciated.
I use a different approach. I wrote an own function to delete any
window. It's apparently a bit more low level so presumably slightly
faster. My function not only accepts a GtkWindow but any widget within
the window to be closed. It'll determine the associated window by
itself. You could use this function instead of your
gtk_signal_emit_by_name () call and hopefully it should work.
I assume you have made sure that your on_File_Exit_activate () gets
called at all when you select the menu item?
void window_send_delete_event (GtkWidget *widget) {
GtkWindow *window;
GdkEvent event;
g_assert (widget);
while (widget->parent) {
widget = widget->parent; }
window = (GtkWindow *) widget;
// g_log (LOG_DOMAIN, G_LOG_LEVEL_DEBUG,
// "Sending delete event to window %s",
// gtk_widget_get_name ((GtkWidget *) window));
memset (&event, 0, sizeof (GdkEvent));
event.any.type = GDK_DELETE;
event.any.send_event = TRUE;
event.any.window = ((GtkWidget *) window)->window;
gtk_main_do_event (&event);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]