diff options
author | Jay Freeman (saurik) <saurik@saurik.com> | 2011-03-13 14:07:59 -0700 |
---|---|---|
committer | Jay Freeman (saurik) <saurik@saurik.com> | 2011-03-14 05:09:09 -0700 |
commit | 31f9c8f728e31d0614b9c0aa9fe3ddb60545a366 (patch) | |
tree | 4a6e65b67a90b1aceac8812ae2fbf7846cee55f6 /CyteKit/dispatchEvent.mm | |
parent | baa2fba301cb1561e2c0bbc528027074ce73d692 (diff) |
Separate out CyteKit/dispatchEvent.*.
Diffstat (limited to 'CyteKit/dispatchEvent.mm')
-rw-r--r-- | CyteKit/dispatchEvent.mm | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/CyteKit/dispatchEvent.mm b/CyteKit/dispatchEvent.mm new file mode 100644 index 0000000..277d89b --- /dev/null +++ b/CyteKit/dispatchEvent.mm @@ -0,0 +1,76 @@ +/* Cydia - iPhone UIKit Front-End for Debian APT + * Copyright (C) 2008-2011 Jay Freeman (saurik) +*/ + +/* Modified BSD License {{{ */ +/* + * Redistribution and use in source and binary + * forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the + * above copyright notice, this list of conditions + * and the following disclaimer. + * 2. Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions + * and the following disclaimer in the documentation + * and/or other materials provided with the + * distribution. + * 3. The name of the author may not be used to endorse + * or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/* }}} */ + +#include "CyteKit/dispatchEvent.h" +#include "CyteKit/WebThreadLocked.hpp" + +#include <WebKit/WebFrame.h> +#include <WebKit/WebScriptObject.h> +#include <WebKit/WebView.h> + +#include <objc/runtime.h> + +#include <CydiaSubstrate/CydiaSubstrate.h> + +@implementation UIWebDocumentView (CyteDispatchEvent) + +- (void) dispatchEvent:(NSString *)event { + WebThreadLocked lock; + + NSString *script([NSString stringWithFormat:@ + "(function() {" + "var event = this.document.createEvent('Events');" + "event.initEvent('%@', false, false);" + "this.document.dispatchEvent(event);" + "})();" + , event]); + + NSMutableArray *frames([NSMutableArray arrayWithObjects: + [[self webView] mainFrame] + , nil]); + + while (WebFrame *frame = [frames lastObject]) { + WebScriptObject *object([frame windowObject]); + [object evaluateWebScript:script]; + [frames removeLastObject]; + [frames addObjectsFromArray:[frame childFrames]]; + } +} + +@end |