From 619c3a00256c7ae1623afec92716645f55dc0d49 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 3 Jul 2018 06:49:28 +0530 Subject: [PATCH] macOS: Add an option macos_window_resizable to control if kitty top-level windows are resizable using the mouse or not Fixes #698 --- docs/changelog.rst | 7 +++++++ kitty/cocoa_window.m | 13 +++++++++---- kitty/config_data.py | 5 ++++- kitty/glfw.c | 8 +++----- kitty/state.c | 1 + kitty/state.h | 2 +- 6 files changed, 25 insertions(+), 11 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 4af0460fd..2f59c7072 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -3,6 +3,13 @@ Changelog |kitty| is a feature full, cross-platform, *fast*, GPU based terminal emulator. +0.11.3 [future] +------------------------------ + +- macOS: Add an option :opt:`macos_window_resizable` to control if kitty + top-level windows are resizable using the mouse or not (:iss:`698`) + + 0.11.2 [2018-07-01] ------------------------------ diff --git a/kitty/cocoa_window.m b/kitty/cocoa_window.m index a337b9382..f420db8fc 100644 --- a/kitty/cocoa_window.m +++ b/kitty/cocoa_window.m @@ -202,14 +202,19 @@ cocoa_update_title(PyObject *pytitle) { } bool -cocoa_make_window_resizable(void *w) { +cocoa_make_window_resizable(void *w, bool resizable) { NSWindow *window = (NSWindow*)w; @try { - [window setStyleMask: - [window styleMask] | NSWindowStyleMaskResizable]; + if (resizable) { + [window setStyleMask: + [window styleMask] | NSWindowStyleMaskResizable]; + } else { + [window setStyleMask: + [window styleMask] & ~NSWindowStyleMaskResizable]; + } } @catch (NSException *e) { - return PyErr_Format(PyExc_ValueError, "Failed to set style mask: %s: %s", [[e name] UTF8String], [[e reason] UTF8String]); + log_error("Failed to set style mask: %s: %s", [[e name] UTF8String], [[e reason] UTF8String]); return false; } return true; diff --git a/kitty/config_data.py b/kitty/config_data.py index 76b8057ac..18c913203 100644 --- a/kitty/config_data.py +++ b/kitty/config_data.py @@ -715,7 +715,10 @@ kitty will stay running, even with no open windows, as is the expected behavior on macOS. ''')) - +o('macos_window_resizable', True, long_text=_(''' +Disable this if you want kitty top-level (OS) windows to not be resizable +on macOS. +''')) # }}} g('shortcuts') # {{{ diff --git a/kitty/glfw.c b/kitty/glfw.c index 5ab6e951a..f79b68b8a 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -8,7 +8,7 @@ #include "fonts.h" #include #include "glfw-wrapper.h" -extern bool cocoa_make_window_resizable(void *w); +extern bool cocoa_make_window_resizable(void *w, bool); extern void cocoa_create_global_menu(void); extern void cocoa_set_hide_from_tasks(void); extern void cocoa_set_titlebar_color(void *w, color_type color); @@ -492,10 +492,8 @@ create_os_window(PyObject UNUSED *self, PyObject *args) { glfwSetWindowFocusCallback(glfw_window, window_focus_callback); glfwSetDropCallback(glfw_window, drop_callback); #ifdef __APPLE__ - if (OPT(macos_hide_titlebar)) { - if (glfwGetCocoaWindow) { if (!cocoa_make_window_resizable(glfwGetCocoaWindow(glfw_window))) { PyErr_Print(); } } - else log_error("Failed to load glfwGetCocoaWindow"); - } + if (glfwGetCocoaWindow) cocoa_make_window_resizable(glfwGetCocoaWindow(glfw_window), OPT(macos_window_resizable)); + else log_error("Failed to load glfwGetCocoaWindow"); #endif double now = monotonic(); w->is_focused = true; diff --git a/kitty/state.c b/kitty/state.c index f12cd1c37..aaf6ea305 100644 --- a/kitty/state.c +++ b/kitty/state.c @@ -387,6 +387,7 @@ PYWRAP1(set_options) { S(macos_option_as_alt, 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); diff --git a/kitty/state.h b/kitty/state.h index ae77cdcb8..811f06248 100644 --- a/kitty/state.h +++ b/kitty/state.h @@ -23,7 +23,7 @@ typedef struct { 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; + 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; int adjust_line_height_px, adjust_column_width_px; float adjust_line_height_frac, adjust_column_width_frac; float background_opacity, dim_opacity;