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

右クリックメニューに示されるショートカットキーとマウスジェスチャーの表示をやめる #977

Closed
ma8ma opened this issue May 14, 2022 · 4 comments
Labels
feature 機能の追加と削除 gtk3 GTK3版に関するトピック postpone 現状では解決できない、またはやらない

Comments

@ma8ma
Copy link
Collaborator

ma8ma commented May 14, 2022

右クリックメニューに示されるショートカットキーとマウスジェスチャーの表示をやめる

背景や動機

将来の機能廃止やGTK4対応のためGTKのコードを少しづつ更新してますが右クリックメニューのGtk::Menuは構築が大幅に変わります。
GTK3からGio::Menuを使ってメニュー構造のデータを作りGtk::Menuにバインドする方法が導入されました。

現在、メニューの項目にあるショートカットキー(アクセラレータキー)やマウスジェスチャーはGtk::Menuの構築後に後付で追加しています。
新しいGio::Menuは構築したデータ構造の要素が変更不可になるため現在の後付処理ができなくなります。

解決方法

メニュー項目にショートカットキーやマウスジェスチャーを追加せず表示を止めることを提案します。
それによってコードの肥大化や実行時の負荷を抑えることができ保守性を維持することが可能です。

代替案

  • 現状を維持してショートカットキーなどを表示する

    Gtk::MenuはGTK4で廃止されるためそれに依存するコードは変更する必要があります。
    GTK4への移行は多くのステップが必要なため変更を遅らせると進行に影響が出ます。

  • 後付ではなく最初の構築でショートカットキーなどを追加する

    構築した後にショートカットキーなど設定変更をしたときメニュー項目に反映することができません。
    メニューを再構築する方法は実装の肥大化や実行時の負荷の解決にかかる労力が割に合わないと予想しています。

  • メニューに直接追加ではなくアプリケーションにショートカットキーなどを登録する

    現状の実装から大幅に変わるため実現可能か検討・検証が必要ですが開発リソースが足りません。

追加の情報

GTK4ではGtk::Menuを置き換えるUIとしてGtk::Popoverが用意されています。
GTK3にもありますが一部の機能が未実装であるため現状での移行は見送っています。

@ma8ma ma8ma added gtk3 GTK3版に関するトピック feature 機能の追加と削除 labels May 14, 2022
@ma8ma
Copy link
Collaborator Author

ma8ma commented Jun 4, 2022

右クリックメニューの修正を進めていきたいと思います。

@ma8ma
Copy link
Collaborator Author

ma8ma commented Jul 17, 2022

Gio::Menuを利用した右クリックメニュー構築ではサブメニューを無効化することができなくなりました。
削除(D)削除する(D)など項目が二段になっている箇所は枝の部分(削除(D))を無効化できません。

メニュー項目の削除がサブメニューで一段深くなっている理由
過去ログからJD作者のレスを抜粋
http://pc8.5ch.net/test/read.cgi/linux/1137245362/908n

908 :作者:2006/07/19(水) 23:25:38
削除を選ぶと確認ダイアログが出てきてOKかキャンセルを選ぶのが一般的な
操作だと思いますが、OKボタンまでいちいちカーソルを動かすのが面倒
だったため、JDでは"削除する"を選ぶとダイアログを出さずに画像を削除
するようにしています。deleteボタンを押した時は確認ダイアログが出ます。

他にもスレビューの右クリックメニューにあるNGワード(N)(テキスト選択の有無で有効無効切り替え)
などでサブメニューの無効化が使われています。

対応策としては

  • サブメニュー内の項目を無効化する
    メニュー有効無効の視認性が悪くなります。
    テストパッチ: [IDEA] Imageviewbase update menu construction ma8ma/JDim#66

  • サブメニュー内の項目を削除する
    項目をすべて削除してサブメニューを空にしても枠だけ表示されることがあります。

  • 有効のときはサブメニュー、無効のときは無効化したメニュー項目に切り替える
    実装が複雑になります。また、カスタマイズ可能なメニューでは実装が厳しいかもしれません。

  • サブメニューをやめて選択したとき確認ダイアログを出すようにする
    JDの方針を転換します。
    また、上記のNGワード(N)では使えない方法です。

  • サブメニューをやめて削除に対するundo操作を実装する
    誤操作を抑制する方法がなくなります。
    undo操作の仕組みがないため大規模な修正が予想され作業の見積もりが立っていません。

実装の難しさを比べると サブメニュー内無効化確認ダイアログ は比較的容易と考えています。
サブメニューと無効化項目の切り替え が現状に一番近いですが、実装にかかる費用(時間)と効果が割に合うか分かりません。

関連の情報 (sensitiveプロパティ?)
https://discourse.gnome.org/t/question-how-do-i-disable-a-menubar-menu-in-gtk-is-it-even-possible/906/9

@ma8ma
Copy link
Collaborator Author

ma8ma commented Jan 7, 2023

上記コメントの通りサブメニュー表示の解決が難しいため作業を中断し保留したいと思います。

@ma8ma ma8ma added the postpone 現状では解決できない、またはやらない label Jan 7, 2023
@ma8ma
Copy link
Collaborator Author

ma8ma commented Jun 17, 2023

計画や作業の進行が止まっているためissueを閉じて課題を一度取り下げます。

@ma8ma ma8ma closed this as not planned Won't fix, can't repro, duplicate, stale Jun 17, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 機能の追加と削除 gtk3 GTK3版に関するトピック postpone 現状では解決できない、またはやらない
Projects
No open projects
Status: Postponed
Status: In Progress
Archived in project
Development

No branches or pull requests

1 participant