sensors: find issue with combo

This commit is contained in:
Alastair Poole 2020-12-23 11:54:07 +00:00
parent 10bf9e1197
commit 0b45319b8f
3 changed files with 36 additions and 42 deletions

View File

@ -49,7 +49,7 @@ typedef struct
#if defined(__linux__) #if defined(__linux__)
char *path; char *path;
#elif defined(__OpenBSD__) #elif defined(__OpenBSD__)
int mibs[5]; int mibs[5];
#endif #endif
double value; double value;
bool invalid; bool invalid;
@ -142,12 +142,15 @@ system_memory_usage_get(meminfo_t *memory);
sensor_t ** sensor_t **
system_sensors_thermal_get(int *count); system_sensors_thermal_get(int *count);
int
system_sensor_thermal_get(sensor_t *snsr);
void void
system_sensors_thermal_free(sensor_t **sensors, int count); system_sensors_thermal_free(sensor_t **sensors, int count);
int
system_sensor_thermal_get(sensor_t *sensor);
void
system_sensor_thermal_free(sensor_t *sensor);
void void
system_power_state_get(power_t *power); system_power_state_get(power_t *power);

View File

@ -14,21 +14,27 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/ */
void
system_sensor_thermal_free(sensor_t *sensor)
{
if (sensor->name)
free(sensor->name);
if (sensor->child_name)
free(sensor->child_name);
#if defined(__linux__)
if (sensor->path)
free(sensor->path);
#endif
free(sensor);
}
void void
system_sensors_thermal_free(sensor_t **sensors, int count) system_sensors_thermal_free(sensor_t **sensors, int count)
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
sensor_t *snsr = sensors[i]; sensor_t *sensor = sensors[i];
if (snsr->name) system_sensor_thermal_free(sensor);
free(snsr->name);
if (snsr->child_name)
free(snsr->child_name);
#if defined(__linux__)
if (snsr->path)
free(snsr->path);
#endif
free(snsr);
} }
if (sensors) if (sensors)
free(sensors); free(sensors);
@ -492,7 +498,6 @@ system_power_state_free(power_t *power)
{ {
for (int i = 0; i < power->battery_count; i++) for (int i = 0; i < power->battery_count; i++)
{ {
if (power->batteries[i]->name) if (power->batteries[i]->name)
free(power->batteries[i]->name); free(power->batteries[i]->name);
#if defined(__OpenBSD__) #if defined(__OpenBSD__)

View File

@ -83,7 +83,7 @@ _sensors_update(void *data, Ecore_Thread *thread)
while (!ecore_thread_check(thread)) while (!ecore_thread_check(thread))
{ {
if (pd->selected_it) if (pd->sensor)
{ {
if (!system_sensor_thermal_get(pd->sensor)) if (!system_sensor_thermal_get(pd->sensor))
msg->thermal_valid = 0; msg->thermal_valid = 0;
@ -93,9 +93,11 @@ _sensors_update(void *data, Ecore_Thread *thread)
msg->thermal_temp = pd->sensor->value; msg->thermal_temp = pd->sensor->value;
} }
} }
system_power_state_get(&msg->power); system_power_state_get(&msg->power);
ecore_thread_feedback(thread, msg); ecore_thread_feedback(thread, msg);
if (ecore_thread_check(thread)) break; if (ecore_thread_check(thread)) break;
usleep(1000000); usleep(1000000);
@ -112,21 +114,21 @@ _sensors_update_feedback_cb(void *data, Ecore_Thread *thread, void *msgdata)
Eina_List *l; Eina_List *l;
Data *msg = msgdata; Data *msg = msgdata;
if (!eina_lock_take_try(&_lock)) return;
EINA_LIST_FREE(pd->sensors, s) EINA_LIST_FREE(pd->sensors, s)
elm_genlist_item_append(pd->combobox, pd->itc, s, elm_genlist_item_append(pd->combobox, pd->itc, s,
NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
if (msg->thermal_valid)
elm_progressbar_value_set(pd->thermal_pb, msg->thermal_temp / 100);
l = eina_list_nth_list(pd->batteries, 0); l = eina_list_nth_list(pd->batteries, 0);
if (l) if (l)
{ {
if (msg->power.have_ac) if (msg->power.have_ac)
elm_object_text_set(pd->power_fr, _("Power (AC)")); elm_object_text_set(pd->power_fr, _("Power (AC)"));
else else
elm_object_text_set(pd->power_fr, _("Power")); elm_object_text_set(pd->power_fr, _("Power"));
} }
for (int i = 0; i < msg->power.battery_count; i++) for (int i = 0; l && msg->power.battery_count; i++)
{ {
if (msg->power.batteries[i]->present) if (msg->power.batteries[i]->present)
{ {
@ -136,27 +138,16 @@ _sensors_update_feedback_cb(void *data, Ecore_Thread *thread, void *msgdata)
} }
l = eina_list_next(l); l = eina_list_next(l);
} }
if (msg->thermal_valid)
elm_progressbar_value_set(pd->thermal_pb, msg->thermal_temp / 100);
system_power_state_free(&msg->power); system_power_state_free(&msg->power);
eina_lock_release(&_lock);
} }
static void static void
_item_del(void *data, Evas_Object *obj) _item_del(void *data, Evas_Object *obj)
{ {
sensor_t *s = data; sensor_t *s = data;
if (s->name)
free(s->name); system_sensor_thermal_free(s);
if (s->child_name)
free(s->child_name);
#if defined(__linux__)
if (s->path)
free(s->path);
#endif
free(s);
} }
static void static void
@ -175,7 +166,7 @@ _combo_expanded_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
} }
static void static void
_combo_item_pressed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) _combo_item_pressed_cb(void *data, Evas_Object *obj, void *event_info)
{ {
Ui_Data *pd; Ui_Data *pd;
Elm_Object_Item *it; Elm_Object_Item *it;
@ -193,7 +184,7 @@ _combo_item_pressed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_inf
} }
static Evas_Object * static Evas_Object *
_content_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED) _content_get(void *data, Evas_Object *obj, const char *part)
{ {
Evas_Object *bx, *lb; Evas_Object *bx, *lb;
sensor_t *s; sensor_t *s;
@ -209,8 +200,8 @@ _content_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNU
evas_object_show(bx); evas_object_show(bx);
lb = elm_label_add(obj); lb = elm_label_add(obj);
evas_object_size_hint_weight_set(lb, FILL, FILL); evas_object_size_hint_weight_set(lb, EXPAND, EXPAND);
evas_object_size_hint_align_set(lb, 0.0, EXPAND); evas_object_size_hint_align_set(lb, 0.0, FILL);
_name_set(buf, sizeof(buf), s); _name_set(buf, sizeof(buf), s);
elm_object_text_set(lb, buf); elm_object_text_set(lb, buf);
evas_object_show(lb); evas_object_show(lb);
@ -228,7 +219,6 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
Ui_Data *pd = data; Ui_Data *pd = data;
Ui *ui = pd->ui; Ui *ui = pd->ui;
eina_lock_take(&_lock);
ecore_thread_cancel(ui->sensors.thread); ecore_thread_cancel(ui->sensors.thread);
ecore_thread_wait(ui->sensors.thread, 0.5); ecore_thread_wait(ui->sensors.thread, 0.5);
ui->sensors.thread = NULL; ui->sensors.thread = NULL;
@ -241,8 +231,6 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
elm_genlist_item_class_free(pd->itc); elm_genlist_item_class_free(pd->itc);
free(pd); free(pd);
eina_lock_release(&_lock);
eina_lock_free(&_lock);
} }
static void static void
@ -272,8 +260,6 @@ ui_win_sensors_add(Ui *ui)
if (!pd) return; if (!pd) return;
pd->ui = ui; pd->ui = ui;
eina_lock_new(&_lock);
ui->sensors.win = win = elm_win_util_standard_add("evisum", _("Sensors")); ui->sensors.win = win = elm_win_util_standard_add("evisum", _("Sensors"));
elm_win_autodel_set(win, EINA_TRUE); elm_win_autodel_set(win, EINA_TRUE);
evas_object_size_hint_weight_set(win, EXPAND, EXPAND); evas_object_size_hint_weight_set(win, EXPAND, EXPAND);