summaryrefslogtreecommitdiffstats
path: root/WebKit/wx
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/wx')
-rw-r--r--WebKit/wx/ChangeLog56
-rw-r--r--WebKit/wx/WebEdit.cpp33
-rw-r--r--WebKit/wx/WebEdit.h3
-rw-r--r--WebKit/wx/WebFrame.cpp10
-rw-r--r--WebKit/wx/WebFrame.h6
-rw-r--r--WebKit/wx/WebKitSupport/EditorClientWx.cpp19
-rw-r--r--WebKit/wx/WebSettings.h2
-rw-r--r--WebKit/wx/WebView.cpp35
-rw-r--r--WebKit/wx/WebView.h51
-rw-r--r--WebKit/wx/bindings/python/webview.i53
10 files changed, 231 insertions, 37 deletions
diff --git a/WebKit/wx/ChangeLog b/WebKit/wx/ChangeLog
index 342edea..757981f 100644
--- a/WebKit/wx/ChangeLog
+++ b/WebKit/wx/ChangeLog
@@ -1,3 +1,59 @@
+2010-08-31 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=44863, disentangle style recalc from layout, so that
+ the former can occur in more places without having to do the latter.
+
+ * WebView.cpp:
+ (wxWebView::OnPaint):
+
+2010-08-28 Kevin Ollivier <kevino@theolliviers.com>
+
+ [wx] Build fix after parseMode -> compatibilityMode rename.
+
+ * WebFrame.cpp:
+ (wxWebFrame::GetCompatibilityMode):
+ * WebFrame.h:
+ * WebView.cpp:
+ (wxWebView::GetCompatibilityMode):
+ * WebView.h:
+
+2010-08-26 Robin Dunn <robin@alldunn.com>
+
+ Reviewed by Kevin Ollivier.
+
+ A few tweaks to the wxWebView editing APIs after addition of DOM bindings.
+ https://bugs.webkit.org/show_bug.cgi?id=44656
+
+ 1. adoptRef fix for WebCore::EditCommand wrapper API.
+ 2. Add the mimetype as an argument to SetPageSource to allow XHTML documents to be loaded.
+ 3. Add notification events for contents / selection changed editing events.
+ 4. Improved wxPython binding typemaps support for DOM APIs.
+
+ * WebEdit.cpp:
+ (WebCoreEditCommandPrivate::WebCoreEditCommandPrivate):
+ (WebCoreEditCommandPrivate::~WebCoreEditCommandPrivate):
+ (WebCoreEditCommandPrivate::command):
+ (wxWebEditCommand::wxWebEditCommand):
+ (wxWebEditCommand::~wxWebEditCommand):
+ (wxWebEditCommand::SetNodeAttribute):
+ (wxWebEditCommand::Apply):
+ * WebEdit.h:
+ * WebFrame.cpp:
+ (wxWebFrame::SetPageSource):
+ * WebFrame.h:
+ * WebKitSupport/EditorClientWx.cpp:
+ (WebCore::EditorClientWx::respondToChangedContents):
+ (WebCore::EditorClientWx::respondToChangedSelection):
+ * WebSettings.h:
+ * WebView.cpp:
+ (wxWebViewContentsChangedEvent::wxWebViewContentsChangedEvent):
+ (wxWebViewSelectionChangedEvent::wxWebViewSelectionChangedEvent):
+ (wxWebView::SetPageSource):
+ * WebView.h:
+ * bindings/python/webview.i:
+
2010-08-16 Kevin Ollivier <kevino@theolliviers.com>
[wx] Build fix, do not build WebCore as a convenience library as this leads to
diff --git a/WebKit/wx/WebEdit.cpp b/WebKit/wx/WebEdit.cpp
index 503e2ed..33b4c86 100644
--- a/WebKit/wx/WebEdit.cpp
+++ b/WebKit/wx/WebEdit.cpp
@@ -34,32 +34,47 @@ public:
}
+class WebCoreEditCommandPrivate {
+public:
+ WebCoreEditCommandPrivate()
+ : m_ptr(0)
+ { }
+
+ WebCoreEditCommandPrivate(WebCore::WebCoreEditCommand* ptr)
+ : m_ptr(adoptRef(ptr))
+ { }
+
+ ~WebCoreEditCommandPrivate() { }
+
+ WebCore::WebCoreEditCommand* command() { return m_ptr.get(); }
+
+ RefPtr<WebCore::WebCoreEditCommand> m_ptr;
+};
+
wxWebEditCommand::wxWebEditCommand(wxWebFrame* webframe)
{
if (webframe) {
WebCore::Frame* frame = webframe->GetFrame();
if (frame && frame->document())
- m_impl = new WebCore::WebCoreEditCommand(frame->document());
- m_impl->ref();
+ m_impl = new WebCoreEditCommandPrivate(new WebCore::WebCoreEditCommand(frame->document()));
}
}
wxWebEditCommand::~wxWebEditCommand()
{
// the impl. is ref-counted, so don't delete it as it may be in an undo/redo stack
- if (m_impl)
- m_impl->deref();
+ delete m_impl;
m_impl = 0;
}
void wxWebEditCommand::SetNodeAttribute(WebDOMElement* element, const wxString& name, const wxString& value)
{
- if (m_impl)
- m_impl->setElementAttribute(element->impl(), WebCore::QualifiedName(WTF::nullAtom, WTF::String(name), WTF::nullAtom), WTF::String(value));
+ if (m_impl && m_impl->command())
+ m_impl->command()->setElementAttribute(element->impl(), WebCore::QualifiedName(WTF::nullAtom, WTF::String(name), WTF::nullAtom), WTF::String(value));
}
void wxWebEditCommand::Apply()
{
- if (m_impl)
- m_impl->apply();
-} \ No newline at end of file
+ if (m_impl && m_impl->command())
+ m_impl->command()->apply();
+}
diff --git a/WebKit/wx/WebEdit.h b/WebKit/wx/WebEdit.h
index 7099088..e4bba91 100644
--- a/WebKit/wx/WebEdit.h
+++ b/WebKit/wx/WebEdit.h
@@ -41,6 +41,7 @@ namespace WebCore {
}
class WebDOMElement;
+class WebCoreEditCommandPrivate;
class wxWebFrame;
class WXDLLIMPEXP_WEBKIT wxWebEditCommand
@@ -56,7 +57,7 @@ public:
void Apply();
private:
- WebCore::WebCoreEditCommand* m_impl;
+ WebCoreEditCommandPrivate* m_impl;
};
#endif
diff --git a/WebKit/wx/WebFrame.cpp b/WebKit/wx/WebFrame.cpp
index f9be56f..fe45eea 100644
--- a/WebKit/wx/WebFrame.cpp
+++ b/WebKit/wx/WebFrame.cpp
@@ -155,7 +155,7 @@ wxString wxWebFrame::GetPageSource()
return wxEmptyString;
}
-void wxWebFrame::SetPageSource(const wxString& source, const wxString& baseUrl)
+void wxWebFrame::SetPageSource(const wxString& source, const wxString& baseUrl, const wxString& mimetype)
{
if (m_impl->frame && m_impl->frame->loader()) {
WebCore::KURL url(WebCore::KURL(), baseUrl);
@@ -164,7 +164,7 @@ void wxWebFrame::SetPageSource(const wxString& source, const wxString& baseUrl)
const char* contents = charBuffer;
WTF::PassRefPtr<WebCore::SharedBuffer> sharedBuffer = WebCore::SharedBuffer::create(contents, strlen(contents));
- WebCore::SubstituteData substituteData(sharedBuffer, WTF::String("text/html"), WTF::String("UTF-8"), WebCore::blankURL(), url);
+ WebCore::SubstituteData substituteData(sharedBuffer, mimetype, WTF::String("UTF-8"), WebCore::blankURL(), url);
m_impl->frame->loader()->stop();
m_impl->frame->loader()->load(WebCore::ResourceRequest(url), substituteData, false);
@@ -476,12 +476,12 @@ bool wxWebFrame::ShouldClose() const
return true;
}
-wxWebKitParseMode wxWebFrame::GetParseMode() const
+wxWebKitCompatibilityMode wxWebFrame::GetCompatibilityMode() const
{
if (m_impl->frame && m_impl->frame->document())
- return (wxWebKitParseMode)m_impl->frame->document()->parseMode();
+ return (wxWebKitCompatibilityMode)m_impl->frame->document()->compatibilityMode();
- return NoDocument;
+ return QuirksMode;
}
void wxWebFrame::GrantUniversalAccess()
diff --git a/WebKit/wx/WebFrame.h b/WebKit/wx/WebFrame.h
index f09c884..3e9355a 100644
--- a/WebKit/wx/WebFrame.h
+++ b/WebKit/wx/WebFrame.h
@@ -93,7 +93,7 @@ private:
};
// based on enums in WebCore/dom/Document.h
-enum wxWebKitParseMode { Compat, AlmostStrict, Strict, NoDocument };
+enum wxWebKitCompatibilityMode { QuirksMode, LimitedQuirksMode, NoQuirksMode };
class WXDLLIMPEXP_WEBKIT wxWebFrame
{
@@ -134,7 +134,7 @@ public:
void Redo();
wxString GetPageSource();
- void SetPageSource(const wxString& source, const wxString& baseUrl = wxEmptyString);
+ void SetPageSource(const wxString& source, const wxString& baseUrl = wxEmptyString, const wxString& mimetype = wxT("text/html"));
wxString GetInnerText();
wxString GetAsMarkup();
@@ -167,7 +167,7 @@ public:
bool ShouldClose() const;
- wxWebKitParseMode GetParseMode() const;
+ wxWebKitCompatibilityMode GetCompatibilityMode() const;
void GrantUniversalAccess();
diff --git a/WebKit/wx/WebKitSupport/EditorClientWx.cpp b/WebKit/wx/WebKitSupport/EditorClientWx.cpp
index 99afec8..59e2fd4 100644
--- a/WebKit/wx/WebKitSupport/EditorClientWx.cpp
+++ b/WebKit/wx/WebKitSupport/EditorClientWx.cpp
@@ -262,7 +262,15 @@ void EditorClientWx::didBeginEditing()
void EditorClientWx::respondToChangedContents()
{
- notImplemented();
+ Frame* frame = m_page->focusController()->focusedOrMainFrame();
+
+ if (frame) {
+ wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient());
+ if (webKitWin) {
+ wxWebViewContentsChangedEvent wkEvent(webKitWin);
+ webKitWin->GetEventHandler()->ProcessEvent(wkEvent);
+ }
+ }
}
void EditorClientWx::didEndEditing()
@@ -483,7 +491,14 @@ void EditorClientWx::textDidChangeInTextArea(Element*)
void EditorClientWx::respondToChangedSelection()
{
- notImplemented();
+ Frame* frame = m_page->focusController()->focusedOrMainFrame();
+ if (frame) {
+ wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient());
+ if (webKitWin) {
+ wxWebViewSelectionChangedEvent wkEvent(webKitWin);
+ webKitWin->GetEventHandler()->ProcessEvent(wkEvent);
+ }
+ }
}
void EditorClientWx::ignoreWordInSpellDocument(const String&)
diff --git a/WebKit/wx/WebSettings.h b/WebKit/wx/WebSettings.h
index 148755a..9ab5502 100644
--- a/WebKit/wx/WebSettings.h
+++ b/WebKit/wx/WebSettings.h
@@ -66,6 +66,8 @@ public:
{}
wxWebSettings() : wxObject() {}
+
+ virtual ~wxWebSettings() { }
/**
Sets the default font size for fixed fonts.
diff --git a/WebKit/wx/WebView.cpp b/WebKit/wx/WebView.cpp
index 3b0bcb0..5980236 100644
--- a/WebKit/wx/WebView.cpp
+++ b/WebKit/wx/WebView.cpp
@@ -226,6 +226,29 @@ wxWebViewWindowObjectClearedEvent::wxWebViewWindowObjectClearedEvent(wxWindow* w
SetId(win->GetId());
}
+IMPLEMENT_DYNAMIC_CLASS(wxWebViewContentsChangedEvent, wxCommandEvent)
+
+DEFINE_EVENT_TYPE(wxEVT_WEBVIEW_CONTENTS_CHANGED)
+
+wxWebViewContentsChangedEvent::wxWebViewContentsChangedEvent(wxWindow* win)
+{
+ SetEventType(wxEVT_WEBVIEW_CONTENTS_CHANGED);
+ SetEventObject(win);
+ if (win)
+ SetId(win->GetId());
+}
+
+IMPLEMENT_DYNAMIC_CLASS(wxWebViewSelectionChangedEvent, wxCommandEvent)
+
+DEFINE_EVENT_TYPE(wxEVT_WEBVIEW_SELECTION_CHANGED)
+
+wxWebViewSelectionChangedEvent::wxWebViewSelectionChangedEvent(wxWindow* win)
+{
+ SetEventType(wxEVT_WEBVIEW_SELECTION_CHANGED);
+ SetEventObject(win);
+ if (win)
+ SetId(win->GetId());
+}
//---------------------------------------------------------
// DOM Element info data type
@@ -438,10 +461,10 @@ wxString wxWebView::GetPageSource()
return wxEmptyString;
}
-void wxWebView::SetPageSource(const wxString& source, const wxString& baseUrl)
+void wxWebView::SetPageSource(const wxString& source, const wxString& baseUrl, const wxString& mimetype)
{
if (m_mainFrame)
- m_mainFrame->SetPageSource(source, baseUrl);
+ m_mainFrame->SetPageSource(source, baseUrl, mimetype);
}
wxString wxWebView::GetInnerText()
@@ -661,7 +684,7 @@ void wxWebView::OnPaint(wxPaintEvent& event)
WebCore::GraphicsContext gc(&dc);
#endif
if (frame->contentRenderer()) {
- frame->view()->layoutIfNeededRecursive();
+ frame->view()->updateLayoutAndStyleIfNeededRecursive();
frame->view()->paint(&gc, paintRect);
}
}
@@ -1121,12 +1144,12 @@ wxWebSettings wxWebView::GetWebSettings()
return wxWebSettings();
}
-wxWebKitParseMode wxWebView::GetParseMode() const
+wxWebKitCompatibilityMode wxWebView::GetCompatibilityMode() const
{
if (m_mainFrame)
- return m_mainFrame->GetParseMode();
+ return m_mainFrame->GetCompatibilityMode();
- return NoDocument;
+ return QuirksMode;
}
void wxWebView::GrantUniversalAccess()
diff --git a/WebKit/wx/WebView.h b/WebKit/wx/WebView.h
index d7f23b6..3ddb45e 100644
--- a/WebKit/wx/WebView.h
+++ b/WebKit/wx/WebView.h
@@ -156,7 +156,7 @@ public:
//bool CanGetPageSource();
wxString GetPageSource();
- void SetPageSource(const wxString& source, const wxString& baseUrl = wxEmptyString);
+ void SetPageSource(const wxString& source, const wxString& baseUrl = wxEmptyString, const wxString& mimetype = wxT("text/html"));
wxString GetInnerText();
wxString GetAsMarkup();
@@ -221,7 +221,7 @@ public:
const wxString& password = wxEmptyString);
wxWebSettings GetWebSettings();
- wxWebKitParseMode GetParseMode() const;
+ wxWebKitCompatibilityMode GetCompatibilityMode() const;
/*
This method allows cross site-scripting (XSS) in the WebView.
@@ -525,6 +525,26 @@ private:
JSObjectRef m_windowObject;
};
+class WXDLLIMPEXP_WEBKIT wxWebViewContentsChangedEvent : public wxCommandEvent {
+#ifndef SWIG
+ DECLARE_DYNAMIC_CLASS(wxWebViewContentsChangedEvent)
+#endif
+
+public:
+ wxWebViewContentsChangedEvent(wxWindow* win = static_cast<wxWindow*>(0));
+ wxEvent *Clone(void) const { return new wxWebViewContentsChangedEvent(*this); }
+};
+
+class WXDLLIMPEXP_WEBKIT wxWebViewSelectionChangedEvent : public wxCommandEvent {
+#ifndef SWIG
+ DECLARE_DYNAMIC_CLASS(wxWebViewSelectionChangedEvent)
+#endif
+
+public:
+ wxWebViewSelectionChangedEvent(wxWindow* win = static_cast<wxWindow*>(0));
+ wxEvent *Clone(void) const { return new wxWebViewSelectionChangedEvent(*this); }
+};
+
typedef void (wxEvtHandler::*wxWebViewLoadEventFunction)(wxWebViewLoadEvent&);
typedef void (wxEvtHandler::*wxWebViewBeforeLoadEventFunction)(wxWebViewBeforeLoadEvent&);
typedef void (wxEvtHandler::*wxWebViewNewWindowEventFunction)(wxWebViewNewWindowEvent&);
@@ -535,6 +555,8 @@ typedef void (wxEvtHandler::*wxWebViewConfirmEventFunction)(wxWebViewConfirmEven
typedef void (wxEvtHandler::*wxWebViewPromptEventFunction)(wxWebViewPromptEvent&);
typedef void (wxEvtHandler::*wxWebViewReceivedTitleEventFunction)(wxWebViewReceivedTitleEvent&);
typedef void (wxEvtHandler::*wxWebViewWindowObjectClearedFunction)(wxWebViewWindowObjectClearedEvent&);
+typedef void (wxEvtHandler::*wxWebViewContentsChangedFunction)(wxWebViewContentsChangedEvent&);
+typedef void (wxEvtHandler::*wxWebViewSelectionChangedFunction)(wxWebViewSelectionChangedEvent&);
#define wxWebViewLoadEventHandler(func) \
(wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewLoadEventFunction, &func)
@@ -556,7 +578,11 @@ typedef void (wxEvtHandler::*wxWebViewWindowObjectClearedFunction)(wxWebViewWind
(wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewReceivedTitleEventFunction, &func)
#define wxWebViewWindowObjectClearedEventHandler(func) \
(wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewWindowObjectClearedFunction, &func)
-
+#define wxWebViewContentsChangedEventHandler(func) \
+ (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewContentsChangedEventFunction, &func)
+#define wxWebViewSelectionChangedEventHandler(func) \
+ (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWebViewSelectionChangedEventFunction, &func)
+
#ifndef SWIG
BEGIN_DECLARE_EVENT_TYPES()
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_BEFORE_LOAD, wxID_ANY)
@@ -569,6 +595,8 @@ BEGIN_DECLARE_EVENT_TYPES()
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_JS_PROMPT, wxID_ANY)
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_RECEIVED_TITLE, wxID_ANY)
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_WINDOW_OBJECT_CLEARED, wxID_ANY)
+ DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_CONTENTS_CHANGED, wxID_ANY)
+ DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_WEBKIT, wxEVT_WEBVIEW_SELECTION_CHANGED, wxID_ANY)
END_DECLARE_EVENT_TYPES()
#endif
@@ -652,4 +680,21 @@ END_DECLARE_EVENT_TYPES()
(wxWebViewWindowObjectClearedFunction) & func, \
static_cast<wxObject*>(NULL)),
+#define EVT_WEBVIEW_CONTENTS_CHANGED(winid, func) \
+ DECLARE_EVENT_TABLE_ENTRY(wxEVT_WEBVIEW_CONTENTS_CHANGED, \
+ winid, \
+ wxID_ANY, \
+ (wxObjectEventFunction) \
+ (wxWebViewContentsChangedEventFunction) & func, \
+ static_cast<wxObject*>(0)),
+
+#define EVT_WEBVIEW_SELECTION_CHANGED(winid, func) \
+ DECLARE_EVENT_TABLE_ENTRY(wxEVT_WEBVIEW_SELECTION_CHANGED, \
+ winid, \
+ wxID_ANY, \
+ (wxObjectEventFunction) \
+ (wxWebViewSelectionChangedEventFunction) & func, \
+ static_cast<wxObject*>(0)),
+
+
#endif // ifndef WXWEBVIEW_H
diff --git a/WebKit/wx/bindings/python/webview.i b/WebKit/wx/bindings/python/webview.i
index 8e3c808..f1621b0 100644
--- a/WebKit/wx/bindings/python/webview.i
+++ b/WebKit/wx/bindings/python/webview.i
@@ -51,7 +51,7 @@
#include "WebDOMRange.h"
#ifndef __WXMSW__
-PyObject* createDOMNodeSubtype(WebDOMNode* ptr, bool setThisOwn)
+PyObject* createDOMNodeSubtype(WebDOMNode* ptr, bool setThisOwn, bool isValueObject)
{
//static wxPyTypeInfoHashMap* typeInfoCache = NULL;
@@ -73,9 +73,13 @@ PyObject* createDOMNodeSubtype(WebDOMNode* ptr, bool setThisOwn)
name = "WebDOMNode*";
}
swigType = SWIG_TypeQuery(name);
- if (swigType)
+ if (swigType) {
+ if (isValueObject) {
+ return SWIG_Python_NewPointerObj(new WebDOMNode(*ptr), swigType, setThisOwn);
+ }
+
return SWIG_Python_NewPointerObj(ptr, swigType, setThisOwn);
-
+ }
// if it still wasn't found, try looking for a mapped name
//if (swigType) {
// and add it to the map if found
@@ -87,8 +91,34 @@ PyObject* createDOMNodeSubtype(WebDOMNode* ptr, bool setThisOwn)
return Py_None;
}
+
+WebDOMString* createWebDOMString(PyObject* source)
+{
+ if (!PyString_Check(source) && !PyUnicode_Check(source)) {
+ PyErr_SetString(PyExc_TypeError, "String or Unicode type required");
+ return new WebDOMString();
+ }
+
+ char* tmpPtr;
+ Py_ssize_t tmpSize;
+
+ if (PyString_Check(source))
+ PyString_AsStringAndSize(source, &tmpPtr, &tmpSize);
+ else {
+ PyObject* str = PyUnicode_AsUTF8String(source);
+ PyString_AsStringAndSize(str, &tmpPtr, &tmpSize);
+ Py_DECREF(str);
+ }
+
+ WebDOMString temp = WebDOMString::fromUTF8(tmpPtr);
+
+ return new WebDOMString(temp);
+}
+
#endif
+
+
%}
//---------------------------------------------------------------------------
@@ -96,10 +126,13 @@ PyObject* createDOMNodeSubtype(WebDOMNode* ptr, bool setThisOwn)
%import windows.i
#ifndef __WXMSW__
-%typemap(out) WebDOMNode* { $result = createDOMNodeSubtype($1, (bool)$owner); }
-%typemap(out) WebDOMElement* { $result = createDOMNodeSubtype($1, (bool)$owner); }
-%typemap(out) WebDOMNode { $result = createDOMNodeSubtype(&$1, (bool)$owner); }
-%typemap(out) WebDOMElement { $result = createDOMNodeSubtype(&$1, (bool)$owner); }
+%typemap(out) WebDOMNode* { $result = createDOMNodeSubtype($1, (bool)$owner, 0); }
+%typemap(out) WebDOMElement* { $result = createDOMNodeSubtype($1, (bool)$owner, 0); }
+%typemap(out) WebDOMNode { $result = createDOMNodeSubtype(&$1, (bool)$owner, 1); }
+%typemap(out) WebDOMElement { $result = createDOMNodeSubtype(&$1, (bool)$owner, 1); }
+%typemap(in) WebDOMString& { $1 = createWebDOMString($input); }
+%typemap(out) WebDOMString { $result = PyUnicode_DecodeUTF8($1.utf8().data(), $1.utf8().length(), NULL); }
+%typemap(out) WebDOMString& { $result = PyUnicode_DecodeUTF8($1.utf8().data(), $1.utf8().length(), NULL); }
#endif
MAKE_CONST_WXSTRING(WebViewNameStr);
@@ -134,6 +167,8 @@ MustHaveApp(wxWebView);
%constant wxEventType wxEVT_WEBVIEW_RIGHT_CLICK;
%constant wxEventType wxEVT_WEBVIEW_CONSOLE_MESSAGE;
%constant wxEventType wxEVT_WEBVIEW_RECEIVED_TITLE;
+%constant wxEventType wxEVT_WEBVIEW_CONTENTS_CHANGED;
+%constant wxEventType wxEVT_WEBVIEW_SELECTION_CHANGED;
%pythoncode {
EVT_WEBVIEW_BEFORE_LOAD = wx.PyEventBinder( wxEVT_WEBVIEW_BEFORE_LOAD, 1 )
@@ -141,5 +176,7 @@ EVT_WEBVIEW_LOAD = wx.PyEventBinder( wxEVT_WEBVIEW_LOAD, 1 )
EVT_WEBVIEW_NEW_WINDOW = wx.PyEventBinder( wxEVT_WEBVIEW_NEW_WINDOW, 1 )
EVT_WEBVIEW_RIGHT_CLICK = wx.PyEventBinder( wxEVT_WEBVIEW_RIGHT_CLICK, 1 )
EVT_WEBVIEW_CONSOLE_MESSAGE = wx.PyEventBinder( wxEVT_WEBVIEW_CONSOLE_MESSAGE, 1 )
-EVT_WEBVIEW_RECEIVED_TITLE = wx.PyEventBinder( wxEVT_WEBVIEW_RECEIVED_TITLE, 1 )
+EVT_WEBVIEW_RECEIVED_TITLE = wx.PyEventBinder( wxEVT_WEBVIEW_RECEIVED_TITLE, 1 )
+EVT_WEBVIEW_CONTENTS_CHANGED = wx.PyEventBinder( wxEVT_WEBVIEW_CONTENTS_CHANGED, 1 )
+EVT_WEBVIEW_SELECTION_CHANGED = wx.PyEventBinder( wxEVT_WEBVIEW_SELECTION_CHANGED, 1 )
}