Skip to content
Permalink
Browse files
Editor, Engine, MusPlay: Fixed non-ASCII arguments support
By the odd way, "WideCharToMultiByte" began to glitch here... So, a better way is exist here - using of SDL_main!
  • Loading branch information
Wohlstand committed Mar 29, 2020
1 parent 4bec177 commit c56ebfde3e759db6865c2be6183c410e073387a0
Show file tree
Hide file tree
Showing 9 changed files with 36 additions and 17 deletions.
@@ -47,7 +47,6 @@ include(../_common/DirManager/dirman.cmake)
include(../_common/FileMapper/FileMapper.cmake)
add_definitions(-DINI_PROCESSING_ALLOW_QT_TYPES)
include(../_common/IniProcessor/IniProcessor.cmake)
include(../_common/Utf8Main/utf8main.cmake)
include(../_common/tclap/tclap.cmake)
include(../_common/Utils/Utils.cmake)
if(WIN32)
@@ -461,7 +460,6 @@ add_executable(pge_editor
${FILEMAPPER_SRCS}
${INIPROCESSOR_SRCS}
${STACK_WALKER_SRCS}
${UTF8MAIN_SRCS}
${UTILS_SRCS}
)

@@ -22,7 +22,7 @@

#include <QString>
#include <QObject>
#define SDL_MAIN_HANDLED

#include <SDL2/SDL.h>
#include <SDL2/SDL_mixer_ext.h>

@@ -159,6 +159,7 @@ static void writeToFile(const QString &txt)
QFile outFile(LogWriter::DebugLogFile);
outFile.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream ts(&outFile);
ts.setCodec("UTF-8");
ts << txt << endl;
outFile.close();
}
@@ -168,6 +169,7 @@ static void writeToFile(const QString &txt)
static void writeToScreen(const QString &txt)
{
QTextStream ts(stdout);
ts.setCodec("UTF-8");
ts << txt << endl;
ts.flush();
}
@@ -17,7 +17,6 @@
*/

#ifdef USE_SDL_MIXER
#define SDL_MAIN_HANDLED
#include <SDL2/SDL.h>
#include <SDL2/SDL_mixer_ext.h>
#endif
@@ -43,8 +42,6 @@
#include <SingleApplication/singleapplication.h>
#include <SingleApplication/editor_application.h>

#include <Utf8Main/utf8main.h>

#include <data_configs/selection_dialog/config_manager.h>

#include <audio/sdl_music_player.h>
@@ -130,6 +127,7 @@ static void pgeEditorQuit()
}
}

extern "C"
int main(int argc, char *argv[])
{
CrashHandler::initCrashHandlers();
@@ -157,7 +155,12 @@ int main(int argc, char *argv[])
}

app = new PGE_Application(argc, argv);
#ifdef _WIN32
for(int i = 0; i < argc; i++)
args.push_back(QString::fromUtf8(argv[i]));
#else
args = app->arguments();
#endif

// Workaround: https://doc.qt.io/qt-5/qcoreapplication.html#locale-settings
setlocale(LC_NUMERIC, "C");
@@ -36,9 +36,11 @@

void MainWindow::openFilesByArgs(QStringList args, int startAt)
{
qDebug() << "Attempt to open files by arguments:" << args;
for(int i = startAt; i < args.size(); i++)
{
if(QFile::exists(args[i])) OpenFile(args[i]);
if(QFile::exists(args[i]))
OpenFile(args[i]);
}
}

@@ -652,6 +652,7 @@ static void pgeLevelPlayScreen(AppInstance &a)
}


extern "C"
int main(int argc, char *argv[])
{
std::vector<std::string> args;
@@ -145,10 +145,6 @@ target_compile_definitions(PGE_MusPlay_QtLibs
${Qt5Network_DEFINITIONS}
)

if(MINGW) # Required for SDL_Main
target_compile_definitions(pge_musplay PRIVATE -DSDL_MAIN_HANDLED)
endif()

target_link_libraries(PGE_MusPlay_QtLibs
INTERFACE
${QT_EXTRA_LIBS_PRE}
@@ -26,7 +26,8 @@ static void error(QString msg)
QMessageBox::warning(nullptr, "SDL error", msg, QMessageBox::Ok);
}

extern "C" int main(int argc, char *argv[])
extern "C"
int main(int argc, char *argv[])
{
QApplication::addLibraryPath(".");
QApplication::addLibraryPath(QFileInfo(QString::fromUtf8(argv[0])).dir().path());
@@ -40,7 +41,14 @@ extern "C" int main(int argc, char *argv[])
// https://doc.qt.io/qt-5/qcoreapplication.html#locale-settings
setlocale(LC_NUMERIC, "C");

QStringList args = a.arguments();
QStringList args;
#ifdef _WIN32
for(int i = 0; i < argc; i++)
args.push_back(QString::fromUtf8(argv[i]));
#else
args = a.arguments();
#endif

SingleApplication *as = new SingleApplication(args);
if(!as->shouldContinue())
{
@@ -148,12 +148,17 @@ elseif(SDL2_VIA_AUTOTOOLS)
"${SDL2_A_Lib}"
"${SDL2_main_Lib}"
)
target_link_libraries(PGE_SDL2 INTERFACE "${SDL2_SO_Lib}")
target_link_libraries(PGE_SDL2_static INTERFACE "${SDL2_A_Lib}")

if(MINGW) # Required for SDL_Main
target_link_libraries(PGE_SDL2 INTERFACE -lmingw32)
target_link_libraries(PGE_SDL2_static INTERFACE -lmingw32)
endif()
if((WIN32 OR HAIKU) AND NOT EMSCRIPTEN)
target_link_libraries(PGE_SDL2 INTERFACE ${SDL2_main_Lib})
target_link_libraries(PGE_SDL2_static INTERFACE ${SDL2_main_Lib})
endif()
target_link_libraries(PGE_SDL2 INTERFACE "${SDL2_SO_Lib}")
target_link_libraries(PGE_SDL2_static INTERFACE "${SDL2_A_Lib}")

else()
# ============================================================
@@ -187,12 +192,16 @@ else()
"${SDL2_main_Lib}"
)

target_link_libraries(PGE_SDL2 INTERFACE "${SDL2_SO_Lib}")
target_link_libraries(PGE_SDL2_static INTERFACE "${SDL2_A_Lib}")
if(MINGW) # Required for SDL_Main
target_link_libraries(PGE_SDL2 INTERFACE -lmingw32)
target_link_libraries(PGE_SDL2_static INTERFACE -lmingw32)
endif()
if((WIN32 OR HAIKU) AND NOT EMSCRIPTEN)
target_link_libraries(PGE_SDL2 INTERFACE ${SDL2_main_Lib})
target_link_libraries(PGE_SDL2_static INTERFACE ${SDL2_main_Lib})
endif()
target_link_libraries(PGE_SDL2 INTERFACE "${SDL2_SO_Lib}")
target_link_libraries(PGE_SDL2_static INTERFACE "${SDL2_A_Lib}")
endif()

set(SDL2_DEPENDENT_LIBS)

0 comments on commit c56ebfd

Please sign in to comment.