Mercurial > dwindows
view winmain.c @ 2264:5c981407b0f3
GTK4: Add experimental support for GTK4... This is in progress and doesn't
compile yet. GTK4 support will likely be less full than GTK3 due to
architectural decisions by the GTK team. Certain features have been removed
with no replacements, such as status icon support. Additionally all of the
thread safety has been removed and everything MUST run on the main thread.
I will likely implement a similar solution to what I did on MacOS where
threads will call into the main thread to do API calls, passing the
arguments between threads. Copied from GTK3 removing all existing now dead
thread safety, all deprecated code and everything supporting earlier
versions of GTK3. GTK4 is not available in any mainstream distributions
yet... hoping to have it at least functional by the time there are any.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Fri, 29 Jan 2021 10:57:12 +0000 |
parents | 05dd5189099f |
children |
line wrap: on
line source
/* Dynamic Windows stub file to allow Win32 applications * to use the main() entry point instead of WinMain(). * * (C) 2000-2012 Brian Smith <brian@dbsoft.org> */ #include <windows.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <process.h> #ifndef NODW void Win32_Set_Instance(HINSTANCE hInstance); #endif char **_convertargs(int *count, char *start, HINSTANCE DWInstance) { char *tmp, *argstart, **argv; int loc = 0, inquotes = 0; (*count) = 1; tmp = start; /* Count the number of entries */ if(*start) { (*count)++; while(*tmp) { if(*tmp == '"' && inquotes) inquotes = 0; else if(*tmp == '"' && !inquotes) inquotes = 1; else if(*tmp == ' ' && !inquotes) { /* Push past any white space */ while(*(tmp+1) == ' ') tmp++; /* If we aren't at the end of the command * line increment the count. */ if(*(tmp+1)) (*count)++; } tmp++; } } argv = (char **)malloc(sizeof(char *) * ((*count)+1)); argv[0] = malloc(260); GetModuleFileNameA(DWInstance, argv[0], 260); argstart = tmp = start; if(*start) { loc = 1; while(*tmp) { if(*tmp == '"' && inquotes) { *tmp = 0; inquotes = 0; } else if(*tmp == '"' && !inquotes) { argstart = tmp+1; inquotes = 1; } else if(*tmp == ' ' && !inquotes) { *tmp = 0; argv[loc] = _strdup(argstart); /* Push past any white space */ while(*(tmp+1) == ' ') tmp++; /* Move the start pointer */ argstart = tmp+1; /* If we aren't at the end of the command * line increment the count. */ if(*(tmp+1)) loc++; } tmp++; } if(*argstart) argv[loc] = _strdup(argstart); } argv[loc+1] = NULL; return argv; } /* Protoype for the application entrypoint */ int main(int argc, char **argv); /* Ok this is a really big hack but what the hell ;) */ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { char **argv; int argc; #ifndef NODW Win32_Set_Instance(hInstance); #endif argv = _convertargs(&argc, lpCmdLine, hInstance); return main(argc, argv); }