バグ #1553
完了gtk3: message右クリックコンテクストメニューのアンダースコア表示が二重になる
Izumi Tsutsui さんがほぼ3年前に追加. ほぼ3年前に更新.
説明
題名のとおりですが
ツイート・トゥートのメッセージ右クリックで出るコンテキストメニュー中の
アンダースコア表示(実質出てくるのはユーザー名)が、アンダースコア2つにダブって表示されてしまいます。
#1548 でも挙がっている ImageMenuItem
の use_underline
引数の問題のようですが、
そもそもドキュメントの説明と実際の動作も一致していないように見えるのでどう対処すべきなのか
いまいち判断しかねています。
ファイル
mikutter_gtk3-ImageMenuItem-underbar.png (51.1 KB) mikutter_gtk3-ImageMenuItem-underbar.png | Izumi Tsutsui, 2021-12-12 00:26 | ||
0001-ImageMenuItem-underscore.patch (1.25 KB) 0001-ImageMenuItem-underscore.patch | Izumi Tsutsui, 2021-12-12 00:33 | ||
mikutter_gtk3-ImageMenuItem_underline-true.png (45.8 KB) mikutter_gtk3-ImageMenuItem_underline-true.png | Izumi Tsutsui, 2021-12-12 00:40 | ||
0001-ImageMenuItem_new-method.patch (1.32 KB) 0001-ImageMenuItem_new-method.patch | Izumi Tsutsui, 2021-12-18 10:41 |
Izumi Tsutsui さんがほぼ3年前に更新
- ファイル 0001-ImageMenuItem-underscore.patch 0001-ImageMenuItem-underscore.patch を追加
- ファイル mikutter_gtk3-ImageMenuItem_underline-true.png mikutter_gtk3-ImageMenuItem_underline-true.png を追加
- ステータス を 分類待ち から パッチ適用待ち に変更
- 担当者 を toshi_a 初音 にセット
雑修正案¶
Ruby-Gnome のマニュアル ではGtk::ImageMenuItem.new(label = nil, use_underline = true)
の use_underline
について
use_undeline: true if underscores in label indicate the mnemonic for the menu item.
とあるのですが、 use_underline: false
を指定しても変わらず、
添付のパッチ 0001-ImageMenuItem-underscore.patch
diff --git a/core/mui/gtk_contextmenu.rb b/core/mui/gtk_contextmenu.rb
index ebcdf333..ca009bf9 100644
--- a/core/mui/gtk_contextmenu.rb
+++ b/core/mui/gtk_contextmenu.rb
@@ -78,7 +78,7 @@ module Gtk
icon = icon.call(*[optional, widget][0, (icon.arity == -1 ? 1 : icon.arity)])
end
if icon
- Gtk::ImageMenuItem.new(label: label_text).tap do |item|
+ Gtk::ImageMenuItem.new(label: label_text, use_underline: true).tap do |item|
item.set_image(Gtk::WebIcon.new(icon, 16, 16))
item.always_show_image = true
end
のように use_underline: true
を指定すると意図通り(?)アンダーバー一つの表示になるようです。
仕様定義¶
#1548#note-3 #1548#note-4 で言及されている通りで
実装は https://github.com/ruby-gnome/ruby-gnome/blob/3.4.9/gtk3/lib/gtk3/image-menu-item.rb のとおり
def initialize(options={})
stock = options[:stock] || nil
label = options[:label] || nil
if stock
initialize_new_from_stock(stock)
elsif label
if options[:use_underline]
initialize_new_with_mnemonic(label)
else
initialize_new_with_label(label)
end
else
initialize_raw
end
end
この実装の if options[:use_underline]
で呼ばれる initialize_new_with_mnemonic(label)
についてはnew_with_mnemonic
の説明が引っかかって
new_with_mnemonic
ってどこにあるんやと思ったら
https://valadoc.org/gtk+-3.0/Gtk.Label.Label.with_mnemonic.html とかなんですかね。If characters in str are preceded by an underscore, they are underlined.
というのも ruby-gnome のドキュメント説明と合ってませんが、
アンダースコアつけても結局アンダーラインにならないような……。
という感じで、結局何が正しいのかはよくわからんです、という状況です。
とりあえず見た目正しそうならパッチ当ててしまえ、でよい?
その場合、 plugin/gtk3/widget/worldshifter.rb
でもおそらく同じなので
同様に use_underscore: true
の修正が必要ですが、
としぁさんのようにアンダースコアを含むアカウント名でどうなるかを確認したいです。
toshi_a 初音 さんがほぼ3年前に更新
- ステータス を パッチ適用待ち から レビュー待ち に変更
- 担当者 を toshi_a 初音 から Izumi Tsutsui に変更
- ブランチ を topic/1553-contextmenu-underscore にセット
Gtk2対応のためにアンダースコアを増やしていたのをやめました。
互換性が壊れますが、コマンド名にアクセスキーを指定するのはおかしいと思うので、機能自体を廃止します。
Izumi Tsutsui さんがほぼ3年前に更新
- ステータス を レビュー待ち から マージ待ち に変更
git merge topic/1553-contextmenu-underscore
して
としぁさんトゥートを右クリックしてみて
toshi_a@social.mikutter.hachune.net(キューカンバーティー)について
表示確認しました。
Izumi Tsutsui さんがほぼ3年前に更新
マージ待ち卍にしてしまったのですが
#note-1 で書きました:
Ruby-Gnome のマニュアル では
Gtk::ImageMenuItem.new(label = nil, use_underline = true)
のuse_underline
についてuse_undeline: true if underscores in label indicate the mnemonic for the menu item.
とあるのですが、
use_underline: false
を指定しても変わらず、
toshi_a 初音 さんは #note-2 で書きました:
この2つを考えるに、以下のような気がするのですが、どうですかね。Gtk2対応のためにアンダースコアを増やしていたのをやめました。
- GTK2 gem では、マニュアル記載通り
use_underline = true
がデフォルトであった - GTK3 gem では、 #note-1 のとおり実装も動作も
use_underline = false
がデフォルトに変わった?
(use_underline
の定義 indicate the mnemonic と動作が一致しているのかどうかはここでは置いておく)
であれば、添付のパッチのように明示的に use_underline: false
を指定しておくべきという気がしてきました。
どうでしょう?
diff --git a/core/mui/gtk_contextmenu.rb b/core/mui/gtk_contextmenu.rb
index ebcdf333..a29f0b6d 100644
--- a/core/mui/gtk_contextmenu.rb
+++ b/core/mui/gtk_contextmenu.rb
@@ -78,12 +78,12 @@ module Gtk
icon = icon.call(*[optional, widget][0, (icon.arity == -1 ? 1 : icon.arity)])
end
if icon
- Gtk::ImageMenuItem.new(label: label_text).tap do |item|
+ Gtk::ImageMenuItem.new(label: label_text, use_underline: false).tap do |item|
item.set_image(Gtk::WebIcon.new(icon, 16, 16))
item.always_show_image = true
end
else
- Gtk::MenuItem.new(label: label_text)
+ Gtk::MenuItem.new(label: label_text, use_underline: false)
end
end
end
使用箇所あるかどうか確認できていませんが Gtk::MenuItem.new
も同様と思われるので修正しています。
Izumi Tsutsui さんがほぼ3年前に更新
- ステータス を レビュー待ち から まだダメ に変更
- 担当者 を Izumi Tsutsui から toshi_a 初音 に変更
忘れそうなのでステータス変えておきます
toshi_a 初音 さんがほぼ3年前に更新
- ステータス を まだダメ から レビュー待ち に変更
- 担当者 を toshi_a 初音 から Izumi Tsutsui に変更
Izumi Tsutsui さんがほぼ3年前に更新
- ステータス を レビュー待ち から マージ待ち に変更
言葉足らずのコミュ症になってしまいました。すいません。
#note-4 で use_underline: false
の引数を明示するパッチを投げた後に #note-6 の「パッチも追加しました。」を見たので
topic/1553-contextmenu-underscore に #note-4 の 0001-ImageMenuItem_new-method.patch が追加でコミットされたのだろう
と思ったら git pull でも Redmine リビジョンでも出てこなかった、
というのを圧縮して「push されていないような」とだけ書いてしまいました。
ステータスがごちゃごちゃするのも煩雑と思うので以下でお願いします。
- 0001-ImageMenuItem_new-method.patch が不要であればそのままマージ
- 必要な場合も、 git format-patch で作っているのでそのままのコミットであれば特にレビュー不要でマージしても問題なし
- 何かしら追加変更があってレビューすべき観点あれば レビュー待ち で振ってください