[Initng-svn] r4338 - initng-gui/initng-conf-gtk/src

svn at initng.thinktux.net svn at initng.thinktux.net
Fri Jun 2 10:52:14 CEST 2006


Author: danne
Date: Fri Jun  2 10:52:12 2006
New Revision: 4338

Modified:
   initng-gui/initng-conf-gtk/src/callbacks.c
   initng-gui/initng-conf-gtk/src/initng-conf-gtk.glade
   initng-gui/initng-conf-gtk/src/ngehandler.c
   initng-gui/initng-conf-gtk/src/rlparser.c
   initng-gui/initng-conf-gtk/src/serviceparser.c
   initng-gui/initng-conf-gtk/src/serviceparser.h

Log:
Darn, this list->tree conversion is much work! It's getting better, but it's not stable yet...


Modified: initng-gui/initng-conf-gtk/src/callbacks.c
==============================================================================
--- initng-gui/initng-conf-gtk/src/callbacks.c	(original)
+++ initng-gui/initng-conf-gtk/src/callbacks.c	Fri Jun  2 10:52:12 2006
@@ -31,7 +31,7 @@
 #include "initconf_globals.h"
 
 gboolean cleanup_and_quit() {
-//Add code to clean up stuff and free memory here!!!
+  //Add code to clean up stuff and free memory here!!!
   GtkWidget *initconf_app, *dialog, *save_button;
 
   if(!xml)
@@ -135,65 +135,73 @@
   GtkWidget *zap_button = glade_xml_get_widget(xml, "zap_button");
   GtkWidget *edit_button = glade_xml_get_widget(xml, "edit_button");
   GtkTreeSelection *selected = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
-  gchar *service_name;
   struct s_info *serviceinfo;
 
   gtk_tree_selection_get_selected(selected, &service_model, &service_iter);
-  gtk_tree_model_get(service_model, &service_iter, 0, &service_name, 4, &serviceinfo, -1);
+  gtk_tree_model_get(service_model, &service_iter, 4, &serviceinfo, -1);
 
-  gtk_widget_set_sensitive(edit_button, TRUE);
   if(serviceinfo) {
-  switch(serviceinfo->status_id) {
-  case IS_UP:
-    gtk_widget_set_sensitive(start_button, FALSE);
-    gtk_widget_set_sensitive(stop_button, TRUE);
-    gtk_widget_set_sensitive(restart_button, TRUE);
-    gtk_widget_set_sensitive(zap_button, TRUE);
-    break;
-  case IS_DOWN:
-    gtk_widget_set_sensitive(start_button, TRUE);
-    gtk_widget_set_sensitive(stop_button, FALSE);
-    gtk_widget_set_sensitive(restart_button, FALSE);
-    gtk_widget_set_sensitive(zap_button, TRUE);
-    break;
-  case IS_FAILED:
-  case IS_STARTING:
-  case IS_STOPPING:
-  case IS_WAITING:
-    gtk_widget_set_sensitive(start_button, FALSE);
-    gtk_widget_set_sensitive(stop_button, FALSE);
-    gtk_widget_set_sensitive(restart_button, FALSE);
-    gtk_widget_set_sensitive(zap_button, TRUE);
-    break;
-  default:
-    gtk_widget_set_sensitive(start_button, TRUE);
-    gtk_widget_set_sensitive(stop_button, FALSE);
-    gtk_widget_set_sensitive(restart_button, FALSE);
-    gtk_widget_set_sensitive(zap_button, FALSE);
-    break;
-  }
-  }
-
-  runlevel_model = gtk_tree_view_get_model(runlevel_list);
-  if(runlevel_model) {
-    gboolean valid = gtk_tree_model_get_iter_first(runlevel_model, &runlevel_iter);
-
-    while(valid) {
-      gchar *str_data;
-      gtk_tree_model_get(runlevel_model, &runlevel_iter, 0, &str_data, -1);
-      if(!strcmp(str_data, service_name)) {
+    switch(serviceinfo->status_id) {
+    case IS_UP:
+      gtk_widget_set_sensitive(start_button, FALSE);
+      gtk_widget_set_sensitive(stop_button, TRUE);
+      gtk_widget_set_sensitive(restart_button, TRUE);
+      gtk_widget_set_sensitive(zap_button, TRUE);
+      gtk_widget_set_sensitive(edit_button, TRUE);
+      break;
+    case IS_DOWN:
+      gtk_widget_set_sensitive(start_button, TRUE);
+      gtk_widget_set_sensitive(stop_button, FALSE);
+      gtk_widget_set_sensitive(restart_button, FALSE);
+      gtk_widget_set_sensitive(zap_button, TRUE);
+      gtk_widget_set_sensitive(edit_button, TRUE);
+      break;
+    case IS_FAILED:
+    case IS_STARTING:
+    case IS_STOPPING:
+    case IS_WAITING:
+      gtk_widget_set_sensitive(start_button, FALSE);
+      gtk_widget_set_sensitive(stop_button, FALSE);
+      gtk_widget_set_sensitive(restart_button, FALSE);
+      gtk_widget_set_sensitive(zap_button, TRUE);
+      gtk_widget_set_sensitive(edit_button, TRUE);
+      break;
+    default:
+      gtk_widget_set_sensitive(start_button, TRUE);
+      gtk_widget_set_sensitive(stop_button, FALSE);
+      gtk_widget_set_sensitive(restart_button, FALSE);
+      gtk_widget_set_sensitive(zap_button, FALSE);
+      gtk_widget_set_sensitive(edit_button, TRUE);
+      break;
+    }
+    if(!serviceinfo->file_content) {
+      gtk_widget_set_sensitive(edit_button, FALSE);
+    }
+    runlevel_model = gtk_tree_view_get_model(runlevel_list);
+    if(runlevel_model) {
+      gboolean valid = gtk_tree_model_get_iter_first(runlevel_model, &runlevel_iter);
+      
+      while(valid) {
+	gchar *str_data;
+	gtk_tree_model_get(runlevel_model, &runlevel_iter, 0, &str_data, -1);
+	if(!strcmp(serviceinfo->fullname, str_data)) {
+	  g_free(str_data);
+	  break;
+	}
 	g_free(str_data);
-	break;
+	valid = gtk_tree_model_iter_next(runlevel_model, &runlevel_iter);
       }
-      g_free(str_data);
-      valid = gtk_tree_model_iter_next(runlevel_model, &runlevel_iter);
+      //Only enable the add button if chosen service wasn't already found in runlevel list
+      gtk_widget_set_sensitive(add_button, !valid);
     }
-    
-    //Only enable the add button if chosen service wasn't already found in runlevel list
-    gtk_widget_set_sensitive(add_button, !valid);
+  } else {
+      gtk_widget_set_sensitive(start_button, FALSE);
+      gtk_widget_set_sensitive(stop_button, FALSE);
+      gtk_widget_set_sensitive(restart_button, FALSE);
+      gtk_widget_set_sensitive(zap_button, FALSE);
+      gtk_widget_set_sensitive(edit_button, FALSE);
+      gtk_widget_set_sensitive(add_button, FALSE);
   }
-
-  g_free(service_name);
 }
 
 void on_runlevel_list_cursor_changed (GtkTreeView *treeview, gpointer user_data)
@@ -339,13 +347,12 @@
   GtkTreeIter serviceiter;
   GtkTreeSelection *selected;
   GtkTreeModel *servicemodel;
-  gchar *servicename;
+  struct s_info *serviceinfo;
 
   selected = gtk_tree_view_get_selection(GTK_TREE_VIEW(service_list));
   if(gtk_tree_selection_get_selected(selected, &servicemodel, &serviceiter)) {
-    gtk_tree_model_get (servicemodel, &serviceiter, 0, &servicename, -1);
-    stop_service(servicename);
-    g_free(servicename);
+    gtk_tree_model_get (servicemodel, &serviceiter, 4, &serviceinfo, -1);
+    stop_service(serviceinfo->fullname);
   }
 }
 
@@ -356,13 +363,12 @@
   GtkTreeIter serviceiter;
   GtkTreeSelection *selected;
   GtkTreeModel *servicemodel;
-  gchar *servicename;
+  struct s_info *serviceinfo;
 
   selected = gtk_tree_view_get_selection(GTK_TREE_VIEW(service_list));
   if(gtk_tree_selection_get_selected(selected, &servicemodel, &serviceiter)) {
-    gtk_tree_model_get (servicemodel, &serviceiter, 0, &servicename, -1);
-    start_service(servicename);
-    g_free(servicename);
+    gtk_tree_model_get (servicemodel, &serviceiter, 4, &serviceinfo, -1);
+    start_service(serviceinfo->fullname);
   }
 }
 
