diff --git a/apps/clicky/src/crouter.cc b/apps/clicky/src/crouter.cc index 0e51ebecdb1d2d0e2e68afd0e556ed2a09450ba6..97a31db6a8f05997fce667e4bf2801ad485c284c 100644 --- a/apps/clicky/src/crouter.cc +++ b/apps/clicky/src/crouter.cc @@ -318,9 +318,11 @@ void crouter::run(ErrorHandler *errh) int pos = 0; while (pos != _conf.length()) { ssize_t r = write(configpipe[1], _conf.begin() + pos, _conf.length() - pos); - if (r == 0 || (r == -1 && errno != EAGAIN && errno != EINTR)) + if (r == 0 || (r == -1 && errno != EAGAIN && errno != EINTR)) { + if (r == -1) + errh->message("%s while writing configuration", strerror(errno)); break; - else if (r != -1) + } else if (r != -1) pos += r; } if (pos != _conf.length()) { diff --git a/apps/clicky/src/dialogs.cc b/apps/clicky/src/dialogs.cc index 941d5b96a331d6d4b126067c10578833a6afda44..1a951decca19391f07a15d88a569cae5e7d09bf4 100644 --- a/apps/clicky/src/dialogs.cc +++ b/apps/clicky/src/dialogs.cc @@ -103,6 +103,7 @@ static void on_view_diagram_toggled(GtkCheckMenuItem *check, gpointer user_data) static void on_toolbar_run_activate(GtkToolButton *, gpointer user_data) { wmain *rw = reinterpret_cast<wmain *>(user_data); + rw->buffer_to_config(); rw->run(ErrorHandler::default_handler()); } @@ -423,6 +424,16 @@ void wmain::on_open_kernel() } } +void wmain::buffer_to_config() +{ + GtkTextIter i1, i2; + gtk_text_buffer_get_start_iter(_config_buffer, &i1); + gtk_text_buffer_get_end_iter(_config_buffer, &i2); + char *data = gtk_text_buffer_get_text(_config_buffer, &i1, &i2, FALSE); + set_config(String(data), true); + g_free(data); +} + void wmain::on_save_file(bool save_as) { if (save_as || !_savefile) { @@ -455,21 +466,17 @@ void wmain::on_save_file(bool save_as) } } - GtkTextIter i1, i2; - gtk_text_buffer_get_start_iter(_config_buffer, &i1); - gtk_text_buffer_get_end_iter(_config_buffer, &i2); - char *data = gtk_text_buffer_get_text(_config_buffer, &i1, &i2, FALSE); + buffer_to_config(); GError *err = NULL; - if (!g_file_set_contents(_savefile.c_str(), data, -1, &err)) { + String conf = config(); + if (!g_file_set_contents(_savefile.c_str(), conf.data(), conf.length(), &err)) { GatherErrorHandler gerrh(true); gerrh.error("Save error: %s", err->message); gerrh.run_dialog(GTK_WINDOW(_window)); g_error_free(err); } else set_save_file(_savefile, true); - - g_free(data); } void wmain::on_export_diagram() diff --git a/apps/clicky/src/wmain.hh b/apps/clicky/src/wmain.hh index 85b522b377cf713353b5afa02a13d5fcc7c8d820..0361aa6826298a270f47b60417f423988899f5c0 100644 --- a/apps/clicky/src/wmain.hh +++ b/apps/clicky/src/wmain.hh @@ -78,6 +78,7 @@ class wmain : public crouter { public: void on_driver_changed(); void config_set_driver(int driver); void config_check(bool install); + void buffer_to_config(); const String &element_showing() const { return _eview_name;