mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	[lvgl] Fix dangling pointer issue with qrcode (#9190)
This commit is contained in:
		| @@ -3,7 +3,7 @@ import esphome.config_validation as cv | |||||||
| from esphome.const import CONF_SIZE, CONF_TEXT | from esphome.const import CONF_SIZE, CONF_TEXT | ||||||
| from esphome.cpp_generator import MockObjClass | from esphome.cpp_generator import MockObjClass | ||||||
|  |  | ||||||
| from ..defines import CONF_MAIN, literal | from ..defines import CONF_MAIN | ||||||
| from ..lv_validation import color, color_retmapper, lv_text | from ..lv_validation import color, color_retmapper, lv_text | ||||||
| from ..lvcode import LocalVariable, lv, lv_expr | from ..lvcode import LocalVariable, lv, lv_expr | ||||||
| from ..schemas import TEXT_SCHEMA | from ..schemas import TEXT_SCHEMA | ||||||
| @@ -34,7 +34,7 @@ class QrCodeType(WidgetType): | |||||||
|         ) |         ) | ||||||
|  |  | ||||||
|     def get_uses(self): |     def get_uses(self): | ||||||
|         return ("canvas", "img") |         return ("canvas", "img", "label") | ||||||
|  |  | ||||||
|     def obj_creator(self, parent: MockObjClass, config: dict): |     def obj_creator(self, parent: MockObjClass, config: dict): | ||||||
|         dark_color = color_retmapper(config[CONF_DARK_COLOR]) |         dark_color = color_retmapper(config[CONF_DARK_COLOR]) | ||||||
| @@ -45,10 +45,8 @@ class QrCodeType(WidgetType): | |||||||
|     async def to_code(self, w: Widget, config): |     async def to_code(self, w: Widget, config): | ||||||
|         if (value := config.get(CONF_TEXT)) is not None: |         if (value := config.get(CONF_TEXT)) is not None: | ||||||
|             value = await lv_text.process(value) |             value = await lv_text.process(value) | ||||||
|             with LocalVariable( |             with LocalVariable("qr_text", cg.std_string, value, modifier="") as str_obj: | ||||||
|                 "qr_text", cg.const_char_ptr, value, modifier="" |                 lv.qrcode_update(w.obj, str_obj.c_str(), str_obj.size()) | ||||||
|             ) as str_obj: |  | ||||||
|                 lv.qrcode_update(w.obj, str_obj, literal(f"strlen({str_obj})")) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| qr_code_spec = QrCodeType() | qr_code_spec = QrCodeType() | ||||||
|   | |||||||
| @@ -646,7 +646,9 @@ lvgl: | |||||||
|             on_click: |             on_click: | ||||||
|               lvgl.qrcode.update: |               lvgl.qrcode.update: | ||||||
|                 id: lv_qr |                 id: lv_qr | ||||||
|                 text: homeassistant.io |                 text: | ||||||
|  |                   format: "A string with a number %d" | ||||||
|  |                   args: ['(int)(random_uint32() % 1000)'] | ||||||
|  |  | ||||||
|         - slider: |         - slider: | ||||||
|             min_value: 0 |             min_value: 0 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user