From e3643d7a9d12235133c9762cf96c0488a9434a64 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Sun, 12 Jul 2009 13:08:03 +0000 Subject: [PATCH] Ported Veency to 3.x. --- Hook.mm | 9 +++++++++ Tweak.mm | 46 +++++++++++++++++++++++++++++----------------- VeencyHook.plist | Bin 0 -> 127 bytes control | 4 ++-- makefile | 7 +++++++ 5 files changed, 47 insertions(+), 19 deletions(-) create mode 100644 Hook.mm create mode 100644 VeencyHook.plist diff --git a/Hook.mm b/Hook.mm new file mode 100644 index 0000000..00ce7e9 --- /dev/null +++ b/Hook.mm @@ -0,0 +1,9 @@ +#include +#include + +extern "C" void TweakInitialize() { + if (Class star = objc_getClass("UIKeyboardLayoutStar")) { + Method method(class_getInstanceMethod(objc_getClass("UIKeyboardLayoutRoman"), @selector(handleHardwareKeyDownFromSimulator:))); + class_addMethod(star, @selector(handleHardwareKeyDownFromSimulator:), method_getImplementation(method), method_getTypeEncoding(method)); + } +} diff --git a/Tweak.mm b/Tweak.mm index f405c4f..dea38a3 100644 --- a/Tweak.mm +++ b/Tweak.mm @@ -50,8 +50,7 @@ #import #import #import -#import -#import +#import #import #import @@ -150,6 +149,9 @@ void VNCAlertItem$performUnlockAction(id self, SEL sel) { @end +static mach_port_t (*GSTakePurpleSystemEventPort)(void); +static bool PurpleAllocated; + static void VNCPointer(int buttons, int x, int y, rfbClientPtr client) { x_ = x; y_ = y; int diff = buttons_ ^ buttons; @@ -247,14 +249,14 @@ static void VNCPointer(int buttons, int x, int y, rfbClientPtr client) { if (port == 0) { if (purple == 0) - purple = GSCopyPurpleSystemEventPort(); + purple = (*GSTakePurpleSystemEventPort)(); port = purple; } GSSendEvent(&event.record, port); } - if (purple != 0) + if (purple != 0 && PurpleAllocated) mach_port_deallocate(mach_task_self(), purple); } @@ -270,18 +272,9 @@ static void VNCKeyboard(rfbBool down, rfbKeySym key, rfbClientPtr client) { if (key > 0xfff) return; - struct { - struct GSEventRecord record; - struct GSEventKeyInfo data; - } event; - - memset(&event, 0, sizeof(event)); - - event.record.type = GSEventTypeKeyDown; - event.record.timestamp = GSCurrentEventTimestamp(); - event.record.size = sizeof(event.data); - - event.data.character = key; + GSEventRef event(_GSCreateSyntheticKeyEvent(key, YES, YES)); + GSEventRecord *record(_GSEventGetGSEventRecord(event)); + record->type = GSEventTypeKeyDown; mach_port_t port(0); @@ -292,8 +285,21 @@ static void VNCKeyboard(rfbBool down, rfbKeySym key, rfbClientPtr client) { port = [display clientPortAtPosition:CGPointMake(x_, y_)]; } + mach_port_t purple(0); + + if (port == 0) { + if (purple == 0) + purple = (*GSTakePurpleSystemEventPort)(); + port = purple; + } + if (port != 0) - GSSendEvent(&event.record, port); + GSSendEvent(record, port); + + if (purple != 0 && PurpleAllocated) + mach_port_deallocate(mach_task_self(), purple); + + CFRelease(event); } static void VNCDisconnect(rfbClientPtr client) { @@ -413,6 +419,12 @@ MSHook(kern_return_t, IOMobileFramebufferSwapSetLayer, } extern "C" void TweakInitialize() { + GSTakePurpleSystemEventPort = reinterpret_cast(dlsym(RTLD_DEFAULT, "GSGetPurpleSystemEventPort")); + if (GSTakePurpleSystemEventPort == NULL) { + GSTakePurpleSystemEventPort = reinterpret_cast(dlsym(RTLD_DEFAULT, "GSCopyPurpleSystemEventPort")); + PurpleAllocated = true; + } + MSHookFunction(&IOMobileFramebufferSwapSetLayer, &$IOMobileFramebufferSwapSetLayer, &_IOMobileFramebufferSwapSetLayer); $SBAlertItemsController = objc_getClass("SBAlertItemsController"); diff --git a/VeencyHook.plist b/VeencyHook.plist new file mode 100644 index 0000000000000000000000000000000000000000..2ab5990fc7caaea81a9094cf4f0e5aa3b7a9dc75 GIT binary patch literal 127 zcmYc)$jK}&F)+Bu$Q0(5nNyNlbcvaTl|5cS)H%N>)h)j?FD0=gGe0jZwWt_Kg*yQS za#D*IvMD>%K5v!V5%^{yN4x-ka(=E}VnIPps$Qt4cV-C(w~)BLxuuf}0~jzeLTCm~ IC=H{+0A2zh^Z)<= literal 0 HcmV?d00001 diff --git a/control b/control index 2205a75..9366e92 100644 --- a/control +++ b/control @@ -5,10 +5,10 @@ Priority: optional Section: Networking Maintainer: Jay Freeman (saurik) Architecture: iphoneos-arm -Version: 0.9.2765-1 +Version: 0.9.2970-1 Description: a VNC /server/ for the iPhone Name: Veency -Depends: mobilesubstrate (>= 0.9.2587-1), libvncserver +Depends: mobilesubstrate (>= 0.9.2966-1), libvncserver Author: Jay Freeman (saurik) Depiction: http://cydia.saurik.com/info/veency/ Tag: purpose::daemon, role::enduser diff --git a/makefile b/makefile index 3f0ac4b..84c3b3a 100644 --- a/makefile +++ b/makefile @@ -4,6 +4,13 @@ flags := -lvncserver -framework IOMobileFramebuffer -framework CoreSurface -fram base := ../tweaks include ../tweaks/tweak.mk +all: VeencyHook.dylib + +VeencyHook.dylib: Hook.mm makefile + $(target)g++ -dynamiclib -g0 -O2 -Wall -Werror -o $@ $(filter %.mm,$^) -init _TweakInitialize -lobjc + ldid -S $@ + extra: + cp -a VeencyHook.dylib VeencyHook.plist package/Library/MobileSubstrate/DynamicLibraries mkdir -p package/System/Library/CoreServices/SpringBoard.app cp -a Default_Veency.png FSO_Veency.png package/System/Library/CoreServices/SpringBoard.app -- 2.47.2