aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Twisted/py2/twisted/internet/gtk3reactor.py
diff options
context:
space:
mode:
authorshmel1k <shmel1k@ydb.tech>2023-11-26 18:16:14 +0300
committershmel1k <shmel1k@ydb.tech>2023-11-26 18:43:30 +0300
commitb8cf9e88f4c5c64d9406af533d8948deb050d695 (patch)
tree218eb61fb3c3b96ec08b4d8cdfef383104a87d63 /contrib/python/Twisted/py2/twisted/internet/gtk3reactor.py
parent523f645a83a0ec97a0332dbc3863bb354c92a328 (diff)
downloadydb-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.py80
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']