diff options
author | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-05-08 11:23:36 (GMT) |
---|---|---|
committer | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-05-08 11:26:28 (GMT) |
commit | 1caa169ab0c0d3428723d711a91f198e90bfc054 (patch) | |
tree | ff10b2a4e1fb1fc1bfe435791222f5ac5a7a8126 | |
parent | 22d47c405d69ca7ebd2c557687978ab9d8083c2b (diff) | |
download | eulogium-1caa169ab0c0d3428723d711a91f198e90bfc054.zip eulogium-1caa169ab0c0d3428723d711a91f198e90bfc054.tar.gz eulogium-1caa169ab0c0d3428723d711a91f198e90bfc054.tar.bz2 |
Add 'clear data' routine
Currently there are is a lot (too much?) data in the data structures
that need to be cleaned up afterwards. This patch adds a function to
clear up as much as possible in one go.
Additionally this patch sets some sane default values to these data
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
-rw-r--r-- | src/eulogium.c | 63 |
1 files changed, 36 insertions, 27 deletions
diff --git a/src/eulogium.c b/src/eulogium.c index b115bcd..687cf3a 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -126,8 +126,33 @@ static struct button_def but_mat_settings = { .data = NULL, }; -static void _on_print_abort_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +static void eulogium_print_data_clear(struct eulogium_data *eulogium) { + if (eulogium->progress_data_refresh) + ecore_timer_del(eulogium->progress_data_refresh); + eulogium->progress_data_refresh = NULL; + eulogium->progress = NULL; /* XXX memleak here? when or how is this freeed by efl */ + eulogium->status = NULL; /* XXX memleak here too? how does efl do it */ + eulogium->time = NULL; /* XXX memleak here too? how does efl do it */ + eulogium->name = NULL; /* XXX memleak here too? how does efl do it */ + +// if (eulogium->print.name) +// free(eulogium->print.name); + eulogium->print.name = NULL; + eulogium->print.name_changed = EINA_FALSE; +// if (eulogium->print.file) +// free(eulogium->print.file); + eulogium->print.file = NULL; + + eulogium->print.time = 0; + eulogium->print.material = 0; + eulogium->print.progress = 0; + eulogium->print.flags = ""; +} + +static void _on_print_abort_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; const char *errname, *errmsg; Eina_Bool print_abort = EINA_FALSE; @@ -139,6 +164,12 @@ static void _on_print_abort_ret(void *data EINA_UNUSED, const Eldbus_Message *ms EINA_LOG_ERR("Failed to abort print."); return; } + if (print_abort == EINA_TRUE) { + EINA_LOG_INFO("Successfully aborted print."); + eulogium_print_data_clear(eulogium); + } else { + EINA_LOG_WARN("Unable to abort print."); + } } static void _cb_content_prev_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -157,28 +188,8 @@ static void _cb_content_prev_set(void *data, Evas_Object *obj EINA_UNUSED, void static void _print_abort_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { struct eulogium_data *eulogium = data; - Elm_Object_Item *item; eldbus_proxy_call(eulogium->dbus.proxy[HARMA], "abortPrint", _on_print_abort_ret, eulogium, -1, ""); - - item = elm_naviframe_bottom_item_get(eulogium->navi); - if (item) - elm_naviframe_item_pop_to(item); /* XXX what to do else? | XXX stack corrupted after this? (see error log) */ - else - EINA_LOG_CRIT("There is no bottom of the stack!"); - - /* XXX Quick and ugly cleaning up */ - eulogium->status = NULL; /* XXX memleak here too? how does efl do it */ - eulogium->progress = NULL; /* XXX memleak here? when or how is this freeed by efl */ - - free(eulogium->print.name); - eulogium->print.name = NULL; - free(eulogium->print.file); - eulogium->print.file = NULL; - - eulogium->print.time = 0; - eulogium->print.material = 0; - eulogium->print.progress = 0; } static void _on_blink_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) @@ -394,6 +405,7 @@ void eulogium_print_data_set(struct eulogium_data *eulogium, char *filepath) snprintf(buf, buf_size, "file://%s", filepath); eulogium->print.file = buf; eulogium->print.name = ecore_file_strip_ext(ecore_file_file_get(filepath)); + eulogium->print.flags = ""; eulogium->print.material = 100.23; /* TODO */ eulogium->print.time = 12; } @@ -1079,14 +1091,11 @@ static void eulogium_setup(struct eulogium_data *eulogium) while (screen_data.screen[screen_data.count].type != END) screen_data.count++; - eulogium->status = NULL; - eulogium->progress = NULL; + eulogium->progress_data_refresh = NULL; eulogium->print.name = NULL; eulogium->print.file = NULL; - eulogium->print.flags = ""; - eulogium->print.progress = 0; - eulogium->print.time = 0; - eulogium->print.material = 0.0; + eulogium_print_data_clear(eulogium); + eulogium->printer.status = DISCONNECTED; eulogium_button_cb_data_set(&but_return, eulogium); eulogium_button_cb_data_set(&but_print_abort, eulogium); eulogium_button_cb_data_set(&but_print_progress_tune, eulogium); |