commit e5bdbd74dfdd1a238bde307a3613b995021ffeda
parent b9b73721a1cc87c9a6b8d68f0529e2c273f3440a
Author: lumidify <nobody@lumidify.org>
Date: Sun, 22 May 2022 21:49:39 +0200
Remove undefined behavior from widget vtables
Diffstat:
7 files changed, 67 insertions(+), 22 deletions(-)
diff --git a/src/box.c b/src/box.c
@@ -48,14 +48,20 @@ static int ltk_box_mouse_release(ltk_widget *self, XEvent event);
static int ltk_box_motion_notify(ltk_widget *self, XEvent event);
static struct ltk_widget_vtable vtable = {
+ .change_state = NULL,
+ .hide = NULL,
.draw = <k_box_draw,
.destroy = <k_box_destroy,
.resize = <k_recalculate_box,
.child_size_change = <k_box_child_size_change,
.remove_child = <k_box_remove,
+ .key_press = NULL,
+ .key_release = NULL,
.mouse_press = <k_box_mouse_press,
.mouse_release = <k_box_mouse_release,
.motion_notify = <k_box_motion_notify,
+ .mouse_leave = NULL,
+ .mouse_enter = NULL,
.needs_redraw = 0,
.needs_surface = 0,
.type = LTK_BOX
diff --git a/src/button.c b/src/button.c
@@ -46,13 +46,23 @@ static void ltk_button_change_state(ltk_widget *self);
static void ltk_button_redraw_surface(ltk_button *button, ltk_surface *s);
static struct ltk_widget_vtable vtable = {
- .mouse_release = <k_button_mouse_release,
- .change_state = <k_button_change_state,
- .draw = <k_button_draw,
- .destroy = <k_button_destroy,
- .type = LTK_BUTTON,
- .needs_redraw = 1,
- .needs_surface = 1
+ .key_press = NULL,
+ .key_release = NULL,
+ .mouse_press = NULL,
+ .mouse_release = <k_button_mouse_release,
+ .motion_notify = NULL,
+ .mouse_leave = NULL,
+ .mouse_enter = NULL,
+ .change_state = <k_button_change_state,
+ .resize = NULL,
+ .hide = NULL,
+ .draw = <k_button_draw,
+ .destroy = <k_button_destroy,
+ .child_size_change = NULL,
+ .remove_child = NULL,
+ .type = LTK_BUTTON,
+ .needs_redraw = 1,
+ .needs_surface = 1
};
static struct {
diff --git a/src/grid.c b/src/grid.c
@@ -60,11 +60,17 @@ static struct ltk_widget_vtable vtable = {
.draw = <k_grid_draw,
.destroy = <k_grid_destroy,
.resize = <k_recalculate_grid,
+ .hide = NULL,
+ .change_state = NULL,
.child_size_change = <k_grid_child_size_change,
.remove_child = <k_grid_ungrid,
.mouse_press = <k_grid_mouse_press,
.mouse_release = <k_grid_mouse_release,
.motion_notify = <k_grid_motion_notify,
+ .mouse_leave = NULL,
+ .mouse_enter = NULL,
+ .key_press = NULL,
+ .key_release = NULL,
.type = LTK_GRID,
.needs_redraw = 0,
.needs_surface = 0
diff --git a/src/label.c b/src/label.c
@@ -45,6 +45,18 @@ static void ltk_label_redraw_surface(ltk_label *label, ltk_surface *s);
static struct ltk_widget_vtable vtable = {
.draw = <k_label_draw,
.destroy = <k_label_destroy,
+ .hide = NULL,
+ .resize = NULL,
+ .change_state = NULL,
+ .child_size_change = NULL,
+ .remove_child = NULL,
+ .key_press = NULL,
+ .key_release = NULL,
+ .mouse_press = NULL,
+ .mouse_release = NULL,
+ .motion_notify = NULL,
+ .mouse_leave = NULL,
+ .mouse_enter = NULL,
.type = LTK_LABEL,
.needs_redraw = 1,
.needs_surface = 1
diff --git a/src/menu.c b/src/menu.c
@@ -121,19 +121,23 @@ static int ltk_menu_enable_entry_id(ltk_menu *menu, const char *id, char **errst
static int ltk_menu_enable_all_entries(ltk_menu *menu, char **errstr);
static struct ltk_widget_vtable vtable = {
- .mouse_press = <k_menu_mouse_press,
- .motion_notify = <k_menu_motion_notify,
- .mouse_release = <k_menu_mouse_release,
- .mouse_enter = <k_menu_mouse_enter,
- .mouse_leave = <k_menu_mouse_leave,
- .resize = <k_menu_resize,
- .change_state = <k_menu_change_state,
- .hide = <k_menu_hide,
- .draw = <k_menu_draw,
- .destroy = <k_menu_destroy,
- .type = LTK_MENU,
- .needs_redraw = 1,
- .needs_surface = 1
+ .key_press = NULL,
+ .key_release = NULL,
+ .mouse_press = <k_menu_mouse_press,
+ .motion_notify = <k_menu_motion_notify,
+ .mouse_release = <k_menu_mouse_release,
+ .mouse_enter = <k_menu_mouse_enter,
+ .mouse_leave = <k_menu_mouse_leave,
+ .resize = <k_menu_resize,
+ .change_state = <k_menu_change_state,
+ .hide = <k_menu_hide,
+ .draw = <k_menu_draw,
+ .destroy = <k_menu_destroy,
+ .child_size_change = NULL,
+ .remove_child = NULL,
+ .type = LTK_MENU,
+ .needs_redraw = 1,
+ .needs_surface = 1
};
/* FIXME: maybe just store colors as pointers and check after
diff --git a/src/scrollbar.c b/src/scrollbar.c
@@ -41,9 +41,17 @@ static void ltk_scrollbar_destroy(ltk_widget *self, int shallow);
static struct ltk_widget_vtable vtable = {
.draw = <k_scrollbar_draw,
+ .destroy = <k_scrollbar_destroy,
+ .change_state = NULL,
+ .hide = NULL,
+ .resize = NULL,
.mouse_press = <k_scrollbar_mouse_press,
+ .mouse_release = NULL,
.motion_notify = <k_scrollbar_motion_notify,
- .destroy = <k_scrollbar_destroy,
+ .mouse_leave = NULL,
+ .mouse_enter = NULL,
+ .child_size_change = NULL,
+ .remove_child = NULL,
.type = LTK_UNKNOWN, /* FIXME */
.needs_redraw = 1,
.needs_surface = 1
diff --git a/src/widget.h b/src/widget.h
@@ -90,7 +90,6 @@ struct ltk_widget_vtable {
void (*key_release) (struct ltk_widget *, XEvent);
int (*mouse_press) (struct ltk_widget *, XEvent);
int (*mouse_release) (struct ltk_widget *, XEvent);
- int (*mouse_wheel) (struct ltk_widget *, XEvent);
int (*motion_notify) (struct ltk_widget *, XEvent);
int (*mouse_leave) (struct ltk_widget *, XEvent);
int (*mouse_enter) (struct ltk_widget *, XEvent);