バグ #1514
完了機能 #887: gtk3
gtk3: core/mui/gtk_userlist.rb で visible_range と :expose_event が参照されている
説明
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
ファイル
Izumi Tsutsui さんが約3年前に更新
- ファイル 0001-core-mui-gtk_userlist.rb-visible_range-expose_event-.patch 0001-core-mui-gtk_userlist.rb-visible_range-expose_event-.patch を追加
Izumi Tsutsui さんは書きました:
これと同様にとりあえず落ちなくするなら添付ですが、
これで twitter の followingcontroll のフォロー・フォロイータブを出すと挙動が謎になる
(無限にウインドウサイズが拡大していく)ので問題ないのかがよくわかっていません。
Izumi Tsutsui さんが約3年前に更新
- ファイル ruby-gtk3-TreeView.rb ruby-gtk3-TreeView.rb を追加
- ファイル treeview-visible_range-gtk2.png treeview-visible_range-gtk2.png を追加
- ファイル treeview-visible_range-gtk3.png treeview-visible_range-gtk3.png を追加
- ファイル mikutter_gtk3-UserList-visible_range.mp4 mikutter_gtk3-UserList-visible_range.mp4 を追加
- ファイル 0001-core-mui-gtk_userlist.rb-expose_event-refs-1514.patch 0001-core-mui-gtk_userlist.rb-expose_event-refs-1514.patch を追加
- ファイル 0002-GTK3-TreeView-visible_range-refs-1514.patch 0002-GTK3-TreeView-visible_range-refs-1514.patch を追加
Izumi Tsutsui さんは書きました:
visible_range
が動かないのは gtk3 の問題なのか gem の問題なのかはよくわかりませんが。
添付 ruby-gtk3-TreeView.rb のテキトーテストプログラムを書いていろいろ調べたところ、
どうも GTK2 と GTK3 とで visible_range
の返り値が異なるようです。
具体的には GTK3 では 1つ目の返り値として bool
が返ってきています。
ドキュメントがないので仕様がよくわかりませんが、とりあえずブラインドで
1つ目の返り値を visible_range
の有効無効判定に使い
2つ目、3つ目の返り値を従来の start_path
end_path
相当で扱うように書き換えると
一応ユーザーフォロータブの表示動作(スクロールして表示されたところだけアイコンを出す)は
mikutter_gtk3-UserList-visible_range.mp4 のとおりで実現できているようです。
改めて分けてコミットしたパッチ添付しています
Shibafu Midorino さんが約3年前に更新
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
Shibafu Midorino さんが約3年前に更新
- ステータス を パッチ適用待ち から レビュー待ち に変更
- 担当者 を Izumi Tsutsui にセット
- ブランチ を topic/1514-fix-gtk-userlist にセット
topic/1514-fix-gtk-userlist
に適用しました
Izumi Tsutsui さんが約3年前に更新
- ステータス を レビュー待ち から マージ待ち に変更
topic/887-gtk3
に topic/1514-fix-gtk-userlist
と topic/1524-userlist-scroll
とマージして
Twitter user_detail_view でのフォロー・フォロワー表示でもともともパッチ通り動いていて問題ありません。