[pygobject] Move pygtkcompat into sibling package of gi
- From: Martin Pitt <martinpitt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pygobject] Move pygtkcompat into sibling package of gi
- Date: Mon, 19 Nov 2012 13:11:09 +0000 (UTC)
commit 8180b8092f99b7c9f0dee1742418efdbd23ab330
Author: Simon Feltman <sfeltman src gnome org>
Date: Thu Nov 15 02:51:52 2012 -0800
Move pygtkcompat into sibling package of gi
Move the pygtkcompat module out of the gi package and into
a sibling package as follows:
pygobject/
gi/
pygtkcompat/
This allows for pygtkcompat to grow without affecting the gi package.
Add deprecation message to gi/pygtkcompat.py
https://bugzilla.gnome.org/show_bug.cgi?id=688219
Makefile.am | 2 +-
configure.ac | 1 +
gi/pygtkcompat.py | 524 ++------------------------------------------
pygtkcompat/Makefile.am | 15 ++
pygtkcompat/__init__.py | 20 ++
pygtkcompat/pygtkcompat.py | 501 ++++++++++++++++++++++++++++++++++++++++++
tests/test_pygtkcompat.py | 6 +-
7 files changed, 565 insertions(+), 504 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index adb0105..eccb79a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
AUTOMAKE_OPTIONS = 1.7
-SUBDIRS = examples gi tests
+SUBDIRS = examples gi tests pygtkcompat
PLATFORM_VERSION = 3.0
diff --git a/configure.ac b/configure.ac
index f7ba91f..a87998e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -265,6 +265,7 @@ AC_CONFIG_FILES(
gi/_gobject/Makefile
examples/Makefile
tests/Makefile
+ pygtkcompat/Makefile
PKG-INFO)
AC_OUTPUT
diff --git a/gi/pygtkcompat.py b/gi/pygtkcompat.py
index 7b37599..91b5cc1 100644
--- a/gi/pygtkcompat.py
+++ b/gi/pygtkcompat.py
@@ -1,501 +1,25 @@
-# -*- Mode: Python; py-indent-offset: 4 -*-
-# vim: tabstop=4 shiftwidth=4 expandtab
-#
-# Copyright (C) 2011-2012 Johan Dahlin <johan gnome org>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
-# USA
-
-"""
-PyGTK compatibility layer.
-
-This modules goes a little bit longer to maintain PyGTK compatibility than
-the normal overrides system.
-
-It is recommended to not depend on this layer, but only use it as an
-intermediate step when porting your application to PyGI.
-
-Compatibility might never be 100%, but the aim is to make it possible to run
-a well behaved PyGTK application mostly unmodified on top of PyGI.
-
-"""
-
-import sys
import warnings
-
-try:
- # Python 3
- from collections import UserList
- from imp import reload
- UserList # pyflakes
-except ImportError:
- # Python 2 ships that in a different module
- from UserList import UserList
- UserList # pyflakes
-
-import gi
-from gi.repository import GObject
-
-
-def _install_enums(module, dest=None, strip=''):
- if dest is None:
- dest = module
- modname = dest.__name__.rsplit('.', 1)[1].upper()
- for attr in dir(module):
- try:
- obj = getattr(module, attr, None)
- except:
- continue
- try:
- if issubclass(obj, GObject.GEnum):
- for value, enum in obj.__enum_values__.items():
- name = enum.value_name
- name = name.replace(modname + '_', '')
- if strip and name.startswith(strip):
- name = name[len(strip):]
- setattr(dest, name, enum)
- except TypeError:
- continue
- try:
- if issubclass(obj, GObject.GFlags):
- for value, flag in obj.__flags_values__.items():
- name = flag.value_names[-1].replace(modname + '_', '')
- setattr(dest, name, flag)
- except TypeError:
- continue
-
-
-def enable():
- # gobject
- from gi.repository import GLib
- sys.modules['glib'] = GLib
-
- # gobject
- from gi.repository import GObject
- sys.modules['gobject'] = GObject
- from gi._gobject import propertyhelper
- sys.modules['gobject.propertyhelper'] = propertyhelper
-
- # gio
- from gi.repository import Gio
- sys.modules['gio'] = Gio
-
-_unset = object()
-
-
-def enable_gtk(version='2.0'):
- # set the default encoding like PyGTK
- reload(sys)
- if sys.version_info < (3, 0):
- sys.setdefaultencoding('utf-8')
-
- # atk
- gi.require_version('Atk', '1.0')
- from gi.repository import Atk
- sys.modules['atk'] = Atk
- _install_enums(Atk)
-
- # pango
- gi.require_version('Pango', '1.0')
- from gi.repository import Pango
- sys.modules['pango'] = Pango
- _install_enums(Pango)
-
- # pangocairo
- gi.require_version('PangoCairo', '1.0')
- from gi.repository import PangoCairo
- sys.modules['pangocairo'] = PangoCairo
-
- # gdk
- gi.require_version('Gdk', version)
- gi.require_version('GdkPixbuf', '2.0')
- from gi.repository import Gdk
- from gi.repository import GdkPixbuf
- sys.modules['gtk.gdk'] = Gdk
- _install_enums(Gdk)
- _install_enums(GdkPixbuf, dest=Gdk)
- Gdk._2BUTTON_PRESS = 5
- Gdk.BUTTON_PRESS = 4
-
- Gdk.screen_get_default = Gdk.Screen.get_default
- Gdk.Pixbuf = GdkPixbuf.Pixbuf
- Gdk.PixbufLoader = GdkPixbuf.PixbufLoader.new_with_type
- Gdk.pixbuf_new_from_data = GdkPixbuf.Pixbuf.new_from_data
- Gdk.pixbuf_new_from_file = GdkPixbuf.Pixbuf.new_from_file
- Gdk.pixbuf_new_from_file_at_scale = GdkPixbuf.Pixbuf.new_from_file_at_scale
- Gdk.pixbuf_new_from_file_at_size = GdkPixbuf.Pixbuf.new_from_file_at_size
- Gdk.pixbuf_new_from_inline = GdkPixbuf.Pixbuf.new_from_inline
- Gdk.pixbuf_new_from_stream = GdkPixbuf.Pixbuf.new_from_stream
- Gdk.pixbuf_new_from_stream_at_scale = GdkPixbuf.Pixbuf.new_from_stream_at_scale
- Gdk.pixbuf_new_from_xpm_data = GdkPixbuf.Pixbuf.new_from_xpm_data
- Gdk.pixbuf_get_file_info = GdkPixbuf.Pixbuf.get_file_info
-
- orig_get_formats = GdkPixbuf.Pixbuf.get_formats
-
- def get_formats():
- formats = orig_get_formats()
- result = []
-
- def make_dict(format_):
- result = {}
- result['description'] = format_.get_description()
- result['name'] = format_.get_name()
- result['mime_types'] = format_.get_mime_types()
- result['extensions'] = format_.get_extensions()
- return result
-
- for format_ in formats:
- result.append(make_dict(format_))
- return result
-
- Gdk.pixbuf_get_formats = get_formats
-
- orig_get_frame_extents = Gdk.Window.get_frame_extents
-
- def get_frame_extents(window):
- try:
- try:
- rect = Gdk.Rectangle(0, 0, 0, 0)
- except TypeError:
- rect = Gdk.Rectangle()
- orig_get_frame_extents(window, rect)
- except TypeError:
- rect = orig_get_frame_extents(window)
- return rect
- Gdk.Window.get_frame_extents = get_frame_extents
-
- orig_get_origin = Gdk.Window.get_origin
-
- def get_origin(self):
- return orig_get_origin(self)[1:]
- Gdk.Window.get_origin = get_origin
-
- Gdk.screen_width = Gdk.Screen.width
- Gdk.screen_height = Gdk.Screen.height
-
- # gtk
- gi.require_version('Gtk', version)
- from gi.repository import Gtk
- sys.modules['gtk'] = Gtk
- Gtk.gdk = Gdk
-
- Gtk.pygtk_version = (2, 99, 0)
-
- Gtk.gtk_version = (Gtk.MAJOR_VERSION,
- Gtk.MINOR_VERSION,
- Gtk.MICRO_VERSION)
- _install_enums(Gtk)
-
- # Action
-
- def set_tool_item_type(menuaction, gtype):
- warnings.warn('set_tool_item_type() is not supported',
- gi.PyGIDeprecationWarning, stacklevel=2)
- Gtk.Action.set_tool_item_type = classmethod(set_tool_item_type)
-
- # Alignment
-
- orig_Alignment = Gtk.Alignment
-
- class Alignment(orig_Alignment):
- def __init__(self, xalign=0.0, yalign=0.0, xscale=0.0, yscale=0.0):
- orig_Alignment.__init__(self)
- self.props.xalign = xalign
- self.props.yalign = yalign
- self.props.xscale = xscale
- self.props.yscale = yscale
-
- Gtk.Alignment = Alignment
-
- # Box
-
- orig_pack_end = Gtk.Box.pack_end
-
- def pack_end(self, child, expand=True, fill=True, padding=0):
- orig_pack_end(self, child, expand, fill, padding)
- Gtk.Box.pack_end = pack_end
-
- orig_pack_start = Gtk.Box.pack_start
-
- def pack_start(self, child, expand=True, fill=True, padding=0):
- orig_pack_start(self, child, expand, fill, padding)
- Gtk.Box.pack_start = pack_start
-
- # TreeViewColumn
-
- orig_tree_view_column_pack_end = Gtk.TreeViewColumn.pack_end
-
- def tree_view_column_pack_end(self, cell, expand=True):
- orig_tree_view_column_pack_end(self, cell, expand)
- Gtk.TreeViewColumn.pack_end = tree_view_column_pack_end
-
- orig_tree_view_column_pack_start = Gtk.TreeViewColumn.pack_start
-
- def tree_view_column_pack_start(self, cell, expand=True):
- orig_tree_view_column_pack_start(self, cell, expand)
- Gtk.TreeViewColumn.pack_start = tree_view_column_pack_start
-
- # CellLayout
-
- orig_cell_pack_end = Gtk.CellLayout.pack_end
-
- def cell_pack_end(self, cell, expand=True):
- orig_cell_pack_end(self, cell, expand)
- Gtk.CellLayout.pack_end = cell_pack_end
-
- orig_cell_pack_start = Gtk.CellLayout.pack_start
-
- def cell_pack_start(self, cell, expand=True):
- orig_cell_pack_start(self, cell, expand)
- Gtk.CellLayout.pack_start = cell_pack_start
-
- orig_set_cell_data_func = Gtk.CellLayout.set_cell_data_func
-
- def set_cell_data_func(self, cell, func, user_data=_unset):
- def callback(*args):
- if args[-1] == _unset:
- args = args[:-1]
- return func(*args)
- orig_set_cell_data_func(self, cell, callback, user_data)
- Gtk.CellLayout.set_cell_data_func = set_cell_data_func
-
- # CellRenderer
-
- class GenericCellRenderer(Gtk.CellRenderer):
- pass
- Gtk.GenericCellRenderer = GenericCellRenderer
-
- # ComboBox
-
- orig_combo_row_separator_func = Gtk.ComboBox.set_row_separator_func
-
- def combo_row_separator_func(self, func, user_data=_unset):
- def callback(*args):
- if args[-1] == _unset:
- args = args[:-1]
- return func(*args)
- orig_combo_row_separator_func(self, callback, user_data)
- Gtk.ComboBox.set_row_separator_func = combo_row_separator_func
-
- # ComboBoxEntry
-
- class ComboBoxEntry(Gtk.ComboBox):
- def __init__(self, **kwds):
- Gtk.ComboBox.__init__(self, has_entry=True, **kwds)
-
- def set_text_column(self, text_column):
- self.set_entry_text_column(text_column)
-
- def get_text_column(self):
- return self.get_entry_text_column()
- Gtk.ComboBoxEntry = ComboBoxEntry
-
- def combo_box_entry_new():
- return Gtk.ComboBoxEntry()
- Gtk.combo_box_entry_new = combo_box_entry_new
-
- def combo_box_entry_new_with_model(model):
- return Gtk.ComboBoxEntry(model=model)
- Gtk.combo_box_entry_new_with_model = combo_box_entry_new_with_model
-
- # Container
-
- def install_child_property(container, flag, pspec):
- warnings.warn('install_child_property() is not supported',
- gi.PyGIDeprecationWarning, stacklevel=2)
- Gtk.Container.install_child_property = classmethod(install_child_property)
-
- def new_text():
- combo = Gtk.ComboBox()
- model = Gtk.ListStore(str)
- combo.set_model(model)
- combo.set_entry_text_column(0)
- return combo
- Gtk.combo_box_new_text = new_text
-
- def append_text(self, text):
- model = self.get_model()
- model.append([text])
- Gtk.ComboBox.append_text = append_text
- Gtk.expander_new_with_mnemonic = Gtk.Expander.new_with_mnemonic
- Gtk.icon_theme_get_default = Gtk.IconTheme.get_default
- Gtk.image_new_from_pixbuf = Gtk.Image.new_from_pixbuf
- Gtk.image_new_from_stock = Gtk.Image.new_from_stock
- Gtk.image_new_from_animation = Gtk.Image.new_from_animation
- Gtk.image_new_from_icon_set = Gtk.Image.new_from_icon_set
- Gtk.image_new_from_file = Gtk.Image.new_from_file
- Gtk.settings_get_default = Gtk.Settings.get_default
- Gtk.window_set_default_icon = Gtk.Window.set_default_icon
- Gtk.clipboard_get = Gtk.Clipboard.get
-
- #AccelGroup
- Gtk.AccelGroup.connect_group = Gtk.AccelGroup.connect
-
- #StatusIcon
- Gtk.status_icon_position_menu = Gtk.StatusIcon.position_menu
- Gtk.StatusIcon.set_tooltip = Gtk.StatusIcon.set_tooltip_text
-
- # Scale
-
- orig_HScale = Gtk.HScale
- orig_VScale = Gtk.VScale
-
- class HScale(orig_HScale):
- def __init__(self, adjustment=None):
- orig_HScale.__init__(self, adjustment=adjustment)
- Gtk.HScale = HScale
-
- class VScale(orig_VScale):
- def __init__(self, adjustment=None):
- orig_VScale.__init__(self, adjustment=adjustment)
- Gtk.VScale = VScale
-
- Gtk.stock_add = lambda items: None
-
- # Widget
-
- Gtk.widget_get_default_direction = Gtk.Widget.get_default_direction
- orig_size_request = Gtk.Widget.size_request
-
- def size_request(widget):
- class SizeRequest(UserList):
- def __init__(self, req):
- self.height = req.height
- self.width = req.width
- UserList.__init__(self, [self.width, self.height])
- return SizeRequest(orig_size_request(widget))
- Gtk.Widget.size_request = size_request
- Gtk.Widget.hide_all = Gtk.Widget.hide
-
- class BaseGetter(object):
- def __init__(self, context):
- self.context = context
-
- def __getitem__(self, state):
- color = self.context.get_background_color(state)
- return Gdk.Color(red=int(color.red * 65535),
- green=int(color.green * 65535),
- blue=int(color.blue * 65535))
-
- class Styles(object):
- def __init__(self, widget):
- context = widget.get_style_context()
- self.base = BaseGetter(context)
- self.black = Gdk.Color(red=0, green=0, blue=0)
-
- class StyleDescriptor(object):
- def __get__(self, instance, class_):
- return Styles(instance)
- Gtk.Widget.style = StyleDescriptor()
-
- # gtk.unixprint
-
- class UnixPrint(object):
- pass
- unixprint = UnixPrint()
- sys.modules['gtkunixprint'] = unixprint
-
- # gtk.keysyms
-
- class Keysyms(object):
- pass
- keysyms = Keysyms()
- sys.modules['gtk.keysyms'] = keysyms
- Gtk.keysyms = keysyms
- for name in dir(Gdk):
- if name.startswith('KEY_'):
- target = name[4:]
- if target[0] in '0123456789':
- target = '_' + target
- value = getattr(Gdk, name)
- setattr(keysyms, target, value)
-
-
-def enable_vte():
- gi.require_version('Vte', '0.0')
- from gi.repository import Vte
- sys.modules['vte'] = Vte
-
-
-def enable_poppler():
- gi.require_version('Poppler', '0.18')
- from gi.repository import Poppler
- sys.modules['poppler'] = Poppler
- Poppler.pypoppler_version = (1, 0, 0)
-
-
-def enable_webkit(version='1.0'):
- gi.require_version('WebKit', version)
- from gi.repository import WebKit
- sys.modules['webkit'] = WebKit
- WebKit.WebView.get_web_inspector = WebKit.WebView.get_inspector
-
-
-def enable_gudev():
- gi.require_version('GUdev', '1.0')
- from gi.repository import GUdev
- sys.modules['gudev'] = GUdev
-
-
-def enable_gst():
- gi.require_version('Gst', '0.10')
- from gi.repository import Gst
- sys.modules['gst'] = Gst
- _install_enums(Gst)
- Gst.registry_get_default = Gst.Registry.get_default
- Gst.element_register = Gst.Element.register
- Gst.element_factory_make = Gst.ElementFactory.make
- Gst.caps_new_any = Gst.Caps.new_any
- Gst.get_pygst_version = lambda: (0, 10, 19)
- Gst.get_gst_version = lambda: (0, 10, 40)
-
- from gi.repository import GstInterfaces
- sys.modules['gst.interfaces'] = GstInterfaces
- _install_enums(GstInterfaces)
-
- from gi.repository import GstAudio
- sys.modules['gst.audio'] = GstAudio
- _install_enums(GstAudio)
-
- from gi.repository import GstVideo
- sys.modules['gst.video'] = GstVideo
- _install_enums(GstVideo)
-
- from gi.repository import GstBase
- sys.modules['gst.base'] = GstBase
- _install_enums(GstBase)
-
- Gst.BaseTransform = GstBase.BaseTransform
- Gst.BaseSink = GstBase.BaseSink
-
- from gi.repository import GstController
- sys.modules['gst.controller'] = GstController
- _install_enums(GstController, dest=Gst)
-
- from gi.repository import GstPbutils
- sys.modules['gst.pbutils'] = GstPbutils
- _install_enums(GstPbutils)
-
-
-def enable_goocanvas():
- gi.require_version('GooCanvas', '2.0')
- from gi.repository import GooCanvas
- sys.modules['goocanvas'] = GooCanvas
- _install_enums(GooCanvas, strip='GOO_CANVAS_')
- GooCanvas.ItemSimple = GooCanvas.CanvasItemSimple
- GooCanvas.Item = GooCanvas.CanvasItem
- GooCanvas.Image = GooCanvas.CanvasImage
- GooCanvas.Group = GooCanvas.CanvasGroup
- GooCanvas.Rect = GooCanvas.CanvasRect
+from gi import PyGIDeprecationWarning
+
+warnings.warn('gi.pygtkcompat is being deprecated in favor of using "pygtkcompat" directly.',
+ PyGIDeprecationWarning, stacklevel=2)
+
+# pyflakes.ignore
+from pygtkcompat import (enable,
+ enable_gtk,
+ enable_vte,
+ enable_poppler,
+ enable_webkit,
+ enable_gudev,
+ enable_gst,
+ enable_goocanvas)
+
+
+__all__ = ['enable',
+ 'enable_gtk',
+ 'enable_vte',
+ 'enable_poppler',
+ 'enable_webkit',
+ 'enable_gudev',
+ 'enable_gst',
+ 'enable_goocanvas']
diff --git a/pygtkcompat/Makefile.am b/pygtkcompat/Makefile.am
new file mode 100644
index 0000000..6a73cb4
--- /dev/null
+++ b/pygtkcompat/Makefile.am
@@ -0,0 +1,15 @@
+pygtkcompatdir = $(pyexecdir)/pygtkcompat
+
+pygtkcompat_PYTHON = \
+ __init__.py \
+ pygtkcompat.py
+
+# if we build in a separate tree, we need to symlink the *.py files from the
+# source tree; Python does not accept the extensions and modules in different
+# paths
+build_pylinks:
+ for f in $(pygtkcompat_PYTHON); do \
+ [ -e $(builddir)/$$f ] || $(LN_S) $(srcdir)/$$f $(builddir)/$$f; \
+ done
+
+all-local: build_pylinks
diff --git a/pygtkcompat/__init__.py b/pygtkcompat/__init__.py
new file mode 100644
index 0000000..8ae0337
--- /dev/null
+++ b/pygtkcompat/__init__.py
@@ -0,0 +1,20 @@
+
+# pyflakes.ignore
+from .pygtkcompat import (enable,
+ enable_gtk,
+ enable_vte,
+ enable_poppler,
+ enable_webkit,
+ enable_gudev,
+ enable_gst,
+ enable_goocanvas)
+
+
+__all__ = ['enable',
+ 'enable_gtk',
+ 'enable_vte',
+ 'enable_poppler',
+ 'enable_webkit',
+ 'enable_gudev',
+ 'enable_gst',
+ 'enable_goocanvas']
diff --git a/pygtkcompat/pygtkcompat.py b/pygtkcompat/pygtkcompat.py
new file mode 100644
index 0000000..7b37599
--- /dev/null
+++ b/pygtkcompat/pygtkcompat.py
@@ -0,0 +1,501 @@
+# -*- Mode: Python; py-indent-offset: 4 -*-
+# vim: tabstop=4 shiftwidth=4 expandtab
+#
+# Copyright (C) 2011-2012 Johan Dahlin <johan gnome org>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+# USA
+
+"""
+PyGTK compatibility layer.
+
+This modules goes a little bit longer to maintain PyGTK compatibility than
+the normal overrides system.
+
+It is recommended to not depend on this layer, but only use it as an
+intermediate step when porting your application to PyGI.
+
+Compatibility might never be 100%, but the aim is to make it possible to run
+a well behaved PyGTK application mostly unmodified on top of PyGI.
+
+"""
+
+import sys
+import warnings
+
+try:
+ # Python 3
+ from collections import UserList
+ from imp import reload
+ UserList # pyflakes
+except ImportError:
+ # Python 2 ships that in a different module
+ from UserList import UserList
+ UserList # pyflakes
+
+import gi
+from gi.repository import GObject
+
+
+def _install_enums(module, dest=None, strip=''):
+ if dest is None:
+ dest = module
+ modname = dest.__name__.rsplit('.', 1)[1].upper()
+ for attr in dir(module):
+ try:
+ obj = getattr(module, attr, None)
+ except:
+ continue
+ try:
+ if issubclass(obj, GObject.GEnum):
+ for value, enum in obj.__enum_values__.items():
+ name = enum.value_name
+ name = name.replace(modname + '_', '')
+ if strip and name.startswith(strip):
+ name = name[len(strip):]
+ setattr(dest, name, enum)
+ except TypeError:
+ continue
+ try:
+ if issubclass(obj, GObject.GFlags):
+ for value, flag in obj.__flags_values__.items():
+ name = flag.value_names[-1].replace(modname + '_', '')
+ setattr(dest, name, flag)
+ except TypeError:
+ continue
+
+
+def enable():
+ # gobject
+ from gi.repository import GLib
+ sys.modules['glib'] = GLib
+
+ # gobject
+ from gi.repository import GObject
+ sys.modules['gobject'] = GObject
+ from gi._gobject import propertyhelper
+ sys.modules['gobject.propertyhelper'] = propertyhelper
+
+ # gio
+ from gi.repository import Gio
+ sys.modules['gio'] = Gio
+
+_unset = object()
+
+
+def enable_gtk(version='2.0'):
+ # set the default encoding like PyGTK
+ reload(sys)
+ if sys.version_info < (3, 0):
+ sys.setdefaultencoding('utf-8')
+
+ # atk
+ gi.require_version('Atk', '1.0')
+ from gi.repository import Atk
+ sys.modules['atk'] = Atk
+ _install_enums(Atk)
+
+ # pango
+ gi.require_version('Pango', '1.0')
+ from gi.repository import Pango
+ sys.modules['pango'] = Pango
+ _install_enums(Pango)
+
+ # pangocairo
+ gi.require_version('PangoCairo', '1.0')
+ from gi.repository import PangoCairo
+ sys.modules['pangocairo'] = PangoCairo
+
+ # gdk
+ gi.require_version('Gdk', version)
+ gi.require_version('GdkPixbuf', '2.0')
+ from gi.repository import Gdk
+ from gi.repository import GdkPixbuf
+ sys.modules['gtk.gdk'] = Gdk
+ _install_enums(Gdk)
+ _install_enums(GdkPixbuf, dest=Gdk)
+ Gdk._2BUTTON_PRESS = 5
+ Gdk.BUTTON_PRESS = 4
+
+ Gdk.screen_get_default = Gdk.Screen.get_default
+ Gdk.Pixbuf = GdkPixbuf.Pixbuf
+ Gdk.PixbufLoader = GdkPixbuf.PixbufLoader.new_with_type
+ Gdk.pixbuf_new_from_data = GdkPixbuf.Pixbuf.new_from_data
+ Gdk.pixbuf_new_from_file = GdkPixbuf.Pixbuf.new_from_file
+ Gdk.pixbuf_new_from_file_at_scale = GdkPixbuf.Pixbuf.new_from_file_at_scale
+ Gdk.pixbuf_new_from_file_at_size = GdkPixbuf.Pixbuf.new_from_file_at_size
+ Gdk.pixbuf_new_from_inline = GdkPixbuf.Pixbuf.new_from_inline
+ Gdk.pixbuf_new_from_stream = GdkPixbuf.Pixbuf.new_from_stream
+ Gdk.pixbuf_new_from_stream_at_scale = GdkPixbuf.Pixbuf.new_from_stream_at_scale
+ Gdk.pixbuf_new_from_xpm_data = GdkPixbuf.Pixbuf.new_from_xpm_data
+ Gdk.pixbuf_get_file_info = GdkPixbuf.Pixbuf.get_file_info
+
+ orig_get_formats = GdkPixbuf.Pixbuf.get_formats
+
+ def get_formats():
+ formats = orig_get_formats()
+ result = []
+
+ def make_dict(format_):
+ result = {}
+ result['description'] = format_.get_description()
+ result['name'] = format_.get_name()
+ result['mime_types'] = format_.get_mime_types()
+ result['extensions'] = format_.get_extensions()
+ return result
+
+ for format_ in formats:
+ result.append(make_dict(format_))
+ return result
+
+ Gdk.pixbuf_get_formats = get_formats
+
+ orig_get_frame_extents = Gdk.Window.get_frame_extents
+
+ def get_frame_extents(window):
+ try:
+ try:
+ rect = Gdk.Rectangle(0, 0, 0, 0)
+ except TypeError:
+ rect = Gdk.Rectangle()
+ orig_get_frame_extents(window, rect)
+ except TypeError:
+ rect = orig_get_frame_extents(window)
+ return rect
+ Gdk.Window.get_frame_extents = get_frame_extents
+
+ orig_get_origin = Gdk.Window.get_origin
+
+ def get_origin(self):
+ return orig_get_origin(self)[1:]
+ Gdk.Window.get_origin = get_origin
+
+ Gdk.screen_width = Gdk.Screen.width
+ Gdk.screen_height = Gdk.Screen.height
+
+ # gtk
+ gi.require_version('Gtk', version)
+ from gi.repository import Gtk
+ sys.modules['gtk'] = Gtk
+ Gtk.gdk = Gdk
+
+ Gtk.pygtk_version = (2, 99, 0)
+
+ Gtk.gtk_version = (Gtk.MAJOR_VERSION,
+ Gtk.MINOR_VERSION,
+ Gtk.MICRO_VERSION)
+ _install_enums(Gtk)
+
+ # Action
+
+ def set_tool_item_type(menuaction, gtype):
+ warnings.warn('set_tool_item_type() is not supported',
+ gi.PyGIDeprecationWarning, stacklevel=2)
+ Gtk.Action.set_tool_item_type = classmethod(set_tool_item_type)
+
+ # Alignment
+
+ orig_Alignment = Gtk.Alignment
+
+ class Alignment(orig_Alignment):
+ def __init__(self, xalign=0.0, yalign=0.0, xscale=0.0, yscale=0.0):
+ orig_Alignment.__init__(self)
+ self.props.xalign = xalign
+ self.props.yalign = yalign
+ self.props.xscale = xscale
+ self.props.yscale = yscale
+
+ Gtk.Alignment = Alignment
+
+ # Box
+
+ orig_pack_end = Gtk.Box.pack_end
+
+ def pack_end(self, child, expand=True, fill=True, padding=0):
+ orig_pack_end(self, child, expand, fill, padding)
+ Gtk.Box.pack_end = pack_end
+
+ orig_pack_start = Gtk.Box.pack_start
+
+ def pack_start(self, child, expand=True, fill=True, padding=0):
+ orig_pack_start(self, child, expand, fill, padding)
+ Gtk.Box.pack_start = pack_start
+
+ # TreeViewColumn
+
+ orig_tree_view_column_pack_end = Gtk.TreeViewColumn.pack_end
+
+ def tree_view_column_pack_end(self, cell, expand=True):
+ orig_tree_view_column_pack_end(self, cell, expand)
+ Gtk.TreeViewColumn.pack_end = tree_view_column_pack_end
+
+ orig_tree_view_column_pack_start = Gtk.TreeViewColumn.pack_start
+
+ def tree_view_column_pack_start(self, cell, expand=True):
+ orig_tree_view_column_pack_start(self, cell, expand)
+ Gtk.TreeViewColumn.pack_start = tree_view_column_pack_start
+
+ # CellLayout
+
+ orig_cell_pack_end = Gtk.CellLayout.pack_end
+
+ def cell_pack_end(self, cell, expand=True):
+ orig_cell_pack_end(self, cell, expand)
+ Gtk.CellLayout.pack_end = cell_pack_end
+
+ orig_cell_pack_start = Gtk.CellLayout.pack_start
+
+ def cell_pack_start(self, cell, expand=True):
+ orig_cell_pack_start(self, cell, expand)
+ Gtk.CellLayout.pack_start = cell_pack_start
+
+ orig_set_cell_data_func = Gtk.CellLayout.set_cell_data_func
+
+ def set_cell_data_func(self, cell, func, user_data=_unset):
+ def callback(*args):
+ if args[-1] == _unset:
+ args = args[:-1]
+ return func(*args)
+ orig_set_cell_data_func(self, cell, callback, user_data)
+ Gtk.CellLayout.set_cell_data_func = set_cell_data_func
+
+ # CellRenderer
+
+ class GenericCellRenderer(Gtk.CellRenderer):
+ pass
+ Gtk.GenericCellRenderer = GenericCellRenderer
+
+ # ComboBox
+
+ orig_combo_row_separator_func = Gtk.ComboBox.set_row_separator_func
+
+ def combo_row_separator_func(self, func, user_data=_unset):
+ def callback(*args):
+ if args[-1] == _unset:
+ args = args[:-1]
+ return func(*args)
+ orig_combo_row_separator_func(self, callback, user_data)
+ Gtk.ComboBox.set_row_separator_func = combo_row_separator_func
+
+ # ComboBoxEntry
+
+ class ComboBoxEntry(Gtk.ComboBox):
+ def __init__(self, **kwds):
+ Gtk.ComboBox.__init__(self, has_entry=True, **kwds)
+
+ def set_text_column(self, text_column):
+ self.set_entry_text_column(text_column)
+
+ def get_text_column(self):
+ return self.get_entry_text_column()
+ Gtk.ComboBoxEntry = ComboBoxEntry
+
+ def combo_box_entry_new():
+ return Gtk.ComboBoxEntry()
+ Gtk.combo_box_entry_new = combo_box_entry_new
+
+ def combo_box_entry_new_with_model(model):
+ return Gtk.ComboBoxEntry(model=model)
+ Gtk.combo_box_entry_new_with_model = combo_box_entry_new_with_model
+
+ # Container
+
+ def install_child_property(container, flag, pspec):
+ warnings.warn('install_child_property() is not supported',
+ gi.PyGIDeprecationWarning, stacklevel=2)
+ Gtk.Container.install_child_property = classmethod(install_child_property)
+
+ def new_text():
+ combo = Gtk.ComboBox()
+ model = Gtk.ListStore(str)
+ combo.set_model(model)
+ combo.set_entry_text_column(0)
+ return combo
+ Gtk.combo_box_new_text = new_text
+
+ def append_text(self, text):
+ model = self.get_model()
+ model.append([text])
+ Gtk.ComboBox.append_text = append_text
+ Gtk.expander_new_with_mnemonic = Gtk.Expander.new_with_mnemonic
+ Gtk.icon_theme_get_default = Gtk.IconTheme.get_default
+ Gtk.image_new_from_pixbuf = Gtk.Image.new_from_pixbuf
+ Gtk.image_new_from_stock = Gtk.Image.new_from_stock
+ Gtk.image_new_from_animation = Gtk.Image.new_from_animation
+ Gtk.image_new_from_icon_set = Gtk.Image.new_from_icon_set
+ Gtk.image_new_from_file = Gtk.Image.new_from_file
+ Gtk.settings_get_default = Gtk.Settings.get_default
+ Gtk.window_set_default_icon = Gtk.Window.set_default_icon
+ Gtk.clipboard_get = Gtk.Clipboard.get
+
+ #AccelGroup
+ Gtk.AccelGroup.connect_group = Gtk.AccelGroup.connect
+
+ #StatusIcon
+ Gtk.status_icon_position_menu = Gtk.StatusIcon.position_menu
+ Gtk.StatusIcon.set_tooltip = Gtk.StatusIcon.set_tooltip_text
+
+ # Scale
+
+ orig_HScale = Gtk.HScale
+ orig_VScale = Gtk.VScale
+
+ class HScale(orig_HScale):
+ def __init__(self, adjustment=None):
+ orig_HScale.__init__(self, adjustment=adjustment)
+ Gtk.HScale = HScale
+
+ class VScale(orig_VScale):
+ def __init__(self, adjustment=None):
+ orig_VScale.__init__(self, adjustment=adjustment)
+ Gtk.VScale = VScale
+
+ Gtk.stock_add = lambda items: None
+
+ # Widget
+
+ Gtk.widget_get_default_direction = Gtk.Widget.get_default_direction
+ orig_size_request = Gtk.Widget.size_request
+
+ def size_request(widget):
+ class SizeRequest(UserList):
+ def __init__(self, req):
+ self.height = req.height
+ self.width = req.width
+ UserList.__init__(self, [self.width, self.height])
+ return SizeRequest(orig_size_request(widget))
+ Gtk.Widget.size_request = size_request
+ Gtk.Widget.hide_all = Gtk.Widget.hide
+
+ class BaseGetter(object):
+ def __init__(self, context):
+ self.context = context
+
+ def __getitem__(self, state):
+ color = self.context.get_background_color(state)
+ return Gdk.Color(red=int(color.red * 65535),
+ green=int(color.green * 65535),
+ blue=int(color.blue * 65535))
+
+ class Styles(object):
+ def __init__(self, widget):
+ context = widget.get_style_context()
+ self.base = BaseGetter(context)
+ self.black = Gdk.Color(red=0, green=0, blue=0)
+
+ class StyleDescriptor(object):
+ def __get__(self, instance, class_):
+ return Styles(instance)
+ Gtk.Widget.style = StyleDescriptor()
+
+ # gtk.unixprint
+
+ class UnixPrint(object):
+ pass
+ unixprint = UnixPrint()
+ sys.modules['gtkunixprint'] = unixprint
+
+ # gtk.keysyms
+
+ class Keysyms(object):
+ pass
+ keysyms = Keysyms()
+ sys.modules['gtk.keysyms'] = keysyms
+ Gtk.keysyms = keysyms
+ for name in dir(Gdk):
+ if name.startswith('KEY_'):
+ target = name[4:]
+ if target[0] in '0123456789':
+ target = '_' + target
+ value = getattr(Gdk, name)
+ setattr(keysyms, target, value)
+
+
+def enable_vte():
+ gi.require_version('Vte', '0.0')
+ from gi.repository import Vte
+ sys.modules['vte'] = Vte
+
+
+def enable_poppler():
+ gi.require_version('Poppler', '0.18')
+ from gi.repository import Poppler
+ sys.modules['poppler'] = Poppler
+ Poppler.pypoppler_version = (1, 0, 0)
+
+
+def enable_webkit(version='1.0'):
+ gi.require_version('WebKit', version)
+ from gi.repository import WebKit
+ sys.modules['webkit'] = WebKit
+ WebKit.WebView.get_web_inspector = WebKit.WebView.get_inspector
+
+
+def enable_gudev():
+ gi.require_version('GUdev', '1.0')
+ from gi.repository import GUdev
+ sys.modules['gudev'] = GUdev
+
+
+def enable_gst():
+ gi.require_version('Gst', '0.10')
+ from gi.repository import Gst
+ sys.modules['gst'] = Gst
+ _install_enums(Gst)
+ Gst.registry_get_default = Gst.Registry.get_default
+ Gst.element_register = Gst.Element.register
+ Gst.element_factory_make = Gst.ElementFactory.make
+ Gst.caps_new_any = Gst.Caps.new_any
+ Gst.get_pygst_version = lambda: (0, 10, 19)
+ Gst.get_gst_version = lambda: (0, 10, 40)
+
+ from gi.repository import GstInterfaces
+ sys.modules['gst.interfaces'] = GstInterfaces
+ _install_enums(GstInterfaces)
+
+ from gi.repository import GstAudio
+ sys.modules['gst.audio'] = GstAudio
+ _install_enums(GstAudio)
+
+ from gi.repository import GstVideo
+ sys.modules['gst.video'] = GstVideo
+ _install_enums(GstVideo)
+
+ from gi.repository import GstBase
+ sys.modules['gst.base'] = GstBase
+ _install_enums(GstBase)
+
+ Gst.BaseTransform = GstBase.BaseTransform
+ Gst.BaseSink = GstBase.BaseSink
+
+ from gi.repository import GstController
+ sys.modules['gst.controller'] = GstController
+ _install_enums(GstController, dest=Gst)
+
+ from gi.repository import GstPbutils
+ sys.modules['gst.pbutils'] = GstPbutils
+ _install_enums(GstPbutils)
+
+
+def enable_goocanvas():
+ gi.require_version('GooCanvas', '2.0')
+ from gi.repository import GooCanvas
+ sys.modules['goocanvas'] = GooCanvas
+ _install_enums(GooCanvas, strip='GOO_CANVAS_')
+ GooCanvas.ItemSimple = GooCanvas.CanvasItemSimple
+ GooCanvas.Item = GooCanvas.CanvasItem
+ GooCanvas.Image = GooCanvas.CanvasImage
+ GooCanvas.Group = GooCanvas.CanvasGroup
+ GooCanvas.Rect = GooCanvas.CanvasRect
diff --git a/tests/test_pygtkcompat.py b/tests/test_pygtkcompat.py
index c6fde25..10be6a3 100644
--- a/tests/test_pygtkcompat.py
+++ b/tests/test_pygtkcompat.py
@@ -12,10 +12,10 @@ try:
from gi.repository import Gtk
(Atk, Gtk, Pango) # pyflakes
- import gi.pygtkcompat
+ import pygtkcompat
- gi.pygtkcompat.enable()
- gi.pygtkcompat.enable_gtk(version='3.0')
+ pygtkcompat.enable()
+ pygtkcompat.enable_gtk(version='3.0')
import atk
import pango
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]