gtk (mm) 3 текстовое представление, закрепленное в текстовом представлении, не может получить курсор внутри - PullRequest
0 голосов
/ 05 февраля 2019

Проблема происходит только сборка для GTK3;сборка того же кода для GTK2 работает нормально.

В приведенном ниже коде текстовое представление привязано к другому текстовому представлению.Проблема в том, что даже если я щелкну мышью, у меня не будет возможности переместить курсор внутри вложенного текстового представления для записи текста.Вместо этого курсор может легко попасть в текстовую запись чуть ниже.

// g++ codebox.cc -o codebox `pkg-config gtkmm-3.0 --cflags --libs`
// g++ codebox.cc -o codebox `pkg-config gtkmm-2.4 --cflags --libs`

#include <iostream>
#include <gtkmm.h>


int main(int argc, char *argv[])
{
    Gtk::Main kit(argc, argv);
    Gtk::Window  window;
    window.set_default_size(450, 450);
    Gtk::TextView textViewBase;
    Glib::RefPtr<Gtk::TextBuffer> rBufferBase = textViewBase.get_buffer();

    Gtk::TextView textViewNested;
    Gtk::ScrolledWindow scrolledWindowNested;
    scrolledWindowNested.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
    scrolledWindowNested.add(textViewNested);
    scrolledWindowNested.set_size_request(300, 300);

    Gtk::Entry entryNested;

    rBufferBase->insert(rBufferBase->end(), "Anchored TextView below:\n==>");
    Glib::RefPtr<Gtk::TextChildAnchor> rAnchorTextView = rBufferBase->create_child_anchor(rBufferBase->end());
    rBufferBase->insert(rBufferBase->end(), "<==\nAnchored TextView above^\n\nAnchored Entry below:\n==>");
    Glib::RefPtr<Gtk::TextChildAnchor> rAnchorEntry = rBufferBase->create_child_anchor(rBufferBase->end());
    rBufferBase->insert(rBufferBase->end(), "<==\nAnchored Entry above^\n");

    textViewBase.add_child_at_anchor(scrolledWindowNested, rAnchorTextView);
    scrolledWindowNested.show_all();
    textViewBase.add_child_at_anchor(entryNested, rAnchorEntry);
    entryNested.show_all();

    window.add(textViewBase);
    window.show_all();
    Gtk::Main::run(window);
    return EXIT_SUCCESS;
}

1 Ответ

0 голосов
/ 17 февраля 2019

Во вложенном текстовом представлении остановка signal_button_press_event (мыши) для достижения нижеследующего базового текстового представления делает свое дело:

textViewNested.signal_button_press_event().connect([](GdkEventButton* pEvent){ return true; });
...