@@ -373,13 +379,12 @@
   GtkTreeIter serviceiter;
   GtkTreeSelection *selected;
   GtkTreeModel *servicemodel;
-  gchar *servicename;
+  struct s_info *serviceinfo;
 
   selected = gtk_tree_view_get_selection(GTK_TREE_VIEW(service_list));
   if(gtk_tree_selection_get_selected(selected, &servicemodel, &serviceiter)) {
-    gtk_tree_model_get (servicemodel, &serviceiter, 0, &servicename, -1);
-    restart_service(servicename);
-    g_free(servicename);
+    gtk_tree_model_get (servicemodel, &serviceiter, 4, &serviceinfo, -1);
+    restart_service(serviceinfo->fullname);
   }
 }
 
@@ -389,13 +394,12 @@
   GtkTreeIter serviceiter;
   GtkTreeSelection *selected;
   GtkTreeModel *servicemodel;
-  gchar *servicename;
+  struct s_info *serviceinfo;
 
   selected = gtk_tree_view_get_selection(GTK_TREE_VIEW(service_list));
   if(gtk_tree_selection_get_selected(selected, &servicemodel, &serviceiter)) {
-    gtk_tree_model_get(servicemodel, &serviceiter, 0, &servicename, -1);
-    zap_service(servicename);
-    g_free(servicename);
+    gtk_tree_model_get(servicemodel, &serviceiter, 4, &serviceinfo, -1);
+    zap_service(serviceinfo->fullname);
   }
 }
 
