[meld] Initial port of bin/meld



commit 5f35830ba066bb52c942a66a9a042c147395d9ee
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Sun Sep 29 05:36:02 2013 +1000

    Initial port of bin/meld

 bin/meld |   54 ++++++++++++++++++++++--------------------------------
 1 files changed, 22 insertions(+), 32 deletions(-)
---
diff --git a/bin/meld b/bin/meld
index 58c9df1..4da0e54 100755
--- a/bin/meld
+++ b/bin/meld
@@ -41,13 +41,6 @@ class Unbuffered(object):
         return getattr(self.file, attr)
 sys.stdout = Unbuffered(sys.stdout)
 
-# Use pychecker if requested
-if "--pychecker" in sys.argv:
-    sys.argv.remove("--pychecker")
-    os.environ['PYCHECKER'] = "--no-argsused --no-classattr --stdlib"
-        #'--blacklist=gettext,locale,pygtk,gtk,gtk.keysyms,popen2,random,difflib,filecmp,tempfile'
-    import pychecker.checker
-
 # Ignore session management
 for ignore in "--sm-config-prefix", "--sm-client-id":
     try:
@@ -78,11 +71,9 @@ import meld.conf
 if uninstalled:
     meld.conf.uninstalled()
 
-# i18n support
+# TODO: Possibly move to elib.intl
 import gettext
 _ = gettext.gettext
-# Locale setting in gtk.Builder appears somewhat broken under Python. See:
-#   https://bugzilla.gnome.org/show_bug.cgi?id=574520
 locale_domain = meld.conf.__package__
 locale_dir = meld.conf.LOCALEDIR
 
@@ -97,12 +88,13 @@ try:
         libintl = cdll.intl
         libintl.bindtextdomain(locale_domain, locale_dir)
         libintl.bind_textdomain_codeset(locale_domain, 'UTF-8')
+        del libintl
     else:
         locale.bindtextdomain(locale_domain, locale_dir)
         locale.bind_textdomain_codeset(locale_domain, 'UTF-8')
 except AttributeError as e:
-    # Python builds linked without libintl doesn't have bindtextdomain(), which
-    # causes gtk.Builder translations to fail.
+    # Python builds linked without libintl (i.e., OSX) don't have
+    # bindtextdomain(), which causes Gtk.Builder translations to fail.
     print "Couldn't bind the translation domain. Some translations won't work."
     print e
 except locale.Error as e:
@@ -110,10 +102,10 @@ except locale.Error as e:
     print e
 
 
-# Check requirements: Python 2.6, pygtk 2.14
-pyver = (2, 6)
-pygtkver = (2, 14, 0)
-pygobjectver = (2, 16, 0)
+pyver = (2, 7)
+gtk_requirement = (3, 8)
+glib_requirement = (2, 36, 0)
+
 
 def missing_reqs(mod, ver, exception=None):
     if isinstance(exception, ImportError):
@@ -128,28 +120,26 @@ if sys.version_info[:2] < pyver:
 
 # gtk+ and related imports
 try:
-    import pygtk
-    pygtk.require("2.0")
-except (ImportError, AssertionError) as e:
-    missing_reqs("pygtk", pygtkver, e)
-
-try:
-    import gtk
-    assert gtk.pygtk_version >= pygtkver
+    # FIXME: Extra clause for gi
+    import gi
+    from gi.repository import Gtk
+    gi.require_version("Gtk", "3.0")
+    version = (Gtk.get_major_version(), Gtk.get_minor_version())
+    assert version >= gtk_requirement
 except (ImportError, AssertionError) as e:
-    missing_reqs("pygtk", pygtkver, e)
+    missing_reqs("GTK+", gtk_requirement, e)
 
 try:
-    import gobject
-    assert gobject.pygobject_version >= pygobjectver
+    from gi.repository import GObject
+    assert GObject.glib_version >= glib_requirement
 except (ImportError, AssertionError) as e:
-    missing_reqs("pygobject", pygobjectver, e)
+    missing_reqs("GLib", glib_requirement, e)
 
-gobject.threads_init()
+GObject.threads_init()
 icon_dir = os.path.join(meld.conf.DATADIR, "icons")
-gtk.icon_theme_get_default().append_search_path(icon_dir)
+Gtk.IconTheme.get_default().append_search_path(icon_dir)
 rc_file = os.path.join(meld.conf.DATADIR, "gtkrc")
-gtk.rc_parse(rc_file)
+Gtk.rc_parse(rc_file)
 
 
 def main():
@@ -165,7 +155,7 @@ def main():
     app.create_window()
     new_window = app.parse_args(sys.argv[1:])
     if new_window or not already_running:
-        gtk.main()
+        Gtk.main()
 
 if profiling:
     import profile


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]