[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

cblu cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 05:54:51 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 81caa02325baf3b06f596dc21338307927718d1f
Author: cblu <cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Jan 31 23:23:12 2002 +0000

    Added support for hidden plug-ins. Added focus events
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@571 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/kwq/WKPluginView.h b/WebCore/kwq/WKPluginView.h
index 37c3e0a..ffad78d 100644
--- a/WebCore/kwq/WKPluginView.h
+++ b/WebCore/kwq/WKPluginView.h
@@ -10,27 +10,29 @@
 #include <qwidget.h>
 #import <WKPlugin.h>
 #include "npapi.h"
-#include "kwqdebug.h"
 
 
 typedef NPStream* NPS;
 
 @interface WKPluginView : NSQuickDrawView {
     QWidget *widget;
-    bool isFlipped;
+    WKPlugin *plugin;
+    
     NPP instance;
     NPP_t instanceStruct;
     NPStream streamStruct;
     NPS stream;
-    int32 streamOffset;
-    NSString *url, *mime;
-    WKPlugin *plugin;
-    bool transferred;
     NPWindow window;
     NP_Port nPort;
+    
+    int32 streamOffset;
     uint16 transferMode;
     char **cAttributes, **cValues;
-    
+    bool isFlipped, transferred, hidden;
+            
+    NSString *url, *mime;
+    NSTrackingRectTag trackingTag;
+
     NPP_NewProcPtr NPP_New;
     NPP_DestroyProcPtr NPP_Destroy;
     NPP_SetWindowProcPtr NPP_SetWindow;
@@ -49,16 +51,20 @@ typedef NPStream* NPS;
 
 - initWithFrame: (NSRect) r widget: (QWidget *)w plugin: (WKPlugin *)plug url: (NSString *)location mime:(NSString *)mime arguments:(NSDictionary *)arguments;
 -(void)drawRect:(NSRect)rect;
+-(void) setWindow:(NSRect)rect;
 -(BOOL)acceptsFirstResponder;
+-(BOOL)becomeFirstResponder;
+-(BOOL)resignFirstResponder;
+-(void)sendActivateEvent;
+-(void)sendUpdateEvent;
 -(void)sendNullEvents;
 -(void)mouseDown:(NSEvent *)theEvent;
 -(void)mouseUp:(NSEvent *)theEvent;
-- (void)mouseDragged:(NSEvent *)theEvent;
-- (void)mouseEntered:(NSEvent *)theEvent;
-- (void)mouseExited:(NSEvent *)theEvent;
-- (void)mouseMoved:(NSEvent *)theEvent;
-- (void)keyDown:(NSEvent *)theEvent;
-- (void)keyUp:(NSEvent *)theEvent;
+-(void)mouseDragged:(NSEvent *)theEvent;
+-(void)mouseEntered:(NSEvent *)theEvent;
+-(void)mouseExited:(NSEvent *)theEvent;
+-(void)keyDown:(NSEvent *)theEvent;
+-(void)keyUp:(NSEvent *)theEvent;
 -(void)dealloc;
 
 // plug-in to browser calls
diff --git a/WebCore/kwq/WKPluginView.mm b/WebCore/kwq/WKPluginView.mm
index d97b702..f993925 100644
--- a/WebCore/kwq/WKPluginView.mm
+++ b/WebCore/kwq/WKPluginView.mm
@@ -10,6 +10,11 @@
 #include <WCURICacheData.h>
 #include <WCURICache.h>
 #include <Carbon/Carbon.h> 
+#include "kwqdebug.h"
+
+//#define USE_CARBON 1
+//#import <AppKit/NSWindow_Private.h>
+
 
 
 @implementation WKPluginView
@@ -22,7 +27,7 @@
     NSArray *attributes, *values;
     NSString *attributeString;
     uint i;
-    
+        
     [super initWithFrame: r];
 
     instance = &instanceStruct;
@@ -60,40 +65,36 @@
         cValues[i] = s;
     }
     [mime getCString:cMime];
-    npErr = NPP_New(cMime, instance, NP_EMBED, [arguments count], cAttributes, cValues, &saved); // need to pass attributes to plug-in
+    npErr = NPP_New(cMime, instance, NP_EMBED, [arguments count], cAttributes, cValues, &saved);
     KWQDebug("NPP_New: %d\n", npErr);
+    
+    if([attributes containsObject:@"HIDDEN"]){
+        hidden = TRUE;
+    }else{
+        hidden = FALSE;
+    }
     transferred = FALSE;
-    [[self window] setAcceptsMouseMovedEvents:YES];
-    [self performSelector:@selector(sendNullEvents) withObject:nil afterDelay:0];
+    trackingTag = [self addTrackingRect:r owner:self userData:nil assumeInside:NO];
+    [self performSelector:@selector(sendNullEvents) withObject:nil afterDelay:2];
     return self;
 }
 
