00001
00012 #define GITK_LIB_C
00013 #define GITK_WRAPPER_C
00014
00015 #include "gitkincludes.h"
00016
00017 static void gitk_event_loop_exchange(void);
00018
00028 gboolean gitk_dialog_show(GitkDialogPtr const dialog,gboolean const modal) {
00029 GitkEvent event;
00030 gboolean result=FALSE;
00031
00032 g_assert(dialog);
00033
00034 gitk_log("gitk_dialog_show()");
00035
00038 dialog->changed=TRUE;
00039 dialog->priority=gitk_context_get_highest_used_priority();
00040 if(modal) dialog->priority++;
00041 gitk_dialog_list=g_list_append(gitk_dialog_list,dialog);
00042
00043 gitk_log1("gitk_dialog_list =%p",gitk_dialog_list);
00044
00045
00046
00047 gitk_renderer->gitkr_dialog_show(dialog);
00048
00049 event.type=GITK_EVENT_TYPE_ON_DIALOG_SHOW;
00050 event.data=dialog;
00051 gitk_log("global_on_dialog_show");
00052 if(gitk_dialog_process_event(dialog,NULL,&event)) {
00053 gitk_log(" accepted");
00054 result=TRUE;
00055 }
00056 else {
00057 gitk_log(" rejected");
00058 }
00059 return(result);
00060 }
00061
00067 void gitk_dialog_hide(GitkDialogPtr const dialog) {
00068 GitkEvent event;
00069
00070 g_assert(dialog);
00071
00072 gitk_log("gitk_dialog_hide()");
00073
00076 event.type=GITK_EVENT_TYPE_ON_DIALOG_HIDE;
00077 event.data=dialog;
00078 gitk_log("global_on_dialog_hide");
00079 if(gitk_dialog_process_event(dialog,NULL,&event)) {
00080 gitk_log(" accepted");
00081
00082 gitk_renderer->gitkr_dialog_hide(dialog);
00083
00084 gitk_dialog_list=g_list_remove(gitk_dialog_list,dialog);
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 }
00102 else {
00103 gitk_log(" rejected");
00104 }
00105 }
00106
00111 void gitk_event_loop_start(void) {
00112 gitk_log_intro();
00113
00114 exchange_event_loop=TRUE;
00115
00116 while(exchange_event_loop) {
00117 exchange_event_loop=FALSE;;
00118 gitk_renderer->gitkr_event_loop_start();
00119 gitk_log("leaving event-loop");
00120 if(exchange_event_loop) gitk_event_loop_exchange();
00121 }
00122
00123 gitk_log_outro();
00124 }
00125
00130 void gitk_event_loop_end(void) {
00131 gitk_log_intro();
00132 gitk_renderer->gitkr_event_loop_end();
00133 gitk_log_outro();
00134 }
00135
00141 static void gitk_event_loop_exchange(void) {
00142 guint fake_argc=1;
00143 gchar *fake_arg0="libgitk";
00144 gchar *fake_argv[1];
00145 gchar **fake_argvptr;
00146 GList* node;
00147 GitkDialogPtr dialog;
00148
00149 fake_argv[0]=fake_arg0;
00150 fake_argvptr=fake_argv;
00151
00152 gitk_log1("### setrenderer: new renderer will be \"%s\"###\n",gitk_renderer_name);
00153
00154
00155 node=g_list_first(gitk_dialog_list);
00156 while(node) {
00157 dialog=(GitkDialogPtr)node->data;
00158 gitk_renderer->gitkr_dialog_hide(dialog);
00159 gitk_dialog_invalidate(dialog);
00160 node=g_list_next(node);
00161 }
00162
00163 gitk_log("### setrenderer : all dialogs invalidated and hidden ###\n");
00164
00165
00166 gitk_renderer_done();
00167 gitk_renderer_activate(&fake_argc,&fake_argvptr);
00168 gitk_init_xsl_domain();
00169 gitk_init_xsl_style();
00170
00171 gitk_log("### setrenderer : new renderer activated ###\n");
00172
00173
00174 node=g_list_first(gitk_dialog_list);
00175 while(node) {
00176 dialog=(GitkDialogPtr)node->data;
00177 gitk_renderer->gitkr_dialog_show(dialog);
00178 node=g_list_next(node);
00179 }
00180
00181 gitk_log("### setrenderer : all dialog are visible again ###\n");
00182 }