@@ -418,8 +422,12 @@
 
   selected = gtk_tree_view_get_selection(GTK_TREE_VIEW(service_list));
   if(gtk_tree_selection_get_selected(selected, &servicemodel, &serviceiter)) {
-    gtk_tree_model_get(servicemodel, &serviceiter, 0, &servicename, -1);
-    service_log(servicename);
+    struct s_info *serviceinfo;
+    gtk_tree_model_get(servicemodel, &serviceiter, 0, &servicename, 4, &serviceinfo, -1);
+    if(serviceinfo)
+      service_log(servicename);
+    else
+      service_log(NULL);
     g_free(servicename);
   } else {
     service_log(NULL);

Modified: initng-gui/initng-conf-gtk/src/initng-conf-gtk.glade
==============================================================================
--- initng-gui/initng-conf-gtk/src/initng-conf-gtk.glade	(original)
+++ initng-gui/initng-conf-gtk/src/initng-conf-gtk.glade	Fri Jun  2 10:52:12 2006
@@ -899,6 +899,7 @@
 	      <property name="visible">True</property>
 	      <property name="items" translatable="yes">Show all
 Show only active
+Show only failed
 Show only runlevels</property>
 	      <property name="add_tearoffs">False</property>
 	      <property name="focus_on_click">True</property>

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	Fri Jun  2 10:52:12 2006
@@ -36,27 +36,15 @@
   GtkTreeIter iter;
   gchar *str_data;
 
-  //fprintf(stderr, "initial_service_state, service=%s, state=%s\n", service, state);
-  gboolean valid = gtk_tree_model_get_iter_first(service_model, &iter);
-  while(valid) {
-    gtk_tree_model_get(service_model, &iter, 0, &str_data, -1);
-    if(str_data && !strcmp(str_data, service)) {
-      g_free(str_data);
-      break;
-    }
-    g_free(str_data);
-    valid = gtk_tree_model_iter_next(service_model, &iter);
-  }
-
-  if(!valid) {
+  if(add_node(GTK_TREE_STORE(service_model), &iter, service)) {
     struct s_info *serviceinfo = malloc(sizeof(struct s_info));
     serviceinfo->startline = NULL;
-    add_recursive(GTK_TREE_STORE(service_model), NULL, &iter, service, serviceinfo);
-    //gtk_list_store_append (GTK_LIST_STORE(service_model), &iter);
     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);
   }
 
   struct s_info *serviceinfo;

Modified: initng-gui/initng-conf-gtk/src/rlparser.c
==============================================================================
--- initng-gui/initng-conf-gtk/src/rlparser.c	(original)
+++ initng-gui/initng-conf-gtk/src/rlparser.c	Fri Jun  2 10:52:12 2006
@@ -131,18 +131,22 @@
     gtk_editable_set_position(GTK_EDITABLE(add_service_name_entry), -1);
     glade_xml_signal_autoconnect(xml_add_service);
     free(newname);
-  }
+  } else {
+    gtk_list_store_append (rlstore, &rliter);
+    gtk_list_store_set (rlstore, &rliter, 0, name, -1);
 
-  gtk_list_store_append (rlstore, &rliter);
-  gtk_list_store_set (rlstore, &rliter, 0, name, -1);
-    
-  runlevel_combo = glade_xml_get_widget(xml, "runlevel_combo");  
-  choosen_rl = gtk_combo_box_get_active(GTK_COMBO_BOX(runlevel_combo));
+    runlevel_combo = glade_xml_get_widget(xml, "runlevel_combo");  
+    choosen_rl = gtk_combo_box_get_active(GTK_COMBO_BOX(runlevel_combo));
     
-  for(i = 0; i < choosen_rl; i++) {
-    this_rl_struct = this_rl_struct->next;
+    for(i = 0; i < choosen_rl; i++) {
+      this_rl_struct = this_rl_struct->next;
+    }
+    this_rl_struct->needs_saving = TRUE;
+    GtkWidget *save_button = glade_xml_get_widget(xml, "save_button");
+    GtkWidget *save1 = glade_xml_get_widget(xml, "save1");
+    gtk_widget_set_sensitive(save_button, TRUE);
+    gtk_widget_set_sensitive(save1, TRUE);
   }
-  this_rl_struct->needs_saving = TRUE;
 }
 
 /* Remmove the marked service in the runlevel list from that runlevel */

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	Fri Jun  2 10:52:12 2006
@@ -44,6 +44,50 @@
     return 0;
 }
 
