##// END OF EJS Templates
Merge pull request #12318 from meeseeksmachine/auto-backport-of-pr-12314-on-7.x
Matthias Bussonnier -
r25738:2884cdb6 merge
parent child Browse files
Show More
@@ -1,53 +1,54 b''
1 1 import sys
2 2 import os
3 3 from IPython.external.qt_for_kernel import QtCore, QtGui
4 4
5 5 # If we create a QApplication, keep a reference to it so that it doesn't get
6 6 # garbage collected.
7 7 _appref = None
8 8 _already_warned = False
9 9
10 10
11 11 def inputhook(context):
12 12 global _appref
13 13 app = QtCore.QCoreApplication.instance()
14 14 if not app:
15 15 if sys.platform == 'linux':
16 16 if not os.environ.get('DISPLAY') \
17 17 and not os.environ.get('WAYLAND_DISPLAY'):
18 18 import warnings
19 19 global _already_warned
20 20 if not _already_warned:
21 21 _already_warned = True
22 22 warnings.warn(
23 23 'The DISPLAY or WAYLAND_DISPLAY environment variable is '
24 24 'not set or empty and Qt5 requires this environment '
25 25 'variable. Deactivate Qt5 code.'
26 26 )
27 27 return
28 QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
28 29 _appref = app = QtGui.QApplication([" "])
29 30 event_loop = QtCore.QEventLoop(app)
30 31
31 32 if sys.platform == 'win32':
32 33 # The QSocketNotifier method doesn't appear to work on Windows.
33 34 # Use polling instead.
34 35 timer = QtCore.QTimer()
35 36 timer.timeout.connect(event_loop.quit)
36 37 while not context.input_is_ready():
37 38 timer.start(50) # 50 ms
38 39 event_loop.exec_()
39 40 timer.stop()
40 41 else:
41 42 # On POSIX platforms, we can use a file descriptor to quit the event
42 43 # loop when there is input ready to read.
43 44 notifier = QtCore.QSocketNotifier(context.fileno(),
44 45 QtCore.QSocketNotifier.Read)
45 46 try:
46 47 # connect the callback we care about before we turn it on
47 48 notifier.activated.connect(event_loop.exit)
48 49 notifier.setEnabled(True)
49 50 # only start the event loop we are not already flipped
50 51 if not context.input_is_ready():
51 52 event_loop.exec_()
52 53 finally:
53 54 notifier.setEnabled(False)
General Comments 0
You need to be logged in to leave comments. Login now