-- (void)drawRect:(NSRect)rect {
+- (void)drawRect:(NSRect)rect
+{
     NPError npErr;
     char cMime[200], cURL[800];
     id <WCURICache> cache;
-    NSRect frame;
+    //WindowRef windowRef;
     
-    frame = [self frame];
-    nPort.port = [self qdPort];
-    nPort.portx = (int32)rect.origin.x;
-    nPort.porty = (int32)rect.origin.y;
-    window.window = &nPort;
-    window.x = 0; 
-    window.y = 0;
-    window.width = (uint32)frame.size.width;
-    window.height = (uint32)frame.size.height;
-    window.clipRect.top = (uint16)rect.origin.y; // clip rect
-    window.clipRect.left = (uint16)rect.origin.x;
-    window.clipRect.bottom = (uint16)rect.size.height;
-    window.clipRect.right = (uint16)rect.size.width;
-    window.type = NPWindowTypeDrawable;
+    //windowRef = [[self window] _windowRef]; // give the window a WindowRef
+    //windowRef->port = [self qdPort];
     
-    npErr = NPP_SetWindow(instance, &window);
-    KWQDebug("NPP_SetWindow: %d rect.size.height=%d rect.size.width=%d port=%d rect.origin.x=%f rect.origin.y=%f\n", npErr, (int)rect.size.height, (int)rect.size.width, (int)nPort.port, rect.origin.x, rect.origin.y);
-    KWQDebug("frame.size.height=%d frame.size.width=%d frame.origin.x=%f frame.origin.y=%f\n", (int)frame.size.height, (int)frame.size.width, frame.origin.x, frame.origin.y);
+    //MoveTo(0,0); // diagnol line test
+    //LineTo((short)rect.size.width, (short)rect.size.height);
     
+    [self setWindow:rect];
     if(!transferred){
+        [self sendActivateEvent];
         [url getCString:cURL];
         stream->url = cURL;
         stream->end = 0;
@@ -107,23 +108,54 @@
         cache = WCGetDefaultURICache();
         if(transferMode == NP_NORMAL){
             KWQDebug("Stream type: NP_NORMAL\n");
-            transferMode = NP_ASFILEONLY;
             [cache requestWithString:url requestor:self userData:nil];
         }else if(transferMode == NP_ASFILEONLY){
             KWQDebug("Stream type: NP_ASFILEONLY not yet supported\n");
-            transferMode = NP_ASFILEONLY;
         }else if(transferMode == NP_ASFILE){
             KWQDebug("Stream type: NP_ASFILE not fully supported\n");
-            transferMode = NP_ASFILE;
             [cache requestWithString:url requestor:self userData:nil];
         }else if(transferMode == NP_SEEK){
             KWQDebug("Stream type: NP_SEEK not yet supported\n");
-            transferMode = NP_SEEK;
         }
         transferred = TRUE;
+        
     }
+    [self sendUpdateEvent];
 }
 
+- (void) setWindow:(NSRect)rect
+{
+    NPError npErr;
+    NSRect frame, frameInWindow;
+    
+    frame = [self frame];
+    frameInWindow = [self convertRect:rect toView:nil];
+    
+    nPort.port = [self qdPort];
+    nPort.portx = 0;
+    nPort.porty = 0;   
+    window.window = &nPort;
+    
+    window.x = 0; 
+    window.y = 0;
+
+    window.width = (uint32)frame.size.width;
+    window.height = (uint32)frame.size.height;
+
+    window.clipRect.top = (uint16)rect.origin.y; // clip rect
+    window.clipRect.left = (uint16)rect.origin.x;
+    window.clipRect.bottom = (uint16)rect.size.height;
+    window.clipRect.right = (uint16)rect.size.width;
+    
+    window.type = NPWindowTypeDrawable;
+    
+    npErr = NPP_SetWindow(instance, &window);
+    KWQDebug("NPP_SetWindow: %d rect.size.height=%d rect.size.width=%d port=%d rect.origin.x=%f rect.origin.y=%f\n", npErr, (int)rect.size.height, (int)rect.size.width, (int)nPort.port, rect.origin.x, rect.origin.y);
+    KWQDebug("frame.size.height=%d frame.size.width=%d frame.origin.x=%f frame.origin.y=%f\n", (int)frame.size.height, (int)frame.size.width, frame.origin.x, frame.origin.y);
+    KWQDebug("frameInWindow.size.height=%d frameInWindow.size.width=%d frameInWindow.origin.x=%f frameInWindow.origin.y=%f\n", (int)frameInWindow.size.height, (int)frameInWindow.size.width, frameInWindow.origin.x, frameInWindow.origin.y);
+}
+
+// cache methods
 
 -(void)cacheDataAvailable:(NSNotification *)notification
 {
@@ -151,12 +183,40 @@
     KWQDebug("NPP_DestroyStream: %d\n", npErr);
 }
 
+// event methods
+
 -(BOOL)acceptsFirstResponder
 {
-    return true;
+    return YES;
 }
 
-// event methods
+- (BOOL)becomeFirstResponder
+{
+    EventRecord event;
+    bool acceptedEvent;
+    UnsignedWide msecs;
+    
+    event.what = getFocusEvent;
+    Microseconds(&msecs);
+    event.when = (uint32)((double)UnsignedWideToUInt64(msecs) / 1000000 * 60); // microseconds to ticks
+    acceptedEvent = NPP_HandleEvent(instance, &event); 
+    KWQDebug("NPP_HandleEvent(getFocusEvent): %d  when: %u\n", acceptedEvent, event.when);
+    return YES;
+}
+
+- (BOOL)resignFirstResponder
+{
+    EventRecord event;
+    bool acceptedEvent;
+    UnsignedWide msecs;
+    
+    event.what = loseFocusEvent;
+    Microseconds(&msecs);
+    event.when = (uint32)((double)UnsignedWideToUInt64(msecs) / 1000000 * 60); // microseconds to ticks
+    acceptedEvent = NPP_HandleEvent(instance, &event); 
+    KWQDebug("NPP_HandleEvent(loseFocusEvent): %d  when: %u\n", acceptedEvent, event.when);
+    return YES;
+}
 
 -(void)sendNullEvents
 {
@@ -167,11 +227,39 @@
     event.what = nullEvent;
     Microseconds(&msecs);
     event.when = (uint32)((double)UnsignedWideToUInt64(msecs) / 1000000 * 60); // microseconds to ticks
-    acceptedEvent = NPP_HandleEvent(instance, &event); 
+    acceptedEvent = NPP_HandleEvent(instance, &event);
     //KWQDebug("NPP_HandleEvent(nullEvent): %d  when: %u\n", acceptedEvent, event.when);
     [self performSelector:@selector(sendNullEvents) withObject:nil afterDelay:0];
 }
 
+-(void)sendActivateEvent
+{
+    EventRecord event;
+    bool acceptedEvent;
+    UnsignedWide msecs;
+    
+    event.what = activateEvt;
+    event.message = (UInt32)[self qdPort];
+    Microseconds(&msecs);
+    event.when = (uint32)((double)UnsignedWideToUInt64(msecs) / 1000000 * 60); // microseconds to ticks
+    acceptedEvent = NPP_HandleEvent(instance, &event); 
+    KWQDebug("NPP_HandleEvent(activateEvent): %d  when: %u\n", acceptedEvent, event.when);
+}
+
+-(void)sendUpdateEvent
+{
+    EventRecord event;
+    bool acceptedEvent;
+    UnsignedWide msecs;
+    
+    event.what = updateEvt;
+    event.message = (UInt32)[self qdPort];
+    Microseconds(&msecs);
+    event.when = (uint32)((double)UnsignedWideToUInt64(msecs) / 1000000 * 60); // microseconds to ticks
+    acceptedEvent = NPP_HandleEvent(instance, &event); 
+    KWQDebug("NPP_HandleEvent(updateEvt): %d  when: %u\n", acceptedEvent, event.when);
+}
+
 -(void)mouseDown:(NSEvent *)theEvent
 {
     EventRecord event;
@@ -233,11 +321,15 @@
     KWQDebug("NPP_HandleEvent(mouseDragged): %d pt.v=%d, pt.h=%d ticks=%u\n", acceptedEvent, pt.v, pt.h, event.when);
 }
 
+//FIXME: mouseEntered and mouseExited are not being called for some reason
 - (void)mouseEntered:(NSEvent *)theEvent
 {
     EventRecord event;
     bool acceptedEvent;
     
+    KWQDebug("NPP_HandleEvent(mouseEntered)\n");
+    if([theEvent trackingNumber] != trackingTag)
+        return;
     event.what = adjustCursorEvent;
     event.when = (uint32)([theEvent timestamp] * 60);
     acceptedEvent = NPP_HandleEvent(instance, &event);
@@ -249,27 +341,25 @@
     EventRecord event;
     bool acceptedEvent;
     
+    if([theEvent trackingNumber] != trackingTag)
+        return;    
     event.what = adjustCursorEvent;
     event.when = (uint32)([theEvent timestamp] * 60);
     acceptedEvent = NPP_HandleEvent(instance, &event);
     KWQDebug("NPP_HandleEvent(mouseExited): %d\n", acceptedEvent);
 }
 
-- (void)mouseMoved:(NSEvent *)theEvent{
-    KWQDebug("mouseMoved\n");
-}
-
 - (void)keyUp:(NSEvent *)theEvent
 {
- 
     EventRecord event;
     bool acceptedEvent;
-
+    
     event.what = keyUp;
-    event.message = [theEvent keyCode];
+    event.message = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
     event.when = (uint32)([theEvent timestamp] * 60);
     acceptedEvent = NPP_HandleEvent(instance, &event);
-    KWQDebug("NPP_HandleEvent(keyUp): %d key:%d\n", acceptedEvent, event.message);
+    KWQDebug("NPP_HandleEvent(keyUp): %d key:%c\n", acceptedEvent, (event.message & charCodeMask));
+    //Note: QT Plug-in doesn't use keyUp's
 }
 
 - (void)keyDown:(NSEvent *)theEvent
@@ -278,10 +368,10 @@
     bool acceptedEvent;
     
     event.what = keyDown;
-    event.message = [theEvent keyCode];
+    event.message = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
     event.when = (uint32)([theEvent timestamp] * 60);
     acceptedEvent = NPP_HandleEvent(instance, &event);
-    KWQDebug("NPP_HandleEvent(keyDown): %d key:%d\n", acceptedEvent, event.message);
+    KWQDebug("NPP_HandleEvent(keyDown): %d key:%c\n", acceptedEvent, (event.message & charCodeMask));
 }
 
 // plug-in to browser calls
