Делвин не удаляет окно - PullRequest
       42

Делвин не удаляет окно

0 голосов
/ 27 апреля 2020

Я использую Rust для своего приложения ncurses.

Когда пользователь нажимает F5, окно номеров строк должно быть переключено. Когда пользователь нажимает клавишу F5 в первый раз, окно появляется так, как и должно быть. Однако при втором нажатии клавиши окно не go исчезает, оно все еще там, как если бы вызов delwin не был успешным. Я попытался обновить экран после него, но безуспешно.

Вот минимальный пример:

use ncurses::*;

struct LineNumbers {
    window: WINDOW, 
    shown: bool
}

impl LineNumbers {
    fn new() -> LineNumbers {
        LineNumbers {
            window: newwin(LINES(), 5, 0, 0),
            shown: false                
        }
    }

    fn toggle(&mut self) {
        if self.shown == true {
            self.hide();
        } else {
            self.show();
        }
    }

    fn show(&mut self) {
        self.shown = true;
        wbkgd(self.window, COLOR_PAIR(1));
        wrefresh(self.window);
    }

    fn hide(&mut self) {
        self.shown = false;
        delwin(self.window);
        refresh();
    }
}


fn main() {
    setlocale(LcCategory::all, "");
    initscr();
    keypad(stdscr(), true);
    start_color();
    init_pair(1, COLOR_RED, COLOR_RED);
    let mut ln = LineNumbers::new();
    loop {
        let user_input = get_wch();
        match user_input.unwrap() {
            WchResult::Char(ch) => {
                match ch {
                    27 => break,
                    _ => {}
                }
            },
            WchResult::KeyCode(code) => {
                match code {
                    KEY_F5 => {
                        ln.toggle();
                    },
                    _ => {}
                }
            }
        }
    }
    endwin();
}

В чем может быть проблема?

1 Ответ

0 голосов
/ 27 апреля 2020

Вы можете коснуться главного окна перед выполнением refre sh.

Удаление окна не будет делать это для Вы (man delwin):

Вызов delwin удаляет указанное окно, освобождая всю связанную с ним память (оно фактически не стирает изображение экрана окна). Sub- windows необходимо удалить, прежде чем можно будет удалить главное окно.

Кажется, что ncurses-rs не имеет документации, но является "тонким слоем" (a связывание). Используйте справочные страницы ncurses.

...