mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-03-11 21:11:40 +01:00
fix(komorebi): fix unsound use of transmute
This was causing a crash in release mode when moving a window around by titlebar.
This commit is contained in:
@@ -39,6 +39,7 @@ use crate::ring::Ring;
|
||||
use crate::window::Window;
|
||||
use crate::window_manager_event::WindowManagerEvent;
|
||||
use crate::windows_api::WindowsApi;
|
||||
use crate::winevent::WinEvent;
|
||||
use crate::winevent_listener;
|
||||
use crate::BORDER_COLOUR_CURRENT;
|
||||
use crate::BORDER_RECT;
|
||||
@@ -186,7 +187,10 @@ pub extern "system" fn win_event_hook(
|
||||
|
||||
let window = Window { hwnd: hwnd.0 };
|
||||
|
||||
let winevent = unsafe { ::std::mem::transmute(event) };
|
||||
let winevent = match WinEvent::try_from(event) {
|
||||
Ok(event) => event,
|
||||
Err(_) => return,
|
||||
};
|
||||
let event_type = match WindowManagerEvent::from_win_event(winevent, window) {
|
||||
None => return,
|
||||
Some(event) => event,
|
||||
|
||||
@@ -178,3 +178,98 @@ pub enum WinEvent {
|
||||
UiaPropIdSEnd = EVENT_UIA_PROPID_END,
|
||||
UiaPropIdStart = EVENT_UIA_PROPID_START,
|
||||
}
|
||||
|
||||
impl TryFrom<u32> for WinEvent {
|
||||
type Error = ();
|
||||
|
||||
fn try_from(value: u32) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
EVENT_AIA_END => Ok(Self::AiaEnd),
|
||||
EVENT_AIA_START => Ok(Self::AiaStart),
|
||||
EVENT_CONSOLE_CARET => Ok(Self::ConsoleCaret),
|
||||
EVENT_CONSOLE_END => Ok(Self::ConsoleEnd),
|
||||
EVENT_CONSOLE_END_APPLICATION => Ok(Self::ConsoleEndApplication),
|
||||
EVENT_CONSOLE_LAYOUT => Ok(Self::ConsoleLayout),
|
||||
EVENT_CONSOLE_START_APPLICATION => Ok(Self::ConsoleStartApplication),
|
||||
EVENT_CONSOLE_UPDATE_REGION => Ok(Self::ConsoleUpdateRegion),
|
||||
EVENT_CONSOLE_UPDATE_SCROLL => Ok(Self::ConsoleUpdateScroll),
|
||||
EVENT_CONSOLE_UPDATE_SIMPLE => Ok(Self::ConsoleUpdateSimple),
|
||||
EVENT_OBJECT_ACCELERATORCHANGE => Ok(Self::ObjectAcceleratorChange),
|
||||
EVENT_OBJECT_CLOAKED => Ok(Self::ObjectCloaked),
|
||||
EVENT_OBJECT_CONTENTSCROLLED => Ok(Self::ObjectContentScrolled),
|
||||
EVENT_OBJECT_CREATE => Ok(Self::ObjectCreate),
|
||||
EVENT_OBJECT_DEFACTIONCHANGE => Ok(Self::ObjectDefActionChange),
|
||||
EVENT_OBJECT_DESCRIPTIONCHANGE => Ok(Self::ObjectDescriptionChange),
|
||||
EVENT_OBJECT_DESTROY => Ok(Self::ObjectDestroy),
|
||||
EVENT_OBJECT_DRAGCANCEL => Ok(Self::ObjectDragCancel),
|
||||
EVENT_OBJECT_DRAGCOMPLETE => Ok(Self::ObjectDragComplete),
|
||||
EVENT_OBJECT_DRAGDROPPED => Ok(Self::ObjectDragDropped),
|
||||
EVENT_OBJECT_DRAGENTER => Ok(Self::ObjectDragEnter),
|
||||
EVENT_OBJECT_DRAGLEAVE => Ok(Self::ObjectDragLeave),
|
||||
EVENT_OBJECT_DRAGSTART => Ok(Self::ObjectDragStart),
|
||||
EVENT_OBJECT_END => Ok(Self::ObjectEnd),
|
||||
EVENT_OBJECT_FOCUS => Ok(Self::ObjectFocus),
|
||||
EVENT_OBJECT_HELPCHANGE => Ok(Self::ObjectHelpChange),
|
||||
EVENT_OBJECT_HIDE => Ok(Self::ObjectHide),
|
||||
EVENT_OBJECT_HOSTEDOBJECTSINVALIDATED => Ok(Self::ObjectHostedObjectsInvalidated),
|
||||
EVENT_OBJECT_IME_CHANGE => Ok(Self::ObjectImeChange),
|
||||
EVENT_OBJECT_IME_HIDE => Ok(Self::ObjectImeHide),
|
||||
EVENT_OBJECT_IME_SHOW => Ok(Self::ObjectImeShow),
|
||||
EVENT_OBJECT_INVOKED => Ok(Self::ObjectInvoked),
|
||||
EVENT_OBJECT_LIVEREGIONCHANGED => Ok(Self::ObjectLiveRegionChanged),
|
||||
EVENT_OBJECT_LOCATIONCHANGE => Ok(Self::ObjectLocationChange),
|
||||
EVENT_OBJECT_NAMECHANGE => Ok(Self::ObjectNameChange),
|
||||
EVENT_OBJECT_PARENTCHANGE => Ok(Self::ObjectParentChange),
|
||||
EVENT_OBJECT_REORDER => Ok(Self::ObjectReorder),
|
||||
EVENT_OBJECT_SELECTION => Ok(Self::ObjectSelection),
|
||||
EVENT_OBJECT_SELECTIONADD => Ok(Self::ObjectSelectionAdd),
|
||||
EVENT_OBJECT_SELECTIONREMOVE => Ok(Self::ObjectSelectionRemove),
|
||||
EVENT_OBJECT_SELECTIONWITHIN => Ok(Self::ObjectSelectionWithin),
|
||||
EVENT_OBJECT_SHOW => Ok(Self::ObjectShow),
|
||||
EVENT_OBJECT_STATECHANGE => Ok(Self::ObjectStateChange),
|
||||
EVENT_OBJECT_TEXTEDIT_CONVERSIONTARGETCHANGED => Ok(Self::ObjectTextEditConversionTargetChanged),
|
||||
EVENT_OBJECT_TEXTSELECTIONCHANGED => Ok(Self::ObjectTextSelectionChanged),
|
||||
EVENT_OBJECT_UNCLOAKED => Ok(Self::ObjectUncloaked),
|
||||
EVENT_OBJECT_VALUECHANGE => Ok(Self::ObjectValueChange),
|
||||
EVENT_OEM_DEFINED_END => Ok(Self::OemDefinedEnd),
|
||||
EVENT_OEM_DEFINED_START => Ok(Self::OemDefinedStart),
|
||||
EVENT_SYSTEM_ALERT => Ok(Self::SystemAlert),
|
||||
EVENT_SYSTEM_ARRANGMENTPREVIEW => Ok(Self::SystemArrangementPreview),
|
||||
EVENT_SYSTEM_CAPTUREEND => Ok(Self::SystemCaptureEnd),
|
||||
EVENT_SYSTEM_CAPTURESTART => Ok(Self::SystemCaptureStart),
|
||||
EVENT_SYSTEM_CONTEXTHELPEND => Ok(Self::SystemContextHelpEnd),
|
||||
EVENT_SYSTEM_CONTEXTHELPSTART => Ok(Self::SystemContextHelpStart),
|
||||
EVENT_SYSTEM_DESKTOPSWITCH => Ok(Self::SystemDesktopSwitch),
|
||||
EVENT_SYSTEM_DIALOGEND => Ok(Self::SystemDialogEnd),
|
||||
EVENT_SYSTEM_DIALOGSTART => Ok(Self::SystemDialogStart),
|
||||
EVENT_SYSTEM_DRAGDROPEND => Ok(Self::SystemDragDropEnd),
|
||||
EVENT_SYSTEM_DRAGDROPSTART => Ok(Self::SystemDragDropStart),
|
||||
EVENT_SYSTEM_END => Ok(Self::SystemEnd),
|
||||
EVENT_SYSTEM_FOREGROUND => Ok(Self::SystemForeground),
|
||||
EVENT_SYSTEM_IME_KEY_NOTIFICATION => Ok(Self::SystemImeKeyNotification),
|
||||
EVENT_SYSTEM_MENUEND => Ok(Self::SystemMenuEnd),
|
||||
EVENT_SYSTEM_MENUPOPUPEND => Ok(Self::SystemMenuPopupEnd),
|
||||
EVENT_SYSTEM_MENUPOPUPSTART => Ok(Self::SystemMenuPopupStart),
|
||||
EVENT_SYSTEM_MENUSTART => Ok(Self::SystemMenuStart),
|
||||
EVENT_SYSTEM_MINIMIZEEND => Ok(Self::SystemMinimizeEnd),
|
||||
EVENT_SYSTEM_MINIMIZESTART => Ok(Self::SystemMinimizeStart),
|
||||
EVENT_SYSTEM_MOVESIZEEND => Ok(Self::SystemMoveSizeEnd),
|
||||
EVENT_SYSTEM_MOVESIZESTART => Ok(Self::SystemMoveSizeStart),
|
||||
EVENT_SYSTEM_SCROLLINGEND => Ok(Self::SystemScrollingEnd),
|
||||
EVENT_SYSTEM_SCROLLINGSTART => Ok(Self::SystemScrollingStart),
|
||||
EVENT_SYSTEM_SOUND => Ok(Self::SystemSound),
|
||||
EVENT_SYSTEM_SWITCHEND => Ok(Self::SystemSwitchEnd),
|
||||
EVENT_SYSTEM_SWITCHER_APPDROPPED => Ok(Self::SystemSwitcherAppDropped),
|
||||
EVENT_SYSTEM_SWITCHER_APPGRABBED => Ok(Self::SystemSwitcherAppGrabbed),
|
||||
EVENT_SYSTEM_SWITCHER_APPOVERTARGET => Ok(Self::SystemSwitcherAppOverTarget),
|
||||
EVENT_SYSTEM_SWITCHER_CANCELLED => Ok(Self::SystemSwitcherCancelled),
|
||||
EVENT_SYSTEM_SWITCHSTART => Ok(Self::SystemSwitchStart),
|
||||
EVENT_UIA_EVENTID_END => Ok(Self::UiaEventIdSEnd),
|
||||
EVENT_UIA_EVENTID_START => Ok(Self::UiaEventIdStart),
|
||||
EVENT_UIA_PROPID_END => Ok(Self::UiaPropIdSEnd),
|
||||
EVENT_UIA_PROPID_START => Ok(Self::UiaPropIdStart),
|
||||
|
||||
_ => Err(()),
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user