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

rjw rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 05:55:35 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit dd2eaaca8834c7381b94c073405ca580dd2aedc3
Author: rjw <rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Feb 13 02:16:38 2002 +0000

    Made basic forms work.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@615 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2002-12-03 b/WebCore/ChangeLog-2002-12-03
index 837c55b..93abb61 100644
--- a/WebCore/ChangeLog-2002-12-03
+++ b/WebCore/ChangeLog-2002-12-03
@@ -1,3 +1,24 @@
+2002-02-12  Richard Williamson  <rjw at apple.com>
+
+    Made basic forms work.
+
+	* src/kdelibs/khtml/rendering/render_form.cpp:
+	(RenderFormElement::performAction), (RenderLineEdit::RenderLineEdit),
+	(RenderLineEdit::performAction):
+	* src/kdelibs/khtml/rendering/render_form.h:
+	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::khtmlMouseReleaseEvent),
+	(KHTMLPart::submitForm):
+	* src/kwq/KWQLineEdit.mm: (QLineEdit::text):
+	* src/kwq/KWQNSTextField.mm: (-[KWQNSTextField initWithFrame:widget:]),
+	(-[KWQNSTextField action:]), (-[KWQNSTextField controlTextDidEndEditing:]),
+	(-[KWQNSTextField setMaximumLength:]), (-[KWQNSTextField maximumLength]):
+	* src/kwq/KWQObject.mm: (QObject::emitAction), (QObject::performAction):
+	* src/kwq/KWQWidget.mm: (QWidget::setView), (QWidget::endEditing):
+	* src/kwq/kwqdebug.mm: (KWQGetLogLevel):
+	* src/kwq/qt/qlineedit.h:
+	* src/kwq/qt/qobject.h:
+	* src/kwq/qt/qwidget.h:
+
 2002-02-12  Maciej Stachowiak  <mjs at apple.com>
 
 	Make some tweaks to glue together KDE's and CF's concepts of URLs
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index 837c55b..93abb61 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,24 @@
+2002-02-12  Richard Williamson  <rjw at apple.com>
+
+    Made basic forms work.
+
+	* src/kdelibs/khtml/rendering/render_form.cpp:
+	(RenderFormElement::performAction), (RenderLineEdit::RenderLineEdit),
+	(RenderLineEdit::performAction):
+	* src/kdelibs/khtml/rendering/render_form.h:
+	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::khtmlMouseReleaseEvent),
+	(KHTMLPart::submitForm):
+	* src/kwq/KWQLineEdit.mm: (QLineEdit::text):
+	* src/kwq/KWQNSTextField.mm: (-[KWQNSTextField initWithFrame:widget:]),
+	(-[KWQNSTextField action:]), (-[KWQNSTextField controlTextDidEndEditing:]),
+	(-[KWQNSTextField setMaximumLength:]), (-[KWQNSTextField maximumLength]):
+	* src/kwq/KWQObject.mm: (QObject::emitAction), (QObject::performAction):
+	* src/kwq/KWQWidget.mm: (QWidget::setView), (QWidget::endEditing):
+	* src/kwq/kwqdebug.mm: (KWQGetLogLevel):
+	* src/kwq/qt/qlineedit.h:
+	* src/kwq/qt/qobject.h:
+	* src/kwq/qt/qwidget.h:
+
 2002-02-12  Maciej Stachowiak  <mjs at apple.com>
 
 	Make some tweaks to glue together KDE's and CF's concepts of URLs
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 837c55b..93abb61 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,24 @@
+2002-02-12  Richard Williamson  <rjw at apple.com>
+
+    Made basic forms work.
+
+	* src/kdelibs/khtml/rendering/render_form.cpp:
+	(RenderFormElement::performAction), (RenderLineEdit::RenderLineEdit),
+	(RenderLineEdit::performAction):
+	* src/kdelibs/khtml/rendering/render_form.h:
+	* src/kwq/KWQKHTMLPart.mm: (KHTMLPart::khtmlMouseReleaseEvent),
+	(KHTMLPart::submitForm):
+	* src/kwq/KWQLineEdit.mm: (QLineEdit::text):
+	* src/kwq/KWQNSTextField.mm: (-[KWQNSTextField initWithFrame:widget:]),
+	(-[KWQNSTextField action:]), (-[KWQNSTextField controlTextDidEndEditing:]),
+	(-[KWQNSTextField setMaximumLength:]), (-[KWQNSTextField maximumLength]):
+	* src/kwq/KWQObject.mm: (QObject::emitAction), (QObject::performAction):
+	* src/kwq/KWQWidget.mm: (QWidget::setView), (QWidget::endEditing):
+	* src/kwq/kwqdebug.mm: (KWQGetLogLevel):
+	* src/kwq/qt/qlineedit.h:
+	* src/kwq/qt/qobject.h:
+	* src/kwq/qt/qwidget.h:
+
 2002-02-12  Maciej Stachowiak  <mjs at apple.com>
 
 	Make some tweaks to glue together KDE's and CF's concepts of URLs
diff --git a/WebCore/khtml/rendering/render_form.cpp b/WebCore/khtml/rendering/render_form.cpp
index 5db6ed1..f62fe9d 100644
--- a/WebCore/khtml/rendering/render_form.cpp
+++ b/WebCore/khtml/rendering/render_form.cpp
@@ -260,7 +260,11 @@ bool RenderFormElement::eventFilter(QObject* /*o*/, QEvent* e)
 
 void RenderFormElement::performAction(QObject::Actions action)
 {
-    fprintf (stdout, "RenderFormElement::performAction():  %d\n", action);
+    //fprintf (stdout, "RenderFormElement::performAction():  %d\n", action);
+    
+    if (m_widget)
+        m_widget->endEditing();
+        
     if (action == QObject::ACTION_BUTTON_CLICKED)
         slotClicked();
 }
