From 5a2f2767ad06f5fc2fd741826e4b1a68bb650281 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 25 Jan 2021 20:51:34 +0530 Subject: [PATCH] Fix window icon not working on X11 with 64bits Apparently on X11 the maximum icon size is 128x128. 256x256 is too large for the X11 protocol because the X server unserializes the icons using "unsigned long" which is 64 bits on Linux. So we have to use 64bits per pixel instead of 32, with 32bits padded to 0. While there I also got rid of the kitty.rgba file replacing it with a 128x128 PNG file. Fixes #3260 --- docs/changelog.rst | 2 ++ glfw/x11_window.c | 11 +++++------ kitty/constants.py | 1 - kitty/fast_data_types.pyi | 2 +- kitty/glfw.c | 15 +++++++++------ kitty/main.py | 11 ++++++++--- logo/kitty-128.png | Bin 0 -> 4067 bytes logo/kitty.rgba | Bin 262144 -> 0 bytes logo/make.py | 3 ++- setup.py | 2 +- 10 files changed, 28 insertions(+), 19 deletions(-) create mode 100644 logo/kitty-128.png delete mode 100644 logo/kitty.rgba diff --git a/docs/changelog.rst b/docs/changelog.rst index d650ffb3e..d85a0d7a7 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -44,6 +44,8 @@ To update |kitty|, :doc:`follow the instructions `. - Fix extra space at bottom of OS window when using the fat layout with the tab bar at the top (:iss:`3258`) +- Fix window icon not working on X11 with 64bits (:iss:`3260`) + 0.19.3 [2020-12-19] ------------------- diff --git a/glfw/x11_window.c b/glfw/x11_window.c index 70fb09ebc..1389e171a 100644 --- a/glfw/x11_window.c +++ b/glfw/x11_window.c @@ -1990,8 +1990,8 @@ void _glfwPlatformSetWindowIcon(_GLFWwindow* window, for (i = 0; i < count; i++) longCount += 2 + images[i].width * images[i].height; - long* icon = calloc(longCount, sizeof(long)); - long* target = icon; + unsigned long* icon = calloc(longCount, sizeof(unsigned long)); + unsigned long* target = icon; for (i = 0; i < count; i++) { @@ -2000,10 +2000,9 @@ void _glfwPlatformSetWindowIcon(_GLFWwindow* window, for (j = 0; j < images[i].width * images[i].height; j++) { - *target++ = (images[i].pixels[j * 4 + 0] << 16) | - (images[i].pixels[j * 4 + 1] << 8) | - (images[i].pixels[j * 4 + 2] << 0) | - (images[i].pixels[j * 4 + 3] << 24); + unsigned char *p = images->pixels + j * 4; + const unsigned char r = *p++, g = *p++, b = *p++, a = *p++; + *target++ = a << 24 | (r << 16) | (g << 8) | b; } } diff --git a/kitty/constants.py b/kitty/constants.py index a77da328d..84ebbb9e8 100644 --- a/kitty/constants.py +++ b/kitty/constants.py @@ -118,7 +118,6 @@ def wakeup() -> None: base_dir = os.path.dirname(base) terminfo_dir = os.path.join(base_dir, 'terminfo') -logo_data_file = os.path.join(base_dir, 'logo', 'kitty.rgba') logo_png_file = os.path.join(base_dir, 'logo', 'kitty.png') beam_cursor_data_file = os.path.join(base_dir, 'logo', 'beam-cursor.png') try: diff --git a/kitty/fast_data_types.pyi b/kitty/fast_data_types.pyi index 11d394c65..00b8a0423 100644 --- a/kitty/fast_data_types.pyi +++ b/kitty/fast_data_types.pyi @@ -525,7 +525,7 @@ def set_smallest_allowed_resize(width: int, height: int) -> None: pass -def set_default_window_icon(data: bytes, width: int, height: int) -> None: +def set_default_window_icon(path: str) -> None: pass diff --git a/kitty/glfw.c b/kitty/glfw.c index c19755862..fdef60a49 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -393,12 +393,15 @@ static GLFWimage logo = {0}; static PyObject* set_default_window_icon(PyObject UNUSED *self, PyObject *args) { - Py_ssize_t sz; - const char *logo_data; - if(!PyArg_ParseTuple(args, "s#ii", &(logo_data), &sz, &(logo.width), &(logo.height))) return NULL; - sz = (MAX(logo.width * logo.height, sz)); - logo.pixels = malloc(sz); - if (logo.pixels) memcpy(logo.pixels, logo_data, sz); + size_t sz; + unsigned int width, height; + const char *path; + uint8_t *data; + if(!PyArg_ParseTuple(args, "s", &path)) return NULL; + if (png_path_to_bitmap(path, &data, &width, &height, &sz)) { + logo.width = width; logo.height = height; + logo.pixels = data; + } Py_RETURN_NONE; } diff --git a/kitty/main.py b/kitty/main.py index 1863f32be..13ff4b3be 100644 --- a/kitty/main.py +++ b/kitty/main.py @@ -18,7 +18,7 @@ from .conf.utils import BadLine from .config import cached_values_for from .constants import ( appname, beam_cursor_data_file, config_dir, glfw_path, is_macos, - is_wayland, kitty_exe, logo_data_file, running_in_kitty + is_wayland, kitty_exe, logo_png_file, running_in_kitty ) from .fast_data_types import ( GLFW_IBEAM_CURSOR, create_os_window, free_font_data, glfw_init, @@ -121,6 +121,12 @@ def get_macos_shortcut_for(opts: OptionsStub, function: str = 'new_os_window') - return ans +def set_x11_window_icon() -> None: + # max icon size on X11 64bits is 128x128 + path = logo_png_file.replace('.', '-128.') + set_default_window_icon(path) + + def _run_app(opts: OptionsStub, args: CLIOptions, bad_lines: Sequence[BadLine] = ()) -> None: global_shortcuts: Dict[str, SingleKey] = {} if is_macos: @@ -131,8 +137,7 @@ def _run_app(opts: OptionsStub, args: CLIOptions, bad_lines: Sequence[BadLine] = if is_macos and opts.macos_custom_beam_cursor: set_custom_ibeam_cursor() if not is_wayland() and not is_macos: # no window icons on wayland - with open(logo_data_file, 'rb') as f: - set_default_window_icon(f.read(), 256, 256) + set_x11_window_icon() load_shader_programs.use_selection_fg = opts.selection_foreground is not None with cached_values_for(run_app.cached_values_name) as cached_values: with startup_notification_handler(extra_callback=run_app.first_window_callback) as pre_show_callback: diff --git a/logo/kitty-128.png b/logo/kitty-128.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc917f2cc4df591a8f3d9c716c043bafe91a34d GIT binary patch literal 4067 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 literal 0 HcmV?d00001 diff --git a/logo/kitty.rgba b/logo/kitty.rgba deleted file mode 100644 index 2b19105107ef36a38631c0e01e7b93b24fc68b3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262144 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 In6AM81BKpUHvj+t diff --git a/logo/make.py b/logo/make.py index d3aa4edea..9951aea08 100755 --- a/logo/make.py +++ b/logo/make.py @@ -29,7 +29,6 @@ def render(output, sz=256): def main(): render(abspath('kitty.png')) - run('convert', abspath('kitty.png'), '-depth', '8', abspath('kitty.rgba')) iconset = abspath('kitty.iconset') if os.path.exists(iconset): shutil.rmtree(iconset) @@ -39,6 +38,8 @@ def main(): iname = os.path.join(iconset, 'icon_{0}x{0}.png'.format(sz)) iname2x = 'icon_{0}x{0}@2x.png'.format(sz // 2) render(iname, sz) + if sz == 128: + shutil.copyfile(iname, abspath('kitty-128.png')) if sz > 16 and sz != 128: shutil.copy2(iname, iname2x) if sz in (64, 1024): diff --git a/setup.py b/setup.py index 9785d5a46..ce5309ee5 100755 --- a/setup.py +++ b/setup.py @@ -1034,7 +1034,7 @@ def package(args: Options, bundle_type: str) -> None: safe_makedirs(odir) build_terminfo['compile_terminfo'](odir) shutil.copy2('__main__.py', libdir) - shutil.copy2('logo/kitty.rgba', os.path.join(libdir, 'logo')) + shutil.copy2('logo/kitty-128.png', os.path.join(libdir, 'logo')) shutil.copy2('logo/kitty.png', os.path.join(libdir, 'logo')) shutil.copy2('logo/beam-cursor.png', os.path.join(libdir, 'logo')) shutil.copy2('logo/beam-cursor@2x.png', os.path.join(libdir, 'logo'))