On Mon, 2006-12-25 at 09:19 +0100, David Nečas (Yeti) wrote: > On Mon, Dec 25, 2006 at 12:22:50AM -0500, Tony Freeman wrote: > > What am I doing wrong? I would like an array of gchar values. The > > gchar values would be "lx1" "lx2" "dx1" that a user would select from a > > GtkTreeView. > > Why you ceate some GArray instead of a GtkListStore -- you > will have to create a tree model anyway, so why not use it > directly as the storage? > > > However, the following line gives an error: > > > > GArray *serverlist = g_array_new(TRUE, FALSE, sizeof(gchar)); > > "lx1" and "lx2" do not look like single characters, so this > is probably wrong. You created an array of *characters*, > not an array of strings. > > > The error is: > > > > main.c:58: error: initializer element is not constant > > serverlist is a global variable, right? Global variables > have to be initialized with constants in C. You can move > the initializer to main() or some initialization function, > but global variables are Evil and in most cases the best > approach is to avoid them anyway. > > Yeti
Thanks Yeti, Your hint about creating an array of characters as opposed to an array of strings pointed me in the right direction. I've changed the code to create a null terminated string array with this command: serverlist = g_strsplit(tmp_server_list, " ", -1); Here's the edited down version of the code: void on_executebutton_clicked (GtkWidget *widget, gpointer data) { /* ************************************** NOTE: THE FOLLOWING ARE GLOBALS: treeview_servers : treeview widget list_of_servers : a string to use for a label serverlist : string array of server names * **************************************/ GtkTreeSelection *servers_selection; GtkTreeModel *servers_model; GList *list = NULL; gchar *tmp_server_list = ""; /* POPULATE GLOBAL 'serverlist' and 'list_of_servers' */ /* get the list of selected servers */ servers_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_servers)); servers_model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview_servers)); machines = gtk_tree_selection_get_selected_rows(servers_selection, &servers_model); for (list = machines; list != NULL; list = g_list_next(list)) { GtkTreeIter iter; GtkTreePath *path = list->data; if (gtk_tree_model_get_iter(servers_model, &iter, path)) { gchar *text; gtk_tree_model_get(servers_model, &iter, 1, &text, -1); tmp_server_list = g_strjoin(" ", tmp_server_list, text, NULL); } gtk_tree_path_free(path); } g_list_free(list); g_strstrip(tmp_server_list); list_of_servers = tmp_server_list; serverlist = g_strsplit(tmp_server_list, " ", -1); gtk_widget_show(confirmdialog); } I can now walk through the string array to build my command: void on_confirm_okbutton_clicked (GtkWidget *widget, gpointer data) { /* ************************************ NOTE: THE FOLLOWING ARE GLOBALS: serverlist : string array of server names * ************************************/ gchar *ssh_command = ""; gint i = 0; gint count = g_strv_length(serverlist); /* TODO: build the ssh command and start a process for each server */ for (i=0; i<count; i++) { ssh_command=g_strjoin(" ", "ssh", serverlist[i], MAINSCRIPT_PROGRAM, command, NULL); g_print("SSH Command: %s\n", ssh_command); } /* TODO: run command on each server sending output to temporary text buffers */ gtk_widget_show(progressdialog); gtk_widget_hide(confirmdialog); } Thanks for the insight! -- Tony _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list