##// END OF EJS Templates
Fixed import statements for inputhook.
Fixed import statements for inputhook.

File last commit:

r2068:83e352e1
r2068:83e352e1
Show More
inputhook.py
110 lines | 3.6 KiB | text/x-python | PythonLexer
#!/usr/bin/env python
# encoding: utf-8
"""
Inputhook management for GUI event loop integration.
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2008-2009 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import ctypes
#-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
class InputHookManager(object):
def __init__(self):
self.PYFUNC = ctypes.PYFUNCTYPE(ctypes.c_int)
self._reset()
def _reset(self):
self._callback_pyfunctype = None
self._callback = None
self._installed = False
def get_pyos_inputhook(self):
return ctypes.c_void_p.in_dll(ctypes.pythonapi,"PyOS_InputHook")
def get_pyos_inputhook_as_func(self):
return self.PYFUNC.in_dll(ctypes.pythonapi,"PyOS_InputHook")
def set_inputhook(callback):
"""Set PyOS_InputHook to callback and return the previous one.
"""
self._callback = callback
self._callback_pyfunctype = self.PYFUNC(callback)
pyos_inputhook_ptr = self.get_pyos_inputhook()
original = self.get_pyos_inputhook_as_func()
pyos_inputhook_ptr.value = \
ctypes.cast(self._callback_pyfunctype, ctypes.c_void_p).value
self._installed = True
return original
def clear_inputhook(self):
"""Set PyOS_InputHook to NULL and return the previous one."""
pyos_inputhook_ptr = self.get_pyos_inputhook()
original = self.get_pyos_inputhook_as_func()
pyos_inputhook_ptr.value = ctypes.c_void_p(None).value
self._reset()
return original
def enable_wx(self):
from IPython.lib.inputhookwx import inputhook_wx
self.set_inputhook(inputhook_wx)
def disable_wx(self):
self.clear_inputhook()
def enable_qt4(self):
from PyQt4 import QtCore
# PyQt4 has had this since 4.3.1. In version 4.2, PyOS_InputHook
# was set when QtCore was imported, but if it ever got removed,
# you couldn't reset it. For earlier versions we can
# probably implement a ctypes version.
try:
QtCore.pyqtRestoreInputHook()
except AttributeError:
pass
def disable_qt4(self):
self.clear_inputhook()
def enable_gtk(self):
import gtk
try:
gtk.set_interactive(True)
except AttributeError:
# For older versions of gtk, use our own ctypes version
from IPython.lib.inputhookgtk import inputhook_gtk
add_inputhook(inputhook_gtk)
def disable_gtk(self):
self.clear_inputhook()
def enable_tk(self):
# Creating a Tkinter.Tk object sets PyOS_InputHook()
pass
def disable_tk(self):
self.clear_inputhook()
inputhook_manager = InputHookManager()
enable_wx = inputhook_manager.enable_wx
disable_wx = inputhook_manager.disable_wx
enable_qt4 = inputhook_manager.enable_qt4
disable_qt4 = inputhook_manager.disable_qt4
enable_gtk = inputhook_manager.enable_gtk
disable_gtk = inputhook_manager.disable_gtk
enable_tk = inputhook_manager.enable_tk
disable_tk = inputhook_manager.disable_tk