94 lines
3.7 KiB
C++
94 lines
3.7 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/private/init.h
|
|
// Purpose: Private initialization-related data.
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2023-09-02
|
|
// Copyright: (c) 2023 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_PRIVATE_INIT_H_
|
|
#define _WX_PRIVATE_INIT_H_
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Initialization data contains parameters we get from the OS entry function.
|
|
// ----------------------------------------------------------------------------
|
|
|
|
struct WXDLLIMPEXP_BASE wxInitData
|
|
{
|
|
private:
|
|
wxInitData() = default;
|
|
|
|
public:
|
|
// Get the single global object.
|
|
static wxInitData& Get();
|
|
|
|
// Initialize from ANSI command line arguments: argv contents should be
|
|
// static, i.e. remain valid until the end of the program.
|
|
void Initialize(int argc, char** argv);
|
|
|
|
// Initialize from wide command line arguments if we hadn't been
|
|
// initialized in some other way: this allows to call this function
|
|
// unconditionally, even when these wide arguments were themselves
|
|
// synthesized from ANSI ones by our own code.
|
|
//
|
|
// Note that here we currently make a copy of the arguments internally, so
|
|
// they don't need to be static.
|
|
void InitIfNecessary(int argc, wchar_t** argv);
|
|
|
|
// This function is used instead of the dtor because the global object can
|
|
// be initialized multiple times.
|
|
void Free();
|
|
|
|
|
|
// We always have argc and (Unicode) argv, they're filled by Initialize()
|
|
// and argv as well as its elements are owned by us, see Free().
|
|
int argc = 0;
|
|
wchar_t** argv = nullptr;
|
|
|
|
#ifdef __WINDOWS__
|
|
// Initialize from the implicitly available Unicode command line.
|
|
void MSWInitialize();
|
|
|
|
// This pointer is non-null only if MSWInitialize() was called. In this
|
|
// case, argv is also set to it and, because this pointer needs to be freed
|
|
// using MSW-specific function, argv must not be freed at all.
|
|
//
|
|
// It's also possible to use Initialize(), even under Windows, in which
|
|
// case this pointer remains null and argv must be freed as usual.
|
|
wchar_t** argvMSW = nullptr;
|
|
#endif // __WINDOWS__
|
|
|
|
// At least wxGTK needs narrow command line arguments too and even thought
|
|
// other ports under Windows typically don't need them (e.g. wxMSW itself
|
|
// doesn't), we have to have them, as this header is toolkit-independent,
|
|
// and so can't differ between wxMSW and wxGTK.
|
|
|
|
// Initializes argvA using argc and argv. This means that argc and argv
|
|
// MUST be initialized before calling this function.
|
|
void InitArgvA();
|
|
|
|
// This pointer may or not need to be freed, as indicated by ownsArgvA flag.
|
|
char** argvA = nullptr;
|
|
bool ownsArgvA = false;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(wxInitData);
|
|
};
|
|
|
|
// Type of the hook function, see wxAddEntryHook(). If this function returns
|
|
// a value different from -1, the process exits using it as error code.
|
|
using wxEntryHook = int (*)();
|
|
|
|
// Set a special hook function which will be called before performing any
|
|
// normal initialization. Note that this hook can't use any wxWidgets
|
|
// functionality because nothing has been initialized yet, but can use
|
|
// wxInitData to examine the command line arguments and determine if it should
|
|
// be applied.
|
|
//
|
|
// This is currently used only by wxWebViewChromium to allow running Chromium
|
|
// helper applications without initializing GTK under Linux but could, in
|
|
// principle, be used for any other similar purpose.
|
|
WXDLLIMPEXP_BASE void wxAddEntryHook(wxEntryHook hook);
|
|
|
|
#endif // _WX_PRIVATE_INIT_H_
|