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);
}
}