Skip to content

Commit 3bcbc8e

Browse files
committed
make IO context-specific
1 parent 480b4de commit 3bcbc8e

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

imgui/core.pyx

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1453,8 +1453,10 @@ cdef class _IO(object):
14531453
def __init__(self):
14541454
self._ptr = &cimgui.GetIO()
14551455
self._fonts = _FontAtlas.from_ptr(self._ptr.Fonts)
1456-
self._get_clipboard_text_fn = None
1457-
self._set_clipboard_text_fn = None
1456+
1457+
if <uintptr_t>cimgui.GetCurrentContext() not in _io_clipboard:
1458+
_io_clipboard[<uintptr_t>cimgui.GetCurrentContext()] = {'_get_clipboard_text_fn': None,
1459+
'_set_clipboard_text_fn': None}
14581460

14591461
# ... maping of input properties ...
14601462
@property
@@ -1634,35 +1636,35 @@ cdef class _IO(object):
16341636

16351637
@staticmethod
16361638
cdef const char* _get_clipboard_text(void* user_data):
1637-
text = _io.get_clipboard_text_fn()
1639+
text = _io_clipboard[<uintptr_t>cimgui.GetCurrentContext()]['_get_clipboard_text_fn']()
16381640
if type(text) is bytes:
16391641
return text
16401642
return _bytes(text)
16411643

16421644
@property
16431645
def get_clipboard_text_fn(self):
1644-
return self._get_clipboard_text_fn
1646+
return _io_clipboard[<uintptr_t>cimgui.GetCurrentContext()]['_get_clipboard_text_fn']
16451647

16461648
@get_clipboard_text_fn.setter
16471649
def get_clipboard_text_fn(self, func):
16481650
if callable(func):
1649-
self._get_clipboard_text_fn = func
1651+
_io_clipboard[<uintptr_t>cimgui.GetCurrentContext()]['_get_clipboard_text_fn'] = func
16501652
self._ptr.GetClipboardTextFn = self._get_clipboard_text
16511653
else:
16521654
raise ValueError("func is not a callable: %s" % str(func))
16531655

16541656
@staticmethod
16551657
cdef void _set_clipboard_text(void* user_data, const char* text):
1656-
_io.set_clipboard_text_fn(_from_bytes(text))
1658+
_io_clipboard[<uintptr_t>cimgui.GetCurrentContext()]['_set_clipboard_text_fn'](_from_bytes(text))
16571659

16581660
@property
16591661
def set_clipboard_text_fn(self):
1660-
return self._set_clipboard_text_fn
1662+
return _io_clipboard[<uintptr_t>cimgui.GetCurrentContext()]['_set_clipboard_text_fn']
16611663

16621664
@set_clipboard_text_fn.setter
16631665
def set_clipboard_text_fn(self, func):
16641666
if callable(func):
1665-
self._set_clipboard_text_fn = func
1667+
_io_clipboard[<uintptr_t>cimgui.GetCurrentContext()]['_set_clipboard_text_fn'] = func
16661668
self._ptr.SetClipboardTextFn = self._set_clipboard_text
16671669
else:
16681670
raise ValueError("func is not a callable: %s" % str(func))
@@ -1811,14 +1813,9 @@ cdef class _IO(object):
18111813
def mouse_delta(self):
18121814
return _cast_ImVec2_tuple(self._ptr.MouseDelta)
18131815

1814-
_io = None
1816+
_io_clipboard = {}
18151817
def get_io():
1816-
global _io
1817-
1818-
if not _io:
1819-
_io = _IO()
1820-
1821-
return _io
1818+
return _IO()
18221819

18231820
def get_style():
18241821
return GuiStyle.from_ref(cimgui.GetStyle())

0 commit comments

Comments
 (0)