Gio.File.monitor_directory not working anymore in a Gtk.Application
Steps to reproduce
Lollypop (python software) use a Gio FileMonitor to check changes in user music collection. It worked in the past but is broken in recent GTK+ releases when using a Gtk.Application.
Current behavior
Here two examples, the first with just Gtk.Main(), it works.
import os
from gi.repository import Gtk, Gio
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
def callback(m, f, o, event):
print(event, "::")
gio_file = Gio.File.new_for_uri("file:///tmp")
monitor = gio_file.monitor_directory(Gio.FileMonitorFlags.NONE, None)
monitor.connect("changed", callback)
win = Gtk.Window()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
Second with a Gtk.Application, monitor callback is not called.
import sys
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import GLib, Gio, Gtk
class Application(Gtk.Application):
def __init__(self, *args, **kwargs):
super().__init__(*args, application_id="org.example.myapp",
flags=Gio.ApplicationFlags.FLAGS_NONE,
**kwargs)
def callback(m, f, o, event):
print(event, "::")
def do_startup(self):
Gtk.Application.do_startup(self)
gio_file = Gio.File.new_for_uri("file:///tmp")
monitor = gio_file.monitor_directory(Gio.FileMonitorFlags.NONE, None)
monitor.connect("changed", self.callback)
def do_activate(self):
window = Gtk.ApplicationWindow(application=self, title="Main Window")
window.present()
def on_quit(self, action, param):
self.quit()
if __name__ == "__main__":
app = Application()
app.run(sys.argv)
Version information
3.22.30