From: Jeremy Bicha <jeremy.bicha@canonical.com>
Date: Mon, 15 Aug 2022 12:23:11 -0400
Subject: Add compatibility for nautilus 43

Drop the property page feature. It needs to be ported
to the new Nautilus 43 API which is briefly described at
https://gitlab.gnome.org/GNOME/nautilus-python/-/raw/master/docs/reference/nautilus-python-migrating-to-4.xml
---
 contrib/nautilus-thg.py | 30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/contrib/nautilus-thg.py b/contrib/nautilus-thg.py
index 02de64c..2194d1f 100644
--- a/contrib/nautilus-thg.py
+++ b/contrib/nautilus-thg.py
@@ -20,6 +20,12 @@ from gi.repository import (  # pytype: disable=import-error
     Gtk,
 )
 
+import gi
+if not hasattr(Nautilus, "PropertiesModelProvider"):
+    gi.require_version('Gtk', '3.0')
+else:
+    gi.require_version('Gtk', '4.0')
+
 import os
 import sys
 
@@ -241,13 +247,15 @@ class HgExtensionDefault(GObject.GObject):
                     items.append(item)
         return items
 
-    def get_background_items(self, window, vfs_file):
+    def get_background_items(self, *args):
         '''Build context menu for current directory'''
+        vfs_file = args[-1]
         if vfs_file and self.menu:
             return self.buildMenu([vfs_file], True)
 
-    def get_file_items(self, window, vfs_files):
+    def get_file_items(self, *args):
         '''Build context menu for selected files/directories'''
+        vfs_files = args[-1]
         if vfs_files and self.menu:
             return self.buildMenu(vfs_files, False)
 
@@ -413,8 +421,18 @@ class HgExtensionIcons(HgExtensionDefault):
         return True
 
 if hglib.loadui().configbool(b"tortoisehg", b"overlayicons", default=True):
-    class HgExtension(HgExtensionIcons, Nautilus.MenuProvider, Nautilus.ColumnProvider, Nautilus.PropertyPageProvider, Nautilus.InfoProvider):
-        pass
+    # The property page needs to be ported to Nautilus 43
+    if not hasattr(Nautilus, "PropertiesModelProvider"):
+        class HgExtension(HgExtensionIcons, Nautilus.MenuProvider, Nautilus.ColumnProvider, Nautilus.PropertyPageProvider, Nautilus.InfoProvider):
+            pass
+    else:
+        class HgExtension(HgExtensionIcons, Nautilus.MenuProvider, Nautilus.ColumnProvider, Nautilus.InfoProvider):
+            pass
 else:
-    class HgExtension(HgExtensionDefault, Nautilus.MenuProvider, Nautilus.ColumnProvider, Nautilus.PropertyPageProvider):
-        pass
+    # The property page needs to be ported to Nautilus 43
+    if not hasattr(Nautilus, "PropertiesModelProvider"):
+        class HgExtension(HgExtensionDefault, Nautilus.MenuProvider, Nautilus.ColumnProvider, Nautilus.PropertyPageProvider):
+            pass
+    else:
+        class HgExtension(HgExtensionDefault, Nautilus.MenuProvider, Nautilus.ColumnProvider):
+            pass