+gboolean is_active(GtkTreeModel *model, GtkTreeIter *iter) {
+  gchar *state;
+  gtk_tree_model_get(model, iter, 2, &state, -1);
+  if(state) {
+    g_free(state);
+    return TRUE;
+  } else {
+    g_free(state);
+    return FALSE;
+  }
+}
+
+gboolean is_failed(GtkTreeModel *model, GtkTreeIter *iter) {
+  gchar *color;
+  gtk_tree_model_get(model, iter, 3, &color, -1);
+  if(color) {
+    if(!strcmp(color, "#FFAAAA")) {
+      g_free(color);
+      return TRUE;
+    } else {
+      g_free(color);
+    }
+  }
+  return FALSE;
+}
+
+gboolean recursive_filter(GtkTreeModel *model, GtkTreeIter *parent_iter,
+			  gboolean (*testfunc)(GtkTreeModel*, GtkTreeIter*)) {
+  gchar *state;
+  GtkTreeIter iter;
+
+  if(testfunc(model, parent_iter))
+    return TRUE;
+
+  gboolean valid = gtk_tree_model_iter_children(model, &iter, parent_iter);
+  while(valid) {
+    if(recursive_filter(model, &iter, testfunc)) {
+      return TRUE;
+    }
+    valid = gtk_tree_model_iter_next(model, &iter);
+  }
+  return FALSE;
+}
+
 gboolean service_filter(GtkTreeModel *model, GtkTreeIter *iter, gpointer data) {
   GtkComboBox *runlevel_filter_combo = GTK_COMBO_BOX(glade_xml_get_widget(xml, "runlevel_filter_combo"));
   gint choosen_filter = gtk_combo_box_get_active(GTK_COMBO_BOX(runlevel_filter_combo));
@@ -52,17 +96,10 @@
   //Just some example filters to test what can be done
   switch(choosen_filter) {
   case 1: //Show only active
-    gtk_tree_model_get(model, iter, 2, &str_data, -1);
-    if(str_data) {
-      g_free(str_data);
-      return TRUE;
-    }
-    else {
-      g_free(str_data);
-      return FALSE;
-    }
-    break;
-  case 2: //Show only runlevels
+    return recursive_filter(model, iter, is_active);
+  case 2: //Show only failed
+    return recursive_filter(model, iter, is_failed);
+  case 3: //Show only runlevels
     gtk_tree_model_get(model, iter, 1, &str_data, -1);
     if(str_data && !strcmp(str_data, "runlevel")) {
       g_free(str_data);
@@ -72,11 +109,9 @@
       g_free(str_data);
     }
     return FALSE;
-    break;
   default: //Show all (0) or nothing choosen (-1)
     return TRUE;
-    break;
-    }
+  }
 }
 
 void servicelist_cleanup() {
@@ -96,10 +131,10 @@
         serviceinfo->file_content->references--;
         if(serviceinfo->file_content->references == 0) {
        	  if(serviceinfo->file_content->data)
-	        g_free(serviceinfo->file_content->data);
-	      if(serviceinfo->file_content->path)
-	        g_free(serviceinfo->file_content->path);
-	      g_free(serviceinfo->file_content);
+	    g_free(serviceinfo->file_content->data);
+	  if(serviceinfo->file_content->path)
+	    g_free(serviceinfo->file_content->path);
+	  g_free(serviceinfo->file_content);
         }
       }
       g_free(serviceinfo);
