Workaround the ANSI codepage limitation on Win32.
This commit is contained in:
parent
5d1c8bbf75
commit
2509f0af52
2
NEWS
2
NEWS
|
@ -1,5 +1,7 @@
|
||||||
Version TBD
|
Version TBD
|
||||||
- Added scrolling using the middle mouse button.
|
- Added scrolling using the middle mouse button.
|
||||||
|
- Fixed command line parsing on Windows,
|
||||||
|
it's not limited to the system ANSI codepage anymore.
|
||||||
- Fixed checking for the shift key when selecting.
|
- Fixed checking for the shift key when selecting.
|
||||||
- Terminals are ignored when hovering the cursor above a selection.
|
- Terminals are ignored when hovering the cursor above a selection.
|
||||||
- Disallowed wheel zooming when holding mouse buttons.
|
- Disallowed wheel zooming when holding mouse buttons.
|
||||||
|
|
|
@ -16,6 +16,66 @@
|
||||||
#include "ld-window-main.h"
|
#include "ld-window-main.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#include <shellapi.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* get_utf8_args:
|
||||||
|
* @argc: where the number of arguments will be stored.
|
||||||
|
* @argv: where the actual array of arguments will be stored.
|
||||||
|
* Use g_strfreev() to free the array.
|
||||||
|
*
|
||||||
|
* Retrieve program arguments in UTF-8 encoding on Windows.
|
||||||
|
*
|
||||||
|
* Return value: %TRUE if the function has succeeded.
|
||||||
|
*/
|
||||||
|
static gboolean
|
||||||
|
get_utf8_args (int *argc, char ***argv)
|
||||||
|
{
|
||||||
|
LPWSTR *argv_wide;
|
||||||
|
int i, argc_local, buff_size;
|
||||||
|
char **argv_local, *arg;
|
||||||
|
|
||||||
|
argv_wide = CommandLineToArgvW (GetCommandLineW (), &argc_local);
|
||||||
|
if (!argv_wide)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
argv_local = g_malloc ((argc_local + 1) * sizeof (char *));
|
||||||
|
for (i = 0; i < argc_local; i++)
|
||||||
|
{
|
||||||
|
buff_size = WideCharToMultiByte (CP_UTF8, 0, argv_wide[i], -1,
|
||||||
|
NULL, 0, NULL, NULL);
|
||||||
|
if (!buff_size)
|
||||||
|
goto get_utf8_args_fail;
|
||||||
|
|
||||||
|
argv_local[i] = g_malloc (buff_size);
|
||||||
|
if (!WideCharToMultiByte (CP_UTF8, 0, argv_wide[i], -1,
|
||||||
|
argv_local[i], buff_size, NULL, NULL))
|
||||||
|
{
|
||||||
|
g_free (argv_local[i]);
|
||||||
|
goto get_utf8_args_fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
argv_local[i] = NULL;
|
||||||
|
LocalFree (argv_wide);
|
||||||
|
|
||||||
|
if (argc)
|
||||||
|
*argc = argc_local;
|
||||||
|
if (argv)
|
||||||
|
*argv = argv_local;
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
get_utf8_args_fail:
|
||||||
|
while (i--)
|
||||||
|
g_free (argv_local[i]);
|
||||||
|
g_free (argv_local);
|
||||||
|
|
||||||
|
LocalFree (argv_wide);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char *argv[])
|
main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -29,6 +89,7 @@ main (int argc, char *argv[])
|
||||||
|
|
||||||
GError *error;
|
GError *error;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
gboolean argv_overriden;
|
||||||
gchar *install_dir;
|
gchar *install_dir;
|
||||||
|
|
||||||
install_dir = g_win32_get_package_installation_directory_of_module (NULL);
|
install_dir = g_win32_get_package_installation_directory_of_module (NULL);
|
||||||
|
@ -45,6 +106,13 @@ main (int argc, char *argv[])
|
||||||
bind_textdomain_codeset (GETTEXT_DOMAIN, "UTF-8");
|
bind_textdomain_codeset (GETTEXT_DOMAIN, "UTF-8");
|
||||||
textdomain (GETTEXT_DOMAIN);
|
textdomain (GETTEXT_DOMAIN);
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
/* Don't be limited by the ANSI codepage. */
|
||||||
|
argv_overriden = get_utf8_args (&argc, &argv);
|
||||||
|
if (argv_overriden)
|
||||||
|
_putenv ("CHARSET=UTF-8");
|
||||||
|
#endif
|
||||||
|
|
||||||
error = NULL;
|
error = NULL;
|
||||||
gtk_init_with_args (&argc, &argv, N_("- Schematic editor"),
|
gtk_init_with_args (&argc, &argv, N_("- Schematic editor"),
|
||||||
option_entries, GETTEXT_DOMAIN, &error);
|
option_entries, GETTEXT_DOMAIN, &error);
|
||||||
|
@ -55,6 +123,14 @@ main (int argc, char *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (argv_overriden)
|
||||||
|
{
|
||||||
|
_putenv ("CHARSET=");
|
||||||
|
g_strfreev (argv);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
gtk_window_set_default_icon_name (PROJECT_NAME);
|
gtk_window_set_default_icon_name (PROJECT_NAME);
|
||||||
|
|
||||||
/* TODO: Be able to open multiple files. */
|
/* TODO: Be able to open multiple files. */
|
||||||
|
|
Loading…
Reference in New Issue