gitkwrapper.c

Go to the documentation of this file.
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   //gitk_log1("  dialog=0x%08lx",dialog);
00045   //gitk_log1("  dialog->callback_list=0x%08lx",dialog->callback_list);
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     /* we unconnect the callback in gitk_dialog_free()
00086     //-- iterate over callback list and free all callbacks
00087     if(dialog->callback_list) {
00088       GList* node=g_list_first(dialog->callback_list);
00089       GitkCallbackNodePtr callback_node;
00090     
00091       while(node) {
00092         callback_node=(GitkCallbackNodePtr)node->data;
00093         free(callback_node->widget_id);
00094         g_free(callback_node);
00095         node=g_list_next(node);
00096       }
00097       g_list_free(dialog->callback_list);
00098       dialog->callback_list=NULL;
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   //-- start the event-loop
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     // hide all dialogs
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     //-- switch the renderer
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     // re-show all dialog
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 }

Generated on Thu Oct 28 10:59:15 2004 for gitk by doxygen 1.3.6