@@ -364,7 +454,8 @@
 -(void)dealloc
 {
     NPError npErr;
-    //[self cancelPreviousPerformRequestsWithTarget:self selector:@selector(sendNullEvents) object:nil]; //compiler can't find this method!
+    //FIX ME: compiler can't find this method!
+    //[self cancelPreviousPerformRequestsWithTarget:self selector:@selector(sendNullEvents) object:nil];
     npErr = NPP_Destroy(instance, NULL);
     KWQDebug("NPP_Destroy: %d\n", npErr);
     [super dealloc];
diff --git a/WebCore/kwq/npapi.mm b/WebCore/kwq/npapi.mm
index 3165dda..b884d5e 100644
--- a/WebCore/kwq/npapi.mm
+++ b/WebCore/kwq/npapi.mm
@@ -1,32 +1,33 @@
 #include "npapi.h"
 #include <WKPluginView.h>
+#include "kwqdebug.h"
 
 // general plug-in to browser functions
 
 const char* NPN_UserAgent(NPP instance){
-    printf("NPN_UserAgent\n");
+    KWQDebug("NPN_UserAgent\n");
     return "IE";
 }
 
 void* NPN_MemAlloc(UInt32 size){
-    printf("NPN_MemAlloc\n");
+    KWQDebug("NPN_MemAlloc\n");
     return malloc(size);
 
 }
 
 void NPN_MemFree(void* ptr){
-    printf("NPN_MemFree\n");
+    KWQDebug("NPN_MemFree\n");
     free(ptr);
 
 }
 
 UInt32 NPN_MemFlush(UInt32 size){
-    printf("NPN_MemFlush\n");
+    KWQDebug("NPN_MemFlush\n");
     return 0;
 }
 
 void NPN_ReloadPlugins(NPBool reloadPages){
-    printf("NPN_ReloadPlugins\n");
+    KWQDebug("NPN_ReloadPlugins\n");
 
 }
 
diff --git a/WebCore/src/kwq/WKPluginView.h b/WebCore/src/kwq/WKPluginView.h
index 37c3e0a..ffad78d 100644
--- a/WebCore/src/kwq/WKPluginView.h
+++ b/WebCore/src/kwq/WKPluginView.h
@@ -10,27 +10,29 @@
 #include <qwidget.h>
 #import <WKPlugin.h>
 #include "npapi.h"
-#include "kwqdebug.h"
 
 
 typedef NPStream* NPS;
 
 @interface WKPluginView : NSQuickDrawView {
     QWidget *widget;
-    bool isFlipped;
+    WKPlugin *plugin;
+    
     NPP instance;
     NPP_t instanceStruct;
     NPStream streamStruct;
     NPS stream;
-    int32 streamOffset;
-    NSString *url, *mime;
-    WKPlugin *plugin;
-    bool transferred;
     NPWindow window;
     NP_Port nPort;
+    
+    int32 streamOffset;
     uint16 transferMode;
     char **cAttributes, **cValues;
-    
+    bool isFlipped, transferred, hidden;
+            
+    NSString *url, *mime;
+    NSTrackingRectTag trackingTag;
+
     NPP_NewProcPtr NPP_New;
     NPP_DestroyProcPtr NPP_Destroy;
     NPP_SetWindowProcPtr NPP_SetWindow;
@@ -49,16 +51,20 @@ typedef NPStream* NPS;
 
 - initWithFrame: (NSRect) r widget: (QWidget *)w plugin: (WKPlugin *)plug url: (NSString *)location mime:(NSString *)mime arguments:(NSDictionary *)arguments;
 -(void)drawRect:(NSRect)rect;
+-(void) setWindow:(NSRect)rect;
 -(BOOL)acceptsFirstResponder;
+-(BOOL)becomeFirstResponder;
+-(BOOL)resignFirstResponder;
+-(void)sendActivateEvent;
+-(void)sendUpdateEvent;
 -(void)sendNullEvents;
 -(void)mouseDown:(NSEvent *)theEvent;
 -(void)mouseUp:(NSEvent *)theEvent;
-- (void)mouseDragged:(NSEvent *)theEvent;
-- (void)mouseEntered:(NSEvent *)theEvent;
-- (void)mouseExited:(NSEvent *)theEvent;
-- (void)mouseMoved:(NSEvent *)theEvent;
-- (void)keyDown:(NSEvent *)theEvent;
-- (void)keyUp:(NSEvent *)theEvent;
+-(void)mouseDragged:(NSEvent *)theEvent;
+-(void)mouseEntered:(NSEvent *)theEvent;
+-(void)mouseExited:(NSEvent *)theEvent;
+-(void)keyDown:(NSEvent *)theEvent;
+-(void)keyUp:(NSEvent *)theEvent;
 -(void)dealloc;
 
 // plug-in to browser calls
diff --git a/WebCore/src/kwq/WKPluginView.mm b/WebCore/src/kwq/WKPluginView.mm
index d97b702..f993925 100644
--- a/WebCore/src/kwq/WKPluginView.mm
+++ b/WebCore/src/kwq/WKPluginView.mm
@@ -10,6 +10,11 @@
 #include <WCURICacheData.h>
 #include <WCURICache.h>
 #include <Carbon/Carbon.h> 
+#include "kwqdebug.h"
+
+//#define USE_CARBON 1
+//#import <AppKit/NSWindow_Private.h>
+
 
 
 @implementation WKPluginView
@@ -22,7 +27,7 @@
     NSArray *attributes, *values;
     NSString *attributeString;
     uint i;
-    
+        
     [super initWithFrame: r];
 
     instance = &instanceStruct;
@@ -60,40 +65,36 @@
         cValues[i] = s;
     }
     [mime getCString:cMime];
-    npErr = NPP_New(cMime, instance, NP_EMBED, [arguments count], cAttributes, cValues, &saved); // need to pass attributes to plug-in
+    npErr = NPP_New(cMime, instance, NP_EMBED, [arguments count], cAttributes, cValues, &saved);
     KWQDebug("NPP_New: %d\n", npErr);
+    
+    if([attributes containsObject:@"HIDDEN"]){
+        hidden = TRUE;
+    }else{
+        hidden = FALSE;
+    }
     transferred = FALSE;
-    [[self window] setAcceptsMouseMovedEvents:YES];
-    [self performSelector:@selector(sendNullEvents) withObject:nil afterDelay:0];
+    trackingTag = [self addTrackingRect:r owner:self userData:nil assumeInside:NO];
+    [self performSelector:@selector(sendNullEvents) withObject:nil afterDelay:2];
     return self;
 }
 
-- (void)drawRect:(NSRect)rect {
+- (void)drawRect:(NSRect)rect
+{
     NPError npErr;
     char cMime[200], cURL[800];
     id <WCURICache> cache;
-    NSRect frame;
+    //WindowRef windowRef;
     
-    frame = [self frame];
-    nPort.port = [self qdPort];
-    nPort.portx = (int32)rect.origin.x;
-    nPort.porty = (int32)rect.origin.y;
-    window.window = &nPort;
-    window.x = 0; 
-    window.y = 0;
-    window.width = (uint32)frame.size.width;
-    window.height = (uint32)frame.size.height;
-    window.clipRect.top = (uint16)rect.origin.y; // clip rect
-    window.clipRect.left = (uint16)rect.origin.x;
-    window.clipRect.bottom = (uint16)rect.size.height;
-    window.clipRect.right = (uint16)rect.size.width;
-    window.type = NPWindowTypeDrawable;
+    //windowRef = [[self window] _windowRef]; // give the window a WindowRef
+    //windowRef->port = [self qdPort];
     
-    npErr = NPP_SetWindow(instance, &window);
-    KWQDebug("NPP_SetWindow: %d rect.size.height=%d rect.size.width=%d port=%d rect.origin.x=%f rect.origin.y=%f\n", npErr, (int)rect.size.height, (int)rect.size.width, (int)nPort.port, rect.origin.x, rect.origin.y);
-    KWQDebug("frame.size.height=%d frame.size.width=%d frame.origin.x=%f frame.origin.y=%f\n", (int)frame.size.height, (int)frame.size.width, frame.origin.x, frame.origin.y);
+    //MoveTo(0,0); // diagnol line test
+    //LineTo((short)rect.size.width, (short)rect.size.height);
     
+    [self setWindow:rect];
     if(!transferred){
+        [self sendActivateEvent];
         [url getCString:cURL];
         stream->url = cURL;
         stream->end = 0;
@@ -107,23 +108,54 @@
         cache = WCGetDefaultURICache();
         if(transferMode == NP_NORMAL){
             KWQDebug("Stream type: NP_NORMAL\n");
-            transferMode = NP_ASFILEONLY;
             [cache requestWithString:url requestor:self userData:nil];
         }else if(transferMode == NP_ASFILEONLY){
             KWQDebug("Stream type: NP_ASFILEONLY not yet supported\n");
-            transferMode = NP_ASFILEONLY;
         }else if(transferMode == NP_ASFILE){
             KWQDebug("Stream type: NP_ASFILE not fully supported\n");
-            transferMode = NP_ASFILE;
             [cache requestWithString:url requestor:self userData:nil];
         }else if(transferMode == NP_SEEK){
             KWQDebug("Stream type: NP_SEEK not yet supported\n");
-            transferMode = NP_SEEK;
         }
         transferred = TRUE;
+        
     }
+    [self sendUpdateEvent];
 }
 
+- (void) setWindow:(NSRect)rect
+{
+    NPError npErr;
+    NSRect frame, frameInWindow;
+    
+    frame = [self frame];
+    frameInWindow = [self convertRect:rect toView:nil];
+    
+    nPort.port = [self qdPort];
+    nPort.portx = 0;
+    nPort.porty = 0;   
+    window.window = &nPort;
+    
+    window.x = 0; 
+    window.y = 0;
+
+    window.width = (uint32)frame.size.width;
+    window.height = (uint32)frame.size.height;
+
+    window.clipRect.top = (uint16)rect.origin.y; // clip rect
+    window.clipRect.left = (uint16)rect.origin.x;
+    window.clipRect.bottom = (uint16)rect.size.height;
+    window.clipRect.right = (uint16)rect.size.width;
+    
+    window.type = NPWindowTypeDrawable;
+    
+    npErr = NPP_SetWindow(instance, &window);
+    KWQDebug("NPP_SetWindow: %d rect.size.height=%d rect.size.width=%d port=%d rect.origin.x=%f rect.origin.y=%f\n", npErr, (int)rect.size.height, (int)rect.size.width, (int)nPort.port, rect.origin.x, rect.origin.y);
+    KWQDebug("frame.size.height=%d frame.size.width=%d frame.origin.x=%f frame.origin.y=%f\n", (int)frame.size.height, (int)frame.size.width, frame.origin.x, frame.origin.y);
+    KWQDebug("frameInWindow.size.height=%d frameInWindow.size.width=%d frameInWindow.origin.x=%f frameInWindow.origin.y=%f\n", (int)frameInWindow.size.height, (int)frameInWindow.size.width, frameInWindow.origin.x, frameInWindow.origin.y);
+}
+
+// cache methods
 
 -(void)cacheDataAvailable:(NSNotification *)notification
 {
@@ -151,12 +183,40 @@
     KWQDebug("NPP_DestroyStream: %d\n", npErr);
 }
 
+// event methods
+
 -(BOOL)acceptsFirstResponder
 {
-    return true;
+    return YES;
 }
 
-// event methods
+- (BOOL)becomeFirstResponder
+{
+    EventRecord event;
+    bool acceptedEvent;
+    UnsignedWide msecs;
+    
+    event.what = getFocusEvent;
+    Microseconds(&msecs);
+    event.when = (uint32)((double)UnsignedWideToUInt64(msecs) / 1000000 * 60); // microseconds to ticks
+    acceptedEvent = NPP_HandleEvent(instance, &event); 
+    KWQDebug("NPP_HandleEvent(getFocusEvent): %d  when: %u\n", acceptedEvent, event.when);
+    return YES;
+}
+
+- (BOOL)resignFirstResponder
+{
+    EventRecord event;
+    bool acceptedEvent;
+    UnsignedWide msecs;
+    
+    event.what = loseFocusEvent;
+    Microseconds(&msecs);
+    event.when = (uint32)((double)UnsignedWideToUInt64(msecs) / 1000000 * 60); // microseconds to ticks
+    acceptedEvent = NPP_HandleEvent(instance, &event); 
+    KWQDebug("NPP_HandleEvent(loseFocusEvent): %d  when: %u\n", acceptedEvent, event.when);
+    return YES;
+}
 
 -(void)sendNullEvents
 {
@@ -167,11 +227,39 @@
     event.what = nullEvent;
     Microseconds(&msecs);
     event.when = (uint32)((double)UnsignedWideToUInt64(msecs) / 1000000 * 60); // microseconds to ticks
-    acceptedEvent = NPP_HandleEvent(instance, &event); 
+    acceptedEvent = NPP_HandleEvent(instance, &event);
     //KWQDebug("NPP_HandleEvent(nullEvent): %d  when: %u\n", acceptedEvent, event.when);
     [self performSelector:@selector(sendNullEvents) withObject:nil afterDelay:0];
 }
 
+-(void)sendActivateEvent
+{
+    EventRecord event;
+    bool acceptedEvent;
+    UnsignedWide msecs;
+    
+    event.what = activateEvt;
+    event.message = (UInt32)[self qdPort];
+    Microseconds(&msecs);
+    event.when = (uint32)((double)UnsignedWideToUInt64(msecs) / 1000000 * 60); // microseconds to ticks
+    acceptedEvent = NPP_HandleEvent(instance, &event); 
+    KWQDebug("NPP_HandleEvent(activateEvent): %d  when: %u\n", acceptedEvent, event.when);
+}
+
+-(void)sendUpdateEvent
+{
+    EventRecord event;
+    bool acceptedEvent;
+    UnsignedWide msecs;
+    
+    event.what = updateEvt;
+    event.message = (UInt32)[self qdPort];
+    Microseconds(&msecs);
+    event.when = (uint32)((double)UnsignedWideToUInt64(msecs) / 1000000 * 60); // microseconds to ticks
+    acceptedEvent = NPP_HandleEvent(instance, &event); 
+    KWQDebug("NPP_HandleEvent(updateEvt): %d  when: %u\n", acceptedEvent, event.when);
+}
+
 -(void)mouseDown:(NSEvent *)theEvent
 {
     EventRecord event;
@@ -233,11 +321,15 @@
     KWQDebug("NPP_HandleEvent(mouseDragged): %d pt.v=%d, pt.h=%d ticks=%u\n", acceptedEvent, pt.v, pt.h, event.when);
 }
 
+//FIXME: mouseEntered and mouseExited are not being called for some reason
 - (void)mouseEntered:(NSEvent *)theEvent
 {
     EventRecord event;
     bool acceptedEvent;
     
+    KWQDebug("NPP_HandleEvent(mouseEntered)\n");
+    if([theEvent trackingNumber] != trackingTag)
+        return;
     event.what = adjustCursorEvent;
     event.when = (uint32)([theEvent timestamp] * 60);
     acceptedEvent = NPP_HandleEvent(instance, &event);
@@ -249,27 +341,25 @@
     EventRecord event;
     bool acceptedEvent;
     
+    if([theEvent trackingNumber] != trackingTag)
+        return;    
     event.what = adjustCursorEvent;
     event.when = (uint32)([theEvent timestamp] * 60);
     acceptedEvent = NPP_HandleEvent(instance, &event);
     KWQDebug("NPP_HandleEvent(mouseExited): %d\n", acceptedEvent);
 }
 
-- (void)mouseMoved:(NSEvent *)theEvent{
-    KWQDebug("mouseMoved\n");
-}
-
 - (void)keyUp:(NSEvent *)theEvent
 {
- 
     EventRecord event;
     bool acceptedEvent;
-
+    
     event.what = keyUp;
-    event.message = [theEvent keyCode];
+    event.message = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
     event.when = (uint32)([theEvent timestamp] * 60);
     acceptedEvent = NPP_HandleEvent(instance, &event);
-    KWQDebug("NPP_HandleEvent(keyUp): %d key:%d\n", acceptedEvent, event.message);
+    KWQDebug("NPP_HandleEvent(keyUp): %d key:%c\n", acceptedEvent, (event.message & charCodeMask));
+    //Note: QT Plug-in doesn't use keyUp's
 }
 
 - (void)keyDown:(NSEvent *)theEvent
@@ -278,10 +368,10 @@
     bool acceptedEvent;
     
     event.what = keyDown;
-    event.message = [theEvent keyCode];
+    event.message = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
     event.when = (uint32)([theEvent timestamp] * 60);
     acceptedEvent = NPP_HandleEvent(instance, &event);
-    KWQDebug("NPP_HandleEvent(keyDown): %d key:%d\n", acceptedEvent, event.message);
+    KWQDebug("NPP_HandleEvent(keyDown): %d key:%c\n", acceptedEvent, (event.message & charCodeMask));
 }
 
 // plug-in to browser calls
