LINUX.ORG.RU

Gtk.TextView моргает, когда вставляешь текст

 ,


0

1

Как сделать, чтобы TextView не перелистывался, когда вставляю текст?

Я хочу много много раз вставить текст по немногу, при этом чтобы положение линейки прокрутки не перематывалось. Что-то типа заморозки события scroll.

★★★★★
Ответ на: комментарий от ananas

Не помогает.
На момент вставки всё замирает, но когда «размораживаешь», все события отрабатывают - а именно TextView также проматывается сверху вниз.

Нужно бы как-то подчистить/сбросить все события TextView...

Novator ★★★★★
() автор топика
Ответ на: комментарий от ananas
Ответ на: комментарий от ananas
textview = Gtk::TextView.new
buf = textview.buffer
buf.insert(buf.end_iter, 'Строка 1')
buf.apply_tag('bold', buf.get_iter_at_offset(1), 
  buf.get_iter_at_offset(5))
buf.insert(buf.end_iter, 'Строка 2')
buf.apply_tag('bold', buf.get_iter_at_offset(8), 
  buf.get_iter_at_offset(13))
buf.insert(buf.end_iter, 'Строка 3')
buf.apply_tag('bold', buf.get_iter_at_offset(16), 
  buf.get_iter_at_offset(21))
...
buf.insert(buf.end_iter, 'Строка 500')
buf.apply_tag('bold', buf.get_iter_at_offset(3900), 
  buf.get_iter_at_offset(3905))

Потом оно начинает перематывать с 1й строки до 500й.

Novator ★★★★★
() автор топика
Последнее исправление: Novator (всего исправлений: 3)
Ответ на: комментарий от ananas

Уверен, insert_iter_with_tags ничего не даст, моргание не с этим связано.

А GtkSourceView не устраивает, мне нужен полный контроль над разметками и не нужны левые зависимости (а он много говна тянет).

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

если в приведенном примере моргание присутствует - дело как раз в тегах.

вот пример вставки текста в GtkTextView - https://sourceforge.net/p/yad-dialog/code/HEAD/tree/trunk/src/text.c#l302

на проверке

for i in {1..10000}; do echo "Строка $i"; sleep 0.2; done | yad --text-info
ничего не моргает

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

Вобщем, уточняю вопрос:
как добавить текст в TextView без перемотки?

p.s. Похоже, в новых версиях Gtk что-то изменили. Раньше вертикальная линейка не перематывалась в конец при добавлении текста, а сейчас перематывается всегда (при использовании любых способов). Причём, перематывается даже когда добавляешь не в конец, а в начало или даже середину буфера.

Novator ★★★★★
() автор топика
Последнее исправление: Novator (всего исправлений: 2)
Ответ на: комментарий от ananas

Всё! Разобрался! Я сам себе, оказывается, на яйца наступил - когда-то добавил обработчик:

textview.signal_connect('size-allocate') do |widget, step, arg2|
  widget.parent.vadjustment.value = \
    widget.parent.vadjustment.upper - widget.parent.vadjustment.page_size
end

А теперь настрадался из-за него.
Убрал, и перестало (естественно) перематываться.

Novator ★★★★★
() автор топика
Последнее исправление: Novator (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.