diff --git a/src/Tools/embedded/glib/glib.cbp b/src/Tools/embedded/glib/glib.cbp
index 6616b1c644..792c93d9ee 100644
--- a/src/Tools/embedded/glib/glib.cbp
+++ b/src/Tools/embedded/glib/glib.cbp
@@ -13,19 +13,15 @@
-
-
+
+
-
+
-
-
+
-
-
-
@@ -42,13 +38,15 @@
-
-
+
+
-
-
-
+
+
+
+
+
diff --git a/src/Tools/embedded/glib/main.c b/src/Tools/embedded/glib/main.c
index 20eb5b0d0d..48bf601e73 100644
--- a/src/Tools/embedded/glib/main.c
+++ b/src/Tools/embedded/glib/main.c
@@ -12,24 +12,24 @@ static void helloWorld (GtkWidget *wid, GtkWidget *win)
PyObject* result = PyRun_String("import FreeCADGui\n"
"FreeCADGui.showMainWindow()",
Py_file_input, dict, dict);
- if (result) {
- Py_DECREF(result);
- }
- else {
+ if (result) {
+ Py_DECREF(result);
+ }
+ else {
PyObject *ptype, *pvalue, *ptrace;
PyErr_Fetch(&ptype, &pvalue, &ptrace);
PyObject* pystring = PyObject_Str(pvalue);
- const char* error = PyString_AsString(pystring);
+ const char* error = PyUnicode_AsUTF8(pystring);
GtkWidget *dialog = NULL;
- dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, error);
+ dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "%s", error);
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
Py_DECREF(pystring);
- }
- Py_DECREF(dict);
+ }
+ Py_DECREF(dict);
}
int main (int argc, char *argv[])
@@ -39,10 +39,21 @@ int main (int argc, char *argv[])
GtkWidget *vbox = NULL;
/* Init Python */
- Py_SetProgramName(argv[0]);
- PyEval_InitThreads();
+ wchar_t *program = Py_DecodeLocale(argv[0], NULL);
+ if (program == NULL) {
+ fprintf(stderr, "Fatal error: cannot decode argv[0]\n");
+ exit(1);
+ }
+
+ Py_SetProgramName(program);
Py_Initialize();
- PySys_SetArgv(argc, argv);
+ PyEval_InitThreads();
+
+ wchar_t *args[argc];
+ for (int i = 0; i < argc; i++) {
+ args[i] = Py_DecodeLocale(argv[i], NULL);
+ }
+ PySys_SetArgv(argc, args);
/* Initialize GTK+ */
g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
@@ -58,14 +69,16 @@ int main (int argc, char *argv[])
g_signal_connect (win, "destroy", gtk_main_quit, NULL);
/* Create a vertical box with buttons */
- vbox = gtk_vbox_new (TRUE, 6);
+ vbox = gtk_box_new (TRUE, 6);
gtk_container_add (GTK_CONTAINER (win), vbox);
- button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO);
+ button = gtk_button_new_from_icon_name ("document-open", GTK_ICON_SIZE_BUTTON);
+ gtk_button_set_label((GtkButton*)button, "Load module");
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (helloWorld), (gpointer) win);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
- button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
+ button = gtk_button_new_from_icon_name ("window-close", GTK_ICON_SIZE_BUTTON);
+ gtk_button_set_label((GtkButton*)button, "Close");
g_signal_connect (button, "clicked", gtk_main_quit, NULL);
gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);