commit 12a37bf84755943e32b70a7afca27f4928f684af
parent f9064673e6ced9b9d8a2c1461c108170c15a96bc
Author: lumidify <nobody@lumidify.org>
Date: Mon, 15 Nov 2021 09:59:49 +0100
Filter resize events
Diffstat:
4 files changed, 38 insertions(+), 13 deletions(-)
diff --git a/buffer.c b/buffer.c
@@ -1810,7 +1810,7 @@ ledit_buffer_delete_range_base(
*new_byte_ret = new_byte;
}
-/* FIXME */
+/* FIXME: always normalize lines */
void
ledit_buffer_resize_textview(ledit_buffer *buffer) {
buffer->total_height = 0;
diff --git a/config.h b/config.h
@@ -1,5 +1,19 @@
-/* minimum time between redraws (nanoseconds) */
+/* Note: These have to be less than one second */
+
+/*
+ * minimum time between redraws (nanoseconds)
+ */
#define TICK (long long)20000000
-/* minimum time between processing of mouse events -
- events inbetween are discarded (nanoseconds) */
+
+/*
+ * minimum time between processing of mouse events -
+ * mouse movement events inbetween are discarded,
+ * scroll events are added up (nanoseconds)
+ */
#define MOUSE_TICK (long long)100000000
+
+/*
+ * minimum time between processing of window resize
+ * events - events inbetween are discarded (nanoseconds)
+ */
+#define RESIZE_TICK (long long)200000000
diff --git a/ledit.c b/ledit.c
@@ -108,12 +108,12 @@ mainloop(void) {
/* store last time that a mouse event was processed in order to
avoid sending too many mouse events to be processed */
/* also store last draw time so framerate can be limited */
- struct timespec now, elapsed, last, last_scroll, last_motion, sleep_time;
+ struct timespec now, elapsed, last, last_scroll, last_motion, last_resize, sleep_time;
clock_gettime(CLOCK_MONOTONIC, &last);
- last_scroll = last_motion = last;
+ last_scroll = last_motion = last_resize = last;
sleep_time.tv_sec = 0;
- XEvent last_scroll_event, last_motion_event;
- int last_scroll_valid = 0, last_motion_valid = 0;
+ XEvent last_scroll_event, last_motion_event, last_resize_event;
+ int last_scroll_valid = 0, last_motion_valid = 0, last_resize_valid = 0;
int scroll_num = 0;
int scroll_delta = 0;
while (running) {
@@ -132,11 +132,8 @@ mainloop(void) {
need_redraw = 1;
break;
case ConfigureNotify:
- resize_window(
- event.xconfigure.width,
- event.xconfigure.height
- );
- need_redraw = 1;
+ last_resize_event = event;
+ last_resize_valid = 1;
break;
case ButtonPress:
/* FIXME: this is all a bit hacky */
@@ -201,6 +198,19 @@ mainloop(void) {
last_scroll_valid = 0;
}
}
+ if (last_resize_valid) {
+ clock_gettime(CLOCK_MONOTONIC, &now);
+ ledit_timespecsub(&now, &last_resize, &elapsed);
+ if (elapsed.tv_sec > 0 || elapsed.tv_nsec >= RESIZE_TICK) {
+ resize_window(
+ last_resize_event.xconfigure.width,
+ last_resize_event.xconfigure.height
+ );
+ last_resize = now;
+ last_resize_valid = 0;
+ need_redraw = 1;
+ }
+ }
if (change_kbd) {
change_kbd = 0;
diff --git a/search.c b/search.c
@@ -91,6 +91,7 @@ search_forward(ledit_buffer *buffer, int *line_ret, int *byte_ret) {
}
/* FIXME: this is insanely inefficient */
+/* FIXME: just go backwards char-by-char and compare */
static enum ledit_search_state
search_backward(ledit_buffer *buffer, int *line_ret, int *byte_ret) {
*line_ret = buffer->cur_line;