mirror of
https://github.com/davatorium/rofi.git
synced 2025-02-10 15:44:41 -05:00
duplicate window bug
This commit is contained in:
parent
e2ce7b0f5a
commit
d3a5181873
1 changed files with 12 additions and 4 deletions
|
@ -588,10 +588,14 @@ int menu(char **lines, char **input, char *prompt, int selected)
|
||||||
|
|
||||||
// filtered list
|
// filtered list
|
||||||
char **filtered = allocate_clear(sizeof(char*) * max_lines);
|
char **filtered = allocate_clear(sizeof(char*) * max_lines);
|
||||||
|
int *line_map = allocate_clear(sizeof(int) * max_lines);
|
||||||
int filtered_lines = max_lines;
|
int filtered_lines = max_lines;
|
||||||
|
|
||||||
for (i = 0; i < max_lines; i++)
|
for (i = 0; i < max_lines; i++)
|
||||||
|
{
|
||||||
filtered[i] = lines[i];
|
filtered[i] = lines[i];
|
||||||
|
line_map[i] = i;
|
||||||
|
}
|
||||||
|
|
||||||
// resize window vertically to suit
|
// resize window vertically to suit
|
||||||
int h = line_height * (max_lines+1) + 8;
|
int h = line_height * (max_lines+1) + 8;
|
||||||
|
@ -626,8 +630,13 @@ int menu(char **lines, char **input, char *prompt, int selected)
|
||||||
{
|
{
|
||||||
// input changed
|
// input changed
|
||||||
for (i = 0, j = 0; i < num_lines && j < max_lines; i++)
|
for (i = 0, j = 0; i < num_lines && j < max_lines; i++)
|
||||||
|
{
|
||||||
if (strcasestr(lines[i], text->text))
|
if (strcasestr(lines[i], text->text))
|
||||||
|
{
|
||||||
|
line_map[j] = i;
|
||||||
filtered[j++] = lines[i];
|
filtered[j++] = lines[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
filtered_lines = j;
|
filtered_lines = j;
|
||||||
selected = MAX(0, MIN(selected, j-1));
|
selected = MAX(0, MIN(selected, j-1));
|
||||||
for (; j < max_lines; j++)
|
for (; j < max_lines; j++)
|
||||||
|
@ -644,7 +653,7 @@ int menu(char **lines, char **input, char *prompt, int selected)
|
||||||
if (key == XK_Up)
|
if (key == XK_Up)
|
||||||
selected = selected ? MAX(0, selected-1): MAX(0, filtered_lines-1);
|
selected = selected ? MAX(0, selected-1): MAX(0, filtered_lines-1);
|
||||||
|
|
||||||
if (key == XK_Down)
|
if (key == XK_Down || key == XK_Tab)
|
||||||
selected = selected < filtered_lines-1 ? MIN(filtered_lines-1, selected+1): 0;
|
selected = selected < filtered_lines-1 ? MIN(filtered_lines-1, selected+1): 0;
|
||||||
}
|
}
|
||||||
menu_draw(text, boxes, max_lines, selected, filtered);
|
menu_draw(text, boxes, max_lines, selected, filtered);
|
||||||
|
@ -653,9 +662,7 @@ int menu(char **lines, char **input, char *prompt, int selected)
|
||||||
release_keyboard();
|
release_keyboard();
|
||||||
|
|
||||||
if (chosen && filtered[selected])
|
if (chosen && filtered[selected])
|
||||||
for (i = 0; line < 0 && i < num_lines; i++)
|
line = line_map[selected];
|
||||||
if (!strcmp(lines[i], filtered[selected]))
|
|
||||||
line = i;
|
|
||||||
|
|
||||||
if (line < 0 && input)
|
if (line < 0 && input)
|
||||||
*input = strdup(text->text);
|
*input = strdup(text->text);
|
||||||
|
@ -665,6 +672,7 @@ int menu(char **lines, char **input, char *prompt, int selected)
|
||||||
textbox_free(boxes[i]);
|
textbox_free(boxes[i]);
|
||||||
XDestroyWindow(display, box);
|
XDestroyWindow(display, box);
|
||||||
free(filtered);
|
free(filtered);
|
||||||
|
free(line_map);
|
||||||
|
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue