1
0
Fork 0
mirror of https://github.com/davatorium/rofi.git synced 2025-02-17 15:45:56 -05:00

[listview] Add extra checks before resolving pointer.

Issue: #1703
This commit is contained in:
Dave Davenport 2022-09-10 17:42:49 +02:00
parent fce721a105
commit 858d6c030c

View file

@ -583,13 +583,20 @@ unsigned int listview_get_selected(listview *lv) {
}
void listview_set_selected(listview *lv, unsigned int selected) {
if (lv && lv->req_elements > 0) {
if (lv == NULL) {
return;
}
if (lv->req_elements > 0) {
lv->selected = MIN(selected, lv->req_elements - 1);
lv->barview.direction = LEFT_TO_RIGHT;
widget_queue_redraw(WIDGET(lv));
lv->sc_callback(lv, lv->selected, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, lv->selected, lv->sc_udata);
}
} else if (lv->req_elements == 0) {
lv->sc_callback(lv, UINT32_MAX, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, UINT32_MAX, lv->sc_udata);
}
}
}
@ -790,7 +797,9 @@ static void listview_nav_up_int(listview *lv) {
lv->selected--;
lv->barview.direction = RIGHT_TO_LEFT;
lv->sc_callback(lv, lv->selected, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, lv->selected, lv->sc_udata);
}
widget_queue_redraw(WIDGET(lv));
}
static void listview_nav_down_int(listview *lv) {
@ -805,7 +814,9 @@ static void listview_nav_down_int(listview *lv) {
? MIN(lv->req_elements - 1, lv->selected + 1)
: 0;
lv->barview.direction = LEFT_TO_RIGHT;
lv->sc_callback(lv, lv->selected, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, lv->selected, lv->sc_udata);
}
widget_queue_redraw(WIDGET(lv));
}
void listview_nav_next(listview *lv) {
@ -824,14 +835,18 @@ void listview_nav_prev(listview *lv) {
static void listview_nav_column_left_int(listview *lv) {
if (lv->selected >= lv->cur_columns) {
lv->selected -= lv->cur_columns;
lv->sc_callback(lv, lv->selected, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, lv->selected, lv->sc_udata);
}
widget_queue_redraw(WIDGET(lv));
}
}
static void listview_nav_column_right_int(listview *lv) {
if ((lv->selected + lv->cur_columns) < lv->req_elements) {
lv->selected += lv->cur_columns;
lv->sc_callback(lv, lv->selected, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, lv->selected, lv->sc_udata);
}
widget_queue_redraw(WIDGET(lv));
}
}
@ -890,7 +905,9 @@ void listview_nav_left(listview *lv) {
}
if (lv->selected >= lv->max_rows) {
lv->selected -= lv->max_rows;
lv->sc_callback(lv, lv->selected, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, lv->selected, lv->sc_udata);
}
widget_queue_redraw(WIDGET(lv));
}
}
@ -911,7 +928,9 @@ void listview_nav_right(listview *lv) {
}
if ((lv->selected + lv->max_rows) < lv->req_elements) {
lv->selected += lv->max_rows;
lv->sc_callback(lv, lv->selected, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, lv->selected, lv->sc_udata);
}
widget_queue_redraw(WIDGET(lv));
} else if (lv->selected < (lv->req_elements - 1)) {
// We do not want to move to last item, UNLESS the last column is only
@ -923,7 +942,9 @@ void listview_nav_right(listview *lv) {
// If there is an extra column, move.
if (col != ncol) {
lv->selected = lv->req_elements - 1;
lv->sc_callback(lv, lv->selected, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, lv->selected, lv->sc_udata);
}
widget_queue_redraw(WIDGET(lv));
}
}
@ -949,7 +970,9 @@ static void listview_nav_page_prev_int(listview *lv) {
} else {
lv->selected -= (lv->max_elements);
}
lv->sc_callback(lv, lv->selected, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, lv->selected, lv->sc_udata);
}
widget_queue_redraw(WIDGET(lv));
}
static void listview_nav_page_next_int(listview *lv) {
@ -964,7 +987,9 @@ static void listview_nav_page_next_int(listview *lv) {
lv->selected = MIN(new, lv->req_elements - 1);
lv->barview.direction = LEFT_TO_RIGHT;
lv->sc_callback(lv, lv->selected, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, lv->selected, lv->sc_udata);
}
widget_queue_redraw(WIDGET(lv));
return;
}
@ -972,7 +997,9 @@ static void listview_nav_page_next_int(listview *lv) {
if (lv->selected >= lv->req_elements) {
lv->selected = lv->req_elements - 1;
}
lv->sc_callback(lv, lv->selected, lv->sc_udata);
if (lv->sc_callback) {
lv->sc_callback(lv, lv->selected, lv->sc_udata);
}
widget_queue_redraw(WIDGET(lv));
}