[Initng-svn] r3707 - initng-gui/initng-gnome/src
svn at initng.thinktux.net
svn at initng.thinktux.net
Thu Apr 6 15:04:55 CEST 2006
Author: danne
Date: Thu Apr 6 15:04:53 2006
New Revision: 3707
Modified:
initng-gui/initng-gnome/src/callbacks.c
initng-gui/initng-gnome/src/initconf_globals.h
initng-gui/initng-gnome/src/initng-gnome.glade
initng-gui/initng-gnome/src/ngehandler.c
initng-gui/initng-gnome/src/ngehandler.h
initng-gui/initng-gnome/src/serviceparser.c
initng-gui/initng-gnome/src/serviceparser.h
Log:
Enough for today. Now services are editable, but there is no way to save them yet. Will continue tomorrow. Oh, and there is some strange race condition with nge, making the program crash on startup quite often. Will look at that too...
Modified: initng-gui/initng-gnome/src/callbacks.c
==============================================================================
--- initng-gui/initng-gnome/src/callbacks.c (original)
+++ initng-gui/initng-gnome/src/callbacks.c Thu Apr 6 15:04:53 2006
@@ -18,7 +18,7 @@
*/
#ifdef HAVE_CONFIG_H
-# include <config.h>
+#include <config.h>
#endif
#include <gnome.h>
@@ -263,21 +263,40 @@
GtkTreeViewColumn *column, gpointer user_data)
{
GtkWidget *initconf_show_service;
- GladeXML *xml_service = glade_xml_new(FILENAME, "initconf_show_service", NULL);
- if(!xml_service)
- xml_service = glade_xml_new(SECONDARY_FILENAME, "initconf_show_service", NULL);
+ xml_show_service = glade_xml_new(FILENAME, "initconf_show_service", NULL);
+ if(!xml_show_service)
+ xml_show_service = glade_xml_new(SECONDARY_FILENAME, "initconf_show_service", NULL);
- initconf_show_service = glade_xml_get_widget(xml_service, "initconf_show_service");
+ initconf_show_service = glade_xml_get_widget(xml_show_service, "initconf_show_service");
- load_service(initconf_show_service, GTK_WIDGET(treeview), xml_service);
- gtk_widget_show(initconf_show_service);
+ load_service(GTK_WIDGET(treeview));
+ glade_xml_signal_autoconnect(xml_show_service);
}
+void on_cancel_edit_service_button_clicked(GtkButton *button, gpointer user_data) {
+ gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(button)));
+}
-void on_runlevel_list_row_activated (GtkTreeView *treeview, GtkTreePath *path,
- GtkTreeViewColumn *column, gpointer user_data)
-{
+void on_ok_edit_service_button_clicked(GtkButton *button, gpointer user_data) {
+ GtkWidget *textview = glade_xml_get_widget(xml_show_service, "service_textview");
+ GtkTreeSelection *selected;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkWidget *service_list = glade_xml_get_widget(xml, "service_list");
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
+ GtkTextIter start, end;
+
+ selected = gtk_tree_view_get_selection(GTK_TREE_VIEW(service_list));
+
+ gtk_tree_selection_get_selected(selected, &model, &iter);
+ struct s_info *serviceinfo;
+ gtk_tree_model_get(model, &iter, 4, &serviceinfo, -1);
+ serviceinfo->needs_saving = TRUE;
+ gtk_text_buffer_get_bounds(buffer, &start, &end);
+ serviceinfo->data = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
+
+ gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(button)));
}
void on_show_runlevel_editor_activate (GtkMenuItem *menuitem, gpointer user_data)
Modified: initng-gui/initng-gnome/src/initconf_globals.h
==============================================================================
--- initng-gui/initng-gnome/src/initconf_globals.h (original)
+++ initng-gui/initng-gnome/src/initconf_globals.h Thu Apr 6 15:04:53 2006
@@ -11,5 +11,6 @@
GladeXML *xml_new_runlevel;
GladeXML *xml_start_service;
GladeXML *xml_add_service;
+GladeXML *xml_show_service;
#endif
Modified: initng-gui/initng-gnome/src/initng-gnome.glade
==============================================================================
--- initng-gui/initng-gnome/src/initng-gnome.glade (original)
+++ initng-gui/initng-gnome/src/initng-gnome.glade Thu Apr 6 15:04:53 2006
@@ -314,8 +314,7 @@
<child>
<widget class="GtkComboBox" id="runlevel_combo">
<property name="visible">True</property>
- <property name="items" translatable="yes">
-</property>
+ <property name="items" translatable="yes"></property>
<property name="add_tearoffs">False</property>
<property name="focus_on_click">True</property>
<signal name="changed" handler="on_runlevel_combo_changed" last_modification_time="Thu, 12 Jan 2006 12:57:48 GMT"/>
@@ -353,7 +352,6 @@
<property name="hover_selection">False</property>
<property name="hover_expand">False</property>
<signal name="cursor_changed" handler="on_runlevel_list_cursor_changed" last_modification_time="Thu, 12 Jan 2006 13:13:19 GMT"/>
- <signal name="row_activated" handler="on_runlevel_list_row_activated" last_modification_time="Mon, 16 Jan 2006 12:30:54 GMT"/>
</widget>
</child>
</widget>
@@ -508,7 +506,7 @@
<property name="title" translatable="yes">Add new runlevel</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
+ <property name="modal">True</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
@@ -618,7 +616,7 @@
<widget class="GtkWindow" id="initconf_show_service">
<property name="visible">True</property>
- <property name="title" translatable="yes">service or daemon</property>
+ <property name="title" translatable="yes">Edit service or daemon</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
@@ -635,32 +633,86 @@
<property name="urgency_hint">False</property>
<child>
- <widget class="GtkScrolledWindow" id="scrolledwindow3">
+ <widget class="GtkVBox" id="vbox3">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
- <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
<child>
- <widget class="GtkTextView" id="service_textview">
+ <widget class="GtkScrolledWindow" id="scrolledwindow3">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="editable">False</property>
- <property name="overwrite">False</property>
- <property name="accepts_tab">True</property>
- <property name="justification">GTK_JUSTIFY_LEFT</property>
- <property name="wrap_mode">GTK_WRAP_NONE</property>
- <property name="cursor_visible">False</property>
- <property name="pixels_above_lines">0</property>
- <property name="pixels_below_lines">0</property>
- <property name="pixels_inside_wrap">0</property>
- <property name="left_margin">0</property>
- <property name="right_margin">0</property>
- <property name="indent">0</property>
- <property name="text" translatable="yes"></property>
+ <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
+ <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTextView" id="service_textview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="overwrite">False</property>
+ <property name="accepts_tab">True</property>
+ <property name="justification">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap_mode">GTK_WRAP_NONE</property>
+ <property name="cursor_visible">True</property>
+ <property name="pixels_above_lines">0</property>
+ <property name="pixels_below_lines">0</property>
+ <property name="pixels_inside_wrap">0</property>
+ <property name="left_margin">0</property>
+ <property name="right_margin">0</property>
+ <property name="indent">0</property>
+ <property name="text" translatable="yes"></property>
+ </widget>
+ </child>
</widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox3">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkButton" id="cancel_edit_service_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_cancel_edit_service_button_clicked" last_modification_time="Thu, 06 Apr 2006 11:11:50 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="ok_edit_service_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_ok_edit_service_button_clicked" last_modification_time="Thu, 06 Apr 2006 11:11:41 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
</child>
</widget>
</child>
Modified: initng-gui/initng-gnome/src/ngehandler.c
==============================================================================
--- initng-gui/initng-gnome/src/ngehandler.c (original)
+++ initng-gui/initng-gnome/src/ngehandler.c Thu Apr 6 15:04:53 2006
@@ -26,7 +26,7 @@
#include "initconf_globals.h"
-void service_change(nge_event *e, char *service, e_is is, char *state) {
+void initial_service_state(nge_event *e, char *service, e_is is, char *state) {
gdk_threads_enter();
GtkTreeView *service_list = GTK_TREE_VIEW(glade_xml_get_widget(xml, "service_list"));
@@ -82,12 +82,27 @@
}
g_free(str_data);
- //TODO: Is there a way of not refiltering entire list every time?
- gtk_tree_model_filter_refilter(filtermodel);
gdk_flush();
gdk_threads_leave();
}
+void service_change(nge_event *e, char *service, e_is is, 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));
+
+ initial_service_state(e, service, is, state);
+ gtk_tree_model_filter_refilter(filtermodel);
+}
+
+void initial_state_finished(nge_event *e) {
+ 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));
+
+ gtk_tree_model_filter_refilter(filtermodel);
+}
+
void *nge_thread(void *args) {
nge_event e;
Modified: initng-gui/initng-gnome/src/ngehandler.h
==============================================================================
--- initng-gui/initng-gnome/src/ngehandler.h (original)
+++ initng-gui/initng-gnome/src/ngehandler.h Thu Apr 6 15:04:53 2006
@@ -25,7 +25,8 @@
#include "initng_nge.h"
void service_change(nge_event *e, char *service, e_is is, char *state);
-
+void initial_service_state(nge_event *e, char *service, e_is is, char *state);
+void initial_state_finished(nge_event *e);
void *nge_thread(void *args);
#endif
Modified: initng-gui/initng-gnome/src/serviceparser.c
==============================================================================
--- initng-gui/initng-gnome/src/serviceparser.c (original)
+++ initng-gui/initng-gnome/src/serviceparser.c Thu Apr 6 15:04:53 2006
@@ -112,6 +112,8 @@
serviceinfo->name = tok;
serviceinfo->type = DAEMON;
serviceinfo->path = fullpath;
+ serviceinfo->needs_saving = FALSE;
+ serviceinfo->data = NULL;
} else if(strstr(buffer, "service") == buffer) {
serviceinfo = malloc(sizeof(struct s_info));
serviceinfo->startline = malloc(strlen(buffer) + 1);
@@ -123,6 +125,8 @@
serviceinfo->name = tok;
serviceinfo->type = SERVICE;
serviceinfo->path = fullpath;
+ serviceinfo->needs_saving = FALSE;
+ serviceinfo->data = NULL;
} else if(strstr(buffer, "virtual") == buffer) {
serviceinfo = malloc(sizeof(struct s_info));
serviceinfo->startline = malloc(strlen(buffer) + 1);
@@ -134,6 +138,8 @@
serviceinfo->name = tok;
serviceinfo->type = VIRTUAL;
serviceinfo->path = fullpath;
+ serviceinfo->needs_saving = FALSE;
+ serviceinfo->data = NULL;
}
}
fclose(file);
@@ -148,6 +154,8 @@
serviceinfo->type = RUNLEVEL;
serviceinfo->path = fullpath;
serviceinfo->startline = NULL;
+ serviceinfo->needs_saving = FALSE;
+ serviceinfo->data = NULL;
} else if(!fnmatch("*.virtual", namelist[n]->d_name, 0)) {
serviceinfo = malloc(sizeof(struct s_info));
namelist[n]->d_name[strlen(namelist[n]->d_name)-8] = 0;
@@ -155,9 +163,11 @@
gtk_list_store_set(store, &iter, 0, namelist[n]->d_name, 1, "virtual",
2, NULL, 4, serviceinfo, -1);
serviceinfo->name = namelist[n]->d_name;
- serviceinfo->type = VIRTUAL;
+ serviceinfo->type = VIRTUALFILE;
serviceinfo->path = fullpath;
serviceinfo->startline = NULL;
+ serviceinfo->needs_saving = FALSE;
+ serviceinfo->data = NULL;
}
free(namelist[n]);
}
@@ -165,11 +175,10 @@
}
}
-void load_service(GtkWidget *initconf_show_service, GtkWidget *treeview,
- GladeXML *xml_service) {
+void load_service(GtkWidget *treeview) {
GtkWidget *service_textview;
- GtkTextBuffer *buffer;
GtkTreeSelection *selected;
+ GtkTextBuffer *buffer;
GtkTreeIter iter;
GtkTreeModel *model;
gchar *servicename;
@@ -177,15 +186,15 @@
FILE *file;
gchar res;
int depth = 1;
+ GtkTextIter start, end;
- service_textview = glade_xml_get_widget(xml_service, "service_textview");
+ service_textview = glade_xml_get_widget(xml_show_service, "service_textview");
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(service_textview));
selected = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
gtk_tree_selection_get_selected(selected, &model, &iter);
- gtk_tree_model_get(model, &iter, 0, &servicename, -1);
struct s_info *serviceinfo;
- gtk_tree_model_get(model, &iter, 4, &serviceinfo, -1);
+ gtk_tree_model_get(model, &iter, 0, &servicename, 4, &serviceinfo, -1);
if(lstat(serviceinfo->path, &buff)<0)
perror("Strange fault!");
@@ -194,7 +203,7 @@
if (file == NULL)
return;
- if(serviceinfo->type != RUNLEVEL) {
+ if(serviceinfo->type != RUNLEVEL && serviceinfo->type != VIRTUALFILE) {
char* temp = malloc(255); //UGLY!
while(fgets(temp, 255, file) > 0) {
if(strcmp(temp, serviceinfo->startline) == 0) {
@@ -203,24 +212,45 @@
}
free(temp);
}
-
- gtk_text_buffer_set_text(buffer, "", 0);
- do {
- res = fgetc(file);
- if(res == '{') {
- depth++;
- } else if(res == '}') {
- depth--;
- }
- if(depth <= 0 || res == EOF)
- break;
- gtk_text_buffer_insert_at_cursor(buffer, &res, 1);
- } while(TRUE);
+ gtk_text_buffer_set_text(buffer, "", 0);
+
+ if(!serviceinfo->data) {
+ fprintf(stderr, "Loading service\n");
+ do {
+ res = fgetc(file);
+ if(res == '{') {
+ depth++;
+ } else if(res == '}') {
+ depth--;
+ }
+ if(depth <= 0 || res == EOF)
+ break;
+ gtk_text_buffer_insert_at_cursor(buffer, &res, 1);
+ } while(TRUE);
+ gtk_text_buffer_get_bounds(buffer, &start, &end);
+ serviceinfo->data = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
+ } else {
+ gtk_text_buffer_insert_at_cursor(buffer, serviceinfo->data, strlen(serviceinfo->data));
+ }
g_free(servicename);
}
+void save_all_services() {
+ //COMMENTED OUT BECAUSE IT ISN'T FINISHED YET!
+ /* GtkTreeView *service_list = GTK_TREE_VIEW(glade_xml_get_widget(xml, "service_list"));
+
+ gboolean valid = gtk_tree_model_get_iter_first(model, &iter);
+ while(valid) {
+ gtk_tree_model_get(model, &iter, 4, &serviceinfo, -1);
+ if(serviceinfo->needs_saving) {
+ fputs(serviceinfo->data);
+ }
+ valid = gtk_tree_model_iter_next(model, &iter);
+ }*/
+}
+
gint service_sorter(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data) {
gint sortcol = GPOINTER_TO_INT(user_data);
gint ret = 0;
Modified: initng-gui/initng-gnome/src/serviceparser.h
==============================================================================
--- initng-gui/initng-gnome/src/serviceparser.h (original)
+++ initng-gui/initng-gnome/src/serviceparser.h Thu Apr 6 15:04:53 2006
@@ -27,14 +27,15 @@
gboolean service_filter(GtkTreeModel *model, GtkTreeIter *iter, gpointer data);
void populate_service_list();
-void load_service(GtkWidget *initconf_show_service, GtkWidget *treeview,
- GladeXML *xml_service);
+void load_service(GtkWidget *treeview);
+void save_all_services();
enum {
RUNLEVEL = 0,
SERVICE,
DAEMON,
VIRTUAL,
+ VIRTUALFILE,
UNKNOWN
};
@@ -44,6 +45,8 @@
char type;
char *startline;
e_is status_id;
+ gboolean needs_saving;
+ gchar *data;
};
#endif
More information about the Initng-svn
mailing list