[Initng-svn] r4343 - initng-gui/initng-conf-gtk/src
svn at initng.thinktux.net
svn at initng.thinktux.net
Sat Jun 3 13:15:36 CEST 2006
Author: jimmy
Date: Sat Jun 3 13:15:35 2006
New Revision: 4343
Modified:
initng-gui/initng-conf-gtk/src/ngehandler.c
initng-gui/initng-conf-gtk/src/ngehandler.h
initng-gui/initng-conf-gtk/src/serviceparser.c
Log:
Did some big commentng on ngehandler.c
Modified: initng-gui/initng-conf-gtk/src/ngehandler.c
==============================================================================
--- initng-gui/initng-conf-gtk/src/ngehandler.c (original)
+++ initng-gui/initng-conf-gtk/src/ngehandler.c Sat Jun 3 13:15:35 2006
@@ -21,40 +21,72 @@
#include "serviceparser.h"
#include <string.h>
+#include <assert.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
#include "initconf_globals.h"
-void initial_service_state(char *service, e_is is, int hidden, char *state) {
-
+void service_state(char *service, e_is is, int hidden, char *state, int update_screen) {
+
+ /* lock all other threads */
gdk_threads_enter();
+ /* get, service_list that is a GtkTreeView in the main windows containing the list of all services,
+ * defined in initng-conf-gtk.glade */
GtkTreeView *service_list = GTK_TREE_VIEW(glade_xml_get_widget(xml, "service_list"));
+
+ /* get, an pointer to the tree_model set in this list */
GtkTreeModelSort *sortmodel = GTK_TREE_MODEL_SORT(gtk_tree_view_get_model(service_list));
+
+ /* get, the child model, of the sortmodel used for filtering ? */
GtkTreeModelFilter *filtermodel = GTK_TREE_MODEL_FILTER(gtk_tree_model_sort_get_model(sortmodel));
+
+ /* get, an pointer to the child model of the filter ??? */
GtkTreeModel *service_model = gtk_tree_model_filter_get_model(filtermodel);
+
+ /*
+ * Itterator used to point out the correct row added by add_node in service_model that
+ * we are gonna modify.
+ */
GtkTreeIter iter;
- gchar *str_data;
-
+
+ /* the real data storage struct from serviceparser.h */
+ struct s_info *serviceinfo = NULL;
/* if we had to add a new entry to the tree .. */
+ /* add_node, defined in serviceparser.c */
if(add_node(GTK_TREE_STORE(service_model), &iter, service)) {
- struct s_info *serviceinfo = malloc(sizeof(struct s_info));
- serviceinfo->startline = NULL;
+
+ /* create som space for an s_info struct, using calloc to make sure newly allocated area is all NULL */
+ serviceinfo = calloc(1,sizeof(struct s_info));
+
+ /* dont know what this do, maby sets fuction col to "unknown" */
gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 1, _("unknown"),
2, NULL, 4, serviceinfo, -1);
- serviceinfo->type = UNKNOWN;
- serviceinfo->file_content = NULL;
- serviceinfo->fullname = malloc(strlen(service) + 1);
- strcpy(serviceinfo->fullname, service);
+
+ /* reset variable */
+ serviceinfo->type = UNKNOWN; /* todo, maby put UNKNOWN to 0 in the enum to mark it unset and remove this row? */
+
+ /* insert the service name */
+ serviceinfo->fullname = strdup(service);
+ } else {
+ /* Not newly allocated abow, this is not known */
+ gtk_tree_model_get(service_model, &iter, 4, &serviceinfo, -1);
}
-
- struct s_info *serviceinfo;
- gtk_tree_model_get(service_model, &iter, 4, &serviceinfo, -1);
+
+ /* abort program if not existant */
+ assert(serviceinfo);
+
+ /* update those entrys get fron nge calling this function */
serviceinfo->status_id = is;
serviceinfo->hidden = hidden;
- gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 2, state, -1);
+
+ /* set the state string to tree. When is state allocated?, shud it not be strdup(state)??
+ * NOTE: state pointer is not valid after this function returns, freed by ngeclient_event_free(e); */
+ gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 2, strdup(state), -1);
+
+ /* put nice little colors to the 4th cell of this tree depending on current state */
switch(is) {
case IS_UP:
gtk_tree_store_set(GTK_TREE_STORE(service_model), &iter, 3, "#AAFFAA", -1);
@@ -76,28 +108,26 @@
break;
}
+ /* flush the db */
gdk_flush();
+
+ /* Only update screen on request */
+ if(update_screen)
+ gtk_tree_model_filter_refilter(filtermodel);
+
+ /* leave the thread lock */
gdk_threads_leave();
}
-void service_change(char *service, e_is is, int hidden, char *state) {
- GtkTreeView *service_list = GTK_TREE_VIEW(glade_xml_get_widget(xml, "service_list"));
- GtkTreeModelSort *sortmodel = GTK_TREE_MODEL_SORT(gtk_tree_view_get_model(service_list));
- GtkTreeModelFilter *filtermodel = GTK_TREE_MODEL_FILTER(gtk_tree_model_sort_get_model(sortmodel));
-
- //fprintf(stderr, "service_change, service=%s, state=%s\n", service, state);
- initial_service_state(service, is, hidden, state);
- gdk_threads_enter();
- gtk_tree_model_filter_refilter(filtermodel);
- gdk_threads_leave();
-}
-
+/* when all initial_states for services are sent, this signal is set, and then
+ * we can refilter and that will update screen */
void initial_state_finished(void) {
gdk_threads_enter();
GtkTreeView *service_list = GTK_TREE_VIEW(glade_xml_get_widget(xml, "service_list"));
GtkTreeModelSort *sortmodel = GTK_TREE_MODEL_SORT(gtk_tree_view_get_model(service_list));
GtkTreeModelFilter *filtermodel = GTK_TREE_MODEL_FILTER(gtk_tree_model_sort_get_model(sortmodel));
+ /* as i understand, refilter will update screen */
gtk_tree_model_filter_refilter(filtermodel);
gdk_threads_leave();
}
@@ -125,24 +155,35 @@
//Avoid nasty race scenarios
sleep(1);
- /* get events, and wait for 999999999 microseconds */
- while((e=get_next_event(c, 99999999)))
+ /* continue for ever */
+ while(1)
{
+ /* get events, and wait for 999999999 microseconds */
+ e=get_next_event(c, 99999999);
+
+ /* and if it timed out, loop and try again */
+ if(!e)
+ continue;
+
/* do for every event that comes in */
switch (e->state_type)
{
case SERVICE_STATE_CHANGE:
- service_change(e->payload.service_state_change.service,
+ /* this will update screen on event */
+ service_state(e->payload.service_state_change.service,
e->payload.service_state_change.is,
e->payload.service_state_change.hidden,
- e->payload.service_state_change.state_name);
+ e->payload.service_state_change.state_name,
+ 1);
break;
case INITIAL_SERVICE_STATE_CHANGE:
- initial_service_state(e->payload.service_state_change.service,
+ /* this will not, until initial_state_finished is sent */
+ service_state(e->payload.service_state_change.service,
e->payload.service_state_change.is,
e->payload.service_state_change.hidden,
- e->payload.service_state_change.state_name);
+ e->payload.service_state_change.state_name,
+ 0);
break;
case INITIAL_STATE_FINISHED:
initial_state_finished();
Modified: initng-gui/initng-conf-gtk/src/ngehandler.h
==============================================================================
--- initng-gui/initng-conf-gtk/src/ngehandler.h (original)
+++ initng-gui/initng-conf-gtk/src/ngehandler.h Sat Jun 3 13:15:35 2006
@@ -24,8 +24,7 @@
#include "libngeclient.h"
#include "initng_nge.h"
-void service_change(char *service, e_is is, int hidden, char *state);
-void initial_service_state(char *service, e_is is, int hidden, char *state);
+void service_state(char *service, e_is is, int hidden, char *state, int update_screen);
void initial_state_finished(void);
void *nge_thread(void *args);
Modified: initng-gui/initng-conf-gtk/src/serviceparser.c
==============================================================================
--- initng-gui/initng-conf-gtk/src/serviceparser.c (original)
+++ initng-gui/initng-conf-gtk/src/serviceparser.c Sat Jun 3 13:15:35 2006
@@ -176,8 +176,7 @@
gboolean add_recursive(GtkTreeStore *store, GtkTreeIter *parent_iter,
GtkTreeIter *iter, const char *name) {
- char *rest = malloc(strlen(name) + 1);
- strcpy(rest, name);
+ char *rest = strdup(name);
char *tok = path_tokenizer(&rest);
gboolean was_added = FALSE;
More information about the Initng-svn
mailing list