From: Jay Freeman (saurik) Date: Sun, 12 Jul 2009 13:08:03 +0000 (+0000) Subject: Ported Veency to 3.x. X-Git-Tag: v0.9.2972~2 X-Git-Url: https://git.saurik.com/veency.git/commitdiff_plain/e3643d7a9d12235133c9762cf96c0488a9434a64 Ported Veency to 3.x. --- 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 0000000..2ab5990 Binary files /dev/null and b/VeencyHook.plist differ 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