From 4739372547e46a3cf41dc6e9f2832e38d39f32da Mon Sep 17 00:00:00 2001 From: Shinovon Date: Sat, 24 May 2025 23:21:26 +0500 Subject: [PATCH 1/4] Symbian: Implement Process_StartOpen --- src/Window_Symbian.cpp | 55 +++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/src/Window_Symbian.cpp b/src/Window_Symbian.cpp index c609f053d..523d72b13 100644 --- a/src/Window_Symbian.cpp +++ b/src/Window_Symbian.cpp @@ -71,6 +71,22 @@ class CWindow; CWindow* window; +static bool ConvertToUnicode(const char* str, size_t length, TDes& destBuf) { + if (str) { + wchar_t* dest = reinterpret_cast (const_cast (destBuf.Ptr())); + TInt len = mbstowcs(dest, str, length); + if (len > 0) { + destBuf.SetLength(len); + return true; + } + } + return false; +} + +static bool ConvertToUnicode(const cc_string* str, TDes& destBuf) { + return ConvertToUnicode(str->buffer, (size_t)str->length, destBuf); +} + class CWindow : public CBase { public: @@ -82,7 +98,7 @@ public: void ProcessEvents(float delta); void RequestClose(); void InitEvents(); - cc_result OpenBrowser(const cc_string* url); + cc_result OpenBrowserL(const cc_string* url); ~CWindow(); TWsEvent iWsEvent; @@ -184,8 +200,8 @@ CWindow::~CWindow() { } void CWindow::ConstructL() { - delete CActiveScheduler::Current(); - CActiveScheduler* actScheduler = new (ELeave) CActiveScheduler(); + delete CActiveScheduler::Current(); + CActiveScheduler* actScheduler = new (ELeave) CActiveScheduler(); CActiveScheduler::Install(actScheduler); CCoeEnv* env = CCoeEnv::Static(); @@ -464,6 +480,7 @@ void CWindow::HandleWsEvent(const TWsEvent& aWsEvent) { } // shutdown request from task manager case KAknShutOrHideApp: { + WindowInfo.Exists = false; RequestClose(); break; } @@ -471,6 +488,7 @@ void CWindow::HandleWsEvent(const TWsEvent& aWsEvent) { case EEventUser: { TApaSystemEvent apaSystemEvent = *(TApaSystemEvent*) aWsEvent.EventData(); if (apaSystemEvent == EApaSystemEventShutdown) { + WindowInfo.Exists = false; RequestClose(); } break; @@ -590,28 +608,31 @@ void CWindow::InitEvents() { iWsSession.EventReady(&iWsEventStatus); } -cc_result CWindow::OpenBrowser(const cc_string* url) { -#if 0 - TUid browserUid = {0x1020724d}; +cc_result CWindow::OpenBrowserL(const cc_string* url) { +#if defined CC_BUILD_SYMBIAN_3 || defined CC_BUILD_SYMBIAN_S60V5 + TUid browserUid = {0x10008D39}; +#else + TUid browserUid = {0x1020724D}; +#endif TApaTaskList tasklist(window->iWsSession); TApaTask task = tasklist.FindApp(browserUid); - TPtrC des; - // TODO convert url to utf16 if (task.Exists()) { task.BringToForeground(); - - + task.SendMessage(TUid::Uid(0), TPtrC8((TUint8 *)url->buffer, (TInt)url->length)); } else { RApaLsSession ls; - if (!ls.Connect()) { - TThreadId tid; - ls.StartDocument(des, browserUid, tid); - ls.Close(); + if (!ls.Handle()) { + User::LeaveIfError(ls.Connect()); } + + TThreadId tid; + TBuf buf; + ConvertToUnicode(url, buf); + ls.StartDocument(buf, browserUid, tid); + ls.Close(); } -#endif - return ERR_NOT_SUPPORTED; + return 0; } void Window_PreInit(void) { @@ -779,7 +800,7 @@ void GLContext_Create(void) { cc_result Process_StartOpen(const cc_string* args) { TInt err = 0; - TRAP(err, err = window->OpenBrowser(args)); + TRAP(err, err = window->OpenBrowserL(args)); return (cc_result) err; } From 81cb751756f8c042ab40e464862887c9fcdbd370 Mon Sep 17 00:00:00 2001 From: Shinovon Date: Sat, 24 May 2025 23:21:42 +0500 Subject: [PATCH 2/4] Symbian: disable thumb compilation --- misc/symbian/ClassiCube_common.mmh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/misc/symbian/ClassiCube_common.mmh b/misc/symbian/ClassiCube_common.mmh index ef8c30319..e1a8d3403 100644 --- a/misc/symbian/ClassiCube_common.mmh +++ b/misc/symbian/ClassiCube_common.mmh @@ -35,9 +35,11 @@ LIBRARY libpthread.lib STATICLIBRARY libcrt0.lib +ALWAYS_BUILD_AS_ARM OPTION ARMCC -Otime --diag_suppress 1296 --diag_suppress 1293 --diag_suppress 66 OPTION_REPLACE ARMCC --cpu 6 OPTION_REPLACE ARMCC --fpu softvfp+vfpv2 --fpmode fast +OPTION_REPLACE ARMCC -O2 -O3 SOURCEPATH ../../src SOURCE Animations.c Audio.c AudioBackend.c AxisLinesRenderer.c Bitmap.c Block.c BlockPhysics.c Builder.c Camera.c Chat.c Commands.c Deflate.c Drawer.c Drawer2D.c Entity.c EntityComponents.c EntityRenderers.c EnvRenderer.c Event.c ExtMath.c FancyLighting.c Formats.c Game.c GameVersion.c Generator.c Graphics_GL1.c Graphics_SoftGPU.c Gui.c HeldBlockRenderer.c Http_Web.c Http_Worker.c Input.c InputHandler.c Inventory.c IsometricDrawer.c LBackend.c LScreens.c LWeb.c LWidgets.c Launcher.c Lighting.c Logger.c MapRenderer.c MenuOptions.c Menus.c Model.c Options.c PackedCol.c Particle.c Physics.c Picking.c Platform_Posix.c Protocol.c Queue.c Resources.c SSL.c Screens.c SelOutlineRenderer.c SelectionBox.c Server.c Stream.c String.c SystemFonts.c TexturePack.c TouchUI.c Utils.c Vectors.c Widgets.c World.c _autofit.c _cff.c _ftbase.c _ftbitmap.c _ftglyph.c _ftinit.c _ftsynth.c _psaux.c _pshinter.c _psmodule.c _sfnt.c _smooth.c _truetype.c _type1.c Vorbis.c main.c Platform_Symbian.cpp Graphics_GL2.c Window_Symbian.cpp From 4df5eecada5678236fc1869274d22473af27d8a1 Mon Sep 17 00:00:00 2001 From: Shinovon Date: Sun, 25 May 2025 02:31:15 +0500 Subject: [PATCH 3/4] Symbian: Fix ConvertToUnicode --- src/Window_Symbian.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Window_Symbian.cpp b/src/Window_Symbian.cpp index 523d72b13..73c689eda 100644 --- a/src/Window_Symbian.cpp +++ b/src/Window_Symbian.cpp @@ -71,20 +71,20 @@ class CWindow; CWindow* window; -static bool ConvertToUnicode(const char* str, size_t length, TDes& destBuf) { - if (str) { - wchar_t* dest = reinterpret_cast (const_cast (destBuf.Ptr())); - TInt len = mbstowcs(dest, str, length); - if (len > 0) { - destBuf.SetLength(len); - return true; +static bool ConvertToUnicode(TDes& dst, const char* src, size_t length) { + if (src) { + cc_unichar* uni = reinterpret_cast (const_cast (dst.Ptr())); + for (int i = 0; i < length; i++) { + *uni++ = Convert_CP437ToUnicode(src[i]); } + *uni = '\0'; + dst.SetLength(length); } return false; } -static bool ConvertToUnicode(const cc_string* str, TDes& destBuf) { - return ConvertToUnicode(str->buffer, (size_t)str->length, destBuf); +static bool ConvertToUnicode(TDes& dst, const cc_string* src) { + return ConvertToUnicode(dst, src->buffer, (size_t)src->length); } class CWindow : public CBase @@ -628,7 +628,7 @@ cc_result CWindow::OpenBrowserL(const cc_string* url) { TThreadId tid; TBuf buf; - ConvertToUnicode(url, buf); + ConvertToUnicode(buf, url); ls.StartDocument(buf, browserUid, tid); ls.Close(); } From 2b7f007921d15e9332dff8b278a665c683238dbc Mon Sep 17 00:00:00 2001 From: Shinovon Date: Sun, 25 May 2025 02:35:03 +0500 Subject: [PATCH 4/4] Make ConvertToUnicode void --- src/Window_Symbian.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Window_Symbian.cpp b/src/Window_Symbian.cpp index 73c689eda..c2f2017b7 100644 --- a/src/Window_Symbian.cpp +++ b/src/Window_Symbian.cpp @@ -71,20 +71,19 @@ class CWindow; CWindow* window; -static bool ConvertToUnicode(TDes& dst, const char* src, size_t length) { - if (src) { - cc_unichar* uni = reinterpret_cast (const_cast (dst.Ptr())); - for (int i = 0; i < length; i++) { - *uni++ = Convert_CP437ToUnicode(src[i]); - } - *uni = '\0'; - dst.SetLength(length); +static void ConvertToUnicode(TDes& dst, const char* src, size_t length) { + if (!src) return; + + cc_unichar* uni = reinterpret_cast (const_cast (dst.Ptr())); + for (int i = 0; i < length; i++) { + *uni++ = Convert_CP437ToUnicode(src[i]); } - return false; + *uni = '\0'; + dst.SetLength(length); } -static bool ConvertToUnicode(TDes& dst, const cc_string* src) { - return ConvertToUnicode(dst, src->buffer, (size_t)src->length); +static void ConvertToUnicode(TDes& dst, const cc_string* src) { + ConvertToUnicode(dst, src->buffer, (size_t)src->length); } class CWindow : public CBase