Fix window resizing
This commit is contained in:
parent
caac68a3ed
commit
110f2523d3
29
src/sdtui.c
29
src/sdtui.c
|
@ -272,8 +272,7 @@ app_reload_view (Application *self)
|
||||||
if (self->entries->len != 0)
|
if (self->entries->len != 0)
|
||||||
g_ptr_array_remove_range (self->entries, 0, self->entries->len);
|
g_ptr_array_remove_range (self->entries, 0, self->entries->len);
|
||||||
|
|
||||||
self->selected = 0;
|
gint remains = LINES - 1 + self->top_offset;
|
||||||
gint remains = LINES - 1;
|
|
||||||
StardictIterator *iterator =
|
StardictIterator *iterator =
|
||||||
stardict_iterator_new (self->dict, self->top_position);
|
stardict_iterator_new (self->dict, self->top_position);
|
||||||
while (remains > 0 && stardict_iterator_is_valid (iterator))
|
while (remains > 0 && stardict_iterator_is_valid (iterator))
|
||||||
|
@ -533,7 +532,7 @@ append_entry (Application *self, guint32 position)
|
||||||
|
|
||||||
/** Counts the number of definitions available for seeing. */
|
/** Counts the number of definitions available for seeing. */
|
||||||
static guint
|
static guint
|
||||||
count_view_items (Application *self)
|
app_count_view_items (Application *self)
|
||||||
{
|
{
|
||||||
guint i, n_definitions = 0;
|
guint i, n_definitions = 0;
|
||||||
for (i = 0; i < self->entries->len; i++)
|
for (i = 0; i < self->entries->len; i++)
|
||||||
|
@ -549,7 +548,7 @@ static gboolean
|
||||||
app_scroll_up (Application *self, guint n)
|
app_scroll_up (Application *self, guint n)
|
||||||
{
|
{
|
||||||
gboolean success = TRUE;
|
gboolean success = TRUE;
|
||||||
guint n_definitions = count_view_items (self);
|
guint n_definitions = app_count_view_items (self);
|
||||||
while (n--)
|
while (n--)
|
||||||
{
|
{
|
||||||
if (self->top_offset > 0)
|
if (self->top_offset > 0)
|
||||||
|
@ -590,7 +589,7 @@ static gboolean
|
||||||
app_scroll_down (Application *self, guint n)
|
app_scroll_down (Application *self, guint n)
|
||||||
{
|
{
|
||||||
gboolean success = TRUE;
|
gboolean success = TRUE;
|
||||||
guint n_definitions = count_view_items (self);
|
guint n_definitions = app_count_view_items (self);
|
||||||
while (n--)
|
while (n--)
|
||||||
{
|
{
|
||||||
if (self->entries->len == 0)
|
if (self->entries->len == 0)
|
||||||
|
@ -712,6 +711,7 @@ app_search_for_entry (Application *self)
|
||||||
|
|
||||||
self->top_position = stardict_iterator_get_offset (iterator);
|
self->top_position = stardict_iterator_get_offset (iterator);
|
||||||
self->top_offset = 0;
|
self->top_offset = 0;
|
||||||
|
self->selected = 0;
|
||||||
g_object_unref (iterator);
|
g_object_unref (iterator);
|
||||||
|
|
||||||
app_reload_view (self);
|
app_reload_view (self);
|
||||||
|
@ -764,11 +764,22 @@ app_process_nonchar_code (Application *self, CursesEvent *event)
|
||||||
switch (event->code)
|
switch (event->code)
|
||||||
{
|
{
|
||||||
case KEY_RESIZE:
|
case KEY_RESIZE:
|
||||||
// TODO adapt to the new window size, COLS, LINES
|
{
|
||||||
// mind the position of the selection cursor
|
|
||||||
app_reload_view (self);
|
app_reload_view (self);
|
||||||
|
|
||||||
|
guint n_visible = app_count_view_items (self) - self->top_offset;
|
||||||
|
if ((gint) n_visible > LINES - 1)
|
||||||
|
n_visible = LINES - 1;
|
||||||
|
|
||||||
|
if (self->selected >= n_visible)
|
||||||
|
{
|
||||||
|
app_scroll_down (self, self->selected - n_visible + 1);
|
||||||
|
self->selected = n_visible - 1;
|
||||||
|
}
|
||||||
|
|
||||||
app_redraw (self);
|
app_redraw (self);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case KEY_MOUSE:
|
case KEY_MOUSE:
|
||||||
if (!(event->mouse.bstate & BUTTON1_PRESSED))
|
if (!(event->mouse.bstate & BUTTON1_PRESSED))
|
||||||
break;
|
break;
|
||||||
|
@ -785,7 +796,7 @@ app_process_nonchar_code (Application *self, CursesEvent *event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event->mouse.y <= (int)
|
else if (event->mouse.y <= (int)
|
||||||
(count_view_items (self) - self->top_offset))
|
(app_count_view_items (self) - self->top_offset))
|
||||||
{
|
{
|
||||||
self->selected = event->mouse.y - 1;
|
self->selected = event->mouse.y - 1;
|
||||||
app_redraw_view (self);
|
app_redraw_view (self);
|
||||||
|
@ -805,7 +816,7 @@ app_process_nonchar_code (Application *self, CursesEvent *event)
|
||||||
break;
|
break;
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
if ((gint) self->selected < LINES - 2 &&
|
if ((gint) self->selected < LINES - 2 &&
|
||||||
self->selected < count_view_items (self) - self->top_offset - 1)
|
self->selected < app_count_view_items (self) - self->top_offset - 1)
|
||||||
{
|
{
|
||||||
self->selected++;
|
self->selected++;
|
||||||
app_redraw_view (self);
|
app_redraw_view (self);
|
||||||
|
|
Loading…
Reference in New Issue