1
1
mirror of https://github.com/wez/wezterm.git synced 2024-09-19 18:57:59 +03:00

windows: improve hit test for integrated max button

refs: https://github.com/wez/wezterm/issues/3499

but isn't the cause of it
This commit is contained in:
Wez Furlong 2023-04-16 11:37:58 -07:00
parent ba64239c0a
commit f627d6d704
No known key found for this signature in database
GPG Key ID: 7A7F66A31EC9B387
3 changed files with 17 additions and 8 deletions

View File

@ -526,7 +526,14 @@ impl super::TermWindow {
context.set_window_drag_position(event.screen_coords); context.set_window_drag_position(event.screen_coords);
} }
TabBarItem::WindowButton(window::IntegratedTitleButton::Maximize) => { TabBarItem::WindowButton(window::IntegratedTitleButton::Maximize) => {
context.set_maximize_button_position(event.screen_coords); let item = self.last_ui_item.clone().unwrap();
let bounds: ::window::ScreenRect = euclid::rect(
item.x as isize - (event.coords.x as isize - event.screen_coords.x),
item.y as isize - (event.coords.y as isize - event.screen_coords.y),
item.width as isize,
item.height as isize,
);
context.set_maximize_button_position(bounds);
} }
TabBarItem::WindowButton(_) TabBarItem::WindowButton(_)
| TabBarItem::Tab { .. } | TabBarItem::Tab { .. }

View File

@ -257,7 +257,7 @@ pub trait WindowOps {
fn set_inner_size(&self, width: usize, height: usize); fn set_inner_size(&self, width: usize, height: usize);
/// Use for windows snap layouts /// Use for windows snap layouts
fn set_maximize_button_position(&self, _coords: ScreenPoint) {} fn set_maximize_button_position(&self, _rect: ScreenRect) {}
/// Requests the windowing system to start a window drag. /// Requests the windowing system to start a window drag.
/// ///

View File

@ -4,7 +4,7 @@ use crate::parameters::{self, Parameters};
use crate::{ use crate::{
Appearance, Clipboard, DeadKeyStatus, Dimensions, Handled, KeyCode, KeyEvent, Modifiers, Appearance, Clipboard, DeadKeyStatus, Dimensions, Handled, KeyCode, KeyEvent, Modifiers,
MouseButtons, MouseCursor, MouseEvent, MouseEventKind, MousePress, Point, RawKeyEvent, Rect, MouseButtons, MouseCursor, MouseEvent, MouseEventKind, MousePress, Point, RawKeyEvent, Rect,
RequestedWindowGeometry, ResolvedGeometry, ScreenPoint, ULength, WindowDecorations, RequestedWindowGeometry, ResolvedGeometry, ScreenPoint, ScreenRect, ULength, WindowDecorations,
WindowEvent, WindowEventSender, WindowOps, WindowState, WindowEvent, WindowEventSender, WindowOps, WindowState,
}; };
use anyhow::{bail, Context}; use anyhow::{bail, Context};
@ -105,7 +105,7 @@ pub(crate) struct WindowInner {
saved_placement: Option<WINDOWPLACEMENT>, saved_placement: Option<WINDOWPLACEMENT>,
track_mouse_leave: bool, track_mouse_leave: bool,
window_drag_position: Option<ScreenPoint>, window_drag_position: Option<ScreenPoint>,
maximize_button_position: Option<ScreenPoint>, maximize_button_position: Option<ScreenRect>,
keyboard_info: KeyboardLayoutInfo, keyboard_info: KeyboardLayoutInfo,
appearance: Appearance, appearance: Appearance,
@ -874,7 +874,7 @@ impl WindowOps for Window {
}); });
} }
fn set_maximize_button_position(&self, coords: ScreenPoint) { fn set_maximize_button_position(&self, coords: ScreenRect) {
Connection::with_window_inner(self.0, move |inner| { Connection::with_window_inner(self.0, move |inner| {
inner.maximize_button_position = Some(coords); inner.maximize_button_position = Some(coords);
Ok(()) Ok(())
@ -1113,7 +1113,7 @@ unsafe fn wm_nccalcsize(hwnd: HWND, _msg: UINT, wparam: WPARAM, lparam: LPARAM)
unsafe fn wm_nchittest(hwnd: HWND, msg: UINT, wparam: WPARAM, lparam: LPARAM) -> Option<LRESULT> { unsafe fn wm_nchittest(hwnd: HWND, msg: UINT, wparam: WPARAM, lparam: LPARAM) -> Option<LRESULT> {
let inner = rc_from_hwnd(hwnd)?; let inner = rc_from_hwnd(hwnd)?;
let mut inner = match inner.try_borrow_mut() { let inner = match inner.try_borrow() {
Ok(inner) => inner, Ok(inner) => inner,
Err(_) => { Err(_) => {
// We've been called recursively and the upper levels // We've been called recursively and the upper levels
@ -1197,8 +1197,10 @@ unsafe fn wm_nchittest(hwnd: HWND, msg: UINT, wparam: WPARAM, lparam: LPARAM) ->
let use_snap_layouts = !*IS_WIN10; let use_snap_layouts = !*IS_WIN10;
if use_snap_layouts { if use_snap_layouts {
if inner.maximize_button_position.take().is_some() { if let Some(max) = inner.maximize_button_position {
return Some(HTMAXBUTTON); if max.contains(screen_point) {
return Some(HTMAXBUTTON);
}
} }
} }