Files | |
| file | gnc-event.h |
| engine event handling interface | |
Typedefs | |
| typedef void(* | GNCEngineEventHandler )(GUID *entity, QofIdType type, GNCEngineEventType event_type, gpointer user_data) |
Enumerations | |
| enum | GNCEngineEventType { GNC_EVENT_NONE = 0, GNC_EVENT_CREATE = 1 << 0, GNC_EVENT_MODIFY = 1 << 1, GNC_EVENT_DESTROY = 1 << 2, GNC_EVENT_ADD = 1 << 3, GNC_EVENT_REMOVE = 1 << 4, GNC_EVENT_ALL = 0xff } |
Functions | |
| gint | gnc_engine_register_event_handler (GNCEngineEventHandler handler, gpointer user_data) |
| void | gnc_engine_unregister_event_handler (gint handler_id) |
| void | gnc_engine_gen_event (QofEntity *entity, GNCEngineEventType event_type) |
| void | gnc_engine_suspend_events (void) |
| void | gnc_engine_resume_events (void) |
|
|
GNCEngineEventHandler Handler invoked when an engine event occurs.
Definition at line 61 of file gnc-event.h. |
|
||||||||||||
|
gnc_engine_generate_event Invoke all registered event handlers using the given arguments. GNC_EVENT_CREATE events should be generated after the object has been created and registered in the engine entity table. GNC_EVENT_MODIFY events should be generated whenever any data member or submember (i.e., splits) is changed. GNC_EVENT_DESTROY events should be called before the object has been destroyed or removed from the entity table.
Definition at line 203 of file gnc-event.c. 00204 { 00205 if (!entity) 00206 return; 00207 00208 if (suspend_counter) 00209 return; 00210 00211 gnc_engine_generate_event_internal (entity, event_type); 00212 }
|
|
||||||||||||
|
Implementations Definition at line 54 of file gnc-event.c. 00056 { 00057 HandlerInfo *hi; 00058 gint handler_id; 00059 GList *node; 00060 00061 ENTER ("(handler=%p, data=%p)", handler, user_data); 00062 /* sanity check */ 00063 if (!handler) 00064 { 00065 PERR ("no handler specified"); 00066 return 0; 00067 } 00068 00069 /* look for a free handler id */ 00070 handler_id = next_handler_id; 00071 node = handlers; 00072 00073 while (node) 00074 { 00075 hi = node->data; 00076 00077 if (hi->handler_id == handler_id) 00078 { 00079 handler_id++; 00080 node = handlers; 00081 continue; 00082 } 00083 00084 node = node->next; 00085 } 00086 00087 /* Found one, add the handler */ 00088 hi = g_new0 (HandlerInfo, 1); 00089 00090 hi->handler = handler; 00091 hi->user_data = user_data; 00092 hi->handler_id = handler_id; 00093 00094 handlers = g_list_prepend (handlers, hi); 00095 00096 /* Update id for next registration */ 00097 next_handler_id = handler_id + 1; 00098 00099 LEAVE ("(handler=%p, data=%p) handler_id=%d", handler, user_data, handler_id); 00100 return handler_id; 00101 }
|
|
|
gnc_engine_resume_events Resume engine event generation. Definition at line 144 of file gnc-event.c. 00145 { 00146 if (suspend_counter == 0) 00147 { 00148 PERR ("suspend counter underflow"); 00149 return; 00150 } 00151 00152 suspend_counter--; 00153 }
|
|
|
gnc_engine_suspend_events Suspend all engine events. This function may be called multiple times. To resume event generation, an equal number of calls to gnc_engine_resume_events must be made. Definition at line 133 of file gnc-event.c. 00134 { 00135 suspend_counter++; 00136 00137 if (suspend_counter == 0) 00138 { 00139 PERR ("suspend counter overflow"); 00140 } 00141 }
|
|
|
gnc_engine_unregister_event_handler Unregister an engine event handler.
Definition at line 104 of file gnc-event.c. 00105 { 00106 GList *node; 00107 00108 ENTER ("(handler_id=%d)", handler_id); 00109 for (node = handlers; node; node = node->next) 00110 { 00111 HandlerInfo *hi = node->data; 00112 00113 if (hi->handler_id != handler_id) 00114 continue; 00115 00116 /* Found it, take out of list */ 00117 handlers = g_list_remove_link (handlers, node); 00118 00119 LEAVE ("(handler_id=%d) handler=%p data=%p", handler_id, hi->handler, hi->user_data); 00120 /* safety */ 00121 hi->handler = NULL; 00122 00123 g_list_free_1 (node); 00124 g_free (hi); 00125 00126 return; 00127 } 00128 00129 PERR ("no such handler: %d", handler_id); 00130 }
|
1.4.3-20050530