Project

General

Profile

Actions

バグ #1553

closed

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

Added by Izumi Tsutsui 5 months ago. Updated 5 months ago.

Status:
終了
Priority:
通常
Assignee:
Target version:
プラグイン名:
ブランチ:
topic/1553-contextmenu-underscore
クラッシュする:
No

Description

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

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


Files

Actions #1

Updated by Izumi Tsutsui 5 months ago

雑修正案

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 の修正が必要ですが、
としぁさんのようにアンダースコアを含むアカウント名でどうなるかを確認したいです。

Actions #2

Updated by toshi_a 初音 5 months ago

  • Status changed from パッチ適用待ち to レビュー待ち
  • Assignee changed from toshi_a 初音 to Izumi Tsutsui
  • ブランチ set to topic/1553-contextmenu-underscore

Gtk2対応のためにアンダースコアを増やしていたのをやめました。
互換性が壊れますが、コマンド名にアクセスキーを指定するのはおかしいと思うので、機能自体を廃止します。

Actions #3

Updated by Izumi Tsutsui 5 months ago

  • Status changed from レビュー待ち to マージ待ち

git merge topic/1553-contextmenu-underscore して
としぁさんトゥートを右クリックしてみて
(キューカンバーティー)について
表示確認しました。

Actions #4

Updated by Izumi Tsutsui 5 months ago

マージ待ち卍にしてしまったのですが

#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 も同様と思われるので修正しています。

Actions #5

Updated by toshi_a 初音 5 months ago

  • Status changed from マージ待ち to まだダメ
Actions #6

Updated by toshi_a 初音 5 months ago

  • Status changed from まだダメ to レビュー待ち

パッチも追加しました。

Actions #7

Updated by Izumi Tsutsui 5 months ago

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

Actions #8

Updated by Izumi Tsutsui 5 months ago

  • Status changed from レビュー待ち to まだダメ
  • Assignee changed from Izumi Tsutsui to toshi_a 初音

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

Actions #9

Updated by toshi_a 初音 5 months ago

  • Status changed from まだダメ to レビュー待ち
  • Assignee changed from toshi_a 初音 to Izumi Tsutsui
Actions #10

Updated by Izumi Tsutsui 5 months ago

  • Status changed from レビュー待ち to マージ待ち

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

#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 で作っているのでそのままのコミットであれば特にレビュー不要でマージしても問題なし
  • 何かしら追加変更があってレビューすべき観点あれば レビュー待ち で振ってください
Actions #11

Updated by toshi_a 初音 5 months ago

ほんまや(すみません

Actions #12

Updated by toshi_a 初音 5 months ago

  • Status changed from マージ待ち to 終了
Actions

Also available in: Atom PDF