From 0b209ba7b1e615fd4829e1ebea317702b8865e2c Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Sat, 27 Apr 2024 12:26:47 +0600 Subject: [PATCH] Fixed crash at '-*' service name tooltip call --- source/ubl-settings-services.c | 75 ++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index e7daca7..e7addea 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -1476,54 +1476,59 @@ gboolean on_tooltip_show(GtkWidget* self, gint x, gint y, gboolean keyboard_mode if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tree), tree_x, tree_y, &path, NULL, NULL, NULL)) { GtkTreeIter iter; if (gtk_tree_model_get_iter(model, &iter, path)) { - gchar *name, *description, *state; + gchar *name, *description, *state, *name_target; gint64 activa, deactiva; int size; gtk_tree_model_get(model, &iter, 5, &name, 6, &description, 11, &state, -1); - config_str target = yon_config_load(get_activate_deactivate_times(name), &size); - free(yon_char_divide_search(target[0], "=", -1)); - yon_char_remove_last_symbol(target[0], '\n'); - free(yon_char_divide_search(target[1], "=", -1)); - yon_char_remove_last_symbol(target[1], '\n'); - free(yon_char_divide_search(target[2], "=", -1)); - yon_char_remove_last_symbol(target[2], '\n'); - activa = g_ascii_strtoll(target[1], NULL, 10); - deactiva = g_ascii_strtoll(target[1], NULL, 10); - + name_target = yon_char_new(name); + if (name[0]=='-'){ + name_target = yon_char_append("-- ",name_target); + } + config_str target = yon_config_load(get_activate_deactivate_times(name_target), &size); + free(name_target); + if (target){ + free(yon_char_divide_search(target[0], "=", -1)); + yon_char_remove_last_symbol(target[0], '\n'); + free(yon_char_divide_search(target[1], "=", -1)); + yon_char_remove_last_symbol(target[1], '\n'); + free(yon_char_divide_search(target[2], "=", -1)); + yon_char_remove_last_symbol(target[2], '\n'); + activa = g_ascii_strtoll(target[1], NULL, 10); + deactiva = g_ascii_strtoll(target[1], NULL, 10); + gtk_label_set_text(GTK_LABEL(widgets->UnitLabel), target[0]); + } gtk_label_set_text(GTK_LABEL(widgets->NameLabel), name); gtk_label_set_text(GTK_LABEL(widgets->DescriptionLabel), description); gtk_label_set_text(GTK_LABEL(widgets->StatusQueryLabel), state); - gtk_label_set_text(GTK_LABEL(widgets->UnitLabel), target[0]); free(name); free(description); free(state); - free(target[1]); - free(target[2]); - - gchar *formatted_activa = NULL; - gchar *formatted_deactiva = NULL; - if (activa) { - GDateTime *datetime = g_date_time_new_from_unix_local(activa); - formatted_activa = g_date_time_format(datetime, "%d:%m:%Y %T"); - g_date_time_unref(datetime); - } else { - formatted_activa = g_strdup(NULL_LABEL); - } - if (deactiva) { - GDateTime *datetime = g_date_time_new_from_unix_local(deactiva); - formatted_deactiva = g_date_time_format(datetime, "%d:%m:%Y %T"); - g_date_time_unref(datetime); - } else { - formatted_deactiva = g_strdup(NULL_LABEL); - } - gtk_label_set_text(GTK_LABEL(widgets->ActivateLabel), formatted_activa); - gtk_label_set_text(GTK_LABEL(widgets->DeactivateLabel), formatted_deactiva); + if (target){ + gchar *formatted_activa = NULL; + gchar *formatted_deactiva = NULL; + if (activa) { + GDateTime *datetime = g_date_time_new_from_unix_local(activa); + formatted_activa = g_date_time_format(datetime, "%d:%m:%Y %T"); + g_date_time_unref(datetime); + } else { + formatted_activa = g_strdup(NULL_LABEL); + } + if (deactiva) { + GDateTime *datetime = g_date_time_new_from_unix_local(deactiva); + formatted_deactiva = g_date_time_format(datetime, "%d:%m:%Y %T"); + g_date_time_unref(datetime); + } else { + formatted_deactiva = g_strdup(NULL_LABEL); + } - g_free(formatted_activa); - g_free(formatted_deactiva); + gtk_label_set_text(GTK_LABEL(widgets->ActivateLabel), formatted_activa); + gtk_label_set_text(GTK_LABEL(widgets->DeactivateLabel), formatted_deactiva); + g_free(formatted_activa); + g_free(formatted_deactiva); + } gtk_tree_path_free(path); return TRUE; }