[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