GtkCustomSorter callbacks receives undefined params
if you were to write a GtkCustomSorter using something like the following
const { Gtk } = imports.gi;
Gtk.init()
function callback(sorter, obj1, obj2, x, y) {
log(sorter)
log(obj1)
log(obj2)
log(x)
log(y)
return 1
}
model = Gtk.StringList.new(["hello", "world", "item"])
sorter = Gtk.CustomSorter.new(callback)
sort_model = Gtk.SortListModel.new(model, sorter)
Gives the following output
Gjs-Message: 11:22:05.109: JS LOG: undefined
Gjs-Message: 11:22:05.109: JS LOG: undefined
Gjs-Message: 11:22:05.109: JS LOG: undefined
Gjs-Message: 11:22:05.109: JS LOG: undefined
Gjs-Message: 11:22:05.109: JS LOG: undefined
Gjs-Message: 11:22:05.109: JS LOG: undefined
Gjs-Message: 11:22:05.109: JS LOG: undefined
Gjs-Message: 11:22:05.109: JS LOG: undefined
Gjs-Message: 11:22:05.109: JS LOG: undefined
Gjs-Message: 11:22:05.109: JS LOG: undefined
Creating a sorter by subclassing GtkSorter works fine though
const { Gtk, GObject } = imports.gi;
Gtk.init()
var Sorter = GObject.registerClass({
}, class Sorter extends Gtk.Sorter {
_init(params) {
super._init(params);
}
vfunc_compare(obj1, obj2) {
log(obj1)
log(obj2)
return 1
}
});
model = Gtk.StringList.new(["hello", "world", "item"])
sorter = new Sorter();
sort_model = Gtk.SortListModel.new(model, sorter)
The later gives
Gjs-Message: 11:22:39.887: JS LOG: [object instance wrapper GIName:Gtk.StringObject jsobj@0x1c44a7aceb0 native@0x55c53c79c000]
Gjs-Message: 11:22:39.887: JS LOG: [object instance wrapper GIName:Gtk.StringObject jsobj@0x1c44a7acee0 native@0x55c53c79c060]
Gjs-Message: 11:22:39.887: JS LOG: [object instance wrapper GIName:Gtk.StringObject jsobj@0x1c44a7acf10 native@0x55c53c79c440]
Gjs-Message: 11:22:39.887: JS LOG: [object instance wrapper GIName:Gtk.StringObject jsobj@0x1c44a7aceb0 native@0x55c53c79c000]
Note that using Python works fine
from gi import require_version
require_version("Gtk", "4.0")
from gi.repository import Gtk
Gtk.init()
def callback(sorter, obj1, obj2):
print(obj1)
print(obj2)
return 1
model = Gtk.StringList.new(["hello", "world", "item"])
sorter = Gtk.CustomSorter.new(callback)
sort_model = Gtk.SortListModel.new(model, sorter)
Edited by Bilal Elmoussaoui