diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3da1f32..328efa0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,7 +4,7 @@
cmake_minimum_required(VERSION 3.20)
project(ObsidianDragon
- VERSION 1.0.0
+ VERSION 1.0.1
LANGUAGES C CXX
DESCRIPTION "DragonX Cryptocurrency Wallet"
)
@@ -373,12 +373,14 @@ endif()
# Windows application icon + VERSIONINFO (.rc -> .res -> linked into .exe)
if(WIN32)
set(OBSIDIAN_ICO_PATH "${CMAKE_SOURCE_DIR}/res/img/ObsidianDragon.ico")
+ # Generate manifest with version from project()
+ configure_file(
+ ${CMAKE_SOURCE_DIR}/res/ObsidianDragon.manifest.in
+ ${CMAKE_SOURCE_DIR}/res/ObsidianDragon.manifest
+ @ONLY
+ )
set(OBSIDIAN_MANIFEST_PATH "${CMAKE_SOURCE_DIR}/res/ObsidianDragon.manifest")
- # Version numbers for the VERSIONINFO resource block
- set(DRAGONX_VER_MAJOR 1)
- set(DRAGONX_VER_MINOR 0)
- set(DRAGONX_VER_PATCH 0)
- set(DRAGONX_VERSION "1.0.0")
+ # Generate .rc with version from project()
configure_file(
${CMAKE_SOURCE_DIR}/res/ObsidianDragon.rc
${CMAKE_BINARY_DIR}/generated/ObsidianDragon.rc
@@ -387,6 +389,13 @@ if(WIN32)
set(WIN_RC_FILE ${CMAKE_BINARY_DIR}/generated/ObsidianDragon.rc)
endif()
+# Generate version.h from the single project(VERSION ...) declaration
+configure_file(
+ ${CMAKE_SOURCE_DIR}/src/config/version.h.in
+ ${CMAKE_SOURCE_DIR}/src/config/version.h
+ @ONLY
+)
+
# Generate INCBIN font embedding source with absolute paths to .ttf files
configure_file(
${CMAKE_SOURCE_DIR}/src/embedded/embedded_fonts.cpp.in
diff --git a/res/ObsidianDragon.manifest b/res/ObsidianDragon.manifest
index f4eb7de..c1555ce 100644
--- a/res/ObsidianDragon.manifest
+++ b/res/ObsidianDragon.manifest
@@ -5,7 +5,7 @@
diff --git a/res/ObsidianDragon.manifest.in b/res/ObsidianDragon.manifest.in
new file mode 100644
index 0000000..42d2cb3
--- /dev/null
+++ b/res/ObsidianDragon.manifest.in
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+ ObsidianDragon Wallet
+
+
+
+
+
+
+
+
+
+
+
+ true/pm
+ PerMonitorV2,PerMonitor
+ UTF-8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/ObsidianDragon.rc b/res/ObsidianDragon.rc
index 8f02ffa..a7b9446 100644
--- a/res/ObsidianDragon.rc
+++ b/res/ObsidianDragon.rc
@@ -19,8 +19,8 @@
#include
VS_VERSION_INFO VERSIONINFO
- FILEVERSION @DRAGONX_VER_MAJOR@,@DRAGONX_VER_MINOR@,@DRAGONX_VER_PATCH@,0
- PRODUCTVERSION @DRAGONX_VER_MAJOR@,@DRAGONX_VER_MINOR@,@DRAGONX_VER_PATCH@,0
+ FILEVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0
+ PRODUCTVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,@PROJECT_VERSION_PATCH@,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0x0L
FILEOS VOS_NT_WINDOWS32
@@ -33,12 +33,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "DragonX Developers\0"
VALUE "FileDescription", "ObsidianDragon Wallet\0"
- VALUE "FileVersion", "@DRAGONX_VERSION@\0"
+ VALUE "FileVersion", "@PROJECT_VERSION@\0"
VALUE "InternalName", "ObsidianDragon\0"
VALUE "LegalCopyright", "Copyright 2024-2026 DragonX Developers. GPLv3.\0"
VALUE "OriginalFilename", "ObsidianDragon.exe\0"
VALUE "ProductName", "ObsidianDragon\0"
- VALUE "ProductVersion", "@DRAGONX_VERSION@\0"
+ VALUE "ProductVersion", "@PROJECT_VERSION@\0"
END
END
BLOCK "VarFileInfo"
diff --git a/src/config/version.h b/src/config/version.h
index ea631cf..69240b5 100644
--- a/src/config/version.h
+++ b/src/config/version.h
@@ -4,10 +4,13 @@
#pragma once
-#define DRAGONX_VERSION "1.0.0"
+// !! DO NOT EDIT version.h — it is generated from version.h.in by CMake.
+// !! Change the version in CMakeLists.txt: project(... VERSION x.y.z ...)
+
+#define DRAGONX_VERSION "1.0.1"
#define DRAGONX_VERSION_MAJOR 1
#define DRAGONX_VERSION_MINOR 0
-#define DRAGONX_VERSION_PATCH 0
+#define DRAGONX_VERSION_PATCH 1
#define DRAGONX_APP_NAME "ObsidianDragon"
#define DRAGONX_ORG_NAME "Hush"
diff --git a/src/config/version.h.in b/src/config/version.h.in
new file mode 100644
index 0000000..a0e0a20
--- /dev/null
+++ b/src/config/version.h.in
@@ -0,0 +1,31 @@
+// DragonX Wallet - ImGui Edition
+// Copyright 2024-2026 The Hush Developers
+// Released under the GPLv3
+
+#pragma once
+
+// !! DO NOT EDIT version.h — it is generated from version.h.in by CMake.
+// !! Change the version in CMakeLists.txt: project(... VERSION x.y.z ...)
+
+#define DRAGONX_VERSION "@PROJECT_VERSION@"
+#define DRAGONX_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
+#define DRAGONX_VERSION_MINOR @PROJECT_VERSION_MINOR@
+#define DRAGONX_VERSION_PATCH @PROJECT_VERSION_PATCH@
+
+#define DRAGONX_APP_NAME "ObsidianDragon"
+#define DRAGONX_ORG_NAME "Hush"
+
+// Default RPC settings
+#define DRAGONX_DEFAULT_RPC_HOST "127.0.0.1"
+#define DRAGONX_DEFAULT_RPC_PORT "21769"
+
+// Coin parameters
+#define DRAGONX_TICKER "DRGX"
+#define DRAGONX_COIN_NAME "DragonX"
+#define DRAGONX_URI_SCHEME "drgx"
+#define DRAGONX_ZATOSHI_PER_COIN 100000000
+#define DRAGONX_DEFAULT_FEE 0.0001
+
+// Config file names
+#define DRAGONX_CONF_FILENAME "DRAGONX.conf"
+#define DRAGONX_WALLET_FILENAME "wallet.dat"
diff --git a/src/main.cpp b/src/main.cpp
index cdac886..bf05435 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -419,12 +419,20 @@ int main(int argc, char* argv[])
if (!g_single_instance.tryLock()) {
fprintf(stderr, "Another instance of ObsidianDragon is already running.\n");
DEBUG_LOGF("Please close the existing instance first.\n");
+#ifdef _WIN32
+ MessageBoxW(nullptr, L"Another instance of ObsidianDragon is already running.\nPlease close it first.",
+ L"ObsidianDragon", MB_OK | MB_ICONINFORMATION);
+#endif
return 1;
}
// Initialize SDL
if (!InitSDL()) {
fprintf(stderr, "Failed to initialize SDL!\n");
+#ifdef _WIN32
+ MessageBoxW(nullptr, L"Failed to initialize SDL. Please check the debug log at\n%APPDATA%\\ObsidianDragon\\dragonx-debug.log",
+ L"ObsidianDragon - Startup Error", MB_OK | MB_ICONERROR);
+#endif
return 1;
}
@@ -495,6 +503,8 @@ int main(int argc, char* argv[])
nullptr, nullptr, GetModuleHandleW(nullptr), nullptr);
if (!nativeHwnd) {
fprintf(stderr, "Failed to create native Win32 window (error %lu)\n", GetLastError());
+ MessageBoxW(nullptr, L"Failed to create window. Please check the debug log at\n%APPDATA%\\ObsidianDragon\\dragonx-debug.log",
+ L"ObsidianDragon - Startup Error", MB_OK | MB_ICONERROR);
SDL_Quit();
return 1;
}
@@ -534,6 +544,8 @@ int main(int argc, char* argv[])
SDL_DestroyProperties(createProps);
if (window == nullptr) {
fprintf(stderr, "Error: SDL_CreateWindowWithProperties(): %s\n", SDL_GetError());
+ MessageBoxW(nullptr, L"Failed to create SDL window. Please check the debug log at\n%APPDATA%\\ObsidianDragon\\dragonx-debug.log",
+ L"ObsidianDragon - Startup Error", MB_OK | MB_ICONERROR);
DestroyWindow(nativeHwnd);
SDL_Quit();
return 1;
@@ -560,6 +572,8 @@ int main(int argc, char* argv[])
dragonx::platform::DX11Context dx;
if (!dx.init(window)) {
fprintf(stderr, "Error: Failed to initialize DirectX 11 context\n");
+ MessageBoxW(nullptr, L"Failed to initialize DirectX 11.\nPlease ensure your graphics drivers are up to date.\n\nCheck the debug log at\n%APPDATA%\\ObsidianDragon\\dragonx-debug.log",
+ L"ObsidianDragon - Graphics Error", MB_OK | MB_ICONERROR);
SDL_DestroyWindow(window);
SDL_Quit();
return 1;
@@ -635,6 +649,8 @@ int main(int argc, char* argv[])
// Initialize ImGui with DX11 backend
if (!InitImGui(window, dx)) {
fprintf(stderr, "Failed to initialize ImGui!\n");
+ MessageBoxW(nullptr, L"Failed to initialize ImGui. Please check the debug log at\n%APPDATA%\\ObsidianDragon\\dragonx-debug.log",
+ L"ObsidianDragon - Startup Error", MB_OK | MB_ICONERROR);
Shutdown(window, dx);
return 1;
}
@@ -808,6 +824,10 @@ int main(int argc, char* argv[])
dragonx::App app;
if (!app.init()) {
fprintf(stderr, "Failed to initialize application!\n");
+#ifdef _WIN32
+ MessageBoxW(nullptr, L"Failed to initialize application. Please check the debug log at\n%APPDATA%\\ObsidianDragon\\dragonx-debug.log",
+ L"ObsidianDragon - Startup Error", MB_OK | MB_ICONERROR);
+#endif
#ifdef DRAGONX_USE_DX11
Shutdown(window, dx);
#else
diff --git a/src/platform/dx11_context.cpp b/src/platform/dx11_context.cpp
index 68b4c01..822527c 100644
--- a/src/platform/dx11_context.cpp
+++ b/src/platform/dx11_context.cpp
@@ -61,13 +61,8 @@ bool DX11Context::init(SDL_Window* window)
D3D_FEATURE_LEVEL_10_0,
};
- UINT createDeviceFlags = 0;
-#ifdef DRAGONX_DEBUG
- createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
-#endif
-
// Need BGRA support for DirectComposition
- createDeviceFlags |= D3D11_CREATE_DEVICE_BGRA_SUPPORT;
+ UINT createDeviceFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
HRESULT hr = D3D11CreateDevice(
nullptr, // Default adapter
diff --git a/src/ui/screens/settings_screen.h b/src/ui/screens/settings_screen.h
index a583610..97448a7 100644
--- a/src/ui/screens/settings_screen.h
+++ b/src/ui/screens/settings_screen.h
@@ -528,7 +528,8 @@ inline void SettingsScreen::renderAboutSection() {
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + (availWidth - nameSize.x) * 0.5f);
Typography::instance().text(TypeStyle::H6, appName);
- const char* version = "Version 1.0.0-imgui";
+ char version[64];
+ snprintf(version, sizeof(version), "Version %s-imgui", DRAGONX_VERSION);
ImVec2 versionSize = ImGui::CalcTextSize(version);
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + (availWidth - versionSize.x) * 0.5f);
Typography::instance().textColored(TypeStyle::Caption, OnSurfaceMedium(), version);