From 7f4cbee47da326296695ed707b123610107d7d72 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 5 Oct 2018 15:36:34 +0200 Subject: [PATCH] improve unicode handling when setting Start page --- src/Mod/Web/CMakeLists.txt | 1 + src/Mod/Web/Gui/BrowserView.cpp | 8 ++++++-- src/Mod/Web/InitGui.py | 2 ++ src/Mod/Web/TestWebGui.py | 28 ++++++++++++++++++++++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/Mod/Web/TestWebGui.py diff --git a/src/Mod/Web/CMakeLists.txt b/src/Mod/Web/CMakeLists.txt index 3e3ddf4f0c..29f1b805b4 100644 --- a/src/Mod/Web/CMakeLists.txt +++ b/src/Mod/Web/CMakeLists.txt @@ -3,6 +3,7 @@ add_subdirectory(App) set(Web_Scripts Init.py + TestWebGui.py ) if(BUILD_GUI) diff --git a/src/Mod/Web/Gui/BrowserView.cpp b/src/Mod/Web/Gui/BrowserView.cpp index 262670141c..47d0bb2347 100644 --- a/src/Mod/Web/Gui/BrowserView.cpp +++ b/src/Mod/Web/Gui/BrowserView.cpp @@ -119,10 +119,14 @@ Py::Object BrowserViewPy::setHtml(const Py::Tuple& args) { char* HtmlCode; char* BaseUrl; - if (! PyArg_ParseTuple(args.ptr(), "ss",&HtmlCode,&BaseUrl)) + if (!PyArg_ParseTuple(args.ptr(), "et|s","utf-8",&HtmlCode,&BaseUrl)) throw Py::Exception(); + + std::string EncodedHtml = std::string(HtmlCode); + PyMem_Free(HtmlCode); + if (myWebView) - myWebView->setHtml(QString::fromUtf8(HtmlCode),QUrl(QString::fromLatin1(BaseUrl))); + myWebView->setHtml(QString::fromUtf8(EncodedHtml.c_str()), QUrl(QString::fromLatin1(BaseUrl))); return Py::None(); } } diff --git a/src/Mod/Web/InitGui.py b/src/Mod/Web/InitGui.py index d5b845f248..87dd9575a3 100644 --- a/src/Mod/Web/InitGui.py +++ b/src/Mod/Web/InitGui.py @@ -46,3 +46,5 @@ class WebWorkbench ( Workbench ): return "WebGui::Workbench" Gui.addWorkbench(WebWorkbench()) + +FreeCAD.__unit_test__ += [ "TestWebGui" ] diff --git a/src/Mod/Web/TestWebGui.py b/src/Mod/Web/TestWebGui.py new file mode 100644 index 0000000000..a8da0f46b4 --- /dev/null +++ b/src/Mod/Web/TestWebGui.py @@ -0,0 +1,28 @@ +# Copyright (c) 2018 Werner Mayer * +# * +# This file is part of the FreeCAD CAx development system. * +# * +# This program is free software; you can redistribute it and/or modify * +# it under the terms of the GNU Lesser General Public License (LGPL) * +# as published by the Free Software Foundation; either version 2 of * +# the License, or (at your option) any later version. * +# for detail see the LICENCE text file. * +# * +# FreeCAD is distributed in the hope that it will be useful, * +# but WITHOUT ANY WARRANTY; without even the implied warranty of * +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# GNU Library General Public License for more details. * +# * +# You should have received a copy of the GNU Library General Public * +# License along with FreeCAD; if not, write to the Free Software * +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# USA * +#************************************************************************** + +import FreeCAD, os, sys, unittest, WebGui + +class WebGuiTestCases(unittest.TestCase): + def testHtmlCase(self): + bytestr=b'Fran\xc3\xa7ais' + browser=WebGui.openBrowserWindow('Browser') + browser.setHtml(bytestr.decode("utf8"), FreeCAD.getResourceDir())