@@ -137,28 +172,31 @@
   return FALSE;
 }
 
-void add_recursive(GtkTreeStore *store, GtkTreeIter *parent_iter,
-                   GtkTreeIter *iter, const char *name, struct s_info *serviceinfo) {
-  printf("add_recursive (%s)\n", name);
+gboolean add_recursive(GtkTreeStore *store, GtkTreeIter *parent_iter,
+                   GtkTreeIter *iter, const char *name) {
   char *rest = malloc(strlen(name) + 1);
   strcpy(rest, name);
   char *tok = path_tokenizer(&rest);
+  gboolean was_added = FALSE;
 
   if(!gtk_tree_model_iter_children(GTK_TREE_MODEL(store), iter, parent_iter) ||
      !find_child(store, parent_iter, iter, tok)) { //The node has to be created
+    was_added = TRUE;
     gtk_tree_store_prepend(store, iter, parent_iter);
-    printf("Inserted node for %s on depth %i\n", tok, gtk_tree_store_iter_depth(store, iter));
     gtk_tree_store_set(store, iter, 0, tok, 2, NULL, 4, NULL, -1);
   }
 
-  printf("Left to handle: %s\n", rest);
-
-  if(rest)  { //This is not the last part
-    parent_iter = gtk_tree_iter_copy(iter);  
-    add_recursive(store, parent_iter, iter, rest, serviceinfo);
+  if(rest) {
+    parent_iter = gtk_tree_iter_copy(iter);
+    was_added = add_recursive(store, parent_iter, iter, rest);
     gtk_tree_iter_free(parent_iter);
   }
   free(tok);
+  return was_added;
+}
+
+gboolean add_node(GtkTreeStore *store, GtkTreeIter *iter, const char *name) {
+  return add_recursive(store, NULL, iter, name);
 }
 
 void recursive_scan(char* path, GtkTreeStore *store) {
@@ -201,22 +239,20 @@
             strcpy(serviceinfo->startline, buffer);
             char *tok = strtok(buffer, " ");
             tok = strtok(NULL, " ");
-			add_recursive(store, NULL, &iter, tok, serviceinfo);
-            //gtk_tree_store_prepend (store, &iter, NULL);
+	    add_node(store, &iter, tok);
             gtk_tree_store_set (store, &iter, 1, "daemon", 2, NULL, 4, serviceinfo, -1);
             serviceinfo->fullname = malloc(strlen(tok) + 1);
             strcpy(serviceinfo->fullname, tok);
             serviceinfo->type = DAEMON;
-	        serviceinfo->file_content = file_content;
-	        file_content->references++;
+	    serviceinfo->file_content = file_content;
+	    file_content->references++;
           } else if(strstr(buffer, "service") == buffer) {
             serviceinfo = malloc(sizeof(struct s_info));
             serviceinfo->startline = malloc(strlen(buffer) + 1);
             strcpy(serviceinfo->startline, buffer);
             char *tok = strtok(buffer, " ");
             tok = strtok(NULL, " ");
-            add_recursive(store, NULL, &iter, tok, serviceinfo);
-            //gtk_tree_store_prepend (store, &iter, NULL);
+            add_node(store, &iter, tok);
             gtk_tree_store_set (store, &iter, 1, "service", 2, NULL, 4, serviceinfo, -1);
             serviceinfo->fullname = malloc(strlen(tok) + 1);
             strcpy(serviceinfo->fullname, tok);;
@@ -229,8 +265,7 @@
             strcpy(serviceinfo->startline, buffer);
             char *tok = strtok(buffer, " ");
             tok = strtok(NULL, " ");
-            add_recursive(store, NULL, &iter, tok, serviceinfo);
-            //gtk_tree_store_prepend (store, &iter, NULL);
+            add_node(store, &iter, tok);
             gtk_tree_store_set (store, &iter, 1, "virtual", 2, NULL, 4, serviceinfo, -1);
             serviceinfo->fullname = malloc(strlen(tok) + 1);
             strcpy(serviceinfo->fullname, tok);
@@ -254,8 +289,7 @@
 	file_content->references = 1;
         serviceinfo = malloc(sizeof(struct s_info));
         namelist[n]->d_name[strlen(namelist[n]->d_name)-9] = 0;
-        add_recursive(store, NULL, &iter, namelist[n]->d_name, serviceinfo);
-        //gtk_tree_store_prepend (store, &iter, NULL);
+        add_node(store, &iter, namelist[n]->d_name);
         gtk_tree_store_set(store, &iter, 1, "runlevel", 2, NULL, 4, serviceinfo, -1);
         serviceinfo->fullname = malloc(strlen(namelist[n]->d_name) + 1);
         strcpy(serviceinfo->fullname, namelist[n]->d_name);
@@ -275,10 +309,9 @@
 	file_content->references = 1;
         serviceinfo = malloc(sizeof(struct s_info));
         namelist[n]->d_name[strlen(namelist[n]->d_name)-8] = 0;
-        add_recursive(store, NULL, &iter, namelist[n]->d_name, serviceinfo);
-        //gtk_tree_store_prepend (store, &iter, NULL);
+        add_node(store, &iter, namelist[n]->d_name);
         gtk_tree_store_set(store, &iter, 1, "virtual", 2, NULL, 4, serviceinfo, -1);
-		serviceinfo->fullname = malloc(strlen(namelist[n]->d_name) + 1);
+	serviceinfo->fullname = malloc(strlen(namelist[n]->d_name) + 1);
         strcpy(serviceinfo->fullname, namelist[n]->d_name);
         serviceinfo->type = VIRTUALFILE;
         serviceinfo->startline = NULL;
@@ -433,29 +466,29 @@
   g_free(servicename);
 }
 
-void save_all_services() {
-  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));
-  GtkTreeModel *model = gtk_tree_model_filter_get_model(filtermodel);
-  GtkTreeIter iter;
+gboolean save_service(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) {
   FILE *file;
   struct s_info *serviceinfo;
-
-  gboolean valid = gtk_tree_model_get_iter_first(model, &iter);
-  while(valid) {
-    gtk_tree_model_get(model, &iter, 4, &serviceinfo, -1);
-    struct s_file_content *file_content = serviceinfo->file_content;
-    if(file_content && file_content->needs_saving) {
-      file = fopen(file_content->path, "w");
-      if (file == NULL)
-	break;
+  gtk_tree_model_get(model, iter, 4, &serviceinfo, -1);
+  if(!serviceinfo)
+    return FALSE;
+  struct s_file_content *file_content = serviceinfo->file_content;
+  if(file_content && file_content->needs_saving) {
+    file = fopen(file_content->path, "w");
+    if (file != NULL) {
       fputs(file_content->data, file);
       file_content->needs_saving = FALSE;
       fclose(file);
     }
-    valid = gtk_tree_model_iter_next(model, &iter);
   }
+  return FALSE;
+}
+
+void save_all_services() {
+  GtkTreeView *service_list = GTK_TREE_VIEW(glade_xml_get_widget(xml, "service_list"));
+  GtkTreeModel *model = gtk_tree_view_get_model(service_list);
+
+  gtk_tree_model_foreach(model, save_service, NULL);
 }
 
 gint service_sorter(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data) {

Modified: initng-gui/initng-conf-gtk/src/serviceparser.h
==============================================================================
--- initng-gui/initng-conf-gtk/src/serviceparser.h	(original)
+++ initng-gui/initng-conf-gtk/src/serviceparser.h	Fri Jun  2 10:52:12 2006
@@ -56,7 +56,6 @@
   char *fullname;    //Full name of service/daemon
 };
 
-void add_recursive(GtkTreeStore *store, GtkTreeIter *parent_iter,
-                   GtkTreeIter *iter, const char *name, struct s_info *serviceinfo);
+gboolean add_node(GtkTreeStore *store, GtkTreeIter *iter, const char *name);
 
 #endif


More information about the Initng-svn mailing list