@@ -531,8 +535,11 @@ RenderLineEdit::RenderLineEdit(QScrollView *view, HTMLInputElementImpl *element)
 {
     LineEditWidget *edit = new LineEditWidget(view->viewport());
     edit->installEventFilter(this);
+
+#ifdef _KWQ_    
     connect(edit,"SIGNAL(returnPressed())", this, "SLOT(slotReturnPressed())");
     connect(edit,"SIGNAL(textChanged(const QString &))", this, "SLOT(slotTextChanged(const QString &))");
+#endif
 
     if(element->inputType() == HTMLInputElementImpl::PASSWORD)
         edit->setEchoMode( QLineEdit::Password );
@@ -546,9 +553,14 @@ RenderLineEdit::RenderLineEdit(QScrollView *view, HTMLInputElementImpl *element)
         }
     }
 
+#ifdef _KWQ_
     setQWidget(edit);
+
+    edit->setTarget (this);
+#endif
 }
 
+
 void RenderLineEdit::slotReturnPressed()
 {
     // don't submit the form when return was pressed in a completion-popup
@@ -618,6 +630,19 @@ void RenderLineEdit::layout()
     RenderFormElement::layout();
 }
 
+#ifdef _KWQ_
+void RenderLineEdit::performAction(QObject::Actions action)
+{
+    KLineEdit *edit = static_cast<KLineEdit*>(m_widget);
+
+    //fprintf (stdout, "RenderLineEdit::performAction():  %d text value = %s\n", action, edit->text().latin1());
+    if (action == QObject::ACTION_TEXT_FIELD_END_EDITING)
+        slotTextChanged(edit->text());
+    else if (action == QObject::ACTION_TEXT_FIELD)
+        slotReturnPressed();
+}
+#endif
+
 void RenderLineEdit::slotTextChanged(const QString &string)
 {
     // don't use setValue here!
diff --git a/WebCore/khtml/rendering/render_form.h b/WebCore/khtml/rendering/render_form.h
index 45aef16..669932f 100644
--- a/WebCore/khtml/rendering/render_form.h
+++ b/WebCore/khtml/rendering/render_form.h
@@ -84,7 +84,9 @@ public:
 
     virtual bool eventFilter(QObject*, QEvent*);
 
+#ifdef _KWQ_
     void performAction(QObject::Actions action);
+#endif
 
 public slots:
     virtual void slotClicked();
@@ -220,6 +222,10 @@ public:
     virtual const char *renderName() const { return "RenderLineEdit"; }
     void select();
 
+#ifdef _KWQ_
+    void performAction(QObject::Actions action);
+#endif
+
 public slots:
     void slotReturnPressed();
     void slotTextChanged(const QString &string);
diff --git a/WebCore/kwq/KWQKHTMLPart.mm b/WebCore/kwq/KWQKHTMLPart.mm
index 8f6ca21..9c06b95 100644
--- a/WebCore/kwq/KWQKHTMLPart.mm
+++ b/WebCore/kwq/KWQKHTMLPart.mm
@@ -79,7 +79,7 @@
 - (IFWebFrame *)frame;
 - (id <IFWebController>)controller;
 - (void)startLoading: (BOOL)forceRefresh;
-- (void)_startLoading: (BOOL)forceRefresh initiatedByMouseEvent: (BOOL)byMouseEvent;
+- (void)_startLoading: (BOOL)forceRefresh initiatedByUserEvent: (BOOL)byUserEvent;
 - frameNamed: (NSString *)f;
 - (void)_setParent: (IFWebDataSource *)p;
 - (IFWebDataSource *)parent;
@@ -1314,7 +1314,7 @@ void KHTMLPart::khtmlMouseReleaseEvent( khtml::MouseReleaseEvent *event )
         controller = [dataSource controller];
         
         if ([controller _changeLocationTo: url forFrame: frame parent: [[frame dataSource] parent]]){
-            [[frame dataSource] _startLoading: YES initiatedByMouseEvent: YES];
+            [[frame dataSource] _startLoading: YES initiatedByUserEvent: YES];
         }
 
 /*
@@ -1544,10 +1544,104 @@ void KHTMLPart::emitUnloadEvent()
 
 
 void KHTMLPart::submitForm( const char *action, const QString &url, const QByteArray &formData,
-                        const QString &target, const QString& contentType,
+                        const QString &_target, const QString& contentType,
                         const QString& boundary )
 {
-    _logNeverImplemented();
+  QString target = _target;
+  
+  //if ( target.isEmpty() )
+  //  target = d->m_baseTarget;
+
+  KURL u = completeURL( url, target );
+
+  if ( !u.isValid() )
+  {
+    // ### ERROR HANDLING!
+    return;
+  }
+
+  QString urlstring = u.url();
+
+  if ( urlstring.find( QString::fromLatin1( "javascript:" ), 0, false ) == 0 ) {
+      urlstring = KURL::decode_string(urlstring);
+      executeScript( urlstring.right( urlstring.length() - 11) );
+      return;
+  }
+
+#ifdef NEED_THIS
+  if (!checkLinkSecurity(u,
+			 i18n( "<qt>The form will be submitted to <BR><B>%1</B><BR>on your local filesystem.<BR>Do you want to submit the form?" ),
+			 i18n( "Submit" )))
+    return;
+#endif
+
+#ifdef NEED_THIS
+  KParts::URLArgs args;
+
+  if (!d->m_referrer.isEmpty())
+     args.metaData()["referrer"] = d->m_referrer;
+
+  args.metaData().insert("main_frame_request",
+                         parentPart() == 0 ? "TRUE":"FALSE");
+  args.metaData().insert("ssl_was_in_use", d->m_ssl_in_use ? "TRUE":"FALSE");
+  args.metaData().insert("ssl_activate_warnings", "TRUE");
+#endif
+
+  if ( strcmp( action, "get" ) == 0 )
+  {
+    u.setQuery( QString( formData.data(), formData.size() ) );
+
+#ifdef NEED_THIS
+    args.frameName = target;
+    args.setDoPost( false );
+#endif
+  }
+  else
+  {
+#ifdef NEED_THIS
+    args.postData = formData;
+    args.frameName = target;
+    args.setDoPost( true );
+
+    // construct some user headers if necessary
+    if (contentType.isNull() || contentType == "application/x-www-form-urlencoded")
+      args.setContentType( "Content-Type: application/x-www-form-urlencoded" );
+    else // contentType must be "multipart/form-data"
+      args.setContentType( "Content-Type: " + contentType + "; boundary=" + boundary );
+#endif
+  }
+
+#ifdef NEED_THIS
+  if ( d->m_bParsing || d->m_runningScripts > 0 ) {
+    if( d->m_submitForm ) {
+        return;
+    }
+    d->m_submitForm = new KHTMLPartPrivate::SubmitForm;
+    d->m_submitForm->submitAction = action;
+    d->m_submitForm->submitUrl = url;
+    d->m_submitForm->submitFormData = formData;
+    d->m_submitForm->target = _target;
+    d->m_submitForm->submitContentType = contentType;
+    d->m_submitForm->submitBoundary = boundary;
+    connect(this, SIGNAL(completed()), this, SLOT(submitFormAgain()));
+  }
+  else
+    emit d->m_extension->openURLRequest( u, args );
+#endif
+
+    NSString *urlString = [NSString stringWithCString:u.url().latin1()];
+    NSURL *qurl = [NSURL URLWithString: urlString];
+    IFWebFrame *frame;
+    id <IFWebController>controller;
+    
+    dataSource = getDataSource();
+    frame = [dataSource frame];
+    controller = [dataSource controller];
+    
+    if ([controller _changeLocationTo: qurl forFrame: frame parent: [[frame dataSource] parent]]){
+        [[frame dataSource] _startLoading: YES initiatedByUserEvent: YES];
+    }
+
 }
 
 void KHTMLPart::urlSelected( const QString &url, int button, int state, const QString &_target )
diff --git a/WebCore/kwq/KWQKHTMLPartImpl.mm b/WebCore/kwq/KWQKHTMLPartImpl.mm
index 8f6ca21..9c06b95 100644
--- a/WebCore/kwq/KWQKHTMLPartImpl.mm
+++ b/WebCore/kwq/KWQKHTMLPartImpl.mm
@@ -79,7 +79,7 @@
 - (IFWebFrame *)frame;
 - (id <IFWebController>)controller;
 - (void)startLoading: (BOOL)forceRefresh;
-- (void)_startLoading: (BOOL)forceRefresh initiatedByMouseEvent: (BOOL)byMouseEvent;
+- (void)_startLoading: (BOOL)forceRefresh initiatedByUserEvent: (BOOL)byUserEvent;
 - frameNamed: (NSString *)f;
 - (void)_setParent: (IFWebDataSource *)p;
 - (IFWebDataSource *)parent;
@@ -1314,7 +1314,7 @@ void KHTMLPart::khtmlMouseReleaseEvent( khtml::MouseReleaseEvent *event )
         controller = [dataSource controller];
         
         if ([controller _changeLocationTo: url forFrame: frame parent: [[frame dataSource] parent]]){
-            [[frame dataSource] _startLoading: YES initiatedByMouseEvent: YES];
+            [[frame dataSource] _startLoading: YES initiatedByUserEvent: YES];
         }
 
 /*
@@ -1544,10 +1544,104 @@ void KHTMLPart::emitUnloadEvent()
 
 
 void KHTMLPart::submitForm( const char *action, const QString &url, const QByteArray &formData,
-                        const QString &target, const QString& contentType,
+                        const QString &_target, const QString& contentType,
                         const QString& boundary )
 {
-    _logNeverImplemented();
+  QString target = _target;
+  
+  //if ( target.isEmpty() )
+  //  target = d->m_baseTarget;
+
+  KURL u = completeURL( url, target );
+
+  if ( !u.isValid() )
+  {
+    // ### ERROR HANDLING!
+    return;
+  }
+
+  QString urlstring = u.url();
+
+  if ( urlstring.find( QString::fromLatin1( "javascript:" ), 0, false ) == 0 ) {
+      urlstring = KURL::decode_string(urlstring);
+      executeScript( urlstring.right( urlstring.length() - 11) );
+      return;
+  }
+
+#ifdef NEED_THIS
+  if (!checkLinkSecurity(u,
+			 i18n( "<qt>The form will be submitted to <BR><B>%1</B><BR>on your local filesystem.<BR>Do you want to submit the form?" ),
+			 i18n( "Submit" )))
+    return;
+#endif
+
+#ifdef NEED_THIS
+  KParts::URLArgs args;
+
+  if (!d->m_referrer.isEmpty())
+     args.metaData()["referrer"] = d->m_referrer;
+
+  args.metaData().insert("main_frame_request",
+                         parentPart() == 0 ? "TRUE":"FALSE");
+  args.metaData().insert("ssl_was_in_use", d->m_ssl_in_use ? "TRUE":"FALSE");
+  args.metaData().insert("ssl_activate_warnings", "TRUE");
+#endif
+
+  if ( strcmp( action, "get" ) == 0 )
+  {
+    u.setQuery( QString( formData.data(), formData.size() ) );
+
+#ifdef NEED_THIS
+    args.frameName = target;
+    args.setDoPost( false );
+#endif
+  }
+  else
+  {
+#ifdef NEED_THIS
+    args.postData = formData;
+    args.frameName = target;
+    args.setDoPost( true );
+
+    // construct some user headers if necessary
+    if (contentType.isNull() || contentType == "application/x-www-form-urlencoded")
+      args.setContentType( "Content-Type: application/x-www-form-urlencoded" );
+    else // contentType must be "multipart/form-data"
+      args.setContentType( "Content-Type: " + contentType + "; boundary=" + boundary );
+#endif
+  }
+
+#ifdef NEED_THIS
+  if ( d->m_bParsing || d->m_runningScripts > 0 ) {
+    if( d->m_submitForm ) {
+        return;
+    }
+    d->m_submitForm = new KHTMLPartPrivate::SubmitForm;
+    d->m_submitForm->submitAction = action;
+    d->m_submitForm->submitUrl = url;
+    d->m_submitForm->submitFormData = formData;
+    d->m_submitForm->target = _target;
+    d->m_submitForm->submitContentType = contentType;
+    d->m_submitForm->submitBoundary = boundary;
+    connect(this, SIGNAL(completed()), this, SLOT(submitFormAgain()));
+  }
+  else
+    emit d->m_extension->openURLRequest( u, args );
+#endif
+
+    NSString *urlString = [NSString stringWithCString:u.url().latin1()];
+    NSURL *qurl = [NSURL URLWithString: urlString];
+    IFWebFrame *frame;
+    id <IFWebController>controller;
+    
+    dataSource = getDataSource();
+    frame = [dataSource frame];
+    controller = [dataSource controller];
+    
+    if ([controller _changeLocationTo: qurl forFrame: frame parent: [[frame dataSource] parent]]){
+        [[frame dataSource] _startLoading: YES initiatedByUserEvent: YES];
+    }
+
 }
 
 void KHTMLPart::urlSelected( const QString &url, int button, int state, const QString &_target )
diff --git a/WebCore/kwq/KWQLineEdit.h b/WebCore/kwq/KWQLineEdit.h
index 32dcf75..1a0a05a 100644
--- a/WebCore/kwq/KWQLineEdit.h
+++ b/WebCore/kwq/KWQLineEdit.h
@@ -58,6 +58,7 @@ public:
     virtual void setEchoMode(EchoMode);
     virtual void setCursorPosition(int);
     virtual void setText(const QString &);
+    virtual QString text();
     virtual void setMaxLength(int);
 
     bool isReadOnly() const;
diff --git a/WebCore/kwq/KWQLineEdit.mm b/WebCore/kwq/KWQLineEdit.mm
index ed5b219..5338dc7 100644
--- a/WebCore/kwq/KWQLineEdit.mm
+++ b/WebCore/kwq/KWQLineEdit.mm
@@ -68,6 +68,14 @@ void QLineEdit::setText(const QString &s)
 }
 
 
+QString QLineEdit::text()
+{
+    KWQNSTextField *textView = (KWQNSTextField *)getView();
+    
+    return NSSTRING_TO_QSTRING ([textView stringValue]);
+}
+
+
 void QLineEdit::setMaxLength(int len)
 {
     KWQNSTextField *field = (KWQNSTextField *)getView();
diff --git a/WebCore/kwq/KWQNSTextField.mm b/WebCore/kwq/KWQNSTextField.mm
index 0d736de..63b56aa 100644
--- a/WebCore/kwq/KWQNSTextField.mm
+++ b/WebCore/kwq/KWQNSTextField.mm
@@ -35,9 +35,25 @@
     formatter = [[KWQNSTextFieldFormatter alloc] init];
     [self setFormatter: formatter];
     widget = w;
+
+    [self setTarget: self];
+    [self setAction: @selector(action:)];
+
+    [self setDelegate: self];
+
     return self;
 }
 
+- (void)action: sender
+{
+    widget->emitAction(QObject::ACTION_TEXT_FIELD);
+}
+
+- (void)controlTextDidEndEditing:(NSNotification *)aNotification
+{
+    widget->emitAction(QObject::ACTION_TEXT_FIELD_END_EDITING);
+}
+
 - (void)dealloc
 {
     [formatter release];
@@ -102,9 +118,14 @@
 
 - (void)setMaximumLength: (int)len
 {
-    [self setStringValue: @""];
-    if (secureField != nil)
-        [secureField setStringValue: @""];
+    NSString *oldValue, *truncatedValue;
+    
+    oldValue = [self stringValue];
+    if ((int)[oldValue length] > len){
+        truncatedValue = [oldValue substringToIndex: len];
+        [self setStringValue: truncatedValue];
+        [secureField setStringValue: truncatedValue];
+    }
     [formatter setMaximumLength: len];
 }
 
@@ -115,7 +136,6 @@
 }
 
 
-
 @end
 
 
diff --git a/WebCore/kwq/KWQObject.h b/WebCore/kwq/KWQObject.h
index 4d4c1d6..3f9e051 100644
--- a/WebCore/kwq/KWQObject.h
+++ b/WebCore/kwq/KWQObject.h
@@ -71,9 +71,14 @@ class QVariant;
 
 class QObject : public Qt {
 public:
+
+#ifdef _KWQ_
     enum Actions {
-        ACTION_BUTTON_CLICKED = 1
+        ACTION_BUTTON_CLICKED = 1,
+        ACTION_TEXT_FIELD = 2,  // corresponds to [NSTextField action]
+        ACTION_TEXT_FIELD_END_EDITING = 3 // corresponds to NSTextField's delegate textDidEndEditing:
     };
+#endif
 
     // typedefs ----------------------------------------------------------------
     // enums -------------------------------------------------------------------
diff --git a/WebCore/kwq/KWQObject.mm b/WebCore/kwq/KWQObject.mm
index d056381..4dbe812 100644
--- a/WebCore/kwq/KWQObject.mm
+++ b/WebCore/kwq/KWQObject.mm
@@ -50,12 +50,14 @@ bool QObject::connect(const QObject *sender, const char *signal, const char *slo
 
 void QObject::emitAction(QObject::Actions action)
 {
-    target->performAction (action);
+    if (target != nil)
+        target->performAction (action);
 }
 
 
 void QObject::performAction(QObject::Actions action)
 {
+    KWQDEBUG1 ("action = %d\n", action);
 }
 
 
diff --git a/WebCore/kwq/KWQTextField.mm b/WebCore/kwq/KWQTextField.mm
index 0d736de..63b56aa 100644
--- a/WebCore/kwq/KWQTextField.mm
+++ b/WebCore/kwq/KWQTextField.mm
@@ -35,9 +35,25 @@
     formatter = [[KWQNSTextFieldFormatter alloc] init];
     [self setFormatter: formatter];
     widget = w;
+
+    [self setTarget: self];
+    [self setAction: @selector(action:)];
+
+    [self setDelegate: self];
+
     return self;
 }
 
+- (void)action: sender
+{
+    widget->emitAction(QObject::ACTION_TEXT_FIELD);
+}
+
+- (void)controlTextDidEndEditing:(NSNotification *)aNotification
+{
+    widget->emitAction(QObject::ACTION_TEXT_FIELD_END_EDITING);
+}
+
 - (void)dealloc
 {
     [formatter release];
@@ -102,9 +118,14 @@
 
 - (void)setMaximumLength: (int)len
 {
-    [self setStringValue: @""];
-    if (secureField != nil)
-        [secureField setStringValue: @""];
+    NSString *oldValue, *truncatedValue;
+    
+    oldValue = [self stringValue];
+    if ((int)[oldValue length] > len){
+        truncatedValue = [oldValue substringToIndex: len];
+        [self setStringValue: truncatedValue];
+        [secureField setStringValue: truncatedValue];
+    }
     [formatter setMaximumLength: len];
 }
 
@@ -115,7 +136,6 @@
 }
 
 
-
 @end
 
 
diff --git a/WebCore/kwq/KWQWidget.h b/WebCore/kwq/KWQWidget.h
index 0b883fe..d589859 100644
--- a/WebCore/kwq/KWQWidget.h
+++ b/WebCore/kwq/KWQWidget.h
@@ -158,9 +158,11 @@ public:
 #if (defined(__APPLE__) && defined(__OBJC__) && defined(__cplusplus))
     NSView 	*getView() const;
     void 	setView(NSView *aView);
+    void 	endEditing();
 #else
     void 	*getView() const;
     void 	setView(void *aView);
+    void 	endEditing();
 #endif
 
 #endif _KWQ_
diff --git a/WebCore/kwq/KWQWidget.mm b/WebCore/kwq/KWQWidget.mm
index 9e9bc21..92ac452 100644
--- a/WebCore/kwq/KWQWidget.mm
+++ b/WebCore/kwq/KWQWidget.mm
@@ -487,7 +487,6 @@ void QWidget::paint (void *)
     _logNotYetImplemented();
 }
 
-#if (defined(__APPLE__) && defined(__OBJC__) && defined(__cplusplus))
 NSView *QWidget::getView() const
 {
     return data->view;
@@ -502,21 +501,11 @@ void QWidget::setView(NSView *view)
         
     NSRect frame = [data->view frame];
 }
-#else
-void *QWidget::getView() const
-{
-    return data->view;
-}
 
-void QWidget::setView(void *view)
+void QWidget::endEditing()
 {
-    if (data->view)
-        [data->view release];
-    data->view = [view retain];
-        
-    NSRect frame = [data->view frame];
+    [[getView() window] endEditingFor: nil];
 }
-#endif
 
 #endif _KWQ_
 
diff --git a/WebCore/kwq/kwqdebug.mm b/WebCore/kwq/kwqdebug.mm
index 5434462..70691c2 100644
--- a/WebCore/kwq/kwqdebug.mm
+++ b/WebCore/kwq/kwqdebug.mm
@@ -31,17 +31,17 @@ void KWQSetLogLevel(int mask) {
     KWQ_LOG_LEVEL = mask;    
 }
 
-bool checkedDefault = 0;
+bool kwq_checkedDefault = 0;
 
 unsigned int KWQGetLogLevel(){
-    if (!checkedDefault){
+    if (!kwq_checkedDefault){
         NSString *logLevelString = [[NSUserDefaults standardUserDefaults] objectForKey:@"WebKitLogLevel"];
         if (logLevelString != nil){
             if (![[NSScanner scannerWithString: logLevelString] scanHexInt: &KWQ_LOG_LEVEL]){
                 NSLog (@"Unable to scan hex value for WebKitLogLevel, default to value of %d", KWQ_LOG_LEVEL);
             }
         }
-        checkedDefault = 1; 
+        kwq_checkedDefault = 1; 
     }
     return KWQ_LOG_LEVEL;
 }
diff --git a/WebCore/kwq/qt/qlineedit.h b/WebCore/kwq/qt/qlineedit.h
index 32dcf75..1a0a05a 100644
--- a/WebCore/kwq/qt/qlineedit.h
+++ b/WebCore/kwq/qt/qlineedit.h
@@ -58,6 +58,7 @@ public:
     virtual void setEchoMode(EchoMode);
     virtual void setCursorPosition(int);
     virtual void setText(const QString &);
+    virtual QString text();
     virtual void setMaxLength(int);
 
     bool isReadOnly() const;
diff --git a/WebCore/kwq/qt/qobject.h b/WebCore/kwq/qt/qobject.h
index 4d4c1d6..3f9e051 100644
--- a/WebCore/kwq/qt/qobject.h
+++ b/WebCore/kwq/qt/qobject.h
@@ -71,9 +71,14 @@ class QVariant;
 
 class QObject : public Qt {
 public:
+
+#ifdef _KWQ_
     enum Actions {
-        ACTION_BUTTON_CLICKED = 1
+        ACTION_BUTTON_CLICKED = 1,
+        ACTION_TEXT_FIELD = 2,  // corresponds to [NSTextField action]
+        ACTION_TEXT_FIELD_END_EDITING = 3 // corresponds to NSTextField's delegate textDidEndEditing:
     };
+#endif
 
     // typedefs ----------------------------------------------------------------
     // enums -------------------------------------------------------------------
diff --git a/WebCore/kwq/qt/qwidget.h b/WebCore/kwq/qt/qwidget.h
index 0b883fe..d589859 100644
--- a/WebCore/kwq/qt/qwidget.h
+++ b/WebCore/kwq/qt/qwidget.h
@@ -158,9 +158,11 @@ public:
 #if (defined(__APPLE__) && defined(__OBJC__) && defined(__cplusplus))
     NSView 	*getView() const;
     void 	setView(NSView *aView);
+    void 	endEditing();
 #else
     void 	*getView() const;
     void 	setView(void *aView);
+    void 	endEditing();
 #endif
 
 #endif _KWQ_
diff --git a/WebCore/src/kdelibs/khtml/rendering/render_form.cpp b/WebCore/src/kdelibs/khtml/rendering/render_form.cpp
index 5db6ed1..f62fe9d 100644
--- a/WebCore/src/kdelibs/khtml/rendering/render_form.cpp
+++ b/WebCore/src/kdelibs/khtml/rendering/render_form.cpp
@@ -260,7 +260,11 @@ bool RenderFormElement::eventFilter(QObject* /*o*/, QEvent* e)
 
 void RenderFormElement::performAction(QObject::Actions action)
 {
-    fprintf (stdout, "RenderFormElement::performAction():  %d\n", action);
+    //fprintf (stdout, "RenderFormElement::performAction():  %d\n", action);
+    
+    if (m_widget)
+        m_widget->endEditing();
+        
     if (action == QObject::ACTION_BUTTON_CLICKED)
         slotClicked();
 }
