Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes #2634 #2636

Closed
wants to merge 2 commits into from
Closed

Fixes #2634 #2636

wants to merge 2 commits into from

Conversation

unxed
Copy link
Contributor

@unxed unxed commented Jan 16, 2025

Fixes #2634

@unxed unxed changed the title Fixes #2634 and 2608 Fixes #2634 Jan 16, 2025
@unxed
Copy link
Contributor Author

unxed commented Jan 17, 2025

Сори, я этот код не идеально понимаю, сделал быструю заплатку нейронкой. Вот как она объясняет изменения:

Исходный код RepaintsDeferFinish имел следующий недостаток: при force = true он сбрасывал счетчик отложенных перерисовок _repaint_defer в 0, прежде чем проверял, есть ли отложенные операции в векторе _deferred_repaints. Это приводило к ситуации, когда при вызове UnfreezeConsoleOutput() после завершения QuickEdit (qedit) отложенные перерисовки не выполнялись, так как s_shadow_out уже был установлен в nullptr, а _repaint_defer сбрасывался в 0 из-за force = true, не давая коду добраться до применения отложенных перерисовок.

void ConsoleOutput::RepaintsDeferFinish(bool force)
{
    // ...
    {
        // ...
        if (force) {
            _repaint_defer = 0; // Сброс счетчика _до_ проверки наличия отложенных перерисовок
        } else if (_repaint_defer > 0) {
            --_repaint_defer;
        }
        if (_repaint_defer == 0) { // Проверка _после_ потенциального сброса
            deferred_repaints.swap(_deferred_repaints);
        }
        // ...
    }
    // ...
}

Измененный код исправляет эту проблему, перемещая проверку наличия отложенных перерисовок перед условным сбросом _repaint_defer:

void ConsoleOutput::RepaintsDeferFinish(bool force)
{
    // ...
    {
        // ...
        if (force) {
            _repaint_defer = 0; 
        } else if (_repaint_defer > 0) {
            --_repaint_defer;
        }

        //  !!! Ключевое изменение !!!
        // Проверка наличия отложенных операций _до_ условного сброса
        if (!_deferred_repaints.empty()) {  // Если есть отложенные перерисовки
            deferred_repaints.swap(_deferred_repaints); // перемещаем их для обработки
        }
        // ...
    }
    // ...
}

Теперь, даже если _repaint_defer будет сброшен в 0 из-за force = true, код всё равно проверит, есть ли что-то в _deferred_repaints, и если есть - выполнит отложенные операции. Это гарантирует, что перерисовка экрана произойдет после завершения QuickEdit, независимо от состояния s_shadow_out и счетчика _repaint_defer.

По сути, это изменение делает применение отложенных перерисовок независимым от флага force, если такие перерисовки накопились. Главное - не пропустить их, если вектор _deferred_repaints не пуст.

@cmdorexe
Copy link
Contributor

cmdorexe commented Jan 17, 2025

С zsh у меня без фикса работает клипбоард всегда(Было выбрано использовать клипбоард всегда).
С фиксом на zsh не работает клипбоард на FAR2L в режиме F, переключаю на bash и отрисовывается окно выбора.
В фоне у фара как дочка zsh -i который подвязан на instant-prompt, решает проблему совместимости фара с нестандартным шеллом. https://github.com/romkatv/powerlevel10k?tab=readme-ov-file#how-do-i-configure-instant-prompt

@qrp73
Copy link

qrp73 commented Jan 18, 2025

сделал быструю заплатку нейронкой

а какой нейронкой вы код анализируете?

@unxed
Copy link
Contributor Author

unxed commented Jan 18, 2025

Gemini 1.5 Pro. Пробовал кучу разных, для программирования эта показала себя лучше прочих. Но надо помнить, что все они галлбцинируют, код всегда руками проверять надо.

unxed added a commit to unxed/far2l that referenced this pull request Feb 12, 2025
@elfmz
Copy link
Owner

elfmz commented Feb 15, 2025

ну вобщем то это неправильно, отложенные прорисовки потому и отложенные, чтобы их откладывать, проблема была в другом месте - что их откладывали там где их не надо было откладывать)
вот както то так - 139746e - проверьте фиксит ли проблему (у меня фиксит)

@spnethw
Copy link
Contributor

spnethw commented Feb 15, 2025

ну вобщем то это неправильно, отложенные прорисовки потому и отложенные, чтобы их откладывать, проблема была в другом месте - что их откладывали там где их не надо было откладывать) вот както то так - 139746e - проверьте фиксит ли проблему (у меня фиксит)

У меня баг больше не воспроизводится. 💪 🔥

@unxed unxed closed this Feb 15, 2025
@unxed unxed deleted the fix_clip_dialog branch February 16, 2025 16:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
5 participants