Bug 52611

Summary: Конфликт действий на комбинации клавиш Dolphin
Product: Sisyphus Reporter: Жора Змейкин <katze_942>
Component: dolphinAssignee: Sergey V Turchin <zerg>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: corwin, maxpozdeev, sergey.sukiyazov, zerg
Version: unstable   
Hardware: x86_64   
OS: Linux   
Attachments:
Description Flags
patch for 9003-qt6-base-6.7.2-qmenu_fix_shortcuts.patch in qt6-base
none
Исправленные патчи для Qt6
none
Исправленные патчи для Qt6 (исправлено)
none
Исправленные патчи для Qt6 (исправлено 2) none

Description Жора Змейкин 2025-01-02 13:59:20 MSK
Некоторые сочетания клавиш не срабатывают в Dolphin, вызывая диалоговое окно "Конфликт действий". Например, в панели Терминал (F4) не срабатывает сочетание клавиш Ctrl+Shift+V. Не помогает и сброс сочетаний клавиш на по умолчанию.

У некоторых людей возникала проблема и с сочетанием клавиш Ctrl+Shift+N (создание папки, но диалоговое окно говорило про конфликт Ctrl+N, что странно).
Comment 1 Sergey V Turchin 2025-01-09 16:13:23 MSK
Попробуйте удалить ~/.config/kglobalshortcutsrc и  ~/.config/khotkeysrc , сделав резервную копию и перезайти в систему.
Comment 2 Жора Змейкин 2025-01-10 20:03:44 MSK
(Ответ для Sergey V Turchin на комментарий #1)
> Попробуйте удалить ~/.config/kglobalshortcutsrc и  ~/.config/khotkeysrc ,
> сделав резервную копию и перезайти в систему.

Удалил два файла и перезагрузился. К сожалению, не помогло.
Заметил, что подобная проблема ещё и в Kate.
Comment 3 Max Pozdeev 2025-01-12 15:59:04 MSK
Created attachment 17520 [details]
patch for 9003-qt6-base-6.7.2-qmenu_fix_shortcuts.patch in qt6-base

Тоже столкнулся с такими ошибками. Причина оказалась в патче 9003-qt6-base-6.7.2-qmenu_fix_shortcuts.patch в пакете qt6-base, если пересобрать пакет без него, то все ок.

В итоге удалось этот патч немного поправить и ошибки исчезли. Предлагаю к рассмотрению.
Comment 4 Сукиязов С.А. 2025-01-13 20:57:44 MSK
Created attachment 17524 [details]
Исправленные патчи для Qt6

Сформировал исправленные патчи с правкой от Max Pozdeev
Comment 5 Сукиязов С.А. 2025-01-13 21:03:44 MSK
(Ответ для Max Pozdeev на комментарий #3)
> Создано вложение 17520 [details] [подробности]
> patch for 9003-qt6-base-6.7.2-qmenu_fix_shortcuts.patch in qt6-base
> 
> Тоже столкнулся с такими ошибками. Причина оказалась в патче
> 9003-qt6-base-6.7.2-qmenu_fix_shortcuts.patch в пакете qt6-base, если
> пересобрать пакет без него, то все ок.
> 
> В итоге удалось этот патч немного поправить и ошибки исчезли. Предлагаю к
> рассмотрению.

Да, это корректное исправление. В Qt >= 6.7.0 добавили новый класс с методом QKeyCombination::keyboardModifiers(), я понадеялся что там "все лишнее" убирается. Но судя по всему нет. Так что правка абсолютно корректная.

> ++                if (!result.contains(qtKey + int(mods))) //NOTE: We should disallow duplicates in the result list (TODO: Is this check really needed?)
Эта проверка нужна, т.к. result формируется при проверке всех раскладок, соответственно есть вероятность что на разных раскладках комбинации могут задублироваться.
Comment 6 Сукиязов С.А. 2025-01-13 21:07:03 MSK
Sergey V Turchin, я прикрепил архив с исправленными патчами для qt-6.7.2 и qt-6.8.0, их можно заменить в rpm-ках и пересобрать.

Спасибо Max Pozdeev за найденную ошибку.
Comment 7 Max Pozdeev 2025-01-13 22:14:28 MSK
(Ответ для Сукиязов С.А. на комментарий #4)
> Создано вложение 17524 [details] [подробности]
> Исправленные патчи для Qt6
> 
> Сформировал исправленные патчи с правкой от Max Pozdeev

В новом патче для 6.7.2 эта строка отличается от 6.8.0:
if (shortcut.key() == qtKey && (shortcut.keyboardModifiers() & mods)) {
Comment 8 Сукиязов С.А. 2025-01-13 22:18:09 MSK
Created attachment 17525 [details]
Исправленные патчи для Qt6 (исправлено)
Comment 9 Сукиязов С.А. 2025-01-13 22:19:53 MSK
(Ответ для Max Pozdeev на комментарий #7)

> В новом патче для 6.7.2 эта строка отличается от 6.8.0:
> if (shortcut.key() == qtKey && (shortcut.keyboardModifiers() & mods)) {

Блин, пропустил. Перезалил.
Comment 10 Max Pozdeev 2025-01-13 23:36:18 MSK
(Ответ для Сукиязов С.А. на комментарий #5)
> > ++                if (!result.contains(qtKey + int(mods))) //NOTE: We should disallow duplicates in the result list (TODO: Is this check really needed?)
> Эта проверка нужна, т.к. result формируется при проверке всех раскладок,
> соответственно есть вероятность что на разных раскладках комбинации могут
> задублироваться.

Если не трудно, поясните, пожалуйста. Разве не должны дубли отфильтроваться чуть ранее? Здесь:
```
for (QKeyCombination shortcut : std::as_const(result)) {
    if (shortcut.key() == qtKey && (shortcut.keyboardModifiers() & mods) == mods) {
        ambiguous = true;
        break;
    }
}
if (ambiguous)
    continue;
```

QKeyCombination есть суть пара key и keyboardModifiers, а в условие
(shortcut.keyboardModifiers() & mods) == mods
в том числе попадает выражение
(shortcut.keyboardModifiers == mods)
И если оба члена сравниваемых пар (комбинаций) равны, то и комбинации тоже.
Comment 11 Сукиязов С.А. 2025-01-14 20:44:01 MSK
(Ответ для Max Pozdeev на комментарий #10)
> Если не трудно, поясните, пожалуйста. Разве не должны дубли отфильтроваться
> чуть ранее? Здесь:
Просмотрел код еще раз. Согласен, вторая проверка не нужна.
Comment 12 Сукиязов С.А. 2025-01-14 20:50:38 MSK
Created attachment 17531 [details]
Исправленные патчи для Qt6 (исправлено 2)

Убрал ненужное условие из патчей
Comment 13 Сукиязов С.А. 2025-01-14 20:53:05 MSK
Sergey V Turchin, последняя редакция патчей "Исправленные патчи для Qt6 (исправлено 2)", их можно заменить в rpm-ках и пересобрать.
Comment 14 Max Pozdeev 2025-01-14 21:58:32 MSK
(Ответ для Сукиязов С.А. на комментарий #11)
> (Ответ для Max Pozdeev на комментарий #10)
> > Если не трудно, поясните, пожалуйста. Разве не должны дубли отфильтроваться
> > чуть ранее? Здесь:
> Просмотрел код еще раз. Согласен, вторая проверка не нужна.

Спасибо за комментарий.
Comment 15 Repository Robot 2025-01-15 11:55:50 MSK
qt6-base-6.7.2-alt8 -> sisyphus:

 Wed Jan 15 2025 Sergey V Turchin <zerg@altlinux> 6.7.2-alt8
 - fix qmenu_fix_shortcuts.patch (thanks Corwin) (closes: 52611)