プロジェクト

全般

プロフィール

バグ #1553

完了

gtk3: message右クリックコンテクストメニューのアンダースコア表示が二重になる

Izumi Tsutsui さんがほぼ3年前に追加. ほぼ3年前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
プラグイン名:
クラッシュする:
いいえ

説明

題名のとおりですが
ツイート・トゥートのメッセージ右クリックで出るコンテキストメニュー中の
アンダースコア表示(実質出てくるのはユーザー名)が、アンダースコア2つにダブって表示されてしまいます。

#1548 でも挙がっている ImageMenuItemuse_underline 引数の問題のようですが、
そもそもドキュメントの説明と実際の動作も一致していないように見えるのでどう対処すべきなのか
いまいち判断しかねています。


ファイル

Izumi Tsutsui さんがほぼ3年前に更新

雑修正案

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 して
としぁさんトゥートを右クリックしてみて
(キューカンバーティー)について
表示確認しました。

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 で書きました:

Gtk2対応のためにアンダースコアを増やしていたのをやめました。

この2つを考えるに、以下のような気がするのですが、どうですかね。
  • 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 も同様と思われるので修正しています。

toshi_a 初音 さんがほぼ3年前に更新

  • ステータスマージ待ち から まだダメ に変更

toshi_a 初音 さんがほぼ3年前に更新

  • ステータスまだダメ から レビュー待ち に変更

パッチも追加しました。

Izumi Tsutsui さんがほぼ3年前に更新

topic/1553-contextmenu-underscore が push されてないような

Izumi Tsutsui さんがほぼ3年前に更新

  • ステータスレビュー待ち から まだダメ に変更
  • 担当者Izumi Tsutsui から toshi_a 初音 に変更

忘れそうなのでステータス変えておきます

toshi_a 初音 さんがほぼ3年前に更新

  • ステータスまだダメ から レビュー待ち に変更
  • 担当者toshi_a 初音 から Izumi Tsutsui に変更

Izumi Tsutsui さんがほぼ3年前に更新

  • ステータスレビュー待ち から マージ待ち に変更

言葉足らずのコミュ症になってしまいました。すいません。

#note-4use_underline: false の引数を明示するパッチを投げた後に #note-6 の「パッチも追加しました。」を見たので
topic/1553-contextmenu-underscore に #note-40001-ImageMenuItem_new-method.patch が追加でコミットされたのだろう
と思ったら git pull でも Redmine リビジョンでも出てこなかった、
というのを圧縮して「push されていないような」とだけ書いてしまいました。

ステータスがごちゃごちゃするのも煩雑と思うので以下でお願いします。

  • 0001-ImageMenuItem_new-method.patch が不要であればそのままマージ
  • 必要な場合も、 git format-patch で作っているのでそのままのコミットであれば特にレビュー不要でマージしても問題なし
  • 何かしら追加変更があってレビューすべき観点あれば レビュー待ち で振ってください

toshi_a 初音 さんがほぼ3年前に更新

ほんまや(すみません

toshi_a 初音 さんがほぼ3年前に更新

  • ステータスマージ待ち から 終了 に変更

他の形式にエクスポート: Atom PDF