Only set the glfw error callback immediately before initializing glfw
Avoids spurious glfw not initialized error messages in case fo exceptions that occur before the call to init
This commit is contained in:
parent
1e01c2a07c
commit
93ca469d85
17
kitty/glfw.c
17
kitty/glfw.c
@ -158,24 +158,15 @@ new(PyTypeObject *type, PyObject *args, PyObject UNUSED *kwds) {
|
||||
}
|
||||
|
||||
// Global functions {{{
|
||||
static PyObject *error_callback = NULL;
|
||||
|
||||
static void
|
||||
cb_error_callback(int error, const char* description) {
|
||||
CALLBACK(error_callback, "is", error, description) else fprintf(stderr, "[glfw error]: %s\n", description);
|
||||
}
|
||||
|
||||
PyObject*
|
||||
glfw_set_error_callback(PyObject UNUSED *self, PyObject *callback) {
|
||||
Py_CLEAR(error_callback);
|
||||
error_callback = callback;
|
||||
Py_INCREF(callback);
|
||||
Py_RETURN_NONE;
|
||||
error_callback(int error, const char* description) {
|
||||
fprintf(stderr, "[glfw error %d]: %s\n", error, description);
|
||||
}
|
||||
|
||||
|
||||
PyObject*
|
||||
glfw_init(PyObject UNUSED *self) {
|
||||
glfwSetErrorCallback(error_callback);
|
||||
PyObject *ans = glfwInit() ? Py_True: Py_False;
|
||||
Py_INCREF(ans);
|
||||
return ans;
|
||||
@ -466,7 +457,6 @@ PyTypeObject WindowWrapper_Type = {
|
||||
};
|
||||
|
||||
static PyMethodDef module_methods[] = {
|
||||
{"glfw_set_error_callback", (PyCFunction)glfw_set_error_callback, METH_O, ""}, \
|
||||
{"glfw_init", (PyCFunction)glfw_init, METH_NOARGS, ""}, \
|
||||
{"glfw_terminate", (PyCFunction)glfw_terminate, METH_NOARGS, ""}, \
|
||||
{"glfw_window_hint", (PyCFunction)glfw_window_hint, METH_VARARGS, ""}, \
|
||||
@ -486,7 +476,6 @@ init_glfw(PyObject *m) {
|
||||
if (PyType_Ready(&WindowWrapper_Type) < 0) return false;
|
||||
if (PyModule_AddObject(m, "GLFWWindow", (PyObject *)&WindowWrapper_Type) != 0) return 0;
|
||||
Py_INCREF(&WindowWrapper_Type);
|
||||
glfwSetErrorCallback(cb_error_callback);
|
||||
#define ADDC(n) if(PyModule_AddIntConstant(m, #n, n) != 0) return false;
|
||||
#ifdef GLFW_X11_WM_CLASS_NAME
|
||||
ADDC(GLFW_X11_WM_CLASS_NAME)
|
||||
|
||||
@ -22,8 +22,8 @@ from .fast_data_types import (
|
||||
GLFW_OPENGL_FORWARD_COMPAT, GLFW_OPENGL_PROFILE, GLFW_SAMPLES,
|
||||
GLFW_STENCIL_BITS, GLFWWindow, change_wcwidth, check_for_extensions,
|
||||
clear_buffers, glewInit, glfw_init, glfw_init_hint_string,
|
||||
glfw_set_error_callback, glfw_swap_interval, glfw_terminate,
|
||||
glfw_window_hint, set_logical_dpi, set_options
|
||||
glfw_swap_interval, glfw_terminate, glfw_window_hint, set_logical_dpi,
|
||||
set_options
|
||||
)
|
||||
from .layout import all_layouts
|
||||
from .utils import color_as_int, detach, get_logical_dpi, safe_print
|
||||
@ -207,15 +207,6 @@ def run_app(opts, args):
|
||||
save_cached_values()
|
||||
|
||||
|
||||
def on_glfw_error(code, msg):
|
||||
if isinstance(msg, bytes):
|
||||
try:
|
||||
msg = msg.decode('utf-8')
|
||||
except Exception:
|
||||
msg = repr(msg)
|
||||
safe_print('[glfw error] ', msg, file=sys.stderr)
|
||||
|
||||
|
||||
def ensure_osx_locale():
|
||||
# Ensure the LANG env var is set. See
|
||||
# https://github.com/kovidgoyal/kitty/issues/90
|
||||
@ -286,7 +277,6 @@ def main():
|
||||
overrides = (a.replace('=', ' ', 1) for a in args.override or ())
|
||||
opts = load_config(*config, overrides=overrides)
|
||||
change_wcwidth(not opts.use_system_wcwidth)
|
||||
glfw_set_error_callback(on_glfw_error)
|
||||
if GLFW_X11_WM_CLASS_CLASS is not None:
|
||||
glfw_init_hint_string(GLFW_X11_WM_CLASS_CLASS, opts.cls)
|
||||
if not glfw_init():
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user