1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-06-07 02:43:22 +03:00

Merge pull request #570 from A-UNDERSCORE-D/fix/display-var-errors

Fix #568 with ENV var workaround
This commit is contained in:
Athanasius 2020-07-08 17:07:54 +01:00 committed by GitHub
commit 758b726878
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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

159
theme.py
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,86 +19,94 @@ from config import appname, applongname, config
if __debug__: if __debug__:
from traceback import print_exc from traceback import print_exc
if platform == 'win32': if platform == "linux":
import ctypes
from ctypes.wintypes import LPCWSTR, DWORD, LPCVOID
AddFontResourceEx = ctypes.windll.gdi32.AddFontResourceExW
AddFontResourceEx.restypes = [LPCWSTR, DWORD, LPCVOID]
FR_PRIVATE = 0x10
FR_NOT_ENUM = 0x20
AddFontResourceEx(join(config.respath, u'EUROCAPS.TTF'), FR_PRIVATE, 0)
elif platform == 'linux':
from ctypes import * from ctypes import *
XID = c_ulong # from X.h: typedef unsigned long XID
Window = XID
Atom = c_ulong
Display = c_void_p # Opaque
PropModeReplace = 0 def setup_UI__():
PropModePrepend = 1 if platform == 'win32':
PropModeAppend = 2 import ctypes
from ctypes.wintypes import LPCWSTR, DWORD, LPCVOID
AddFontResourceEx = ctypes.windll.gdi32.AddFontResourceExW
AddFontResourceEx.restypes = [LPCWSTR, DWORD, LPCVOID]
FR_PRIVATE = 0x10
FR_NOT_ENUM = 0x20
AddFontResourceEx(join(config.respath, u'EUROCAPS.TTF'), FR_PRIVATE, 0)
# From xprops.h elif platform == 'linux':
MWM_HINTS_FUNCTIONS = 1 << 0 XID = c_ulong # from X.h: typedef unsigned long XID
MWM_HINTS_DECORATIONS = 1 << 1 Window = XID
MWM_HINTS_INPUT_MODE = 1 << 2 Atom = c_ulong
MWM_HINTS_STATUS = 1 << 3 Display = c_void_p # Opaque
MWM_FUNC_ALL = 1 << 0
MWM_FUNC_RESIZE = 1 << 1
MWM_FUNC_MOVE = 1 << 2
MWM_FUNC_MINIMIZE = 1 << 3
MWM_FUNC_MAXIMIZE = 1 << 4
MWM_FUNC_CLOSE = 1 << 5
MWM_DECOR_ALL = 1 << 0
MWM_DECOR_BORDER = 1 << 1
MWM_DECOR_RESIZEH = 1 << 2
MWM_DECOR_TITLE = 1 << 3
MWM_DECOR_MENU = 1 << 4
MWM_DECOR_MINIMIZE = 1 << 5
MWM_DECOR_MAXIMIZE = 1 << 6
class MotifWmHints(Structure): PropModeReplace = 0
_fields_ = [ PropModePrepend = 1
('flags', c_ulong), PropModeAppend = 2
('functions', c_ulong),
('decorations', c_ulong),
('input_mode', c_long),
('status', c_ulong),
]
try: # From xprops.h
xlib = cdll.LoadLibrary('libX11.so.6') MWM_HINTS_FUNCTIONS = 1 << 0
XInternAtom = xlib.XInternAtom MWM_HINTS_DECORATIONS = 1 << 1
XInternAtom.argtypes = [POINTER(Display), c_char_p, c_int] MWM_HINTS_INPUT_MODE = 1 << 2
XInternAtom.restype = Atom MWM_HINTS_STATUS = 1 << 3
XChangeProperty = xlib.XChangeProperty MWM_FUNC_ALL = 1 << 0
XChangeProperty.argtypes = [POINTER(Display), Window, Atom, Atom, c_int, c_int, POINTER(MotifWmHints), c_int] MWM_FUNC_RESIZE = 1 << 1
XChangeProperty.restype = c_int MWM_FUNC_MOVE = 1 << 2
XFlush = xlib.XFlush MWM_FUNC_MINIMIZE = 1 << 3
XFlush.argtypes = [POINTER(Display)] MWM_FUNC_MAXIMIZE = 1 << 4
XFlush.restype = c_int MWM_FUNC_CLOSE = 1 << 5
XOpenDisplay = xlib.XOpenDisplay MWM_DECOR_ALL = 1 << 0
XOpenDisplay.argtypes = [c_char_p] MWM_DECOR_BORDER = 1 << 1
XOpenDisplay.restype = POINTER(Display) MWM_DECOR_RESIZEH = 1 << 2
XQueryTree = xlib.XQueryTree MWM_DECOR_TITLE = 1 << 3
XQueryTree.argtypes = [POINTER(Display), Window, POINTER(Window), POINTER(Window), POINTER(Window), POINTER(c_uint)] MWM_DECOR_MENU = 1 << 4
XQueryTree.restype = c_int MWM_DECOR_MINIMIZE = 1 << 5
dpy = xlib.XOpenDisplay(None) MWM_DECOR_MAXIMIZE = 1 << 6
if not dpy:
raise Exception("Can't find your display, can't continue") class MotifWmHints(Structure):
motif_wm_hints_property = XInternAtom(dpy, b'_MOTIF_WM_HINTS', False) _fields_ = [
motif_wm_hints_normal = MotifWmHints(MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS, ('flags', c_ulong),
MWM_FUNC_RESIZE | MWM_FUNC_MOVE | MWM_FUNC_MINIMIZE | MWM_FUNC_CLOSE, ('functions', c_ulong),
MWM_DECOR_BORDER | MWM_DECOR_RESIZEH | MWM_DECOR_TITLE | MWM_DECOR_MENU | MWM_DECOR_MINIMIZE, ('decorations', c_ulong),
0, 0) ('input_mode', c_long),
motif_wm_hints_dark = MotifWmHints(MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS, ('status', c_ulong),
MWM_FUNC_RESIZE | MWM_FUNC_MOVE | MWM_FUNC_MINIMIZE | MWM_FUNC_CLOSE, ]
0, 0, 0)
except: # workaround for https://github.com/EDCD/EDMarketConnector/issues/568
if __debug__: print_exc() if os.getenv("EDMC_NO_UI") :
dpy = None return
try:
xlib = cdll.LoadLibrary('libX11.so.6')
XInternAtom = xlib.XInternAtom
XInternAtom.argtypes = [POINTER(Display), c_char_p, c_int]
XInternAtom.restype = Atom
XChangeProperty = xlib.XChangeProperty
XChangeProperty.argtypes = [POINTER(Display), Window, Atom, Atom, c_int, c_int, POINTER(MotifWmHints), c_int]
XChangeProperty.restype = c_int
XFlush = xlib.XFlush
XFlush.argtypes = [POINTER(Display)]
XFlush.restype = c_int
XOpenDisplay = xlib.XOpenDisplay
XOpenDisplay.argtypes = [c_char_p]
XOpenDisplay.restype = POINTER(Display)
XQueryTree = xlib.XQueryTree
XQueryTree.argtypes = [POINTER(Display), Window, POINTER(Window), POINTER(Window), POINTER(Window), POINTER(c_uint)]
XQueryTree.restype = c_int
dpy = xlib.XOpenDisplay(None)
if not dpy:
raise Exception("Can't find your display, can't continue")
motif_wm_hints_property = XInternAtom(dpy, b'_MOTIF_WM_HINTS', False)
motif_wm_hints_normal = MotifWmHints(MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS,
MWM_FUNC_RESIZE | MWM_FUNC_MOVE | MWM_FUNC_MINIMIZE | MWM_FUNC_CLOSE,
MWM_DECOR_BORDER | MWM_DECOR_RESIZEH | MWM_DECOR_TITLE | MWM_DECOR_MENU | MWM_DECOR_MINIMIZE,
0, 0)
motif_wm_hints_dark = MotifWmHints(MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS,
MWM_FUNC_RESIZE | MWM_FUNC_MOVE | MWM_FUNC_MINIMIZE | MWM_FUNC_CLOSE,
0, 0, 0)
except:
if __debug__: print_exc()
dpy = None
class _Theme(object): class _Theme(object):
@ -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()