diff --git a/reactos/subsys/system/winefile/Makefile.MinGW b/reactos/subsys/system/winefile/Makefile.MinGW index 7dead8ae38c..b0ac8fdc320 100644 --- a/reactos/subsys/system/winefile/Makefile.MinGW +++ b/reactos/subsys/system/winefile/Makefile.MinGW @@ -25,7 +25,7 @@ endif ifeq ($(UNICODE),1) CFLAGS += -DUNICODE -# LFLAGS+= -Wl,--entry,_wWinMain@16 +#LFLAGS += -Wl,--entry,_wWinMain@16 RCFLAGS += -DUNICODE endif diff --git a/reactos/subsys/system/winefile/winefile.c b/reactos/subsys/system/winefile/winefile.c index c44163bb09a..227ff1f35af 100644 --- a/reactos/subsys/system/winefile/winefile.c +++ b/reactos/subsys/system/winefile/winefile.c @@ -2146,9 +2146,7 @@ static LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM break; case WM_DESTROY: - /* don't exit desktop when closing file manager window */ - if (!Globals.hwndParent) - PostQuitMessage(0); + PostQuitMessage(0); break; case WM_INITMENUPOPUP: { @@ -4683,11 +4681,11 @@ static void InitInstance(HINSTANCE hinstance) } -static void show_frame(HWND hwndParent, int cmdshow) +static void show_frame(HWND hwndParent, int cmdshow, LPCTSTR path) { const static TCHAR sMDICLIENT[] = {'M','D','I','C','L','I','E','N','T','\0'}; - TCHAR path[MAX_PATH], b1[BUFFER_LEN]; + TCHAR buffer[MAX_PATH], b1[BUFFER_LEN]; ChildWnd* child; HMENU hMenuFrame, hMenuWindow; @@ -4696,8 +4694,6 @@ static void show_frame(HWND hwndParent, int cmdshow) if (Globals.hMainWnd) return; - Globals.hwndParent = hwndParent; - hMenuFrame = LoadMenu(Globals.hInstance, MAKEINTRESOURCE(IDM_WINEFILE)); hMenuWindow = GetSubMenu(hMenuFrame, GetMenuItemCount(hMenuFrame)-2); @@ -4752,7 +4748,11 @@ static void show_frame(HWND hwndParent, int cmdshow) Globals.hMainWnd, (HMENU)IDW_STATUSBAR, hinstance, 0);*/ /*TODO: read paths and window placements from registry */ - GetCurrentDirectory(MAX_PATH, path); + + if (!path || !*path) { + GetCurrentDirectory(MAX_PATH, buffer); + path = buffer; + } ShowWindow(Globals.hMainWnd, cmdshow); @@ -4826,7 +4826,7 @@ static int find_window_class(LPCTSTR classname) #endif -static int winefile_main(HINSTANCE hinstance, HWND hwndParent, int cmdshow) +static int winefile_main(HINSTANCE hinstance, int cmdshow, LPCTSTR path) { MSG msg; @@ -4836,7 +4836,7 @@ static int winefile_main(HINSTANCE hinstance, HWND hwndParent, int cmdshow) /*TODO: read window placement from registry */ cmdshow = SW_MAXIMIZE; - show_frame(hwndParent, cmdshow); + show_frame(0, cmdshow, path); while(GetMessage(&msg, 0, 0, 0)) { if (Globals.hmdiclient && TranslateMDISysAccel(Globals.hmdiclient, &msg)) @@ -4855,17 +4855,26 @@ static int winefile_main(HINSTANCE hinstance, HWND hwndParent, int cmdshow) } -int APIENTRY WinMain(HINSTANCE hinstance, - HINSTANCE previnstance, - LPSTR cmdline, - int cmdshow) +#if defined(UNICODE) && defined(_MSC_VER) +int APIENTRY wWinMain(HINSTANCE hinstance, HINSTANCE previnstance, LPWSTR cmdline, int cmdshow) +#else +int APIENTRY WinMain(HINSTANCE hinstance, HINSTANCE previnstance, LPSTR cmdline, int cmdshow) +#endif { #ifdef _NO_EXTENSIONS if (find_window_class(sWINEFILEFRAME)) return 1; #endif - winefile_main(hinstance, 0, cmdshow); +#if defined(UNICODE) && !defined(_MSC_VER) + { /* convert ANSI cmdline into WCS path string */ + TCHAR buffer[MAX_PATH]; + MultiByteToWideChar(CP_ACP, 0, cmdline, -1, buffer, MAX_PATH); + winefile_main(hinstance, cmdshow, buffer); + } +#else + winefile_main(hinstance, cmdshow, cmdline); +#endif return 0; } diff --git a/reactos/subsys/system/winefile/winefile.h b/reactos/subsys/system/winefile/winefile.h index 3fec9bbc216..8c0df5b8388 100644 --- a/reactos/subsys/system/winefile/winefile.h +++ b/reactos/subsys/system/winefile/winefile.h @@ -118,7 +118,6 @@ typedef struct HANDLE hInstance; HACCEL haccel; ATOM hframeClass; - HWND hwndParent; HWND hMainWnd; HMENU hMenuFrame;