Как показать нужную страницу

Автор Борис_С, 5 августа 2020, 15:28

0 Пользователи и 1 гость просматривают эту тему.

Борис_С

Всем доброго дня!
Столкнулся с такой проблемой: могу переместить курсор на нужную страницу (метод jumpToPage(n)),
но при этом на экране не высвечивается страница, на которую переместился курсор.
Как показать на экране нужную страницу?

Борис_С

Разобрался. Когда работаю с макросом как с расширением, все работает как нужно.
Когда работаю с макросом в отладчике, результаты другие: нужная страница не высвечивается.
Наверное, нужно рассказать об этой ошибке разработчикам.
Кто-нибудь знает, как с ними связаться?

mikekaganski

Почему Вы считаете это ошибкой? Метод jumpToPage меняет положение курсора, а не переключает активные окна. Всё правильно.
С уважением,
Михаил Каганский

Борис_С

А разве это правильно получать разные результаты в отладчике и в расширении, которые работают с одним и тем же макросом?

mikekaganski

Что значит "разные"? Результат - перемещение курсора. Это происходит в любом случае. Если при этом окно Writer неактивно (потому что активно окно отладчика), оно и остаётся неактивным.

Или Вы говорите, что в Writer Ваш (неизвестный) код не перемещает курсор? Без нормального описания, кода и тестового документа ничего сказать нельзя.
С уважением,
Михаил Каганский

Борис_С

Я делаю окно Writer активным, но оно остается в том же состоянии, что и до перемещения курсора.

mikekaganski

Так и не увидев конкретный код, проверил это на документе Writer с несколькими страницами под LO 7.0.0.3:

ThisComponent.CurrentController.ViewCursor.jumpToPage(3)

Как и ожидалось, курсор перемещается нормально в обоих случаях. При этом в случае если окно Writer активно, вид также перемещается за курсором; если неактивно - вид не обновляется (как и реализовано в SwCursorShell::UpdateCursor).

Так что всё работает как задумано. Курсор перемещается корректно. То, что при активном окне дополнительно и вид перемещается, чтобы не вводить пользователя в заблуждение - это побочный эффект, и это не связано с отладчиком: то же самое будет и без отладчика, если работа происходит в неактивном окне (скажем, другой документ или другое приложение активны при срабатывании таймера).

Логика в том, что неактивный документ не должен мельтешить на заднем плане - не с ним идёт работа; при этом не тратятся ресурсы на никому не нужную перерисовку.
С уважением,
Михаил Каганский

Борис_С

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

mikekaganski

#8
Отладка - это процесс наблюдения. Эффект наблюдателя в чистом виде.
Отладка как раз не меняет поведения программы (в том смысле, что было бы странно, если бы неактивное окно в норме вело себя так, а в случае отладки - иначе).
А неудобно - ну что ж, не знаю что Вам сказать. При разработке много "неудобного", это несовершенство вселенной.

Но возможно, Вы могли бы написать enhancement request на тему "опция для активации окна текущего документа по F5 в отладчике".
С уважением,
Михаил Каганский