mirror of https://github.com/mpv-player/mpv
win32: use pseudo-gui profile when started without stdio
If mpv is started from Explorer or the Start Menu, it will have no console and no standard IO handles. In this case, it's fairly safe to enable the pseudo-gui profile.
This commit is contained in:
parent
527911d2a2
commit
1e3aad5f87
|
@ -1,24 +1,53 @@
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "core.h"
|
|
||||||
#include "osdep/io.h"
|
#include "osdep/io.h"
|
||||||
#include "osdep/terminal.h"
|
#include "osdep/terminal.h"
|
||||||
|
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
int wmain(int argc, wchar_t *argv[]);
|
int wmain(int argc, wchar_t *argv[]);
|
||||||
|
|
||||||
// mpv does its own wildcard expansion in the option parser
|
// mpv does its own wildcard expansion in the option parser
|
||||||
int _dowildcard = 0;
|
int _dowildcard = 0;
|
||||||
|
|
||||||
|
static bool is_valid_handle(HANDLE h)
|
||||||
|
{
|
||||||
|
return h != INVALID_HANDLE_VALUE && h != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool has_redirected_stdio(void)
|
||||||
|
{
|
||||||
|
return is_valid_handle(GetStdHandle(STD_INPUT_HANDLE)) ||
|
||||||
|
is_valid_handle(GetStdHandle(STD_OUTPUT_HANDLE)) ||
|
||||||
|
is_valid_handle(GetStdHandle(STD_ERROR_HANDLE));
|
||||||
|
}
|
||||||
|
|
||||||
int wmain(int argc, wchar_t *argv[])
|
int wmain(int argc, wchar_t *argv[])
|
||||||
{
|
{
|
||||||
// If started from the console wrapper (see osdep/win32-console-wrapper.c),
|
// If started from the console wrapper (see osdep/win32-console-wrapper.c),
|
||||||
// attach to the console and set up the standard IO handles
|
// attach to the console and set up the standard IO handles
|
||||||
terminal_try_attach();
|
bool has_console = terminal_try_attach();
|
||||||
|
|
||||||
char **argv_u8 = talloc_zero_array(NULL, char*, argc + 1);
|
// If mpv is started from Explorer, the Run dialog or the Start Menu, it
|
||||||
for (int i = 0; i < argc; i++)
|
// will have no console and no standard IO handles. In this case, the user
|
||||||
argv_u8[i] = mp_to_utf8(argv_u8, argv[i]);
|
// is expecting mpv to show some UI, so enable the pseudo-GUI profile.
|
||||||
|
bool gui = !has_console && !has_redirected_stdio();
|
||||||
|
|
||||||
int ret = mpv_main(argc, argv_u8);
|
int argv_len = 0;
|
||||||
|
char **argv_u8 = NULL;
|
||||||
|
|
||||||
|
// Build mpv's UTF-8 argv, and add the pseudo-GUI profile if necessary
|
||||||
|
if (argv[0])
|
||||||
|
MP_TARRAY_APPEND(NULL, argv_u8, argv_len, mp_to_utf8(argv_u8, argv[0]));
|
||||||
|
if (gui)
|
||||||
|
MP_TARRAY_APPEND(NULL, argv_u8, argv_len, "--profile=pseudo-gui");
|
||||||
|
for (int i = 1; i < argc; i++)
|
||||||
|
MP_TARRAY_APPEND(NULL, argv_u8, argv_len, mp_to_utf8(argv_u8, argv[i]));
|
||||||
|
MP_TARRAY_APPEND(NULL, argv_u8, argv_len, NULL);
|
||||||
|
|
||||||
|
int ret = mpv_main(argv_len - 1, argv_u8);
|
||||||
|
|
||||||
talloc_free(argv_u8);
|
talloc_free(argv_u8);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue