The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск Wayland-Protocols 1.26, opennews (??), 09-Июл-22, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


83. "Выпуск Wayland-Protocols 1.26"  +/
Сообщение от Аноним (83), 10-Июл-22, 09:25 
Ох спасибо анончик, благодаря тебе решил ещё раз погуглить и нашёл подсказку на реддите от 2021 - как это костыльно поправить. И всё равно не могу согласиться, что дело только в тулките, вряд-ли до сих пор есть те, кто используют однокнопочную мышь, скорее это из иксов или связано с ними. Опять же с удовольствием почитаю о корне проблемы подробнее, кидайте ссылки.

Для гнома вроде как есть отдельная настройка дабл-клика по ПКМ (не пользуюсь, точнее не скажу). Для кде же простейший способ через включение "управления жестами с помощью мыши".

Сам костыль
- (включить жесты) Параметры системы -> Комбинации клавиш -> Специальные действия -> Кнопка "Настройка" внизу -> Поставить галку "Росчерки" + "Кнопка мыши: Правая кнопка" (100мс лучше не ставить, работает криво)
- (исключения) Кнопка "Изменить" -> Создать группу -> Условия -> Новый -> Не -> Выделить его -> Новый -> Активное окно -> Настроить исключающий фильтр
- (это фикс) В созданной группе или в списке -> Кнопка "Изменить" -> Создать -> Росчерк мышью -> Имитация ввода с клавиатуры -> Активация -> Изменить -> Нарисовать дребедень

Из-за костыля будет несколько проблем
- Обработка именно зажатия ПКМ работать не будет (напр: сюда входит "Drag and Drop" через ПКМ), не критично, через исключения можно вернуть старое поведение конкретному приложению, костыль
- Firefox перестанет вообще обрабатывать ПКМ, но опять же поправимо костылём `about:config and setting ui.context_menus.after_mouseup to true`
- Если зажать ПКМ + провести курсором пару пикселей, то меню не появится, будет считать жестом, понятно почему

Ответить | Правка | К родителю #59 | Наверх | Cообщить модератору

85. "Выпуск Wayland-Protocols 1.26"  +1 +/
Сообщение от n00by (ok), 10-Июл-22, 12:00 
> Ох спасибо анончик, благодаря тебе решил ещё раз погуглить и нашёл подсказку
> на реддите от 2021 - как это костыльно поправить. И всё
> равно не могу согласиться, что дело только в тулките, вряд-ли до
> сих пор есть те, кто используют однокнопочную мышь, скорее это из
> иксов или связано с ними. Опять же с удовольствием почитаю о
> корне проблемы подробнее, кидайте ссылки.

Иксы посылают клиенту сообщения XCB_BUTTON_PRESS и XCB_BUTTON_RELEASE, т.е. "кнопка нажата" и "кнопка отпущена", как минимум, для 8-ми кнопок. Как это обработает клиент - это его дело.

Qt принимает решение, показать ли контекстное меню в функции QWidgetWindow::handleMouseEvent() из /qtbase/src/widgets/kernel/qwidgetwindow.cpp

Триггером может служить как нажатие, так и отпускание кнопки:


    static const QEvent::Type contextMenuTrigger =
        QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::ContextMenuOnMouseRelease).toBool() ?
        QEvent::MouseButtonRelease : QEvent::MouseButtonPress;

Оно документировано - см. QPlatformTheme и ContextMenuOnMouseRelease.

При этом тема по умолчанию QPlatformTheme::defaultThemeHint из /qtbase/src/gui/kernel/qplatformtheme.cpp задаёт "по нажатию":
    case ContextMenuOnMouseRelease:
        return QVariant(false);

А для виндузятников есть отдельная тема в /qtbase/src/plugins/platforms/windows/qwindowstheme.cpp
и вот там "по отпусканию":
    case ContextMenuOnMouseRelease:
        return QVariant(true);

Полагаю, для KDE должна быть тоже своя тема. Если правильно понял, вот она https://github.com/KDE/plasma-integration Но /search?q=ContextMenuOnMouseRelease ничего мне не показало. Возможно, кто-то просто не написал пару строчек кода, которые могли бы взять желаемое пользователем поведение из какого конфига. Если так, то дело в KDE.

Ответить | Правка | Наверх | Cообщить модератору

86. "Выпуск Wayland-Protocols 1.26"  +/
Сообщение от n00by (ok), 10-Июл-22, 12:20 
> Возможно, кто-то просто не написал пару строчек
> кода, которые могли бы взять желаемое пользователем поведение из какого конфига.

Возможно, даже всего одну строчку - но я это не проверял, а значит оно не работает.


diff --git a/src/platformtheme/khintssettings.cpp b/src/platformtheme/khintssettings.cpp
index 6703eaf..91e6c3e 100644
--- a/src/platformtheme/khintssettings.cpp
+++ b/src/platformtheme/khintssettings.cpp
@@ -89,6 +89,7 @@ KHintsSettings::KHintsSettings(const KSharedConfig::Ptr &kdeglobals)
     m_hints[QPlatformTheme::MouseDoubleClickInterval] = readConfigValue(cg, QStringLiteral("DoubleClickInterval"), 400);
     m_hints[QPlatformTheme::StartDragDistance] = readConfigValue(cg, QStringLiteral("StartDragDist"), 10);
     m_hints[QPlatformTheme::StartDragTime] = readConfigValue(cg, QStringLiteral("StartDragTime"), 500);
+    m_hints[QPlatformTheme::ContextMenuOnMouseRelease] = readConfigValue(cg, QStringLiteral("ContextMenuOnMouseRelease"), 0);

     KConfigGroup cgToolbar(mKdeGlobals, "Toolbar style");
     m_hints[QPlatformTheme::ToolButtonStyle] = toolButtonStyle(cgToolbar);


Ответить | Правка | Наверх | Cообщить модератору

102. "Выпуск Wayland-Protocols 1.26"  +/
Сообщение от Аноним (-), 12-Июл-22, 00:11 
К сожалению анончик, иксы-1 кутьи-0, не помог твой патч, хотя и выглядел логичным, очень жаль.

Пересобрал с рекомендованным тобой readConfigValue с (1 - по идее это как раз и должно фиксить, 0, true, false) и без readConfigValue, напрямую указав все варианты. Результат нулевой. Возможная подсказка "фикс через жесты мышью" влияет и на гтк, поэтому если это и должно работать, оно где-то в другом месте.

Ответить | Правка | Наверх | Cообщить модератору

103. "Выпуск Wayland-Protocols 1.26"  +/
Сообщение от n00by (ok), 12-Июл-22, 07:58 
В Gentoo собрал dev-qt/qtgui изменив в /qtbase/src/gui/kernel/qplatformtheme.cpp
    case ContextMenuOnMouseRelease:
        return QVariant(false);

на true. В media-sound/strawberry (это приложение на Qt) контекстные меню появляются по отпусканию правой кнопки мыши, а не по нажатию, как было до изменения. На GTK-приложения это не влияет. Что там с KDE - не могу сказать, тут без меня миллион спецов по настройке и автономных опакечивателей, самое время выйти на сцену хоть кому-то. ;)

Ответить | Правка | Наверх | Cообщить модератору

104. "Выпуск Wayland-Protocols 1.26"  +/
Сообщение от Аноним (83), 12-Июл-22, 12:18 
Не вижу спецов, анонимные эксперты не занимаются такой глупостью. Верю в работоспособность твоего решения, но вряд ли в моём случае это сработает. А там ещё qt6, потом gtk с пачкой версий. Не вижу вариантов, кроме как долбиться в кде. Но у меня кривули, понятия не имею как им это нормально написать и объяснить почему это нужно, если даже держатели языка не смогли. Не будут они это делать из-за анона с русского бложика таких же экспертов.

Пруфы "почему"
2008 RESOLVED (костыль) - https://bugs.kde.org/show_bug.cgi?id=168979
2016-2022 RESOLVED FIXED (продвинутый костыль) - https://bugs.kde.org/show_bug.cgi?id=374311
вяленый RESOLVED (не знаю даже, костыль?) - https://bugs.kde.org/show_bug.cgi?id=427988
форум (кривой костыль) - https://forum.kde.org/viewtopic.php?f=289&t=161733

Ответить | Правка | Наверх | Cообщить модератору

105. "Выпуск Wayland-Protocols 1.26"  +/
Сообщение от n00by (ok), 12-Июл-22, 14:00 
Совсем забыл, что у меня установлен редактор kde-apps/kate. Так вот там теперь контекстное меню появляется по отпусканию правой кнопки мыши. kde-plasma/plasma-integration при этом отсутствует. Если же последняя штука изменена и эффекта 0 - непонятно, как это всё совместно будет себя вести. Извините, я полагал, что если кто-то будет пробовать собрать, то ему очевидно - что бы проверить, есть ли в кране вода, начинать крутить практичнее более близкий к крану вентиль, что бы исключить влияние остального. То есть сначала проверить Qt, а потом уже думать, можно ли настройку откуда-то считывать. Версия Qt у меня 5.15.5, а по ссылкам 10 лет назад ситуация могла быть другой.
Ответить | Правка | Наверх | Cообщить модератору

107. "Выпуск Wayland-Protocols 1.26"  +/
Сообщение от Аноним (-), 12-Июл-22, 20:53 
Так это, я кутью не трогал, только integration, слишком много пересобирать qt5, qt6, gtk-XYZ на который непонятно какой патч накидывать. Хотелось решить это уровнем выше, но всё равно спасибо, схоронил для изучения в свободное время. Ссылки даны чтоб показать как это неРешается в кде. К экспертам не отношусь, поэтому не стоит/ло от меня ожидать особых познаний.
Ответить | Правка | Наверх | Cообщить модератору

108. "Выпуск Wayland-Protocols 1.26"  +/
Сообщение от n00by (ok), 13-Июл-22, 08:30 
Простите ещё раз. Наверное, я непонятно пишу. Если Вы пользователь, почему Вы вообще должны что-то собирать? Зачем тогда все эти майнтайнеры массы дистрибутивов, кто тут в каждой теме пишет о своей нужности? Вот они и есть уровень выше, их задача интегрировать все эти qt5, qt6 и gtk-XYZ, а не просто собрать в пакетики и прилепить трендовые иконки.
Ответить | Правка | Наверх | Cообщить модератору

109. "Выпуск Wayland-Protocols 1.26"  +/
Сообщение от Аноним (109), 14-Июл-22, 12:13 
Не знаю. Но один раз мне сказали, что это "концепт opensource", после чего кинули в игнор (пытался сообщить о проблеме).
Ответить | Правка | Наверх | Cообщить модератору

110. "Выпуск Wayland-Protocols 1.26"  +/
Сообщение от n00by (ok), 14-Июл-22, 17:04 
Могу выложить куда-то собранный qtgui из Gentoo (rpm или архив) или только so-файл с изменениями, но наверняка при замене он сломает систему. И на всякий случай patch. С KDE вряд ли чем-то смогу помочь, удалил её несколько лет назад, а теперь совсем не вижу там перспектив.

diff -Naur qtbase-everywhere-src-5.15.5.0/src/gui/kernel/qplatformtheme.cpp qtbase-everywhere-src-5.15.5/src/gui/kernel/qplatformtheme.cpp
--- qtbase-everywhere-src-5.15.5.orig/src/gui/kernel/qplatformtheme.cpp
+++ qtbase-everywhere-src-5.15.5/src/gui/kernel/qplatformtheme.cpp
@@ -544,7 +544,7 @@
         return QVariant::fromValue(QList<int>());
     case DialogSnapToDefaultButton:
     case ContextMenuOnMouseRelease:
-        return QVariant(false);
+        return QVariant(true);
     case MousePressAndHoldInterval:
         return QVariant(800);
     case MouseDoubleClickDistance:

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру