#include "iundo.h"
-#include <gtk/gtkmain.h>
+#include "uilib/uilib.h"
#include "cmdlib.h"
#include "os/file.h"
// spam it...
globalErrorStream() << buf << "\n";
- // FIXME why are warnings is_fatal?
-#ifndef _DEBUG
- if ( is_fatal )
-#endif
- ERROR_MESSAGE( "GTK+ error: " << buf );
+ if (is_fatal) {
+ ERROR_MESSAGE( "GTK+ error: " << buf );
+ }
}
#if defined ( _DEBUG ) && defined ( WIN32 ) && defined ( _MSC_VER )
ScopedLock lock( m_lock );
#if defined _DEBUG
m_buffer << "Break into the debugger?\n";
- bool handled = gtk_MessageBox( 0, m_buffer.c_str(), "Radiant - Runtime Error", eMB_YESNO, eMB_ICONERROR ) == eIDNO;
+ bool handled = ui::root.alert( m_buffer.c_str(), "Radiant - Runtime Error", ui::alert_type::YESNO, ui::alert_icon::Error ) == ui::alert_response::NO;
m_buffer.clear();
return handled;
#else
m_buffer << "Please report this error to the developers\n";
- gtk_MessageBox( 0, m_buffer.c_str(), "Radiant - Runtime Error", eMB_OK, eMB_ICONERROR );
+ ui::root.alert( m_buffer.c_str(), "Radiant - Runtime Error", ui::alert_type::OK, ui::alert_icon::Error );
m_buffer.clear();
#endif
}
{
StringOutputStream path( 256 );
- path << home << "1." << RADIANT_MAJOR_VERSION "." << RADIANT_MINOR_VERSION << '/';
+ path << home << "/";
g_strSettingsPath = path.c_str();
}
if ( !bVerIsGood ) {
StringOutputStream msg( 256 );
msg << "This editor binary (" RADIANT_VERSION ") doesn't match what the latest setup has configured in this directory\n"
- "Make sure you run the right/latest editor binary you installed\n"
+ "Make sure you run the right/latest editor binary you installed\n"
<< AppPath_get();
- gtk_MessageBox( 0, msg.c_str(), "Radiant", eMB_OK, eMB_ICONDEFAULT );
+ ui::alert( 0, msg.c_str(), "Radiant", eMB_OK, eMB_ICONDEFAULT );
}
return bVerIsGood;
#else
if ( remove( g_pidFile.c_str() ) == -1 ) {
StringOutputStream msg( 256 );
msg << "WARNING: Could not delete " << g_pidFile.c_str();
- gtk_MessageBox( 0, msg.c_str(), "Radiant", eMB_OK, eMB_ICONERROR );
+ ui::root.alert( msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error );
}
// in debug, never prompt to clean registry, turn console logging auto after a failed start
"The failure may be related to current global preferences.\n"
"Do you want to reset global preferences to defaults?";
- if ( gtk_MessageBox( 0, msg.c_str(), "Radiant - Startup Failure", eMB_YESNO, eMB_ICONQUESTION ) == eIDYES ) {
+ if ( ui::root.alert( msg.c_str(), "Radiant - Startup Failure", ui::alert_type::YESNO, ui::alert_icon::QUESTION ) == ui::alert_response::YES ) {
g_GamesDialog.Reset();
}
msg.clear();
msg << "Logging console output to " << SettingsPath_get() << "radiant.log\nRefer to the log if Radiant fails to start again.";
- gtk_MessageBox( 0, msg.c_str(), "Radiant - Console Log", eMB_OK );
+ ui::root.alert( msg.c_str(), "Radiant - Console Log", ui::alert_type::OK );
#endif
// set without saving, the class is not in a coherent state yet
if ( remove( g_pidFile.c_str() ) == -1 ) {
StringOutputStream msg( 256 );
msg << "WARNING: Could not delete " << g_pidFile.c_str();
- gtk_MessageBox( 0, msg.c_str(), "Radiant", eMB_OK, eMB_ICONERROR );
+ ui::root.alert( msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error );
}
}
if ( remove( g_pidGameFile.c_str() ) == -1 ) {
StringOutputStream msg;
msg << "WARNING: Could not delete " << g_pidGameFile.c_str();
- gtk_MessageBox( 0, msg.c_str(), "Radiant", eMB_OK, eMB_ICONERROR );
+ ui::root.alert( msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error );
}
// in debug, never prompt to clean registry, turn console logging auto after a failed start
"The failure may be caused by current preferences.\n"
"Do you want to reset all preferences to defaults?";
- if ( gtk_MessageBox( 0, msg.c_str(), "Radiant - Startup Failure", eMB_YESNO, eMB_ICONQUESTION ) == eIDYES ) {
+ if ( ui::root.alert( msg.c_str(), "Radiant - Startup Failure", ui::alert_type::YESNO, ui::alert_icon::QUESTION ) == ui::alert_response::YES ) {
Preferences_Reset();
}
msg.clear();
msg << "Logging console output to " << SettingsPath_get() << "radiant.log\nRefer to the log if Radiant fails to start again.";
- gtk_MessageBox( 0, msg.c_str(), "Radiant - Console Log", eMB_OK );
+ ui::root.alert( msg.c_str(), "Radiant - Console Log", ui::alert_type::OK );
#endif
// force console logging on! (will go in prefs too)
}
#endif
+ static GOptionEntry entries[] = {
+ { NULL }
+ };
+ GError *error = NULL;
+ const char* mapname = NULL;
+
gtk_disable_setlocale();
- gtk_init( &argc, &argv );
+ if ( !gtk_init_with_args( &argc, &argv, "<filename.map>", entries, NULL, &error) ) {
+ g_print( "%s\n", error->message );
+ return -1;
+ }
+
+ // Gtk already removed parsed `--options`
+ if (argc == 2) {
+ if ( strlen( argv[1] ) > 1 ) {
+ if ( g_str_has_suffix( argv[1], ".map" ) ) {
+ if ( g_path_is_absolute( argv[1] ) ) {
+ mapname = argv[1];
+ }
+ else {
+ mapname = g_build_filename( g_get_current_dir(), argv[1], NULL );
+ }
+ }
+ else {
+ g_print( "bad file name, will not load: %s\n", argv[1] );
+ }
+ }
+ }
+ else if (argc > 2) {
+ g_print ( "%s\n", "too many arguments" );
+ return -1;
+ }
// redirect Gtk warnings to the console
g_log_set_handler( "Gdk", (GLogLevelFlags)( G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING |
Radiant_Initialise();
- global_accel_init();
-
user_shortcuts_init();
g_pParentWnd = 0;
hide_splash();
- if ( g_bLoadLastMap && !g_strLastMap.empty() ) {
+ if ( mapname != NULL ) {
+ Map_LoadFile( mapname );
+ }
+ else if ( g_bLoadLastMap && !g_strLastMap.empty() ) {
Map_LoadFile( g_strLastMap.c_str() );
}
else
remove_local_pid();
- gtk_main();
+ ui::main();
// avoid saving prefs when the app is minimized
if ( g_pParentWnd->IsSleeping() ) {
user_shortcuts_save();
- global_accel_destroy();
-
Radiant_Shutdown();
// close the log file if any