@@ -364,7 +454,8 @@
 -(void)dealloc
 {
     NPError npErr;
-    //[self cancelPreviousPerformRequestsWithTarget:self selector:@selector(sendNullEvents) object:nil]; //compiler can't find this method!
+    //FIX ME: compiler can't find this method!
+    //[self cancelPreviousPerformRequestsWithTarget:self selector:@selector(sendNullEvents) object:nil];
     npErr = NPP_Destroy(instance, NULL);
     KWQDebug("NPP_Destroy: %d\n", npErr);
     [super dealloc];
diff --git a/WebCore/src/kwq/npapi.mm b/WebCore/src/kwq/npapi.mm
index 3165dda..b884d5e 100644
--- a/WebCore/src/kwq/npapi.mm
+++ b/WebCore/src/kwq/npapi.mm
@@ -1,32 +1,33 @@
 #include "npapi.h"
 #include <WKPluginView.h>
+#include "kwqdebug.h"
 
 // general plug-in to browser functions
 
 const char* NPN_UserAgent(NPP instance){
-    printf("NPN_UserAgent\n");
+    KWQDebug("NPN_UserAgent\n");
     return "IE";
 }
 
 void* NPN_MemAlloc(UInt32 size){
-    printf("NPN_MemAlloc\n");
+    KWQDebug("NPN_MemAlloc\n");
     return malloc(size);
 
 }
 
 void NPN_MemFree(void* ptr){
-    printf("NPN_MemFree\n");
+    KWQDebug("NPN_MemFree\n");
     free(ptr);
 
 }
 
 UInt32 NPN_MemFlush(UInt32 size){
-    printf("NPN_MemFlush\n");
+    KWQDebug("NPN_MemFlush\n");
     return 0;
 }
 
 void NPN_ReloadPlugins(NPBool reloadPages){
-    printf("NPN_ReloadPlugins\n");
+    KWQDebug("NPN_ReloadPlugins\n");
 
 }
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list