|
|
commit deeb977c2e99cbd2f6ccfb781c34c7d60de8ebce
Author: Albrecht Schlosser <albrechts.fltk@online.de>
AuthorDate: Tue Sep 6 20:04:33 2022 +0200
Commit: Albrecht Schlosser <albrechts.fltk@online.de>
CommitDate: Tue Sep 6 20:04:33 2022 +0200
Wayland: fix memory leak on FL_KEYUP events
The old code would allocate memory on FL_KEYDOWN and FL_KEYUP events
and never free the latter.
The fix is to allocate memory only on FL_KEYDOWN events which will
be free'd later as intended.
Also fix two unrelated whitespace errors.
src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
index 9ef33ad..b12b32b 100644
--- src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
+++ src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
@@ -711,11 +711,12 @@ fprintf(stderr, "key %s: sym: %-12s(%d) code:%u fl_win=%p, ", action, buf, sym,
Fl::e_is_click = 0;
Fl::handle(event, win);
}
- key_repeat_data_t *key_repeat_data = new key_repeat_data_t;
- key_repeat_data->time = time;
- key_repeat_data->window = win;
- if (event == FL_KEYDOWN && status == XKB_COMPOSE_NOTHING && !(sym >= FL_Shift_L && sym <= FL_Alt_R))
+ if (event == FL_KEYDOWN && status == XKB_COMPOSE_NOTHING && !(sym >= FL_Shift_L && sym <= FL_Alt_R)) {
+ key_repeat_data_t *key_repeat_data = new key_repeat_data_t;
+ key_repeat_data->time = time;
+ key_repeat_data->window = win;
Fl::add_timeout(KEY_REPEAT_DELAY, (Fl_Timeout_Handler)key_repeat_timer_cb, key_repeat_data);
+ }
}
static void wl_keyboard_leave(void *data, struct wl_keyboard *wl_keyboard,
@@ -1112,7 +1113,7 @@ void Fl_Wayland_Screen_Driver::open_display_platform() {
Fl::screen_driver()->open_display();
return;
}
-
+
if (!wl_display) {
wl_display = wl_display_connect(NULL);
if (!wl_display) {
@@ -1485,7 +1486,7 @@ void Fl_Wayland_Screen_Driver::reset_spot() {
}
-struct wl_display *fl_wl_display() {
+struct wl_display *fl_wl_display() {
if (!Fl_Wayland_Screen_Driver::wl_display || !Fl_Wayland_Screen_Driver::wl_registry) return NULL;
return Fl_Wayland_Screen_Driver::wl_display;
}
[ Direct Link to Message ] | |
|
| |