LINUX.ORG.RU

Gtk SearchEntry не обрабатывает пробел

 , , ,


0

1

Собственно, этим все сказано. Печатает все остальные печатные символы с клавиатуры, но не пробел. Если передаю пробел, handle_event возвращает GDK_EVENT_PROPAGATE.

Минимальный пример:

#include <gtkmm.h>

class Window : public Gtk::Window {
public:
    Window(): Gtk::Window() {
        this->entry.set_placeholder_text("Сюда печатать");
        this->add(entry);
        this->show_all_children();
    }
    bool on_key_press_event(GdkEventKey* event) {
        if (event->keyval == GDK_KEY_Escape) {
            Gtk::Main::quit();
        }
        return this->entry.handle_event(event) == GDK_EVENT_STOP;
    }

    Gtk::SearchEntry entry;
};

int main(int argc, char** argv) {
    auto app = Gtk::Application::create(argc, argv, "org.primer.Primer");
    auto window = Window();
    window.show();
    app->run(window);
}

Вот так работает:

#include <gtkmm.h>

class Window : public Gtk::Window {
public:
    Window(): Gtk::Window() {
        this->entry.set_placeholder_text("Сюда печатать");
        this->add(entry);
        this->show_all_children();
    }
    bool on_key_press_event(GdkEventKey* event) override {
        if (event->keyval == GDK_KEY_Escape) {
             get_application()->quit();
        }
        return Gtk::Window::on_key_press_event(event);
    }

    Gtk::SearchEntry entry;
};

int main(int argc, char** argv) {
    auto app = Gtk::Application::create(argc, argv, "org.primer.Primer");
    auto window = Window();
    window.show();
    app->run(window);
}

И Gtk::Main::quit(); не надо использовать отдельно от Gtk::Main::run.

Если запускать код как в изначальном примере, то при нажатии ESC c ним у меня был segfault…

fsb4000 ★★★★★ ()
Ответ на: комментарий от fsb4000

Спасибо, я как раз начал переписывать с Main под Application, а так вообще двух зайцев одним разом получится убить.

то при нажатии ESC c ним у меня был segfault…

Да у меня тоже. Реальный код, как ни странно, не сегфолтится, хотя там выход примерно так же сделан.

Siborgium ★★★ ()
Последнее исправление: Siborgium (всего исправлений: 2)