diff --git a/kitty/config.py b/kitty/config.py index 663e16bad..a2028a19f 100644 --- a/kitty/config.py +++ b/kitty/config.py @@ -16,7 +16,7 @@ from .conf.utils import ( parse_config_base, python_string, to_bool, to_cmdline ) from .config_data import all_options, parse_mods, type_map -from .constants import cache_dir, defconf +from .constants import cache_dir, defconf, is_macos from .utils import log_error named_keys = { @@ -312,6 +312,15 @@ special_handlers = {} def special_handler(func): special_handlers[func.__name__.partition('_')[2]] = func + return func + + +def deprecated_handler(*names): + def special_handler(func): + for name in names: + special_handlers[name] = func + return func + return special_handler @special_handler @@ -336,6 +345,15 @@ def handle_clear_all_shortcuts(key, val, ans): ans['key_definitions'] = [None] +@deprecated_handler('x11_hide_window_decorations', 'macos_hide_titlebar') +def handle_deprecated_hide_window_decorations_aliases(key, val, ans): + if not hasattr(handle_deprecated_hide_window_decorations_aliases, key): + handle_deprecated_hide_window_decorations_aliases.key = True + log_error('The option {} is deprecated. Use hide_window_decorations instead.'.format(key)) + if to_bool(val): + ans['hide_window_decorations'] = True + + def expandvars(val, env): def sub(m): @@ -552,4 +570,6 @@ def load_config(*paths, overrides=None): if opts.background_opacity < 1.0 and opts.macos_titlebar_color: log_error('Cannot use both macos_titlebar_color and background_opacity') opts.macos_titlebar_color = 0 + if (is_macos and getattr(opts, 'macos_hide_titlebar', False)) or (not is_macos and getattr(opts, 'x11_hide_window_decorations', False)): + opts.hide_window_decorations = True return opts diff --git a/kitty/config_data.py b/kitty/config_data.py index 426c94a7b..2c604259f 100644 --- a/kitty/config_data.py +++ b/kitty/config_data.py @@ -538,6 +538,12 @@ o('inactive_text_alpha', 1.0, option_type=unit_float, long_text=_(''' Fade the text in inactive windows by the specified amount (a number between zero and one, with zero being fully faded). ''')) + +o('hide_window_decorations', False, long_text=_(''' +Hide the window decorations (title-bar and window borders). +Whether this works and exactly what effect it has depends on the +window manager/operating system. +''')) # }}} g('tabbar') # {{{ @@ -772,15 +778,6 @@ incompatible with :opt:`background_opacity`. If you want to use both, you are probably better off just hiding the titlebar with :opt:`macos_hide_titlebar`. ''')) -o('macos_hide_titlebar', False, long_text=_(''' -Hide the kitty window's title bar on macOS.''')) - -o('x11_hide_window_decorations', False, long_text=_(''' -Hide the window decorations (title bar and window borders) on X11 and Wayland. -Whether this works and exactly what effect it has depends on the window -manager, as it is the job of the window manager/compositor to draw window -decorations.''')) - o('macos_option_as_alt', True, long_text=_(''' Use the option key as an alt key. With this set to no, kitty will use the macOS native :kbd:`Option+Key` = unicode character behavior. This will diff --git a/kitty/glfw.c b/kitty/glfw.c index 4bedfff61..837887bf4 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -467,9 +467,9 @@ create_os_window(PyObject UNUSED *self, PyObject *args) { glfwWindowHint(GLFW_DEPTH_BITS, 0); glfwWindowHint(GLFW_STENCIL_BITS, 0); #ifdef __APPLE__ - if (OPT(macos_hide_titlebar)) glfwWindowHint(GLFW_DECORATED, false); glfwWindowHint(GLFW_COCOA_GRAPHICS_SWITCHING, true); glfwSetApplicationShouldHandleReopen(on_application_reopen); + if (OPT(hide_window_decorations)) glfwWindowHint(GLFW_DECORATED, false); #endif } @@ -478,9 +478,7 @@ create_os_window(PyObject UNUSED *self, PyObject *args) { glfwWindowHintString(GLFW_X11_INSTANCE_NAME, wm_class_name); glfwWindowHintString(GLFW_X11_CLASS_NAME, wm_class_class); glfwWindowHintString(GLFW_WAYLAND_APP_ID, wm_class_class); - if (OPT(x11_hide_window_decorations)) { - glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); - } + if (OPT(hide_window_decorations)) glfwWindowHint(GLFW_DECORATED, false); #endif if (global_state.num_os_windows >= MAX_CHILDREN) { diff --git a/kitty/state.c b/kitty/state.c index cb3045b60..23d9aee2c 100644 --- a/kitty/state.c +++ b/kitty/state.c @@ -354,9 +354,10 @@ PYWRAP1(set_options) { global_state.debug_gl = debug_gl ? true : false; global_state.debug_font_fallback = debug_font_fallback ? true : false; #define GA(name) ret = PyObject_GetAttrString(opts, #name); if (ret == NULL) return NULL; -#define S(name, convert) { GA(name); global_state.opts.name = convert(ret); Py_DECREF(ret); if (PyErr_Occurred()) return NULL; } - GA(kitty_mod); - kitty_mod = PyLong_AsLong(ret); Py_CLEAR(ret); if (PyErr_Occurred()) return NULL; +#define SS(name, dest, convert) { GA(name); dest = convert(ret); Py_DECREF(ret); if (PyErr_Occurred()) return NULL; } +#define S(name, convert) SS(name, global_state.opts.name, convert) + SS(kitty_mod, kitty_mod, PyLong_AsLong); + S(hide_window_decorations, PyObject_IsTrue); S(visual_bell_duration, PyFloat_AsDouble); S(enable_audio_bell, PyObject_IsTrue); S(focus_follows_mouse, PyObject_IsTrue); @@ -388,10 +389,8 @@ PYWRAP1(set_options) { S(window_alert_on_bell, PyObject_IsTrue); S(macos_option_as_alt, PyObject_IsTrue); S(macos_traditional_fullscreen, PyObject_IsTrue); - S(macos_hide_titlebar, PyObject_IsTrue); S(macos_quit_when_last_window_closed, PyObject_IsTrue); S(macos_window_resizable, PyObject_IsTrue); - S(x11_hide_window_decorations, PyObject_IsTrue); S(macos_hide_from_tasks, PyObject_IsTrue); S(macos_thicken_font, PyFloat_AsDouble); @@ -428,6 +427,7 @@ PYWRAP1(set_options) { read_adjust(adjust_column_width); #undef read_adjust #undef S +#undef SS Py_RETURN_NONE; } diff --git a/kitty/state.h b/kitty/state.h index ecff3d054..295d61d27 100644 --- a/kitty/state.h +++ b/kitty/state.h @@ -23,8 +23,8 @@ typedef struct { char_type select_by_word_characters[256]; size_t select_by_word_characters_count; color_type url_color, background, active_border_color, inactive_border_color, bell_border_color; double repaint_delay, input_delay; - bool focus_follows_mouse; - bool macos_option_as_alt, macos_hide_titlebar, macos_hide_from_tasks, x11_hide_window_decorations, macos_quit_when_last_window_closed, macos_window_resizable, macos_traditional_fullscreen; + bool focus_follows_mouse, hide_window_decorations; + bool macos_option_as_alt, macos_hide_from_tasks, macos_quit_when_last_window_closed, macos_window_resizable, macos_traditional_fullscreen; float macos_thicken_font; int adjust_line_height_px, adjust_column_width_px; float adjust_line_height_frac, adjust_column_width_frac;