1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-17 17:42:20 +03:00

Fix #568 with ENV var workaround

EDMC.py would break due to an import chain that ends up in theme. Theme
does a whole bunch of work to setup our GUI for EDMarketConnector.py,
but it does this on any import, which will fail spectacularly if there
is either no DISPLAY var set or no X11 libs available on our machine at
all (as a sidenote this means it probably also breaks on a wholly
wayland install).

This fixes the issue by adding a check for an environment variable on
import of theme. This can and WILL break if the env var is set and
EDMarketConnector.py is used, but if you do that its your own fault.
This commit is contained in:
A_D 2020-07-08 17:55:54 +02:00
parent 3476956d85
commit be98365fb3
No known key found for this signature in database
GPG Key ID: 4BE9EB7DF45076C4
2 changed files with 89 additions and 74 deletions

View File

@ -8,6 +8,10 @@ import json
import requests import requests
import sys import sys
import os import os
# workaround for https://github.com/EDCD/EDMarketConnector/issues/568
os.environ["EDMC_NO_UI"] = "1"
from os.path import dirname, getmtime, join from os.path import dirname, getmtime, join
from time import time, sleep from time import time, sleep
from xml.etree import ElementTree from xml.etree import ElementTree

View File

@ -5,6 +5,7 @@
# So can't use ttk's theme support. So have to change colors manually. # So can't use ttk's theme support. So have to change colors manually.
# #
import os
from sys import platform from sys import platform
from os.path import join from os.path import join
@ -18,6 +19,11 @@ from config import appname, applongname, config
if __debug__: if __debug__:
from traceback import print_exc from traceback import print_exc
if platform == "linux":
from ctypes import *
def setup_UI__():
if platform == 'win32': if platform == 'win32':
import ctypes import ctypes
from ctypes.wintypes import LPCWSTR, DWORD, LPCVOID from ctypes.wintypes import LPCWSTR, DWORD, LPCVOID
@ -28,8 +34,6 @@ if platform == 'win32':
AddFontResourceEx(join(config.respath, u'EUROCAPS.TTF'), FR_PRIVATE, 0) AddFontResourceEx(join(config.respath, u'EUROCAPS.TTF'), FR_PRIVATE, 0)
elif platform == 'linux': elif platform == 'linux':
from ctypes import *
XID = c_ulong # from X.h: typedef unsigned long XID XID = c_ulong # from X.h: typedef unsigned long XID
Window = XID Window = XID
Atom = c_ulong Atom = c_ulong
@ -67,6 +71,10 @@ elif platform == 'linux':
('status', c_ulong), ('status', c_ulong),
] ]
# workaround for https://github.com/EDCD/EDMarketConnector/issues/568
if os.getenv("EDMC_NO_UI") :
return
try: try:
xlib = cdll.LoadLibrary('libX11.so.6') xlib = cdll.LoadLibrary('libX11.so.6')
XInternAtom = xlib.XInternAtom XInternAtom = xlib.XInternAtom
@ -87,6 +95,7 @@ elif platform == 'linux':
dpy = xlib.XOpenDisplay(None) dpy = xlib.XOpenDisplay(None)
if not dpy: if not dpy:
raise Exception("Can't find your display, can't continue") raise Exception("Can't find your display, can't continue")
motif_wm_hints_property = XInternAtom(dpy, b'_MOTIF_WM_HINTS', False) motif_wm_hints_property = XInternAtom(dpy, b'_MOTIF_WM_HINTS', False)
motif_wm_hints_normal = MotifWmHints(MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS, motif_wm_hints_normal = MotifWmHints(MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS,
MWM_FUNC_RESIZE | MWM_FUNC_MOVE | MWM_FUNC_MINIMIZE | MWM_FUNC_CLOSE, MWM_FUNC_RESIZE | MWM_FUNC_MOVE | MWM_FUNC_MINIMIZE | MWM_FUNC_CLOSE,
@ -379,5 +388,7 @@ class _Theme(object):
self.minwidth = root.winfo_width() # Minimum width = width on first creation self.minwidth = root.winfo_width() # Minimum width = width on first creation
root.minsize(self.minwidth, -1) root.minsize(self.minwidth, -1)
setup_UI__()
# singleton # singleton
theme = _Theme() theme = _Theme()