@@ -531,8 +535,11 @@ RenderLineEdit::RenderLineEdit(QScrollView *view, HTMLInputElementImpl *element)
 {
     LineEditWidget *edit = new LineEditWidget(view->viewport());
     edit->installEventFilter(this);
+
+#ifdef _KWQ_    
     connect(edit,"SIGNAL(returnPressed())", this, "SLOT(slotReturnPressed())");
     connect(edit,"SIGNAL(textChanged(const QString &))", this, "SLOT(slotTextChanged(const QString &))");
+#endif
 
     if(element->inputType() == HTMLInputElementImpl::PASSWORD)
         edit->setEchoMode( QLineEdit::Password );
@@ -546,9 +553,14 @@ RenderLineEdit::RenderLineEdit(QScrollView *view, HTMLInputElementImpl *element)
         }
     }
 
+#ifdef _KWQ_
     setQWidget(edit);
+
+    edit->setTarget (this);
+#endif
 }
 
+
 void RenderLineEdit::slotReturnPressed()
 {
     // don't submit the form when return was pressed in a completion-popup
@@ -618,6 +630,19 @@ void RenderLineEdit::layout()
     RenderFormElement::layout();
 }
 
+#ifdef _KWQ_
+void RenderLineEdit::performAction(QObject::Actions action)
+{
+    KLineEdit *edit = static_cast<KLineEdit*>(m_widget);
+
+    //fprintf (stdout, "RenderLineEdit::performAction():  %d text value = %s\n", action, edit->text().latin1());
+    if (action == QObject::ACTION_TEXT_FIELD_END_EDITING)
+        slotTextChanged(edit->text());
+    else if (action == QObject::ACTION_TEXT_FIELD)
+        slotReturnPressed();
+}
+#endif
+
 void RenderLineEdit::slotTextChanged(const QString &string)
 {
     // don't use setValue here!
diff --git a/WebCore/src/kdelibs/khtml/rendering/render_form.h b/WebCore/src/kdelibs/khtml/rendering/render_form.h
index 45aef16..669932f 100644
--- a/WebCore/src/kdelibs/khtml/rendering/render_form.h
+++ b/WebCore/src/kdelibs/khtml/rendering/render_form.h
@@ -84,7 +84,9 @@ public:
 
     virtual bool eventFilter(QObject*, QEvent*);
 
+#ifdef _KWQ_
     void performAction(QObject::Actions action);
+#endif
 
 public slots:
     virtual void slotClicked();
@@ -220,6 +222,10 @@ public:
     virtual const char *renderName() const { return "RenderLineEdit"; }
     void select();
 
+#ifdef _KWQ_
+    void performAction(QObject::Actions action);
+#endif
+
 public slots:
     void slotReturnPressed();
     void slotTextChanged(const QString &string);
diff --git a/WebCore/src/kwq/KWQKHTMLPart.mm b/WebCore/src/kwq/KWQKHTMLPart.mm
index 8f6ca21..9c06b95 100644
--- a/WebCore/src/kwq/KWQKHTMLPart.mm
+++ b/WebCore/src/kwq/KWQKHTMLPart.mm
@@ -79,7 +79,7 @@
 - (IFWebFrame *)frame;
 - (id <IFWebController>)controller;
 - (void)startLoading: (BOOL)forceRefresh;
-- (void)_startLoading: (BOOL)forceRefresh initiatedByMouseEvent: (BOOL)byMouseEvent;
+- (void)_startLoading: (BOOL)forceRefresh initiatedByUserEvent: (BOOL)byUserEvent;
 - frameNamed: (NSString *)f;
 - (void)_setParent: (IFWebDataSource *)p;
 - (IFWebDataSource *)parent;
@@ -1314,7 +1314,7 @@ void KHTMLPart::khtmlMouseReleaseEvent( khtml::MouseReleaseEvent *event )
         controller = [dataSource controller];
         
         if ([controller _changeLocationTo: url forFrame: frame parent: [[frame dataSource] parent]]){
-            [[frame dataSource] _startLoading: YES initiatedByMouseEvent: YES];
+            [[frame dataSource] _startLoading: YES initiatedByUserEvent: YES];
         }
 
 /*
@@ -1544,10 +1544,104 @@ void KHTMLPart::emitUnloadEvent()
 
 
 void KHTMLPart::submitForm( const char *action, const QString &url, const QByteArray &formData,
-                        const QString &target, const QString& contentType,
+                        const QString &_target, const QString& contentType,
                         const QString& boundary )
 {
-    _logNeverImplemented();
+  QString target = _target;
+  
+  //if ( target.isEmpty() )
+  //  target = d->m_baseTarget;
+
+  KURL u = completeURL( url, target );
+
+  if ( !u.isValid() )
+  {
+    // ### ERROR HANDLING!
+    return;
+  }
+
+  QString urlstring = u.url();
+
+  if ( urlstring.find( QString::fromLatin1( "javascript:" ), 0, false ) == 0 ) {
+      urlstring = KURL::decode_string(urlstring);
+      executeScript( urlstring.right( urlstring.length() - 11) );
+      return;
+  }
+
+#ifdef NEED_THIS
+  if (!checkLinkSecurity(u,
+			 i18n( "<qt>The form will be submitted to <BR><B>%1</B><BR>on your local filesystem.<BR>Do you want to submit the form?" ),
+			 i18n( "Submit" )))
+    return;
+#endif
+
+#ifdef NEED_THIS
+  KParts::URLArgs args;
+
+  if (!d->m_referrer.isEmpty())
+     args.metaData()["referrer"] = d->m_referrer;
+
+  args.metaData().insert("main_frame_request",
+                         parentPart() == 0 ? "TRUE":"FALSE");
+  args.metaData().insert("ssl_was_in_use", d->m_ssl_in_use ? "TRUE":"FALSE");
+  args.metaData().insert("ssl_activate_warnings", "TRUE");
+#endif
+
+  if ( strcmp( action, "get" ) == 0 )
+  {
+    u.setQuery( QString( formData.data(), formData.size() ) );
+
+#ifdef NEED_THIS
+    args.frameName = target;
+    args.setDoPost( false );
+#endif
+  }
+  else
+  {
+#ifdef NEED_THIS
+    args.postData = formData;
+    args.frameName = target;
+    args.setDoPost( true );
+
+    // construct some user headers if necessary
+    if (contentType.isNull() || contentType == "application/x-www-form-urlencoded")
+      args.setContentType( "Content-Type: application/x-www-form-urlencoded" );
+    else // contentType must be "multipart/form-data"
+      args.setContentType( "Content-Type: " + contentType + "; boundary=" + boundary );
+#endif
+  }
+
+#ifdef NEED_THIS
+  if ( d->m_bParsing || d->m_runningScripts > 0 ) {
+    if( d->m_submitForm ) {
+        return;
+    }
+    d->m_submitForm = new KHTMLPartPrivate::SubmitForm;
+    d->m_submitForm->submitAction = action;
+    d->m_submitForm->submitUrl = url;
+    d->m_submitForm->submitFormData = formData;
+    d->m_submitForm->target = _target;
+    d->m_submitForm->submitContentType = contentType;
+    d->m_submitForm->submitBoundary = boundary;
+    connect(this, SIGNAL(completed()), this, SLOT(submitFormAgain()));
+  }
+  else
+    emit d->m_extension->openURLRequest( u, args );
+#endif
+
+    NSString *urlString = [NSString stringWithCString:u.url().latin1()];
+    NSURL *qurl = [NSURL URLWithString: urlString];
+    IFWebFrame *frame;
+    id <IFWebController>controller;
+    
+    dataSource = getDataSource();
+    frame = [dataSource frame];
+    controller = [dataSource controller];
+    
+    if ([controller _changeLocationTo: qurl forFrame: frame parent: [[frame dataSource] parent]]){
+        [[frame dataSource] _startLoading: YES initiatedByUserEvent: YES];
+    }
+
 }
 
 void KHTMLPart::urlSelected( const QString &url, int button, int state, const QString &_target )
diff --git a/WebCore/src/kwq/KWQLineEdit.mm b/WebCore/src/kwq/KWQLineEdit.mm
index ed5b219..5338dc7 100644
--- a/WebCore/src/kwq/KWQLineEdit.mm
+++ b/WebCore/src/kwq/KWQLineEdit.mm
@@ -68,6 +68,14 @@ void QLineEdit::setText(const QString &s)
 }
 
 
+QString QLineEdit::text()
+{
+    KWQNSTextField *textView = (KWQNSTextField *)getView();
+    
+    return NSSTRING_TO_QSTRING ([textView stringValue]);
+}
+
+
 void QLineEdit::setMaxLength(int len)
 {
     KWQNSTextField *field = (KWQNSTextField *)getView();
diff --git a/WebCore/src/kwq/KWQNSTextField.mm b/WebCore/src/kwq/KWQNSTextField.mm
index 0d736de..63b56aa 100644
--- a/WebCore/src/kwq/KWQNSTextField.mm
+++ b/WebCore/src/kwq/KWQNSTextField.mm
@@ -35,9 +35,25 @@
     formatter = [[KWQNSTextFieldFormatter alloc] init];
     [self setFormatter: formatter];
     widget = w;
+
+    [self setTarget: self];
+    [self setAction: @selector(action:)];
+
+    [self setDelegate: self];
+
     return self;
 }
 
+- (void)action: sender
+{
+    widget->emitAction(QObject::ACTION_TEXT_FIELD);
+}
+
+- (void)controlTextDidEndEditing:(NSNotification *)aNotification
+{
+    widget->emitAction(QObject::ACTION_TEXT_FIELD_END_EDITING);
+}
+
 - (void)dealloc
 {
     [formatter release];
@@ -102,9 +118,14 @@
 
 - (void)setMaximumLength: (int)len
 {
-    [self setStringValue: @""];
-    if (secureField != nil)
-        [secureField setStringValue: @""];
+    NSString *oldValue, *truncatedValue;
+    
+    oldValue = [self stringValue];
+    if ((int)[oldValue length] > len){
+        truncatedValue = [oldValue substringToIndex: len];
+        [self setStringValue: truncatedValue];
+        [secureField setStringValue: truncatedValue];
+    }
     [formatter setMaximumLength: len];
 }
 
@@ -115,7 +136,6 @@
 }
 
 
-
 @end
 
 
diff --git a/WebCore/src/kwq/KWQObject.mm b/WebCore/src/kwq/KWQObject.mm
index d056381..4dbe812 100644
--- a/WebCore/src/kwq/KWQObject.mm
+++ b/WebCore/src/kwq/KWQObject.mm
@@ -50,12 +50,14 @@ bool QObject::connect(const QObject *sender, const char *signal, const char *slo
 
 void QObject::emitAction(QObject::Actions action)
 {
-    target->performAction (action);
+    if (target != nil)
+        target->performAction (action);
 }
 
 
 void QObject::performAction(QObject::Actions action)
 {
+    KWQDEBUG1 ("action = %d\n", action);
 }
 
 
diff --git a/WebCore/src/kwq/KWQWidget.mm b/WebCore/src/kwq/KWQWidget.mm
index 9e9bc21..92ac452 100644
--- a/WebCore/src/kwq/KWQWidget.mm
+++ b/WebCore/src/kwq/KWQWidget.mm
@@ -487,7 +487,6 @@ void QWidget::paint (void *)
     _logNotYetImplemented();
 }
 
-#if (defined(__APPLE__) && defined(__OBJC__) && defined(__cplusplus))
 NSView *QWidget::getView() const
 {
     return data->view;
@@ -502,21 +501,11 @@ void QWidget::setView(NSView *view)
         
     NSRect frame = [data->view frame];
 }
-#else
-void *QWidget::getView() const
-{
-    return data->view;
-}
 
-void QWidget::setView(void *view)
+void QWidget::endEditing()
 {
-    if (data->view)
-        [data->view release];
-    data->view = [view retain];
-        
-    NSRect frame = [data->view frame];
+    [[getView() window] endEditingFor: nil];
 }
-#endif
 
 #endif _KWQ_
 
diff --git a/WebCore/src/kwq/kwqdebug.mm b/WebCore/src/kwq/kwqdebug.mm
index 5434462..70691c2 100644
--- a/WebCore/src/kwq/kwqdebug.mm
+++ b/WebCore/src/kwq/kwqdebug.mm
@@ -31,17 +31,17 @@ void KWQSetLogLevel(int mask) {
     KWQ_LOG_LEVEL = mask;    
 }
 
-bool checkedDefault = 0;
+bool kwq_checkedDefault = 0;
 
 unsigned int KWQGetLogLevel(){
-    if (!checkedDefault){
+    if (!kwq_checkedDefault){
         NSString *logLevelString = [[NSUserDefaults standardUserDefaults] objectForKey:@"WebKitLogLevel"];
         if (logLevelString != nil){
             if (![[NSScanner scannerWithString: logLevelString] scanHexInt: &KWQ_LOG_LEVEL]){
                 NSLog (@"Unable to scan hex value for WebKitLogLevel, default to value of %d", KWQ_LOG_LEVEL);
             }
         }
-        checkedDefault = 1; 
+        kwq_checkedDefault = 1; 
     }
     return KWQ_LOG_LEVEL;
 }
diff --git a/WebCore/src/kwq/qt/qlineedit.h b/WebCore/src/kwq/qt/qlineedit.h
index 32dcf75..1a0a05a 100644
--- a/WebCore/src/kwq/qt/qlineedit.h
+++ b/WebCore/src/kwq/qt/qlineedit.h
@@ -58,6 +58,7 @@ public:
     virtual void setEchoMode(EchoMode);
     virtual void setCursorPosition(int);
     virtual void setText(const QString &);
+    virtual QString text();
     virtual void setMaxLength(int);
 
     bool isReadOnly() const;
diff --git a/WebCore/src/kwq/qt/qobject.h b/WebCore/src/kwq/qt/qobject.h
index 4d4c1d6..3f9e051 100644
--- a/WebCore/src/kwq/qt/qobject.h
+++ b/WebCore/src/kwq/qt/qobject.h
@@ -71,9 +71,14 @@ class QVariant;
 
 class QObject : public Qt {
 public:
+
+#ifdef _KWQ_
     enum Actions {
-        ACTION_BUTTON_CLICKED = 1
+        ACTION_BUTTON_CLICKED = 1,
+        ACTION_TEXT_FIELD = 2,  // corresponds to [NSTextField action]
+        ACTION_TEXT_FIELD_END_EDITING = 3 // corresponds to NSTextField's delegate textDidEndEditing:
     };
+#endif
 
     // typedefs ----------------------------------------------------------------
     // enums -------------------------------------------------------------------
diff --git a/WebCore/src/kwq/qt/qwidget.h b/WebCore/src/kwq/qt/qwidget.h
index 0b883fe..d589859 100644
--- a/WebCore/src/kwq/qt/qwidget.h
+++ b/WebCore/src/kwq/qt/qwidget.h
@@ -158,9 +158,11 @@ public:
 #if (defined(__APPLE__) && defined(__OBJC__) && defined(__cplusplus))
     NSView 	*getView() const;
     void 	setView(NSView *aView);
+    void 	endEditing();
 #else
     void 	*getView() const;
     void 	setView(void *aView);
+    void 	endEditing();
 #endif
 
 #endif _KWQ_

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list