Menu

#1 get dialog reference on GITK_EVENT_ON_CLOSE

open
nobody
None
7
2004-11-08
2004-11-08
No

To overcome the 'bug' of the missing dialog reference
when gtk-renderer triggers GITK_EVENT_ON_CLOSE I've
worked out a possible solution after studiing the
sources a little bit. Here it is:

file 'gitk-renderer-gtk/gitkrlayout.c'

void gitkr_dialog_generate_layout(GitkDialogPtr
dialog) {
...
//-- generate top-level container (window)
gtk_window_set_title(window,layout->title);

gtk_container_set_border_width(GTK_CONTAINER(window), 10);
g_signal_connect(GTK_OBJECT(window),
"delete-event",G_CALLBACK(sighandler_window_on_close),NULL);
...
}

needs to be updated to

void gitkr_dialog_generate_layout(GitkDialogPtr
dialog) {
...
//-- generate top-level container (window)
gtk_window_set_title(window,layout->title);

gtk_container_set_border_width(GTK_CONTAINER(window), 10);
g_signal_connect(GTK_OBJECT(window),
"delete-event",G_CALLBACK(sighandler_window_on_close),dialog);
...
}

file 'gitk-renderer-gtk/gitkreventloop.c'

gint sighandler_window_on_close(GtkWidget
*gtk_widget, GdkEvent *gdkEvent, gpointer data) {
GitkEvent event;

gitk_log_intro();
event.type=GITK_EVENT_TYPE_ON_CLOSE;
event.data=NULL;
if(gitk_dialog_process_event(NULL,NULL,&event)) {
gitk_log(" accepted");
//gitk_event_loop_end();
return(FALSE);
}
else {
gitk_log(" rejected");
return(TRUE);
}
}

needs to be updated to

gint sighandler_window_on_close(GtkWidget
*gtk_widget, GdkEvent *gdkEvent, gpointer data) {
GitkEvent event;
GitkDialogPtr dialog;

g_assert(data!=NULL);

gitk_log_intro();
dialog=(GitkDialogPtr)data;
event.type=GITK_EVENT_TYPE_ON_CLOSE;
event.data=NULL;
if(gitk_dialog_process_event(dialog,NULL,&event)) {
gitk_log(" accepted");
//gitk_event_loop_end();
return(FALSE);
}
else {
gitk_log(" rejected");
return(TRUE);
}
}

Discussion

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.