diff options
author | shmel1k <shmel1k@ydb.tech> | 2023-11-26 18:16:14 +0300 |
---|---|---|
committer | shmel1k <shmel1k@ydb.tech> | 2023-11-26 18:43:30 +0300 |
commit | b8cf9e88f4c5c64d9406af533d8948deb050d695 (patch) | |
tree | 218eb61fb3c3b96ec08b4d8cdfef383104a87d63 /contrib/python/Twisted/py2/twisted/internet/gtk3reactor.py | |
parent | 523f645a83a0ec97a0332dbc3863bb354c92a328 (diff) | |
download | ydb-b8cf9e88f4c5c64d9406af533d8948deb050d695.tar.gz |
add kikimr_configure
Diffstat (limited to 'contrib/python/Twisted/py2/twisted/internet/gtk3reactor.py')
-rw-r--r-- | contrib/python/Twisted/py2/twisted/internet/gtk3reactor.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/contrib/python/Twisted/py2/twisted/internet/gtk3reactor.py b/contrib/python/Twisted/py2/twisted/internet/gtk3reactor.py new file mode 100644 index 0000000000..256b6985f4 --- /dev/null +++ b/contrib/python/Twisted/py2/twisted/internet/gtk3reactor.py @@ -0,0 +1,80 @@ +# Copyright (c) Twisted Matrix Laboratories. +# See LICENSE for details. + +""" +This module provides support for Twisted to interact with the gtk3 mainloop +via Gobject introspection. This is like gi, but slightly slower and requires a +working $DISPLAY. + +In order to use this support, simply do the following:: + + from twisted.internet import gtk3reactor + gtk3reactor.install() + +If you wish to use a GApplication, register it with the reactor:: + + from twisted.internet import reactor + reactor.registerGApplication(app) + +Then use twisted.internet APIs as usual. +""" + +from __future__ import division, absolute_import + +import os + +from twisted.internet import gireactor +from twisted.python import runtime + +# Newer versions of gtk3/pygoject raise a RuntimeError, or just break in a +# confusing manner, if the program is not running under X11. We therefore try +# to fail in a more reasonable manner, and check for $DISPLAY as a reasonable +# approximation of availability of X11. This is somewhat over-aggressive, +# since some older versions of gtk3/pygobject do work with missing $DISPLAY, +# but it's too hard to figure out which, so we always require it. +if (runtime.platform.getType() == 'posix' and + not runtime.platform.isMacOSX() and not os.environ.get("DISPLAY")): + raise ImportError( + "Gtk3 requires X11, and no DISPLAY environment variable is set") + + +class Gtk3Reactor(gireactor.GIReactor): + """ + A reactor using the gtk3+ event loop. + """ + + def __init__(self): + """ + Override init to set the C{useGtk} flag. + """ + gireactor.GIReactor.__init__(self, useGtk=True) + + + +class PortableGtk3Reactor(gireactor.PortableGIReactor): + """ + Portable GTK+ 3.x reactor. + """ + def __init__(self): + """ + Override init to set the C{useGtk} flag. + """ + gireactor.PortableGIReactor.__init__(self, useGtk=True) + + + +def install(): + """ + Configure the Twisted mainloop to be run inside the gtk3+ mainloop. + """ + if runtime.platform.getType() == 'posix': + reactor = Gtk3Reactor() + else: + reactor = PortableGtk3Reactor() + + from twisted.internet.main import installReactor + installReactor(reactor) + return reactor + + +__all__ = ['install'] |