[darwin] Refactor events into mac specific files

This commit is contained in:
Lea Anthony 2023-10-03 08:33:58 +11:00
commit dc8cbcf410
No known key found for this signature in database
GPG key ID: 33DAF7BB90A58405
5 changed files with 140 additions and 24 deletions

View file

@ -1,6 +1,6 @@
//go:build darwin
#import "application_darwin_delegate.h"
#import "../events/events.h"
#import "../events/events_darwin.h"
extern bool hasListeners(unsigned int);
@implementation AppDelegate
- (void)dealloc

View file

@ -2,7 +2,7 @@
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
#import "webview_window_darwin.h"
#import "../events/events.h"
#import "../events/events_darwin.h"
extern void processMessage(unsigned int, const char*);
extern void processURLRequest(unsigned int, void *);
extern void processWindowKeyDownEvent(unsigned int, const char*);
@ -17,14 +17,10 @@ extern bool hasListeners(unsigned int);
[self setMovableByWindowBackground:YES];
return self;
}
- (void)keyDown:(NSEvent *)event {
NSUInteger modifierFlags = event.modifierFlags;
// Create an array to hold the modifier strings
NSMutableArray *modifierStrings = [NSMutableArray array];
// Check for modifier flags and add corresponding strings to the array
if (modifierFlags & NSEventModifierFlagShift) {
[modifierStrings addObject:@"shift"];
@ -38,29 +34,23 @@ extern bool hasListeners(unsigned int);
if (modifierFlags & NSEventModifierFlagCommand) {
[modifierStrings addObject:@"cmd"];
}
NSString *keyString = [self keyStringFromEvent:event];
if (keyString.length > 0) {
[modifierStrings addObject:keyString];
}
// Combine the modifier strings with the key character
NSString *keyEventString = [modifierStrings componentsJoinedByString:@"+"];
const char* utf8String = [keyEventString UTF8String];
WebviewWindowDelegate *delegate = (WebviewWindowDelegate*)self.delegate;
processWindowKeyDownEvent(delegate.windowId, utf8String);
}
- (NSString *)keyStringFromEvent:(NSEvent *)event {
// Get the pressed key
// Check for special keys like escape and tab
NSString *characters = [event characters];
if (characters.length == 0) {
return @"";
}
if ([characters isEqualToString:@"\r"]) {
return @"enter";
}
@ -90,7 +80,6 @@ extern bool hasListeners(unsigned int);
if ([characters isEqualToString:@"\x0C"]) {
return @"clear";
}
switch ([event keyCode]) {
// Function keys
case 122: return @"f1";
@ -113,7 +102,6 @@ extern bool hasListeners(unsigned int);
case 79: return @"f18";
case 80: return @"f19";
case 90: return @"f20";
// Letter keys
case 0: return @"a";
case 11: return @"b";
@ -141,7 +129,6 @@ extern bool hasListeners(unsigned int);
case 7: return @"x";
case 16: return @"y";
case 6: return @"z";
// Number keys
case 29: return @"0";
case 18: return @"1";
@ -153,7 +140,6 @@ extern bool hasListeners(unsigned int);
case 26: return @"7";
case 28: return @"8";
case 25: return @"9";
// Other special keys
case 51: return @"delete";
case 117: return @"forward delete";
@ -164,7 +150,6 @@ extern bool hasListeners(unsigned int);
case 48: return @"tab";
case 53: return @"escape";
case 49: return @"space";
// Punctuation and other keys (for a standard US layout)
case 33: return @"[";
case 30: return @"]";
@ -177,12 +162,9 @@ extern bool hasListeners(unsigned int);
case 24: return @"=";
case 50: return @"`";
case 42: return @"\\";
default: return @"";
}
}
- (BOOL)canBecomeKeyWindow {
return YES;
}

View file

@ -4,7 +4,7 @@
#import <AppKit/AppKit.h>
#import "webview_window_darwin_drag.h"
#import "../events/events.h"
#import "../events/events_darwin.h"
extern void processDragItems(unsigned int windowId, char** arr, int length);

View file

@ -6,12 +6,10 @@ package events
#cgo CFLAGS: -x objective-c
#cgo LDFLAGS: -framework Cocoa -mmacosx-version-min=10.13
#include "events.h"
#include "events_darwin.h"
#include <stdlib.h>
#include <stdbool.h>
#include "events.h"
bool hasListener[MAX_EVENTS] = {false};
void registerListener(unsigned int event) {

View file

@ -0,0 +1,136 @@
//go:build darwin
#ifndef _events_darwin_h
#define _events_darwin_h
extern void processApplicationEvent(unsigned int, void* data);
extern void processWindowEvent(unsigned int, unsigned int);
#define EventApplicationDidBecomeActive 1024
#define EventApplicationDidChangeBackingProperties 1025
#define EventApplicationDidChangeEffectiveAppearance 1026
#define EventApplicationDidChangeIcon 1027
#define EventApplicationDidChangeOcclusionState 1028
#define EventApplicationDidChangeScreenParameters 1029
#define EventApplicationDidChangeStatusBarFrame 1030
#define EventApplicationDidChangeStatusBarOrientation 1031
#define EventApplicationDidFinishLaunching 1032
#define EventApplicationDidHide 1033
#define EventApplicationDidResignActiveNotification 1034
#define EventApplicationDidUnhide 1035
#define EventApplicationDidUpdate 1036
#define EventApplicationWillBecomeActive 1037
#define EventApplicationWillFinishLaunching 1038
#define EventApplicationWillHide 1039
#define EventApplicationWillResignActive 1040
#define EventApplicationWillTerminate 1041
#define EventApplicationWillUnhide 1042
#define EventApplicationWillUpdate 1043
#define EventApplicationDidChangeTheme 1044
#define EventWindowDidBecomeKey 1045
#define EventWindowDidBecomeMain 1046
#define EventWindowDidBeginSheet 1047
#define EventWindowDidChangeAlpha 1048
#define EventWindowDidChangeBackingLocation 1049
#define EventWindowDidChangeBackingProperties 1050
#define EventWindowDidChangeCollectionBehavior 1051
#define EventWindowDidChangeEffectiveAppearance 1052
#define EventWindowDidChangeOcclusionState 1053
#define EventWindowDidChangeOrderingMode 1054
#define EventWindowDidChangeScreen 1055
#define EventWindowDidChangeScreenParameters 1056
#define EventWindowDidChangeScreenProfile 1057
#define EventWindowDidChangeScreenSpace 1058
#define EventWindowDidChangeScreenSpaceProperties 1059
#define EventWindowDidChangeSharingType 1060
#define EventWindowDidChangeSpace 1061
#define EventWindowDidChangeSpaceOrderingMode 1062
#define EventWindowDidChangeTitle 1063
#define EventWindowDidChangeToolbar 1064
#define EventWindowDidChangeVisibility 1065
#define EventWindowDidDeminiaturize 1066
#define EventWindowDidEndSheet 1067
#define EventWindowDidEnterFullScreen 1068
#define EventWindowDidEnterVersionBrowser 1069
#define EventWindowDidExitFullScreen 1070
#define EventWindowDidExitVersionBrowser 1071
#define EventWindowDidExpose 1072
#define EventWindowDidFocus 1073
#define EventWindowDidMiniaturize 1074
#define EventWindowDidMove 1075
#define EventWindowDidOrderOffScreen 1076
#define EventWindowDidOrderOnScreen 1077
#define EventWindowDidResignKey 1078
#define EventWindowDidResignMain 1079
#define EventWindowDidResize 1080
#define EventWindowDidUpdate 1081
#define EventWindowDidUpdateAlpha 1082
#define EventWindowDidUpdateCollectionBehavior 1083
#define EventWindowDidUpdateCollectionProperties 1084
#define EventWindowDidUpdateShadow 1085
#define EventWindowDidUpdateTitle 1086
#define EventWindowDidUpdateToolbar 1087
#define EventWindowDidUpdateVisibility 1088
#define EventWindowShouldClose 1089
#define EventWindowWillBecomeKey 1090
#define EventWindowWillBecomeMain 1091
#define EventWindowWillBeginSheet 1092
#define EventWindowWillChangeOrderingMode 1093
#define EventWindowWillClose 1094
#define EventWindowWillDeminiaturize 1095
#define EventWindowWillEnterFullScreen 1096
#define EventWindowWillEnterVersionBrowser 1097
#define EventWindowWillExitFullScreen 1098
#define EventWindowWillExitVersionBrowser 1099
#define EventWindowWillFocus 1100
#define EventWindowWillMiniaturize 1101
#define EventWindowWillMove 1102
#define EventWindowWillOrderOffScreen 1103
#define EventWindowWillOrderOnScreen 1104
#define EventWindowWillResignMain 1105
#define EventWindowWillResize 1106
#define EventWindowWillUnfocus 1107
#define EventWindowWillUpdate 1108
#define EventWindowWillUpdateAlpha 1109
#define EventWindowWillUpdateCollectionBehavior 1110
#define EventWindowWillUpdateCollectionProperties 1111
#define EventWindowWillUpdateShadow 1112
#define EventWindowWillUpdateTitle 1113
#define EventWindowWillUpdateToolbar 1114
#define EventWindowWillUpdateVisibility 1115
#define EventWindowWillUseStandardFrame 1116
#define EventMenuWillOpen 1117
#define EventMenuDidOpen 1118
#define EventMenuDidClose 1119
#define EventMenuWillSendAction 1120
#define EventMenuDidSendAction 1121
#define EventMenuWillHighlightItem 1122
#define EventMenuDidHighlightItem 1123
#define EventMenuWillDisplayItem 1124
#define EventMenuDidDisplayItem 1125
#define EventMenuWillAddItem 1126
#define EventMenuDidAddItem 1127
#define EventMenuWillRemoveItem 1128
#define EventMenuDidRemoveItem 1129
#define EventMenuWillBeginTracking 1130
#define EventMenuDidBeginTracking 1131
#define EventMenuWillEndTracking 1132
#define EventMenuDidEndTracking 1133
#define EventMenuWillUpdate 1134
#define EventMenuDidUpdate 1135
#define EventMenuWillPopUp 1136
#define EventMenuDidPopUp 1137
#define EventMenuWillSendActionToItem 1138
#define EventMenuDidSendActionToItem 1139
#define EventWebViewDidStartProvisionalNavigation 1140
#define EventWebViewDidReceiveServerRedirectForProvisionalNavigation 1141
#define EventWebViewDidFinishNavigation 1142
#define EventWebViewDidCommitNavigation 1143
#define EventWindowFileDraggingEntered 1144
#define EventWindowFileDraggingPerformed 1145
#define EventWindowFileDraggingExited 1146
#define MAX_EVENTS 124
#endif