Project

General

Profile

Actions

バグ #1514

closed

機能 #887: gtk3

gtk3: core/mui/gtk_userlist.rb で visible_range と :expose_event が参照されている

Added by Izumi Tsutsui about 3 years ago. Updated almost 3 years ago.

Status:
終了
Priority:
通常
Assignee:
Target version:
プラグイン名:
クラッシュする:
No

Description

source:core/mui/cairo_timeline.rb@0b99c704#L55 によれば

    @tl.ssc(:draw){
      # FIXME: gtk3, visible_rangeが実装されていないのでemit_expose_miraclepainterを呼べない
      # emit_expose_miraclepainter
      false }

とあるのですが、同様に source:core/mui/gtk_userlist.rb@0b99c704#L76 でも
visible_range が使われています。

  def emit_expose_user
    if @listview.visible_range
      current, last = @listview.visible_range
      Enumerator.new{|y|
        while (current <=> last) < 1
          y << @listview.model.get_iter(current)
          break if not current.next!
        end

visible_range が動かないのは gtk3 の問題なのか gem の問題なのかはよくわかりませんが。
https://social.mikutter.hachune.net/@tsutsuii/107134273975221621

https://docs.gtk.org/gtk3/method.TreeView.get_visible_range.html
visible_range は GTK3 には存在するが gtk3 gem に無いという事なのだろうか

また、呼び出し元に :expose_event がありますが gtk3 では :draw に置き換える必要あるのでは、とのこと:

    @listview.ssc(:expose_event){
      emit_expose_user
      false
    }

https://social.mikutter.hachune.net/@shibafu528/107133833736822126

“expose-event” signal has been replaced by a new GtkWidget::draw signal
https://docs.gtk.org/gtk3/migrating-2to3.html#the-gtkwidgetdraw-signal


Files

0001-core-mui-gtk_userlist.rb-visible_range-expose_event-.patch (1.21 KB) 0001-core-mui-gtk_userlist.rb-visible_range-expose_event-.patch Izumi Tsutsui, 2021-10-22 22:36
ruby-gtk3-TreeView.rb (1.46 KB) ruby-gtk3-TreeView.rb TreeView.visible_range テストプログラム Izumi Tsutsui, 2021-10-30 11:42
treeview-visible_range-gtk2.png (4.89 KB) treeview-visible_range-gtk2.png GTK2 での返り値 1つ目と2つ目 Izumi Tsutsui, 2021-10-30 11:42
treeview-visible_range-gtk3.png (5.24 KB) treeview-visible_range-gtk3.png GTK3 での返り値 1つ目と2つ目 Izumi Tsutsui, 2021-10-30 11:42
mikutter_gtk3-UserList-visible_range.mp4 (785 KB) mikutter_gtk3-UserList-visible_range.mp4 UserList でのアイコン表示 Izumi Tsutsui, 2021-10-30 11:45
0001-core-mui-gtk_userlist.rb-expose_event-refs-1514.patch (1.04 KB) 0001-core-mui-gtk_userlist.rb-expose_event-refs-1514.patch :expose_event の置き換え Izumi Tsutsui, 2021-10-30 11:49
0002-GTK3-TreeView-visible_range-refs-1514.patch (2.12 KB) 0002-GTK3-TreeView-visible_range-refs-1514.patch visible_range の仕様変更対応修正 Izumi Tsutsui, 2021-10-30 11:49
Actions #1

Updated by Izumi Tsutsui about 3 years ago

Izumi Tsutsui さんは書きました:

source:core/mui/cairo_timeline.rb@0b99c704#L55 によれば

これと同様にとりあえず落ちなくするなら添付ですが、
これで twitter の followingcontroll のフォロー・フォロイータブを出すと挙動が謎になる
(無限にウインドウサイズが拡大していく)ので問題ないのかがよくわかっていません。

Actions #2

Updated by Izumi Tsutsui about 3 years ago

Izumi Tsutsui さんは #note-1 で書きました:

これで twitter の followingcontroll のフォロー・フォロイータブを出すと挙動が謎になる
(無限にウインドウサイズが拡大していく)ので問題ないのかがよくわかっていません。

これは #1524 でパッチ込みで投げました

Actions #3

Updated by Izumi Tsutsui about 3 years ago

Izumi Tsutsui さんは書きました:

visible_range が動かないのは gtk3 の問題なのか gem の問題なのかはよくわかりませんが。

添付 ruby-gtk3-TreeView.rb のテキトーテストプログラムを書いていろいろ調べたところ、
どうも GTK2 と GTK3 とで visible_range の返り値が異なるようです。
具体的には GTK3 では 1つ目の返り値として bool が返ってきています。
GTK2 での返り値 1つ目と2つ目 GTK3 での返り値 1つ目と2つ目

ドキュメントがないので仕様がよくわかりませんが、とりあえずブラインドで
1つ目の返り値を visible_range の有効無効判定に使い
2つ目、3つ目の返り値を従来の start_path end_path 相当で扱うように書き換えると
一応ユーザーフォロータブの表示動作(スクロールして表示されたところだけアイコンを出す)は
mikutter_gtk3-UserList-visible_range.mp4 のとおりで実現できているようです。

改めて分けてコミットしたパッチ添付しています

Actions #4

Updated by Izumi Tsutsui about 3 years ago

  • Status changed from 分類待ち to パッチ適用待ち

手元では動いていてステータス的に区別したいので先走って変更してしまいます

Actions #5

Updated by Shibafu Midorino about 3 years ago

GIで非voidな戻り値型かつout引数を伴う関数呼出の戻り値は、関数の本来の戻り値+out引数の配列。
今回は関係ないですが、out引数が1つの場合には配列ではなくそのout引数を単体で返すといった特殊ケースも存在するようです。
(さすがにこの辺の規約はドキュメントあってほしい)
https://github.com/ruby-gnome/ruby-gnome/blob/d6b3c8eb8b33f1d16b8e23be28dedd04ef9fb770/gobject-introspection/ext/gobject-introspection/rb-gi-function-info.c#L226-L230

Valadoc上の関数シグネチャと突き合わせても、振る舞いは一致してますね。
https://valadoc.org/gtk+-3.0/Gtk.TreeView.get_visible_range.html

Actions #6

Updated by Shibafu Midorino about 3 years ago

  • Status changed from パッチ適用待ち to レビュー待ち
  • Assignee set to Izumi Tsutsui
  • ブランチ set to topic/1514-fix-gtk-userlist

topic/1514-fix-gtk-userlist に適用しました

Actions #7

Updated by Izumi Tsutsui about 3 years ago

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

topic/887-gtk3topic/1514-fix-gtk-userlisttopic/1524-userlist-scroll とマージして
Twitter user_detail_view でのフォロー・フォロワー表示でもともともパッチ通り動いていて問題ありません。

Actions #8

Updated by toshi_a 初音 almost 3 years ago

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

merged.

Actions

Also available in: Atom PDF