[skip ci] Port glib embedding example to Py3 and Gtk3
This commit is contained in:
@@ -13,19 +13,15 @@
|
||||
<Option compiler="gcc" />
|
||||
<Compiler>
|
||||
<Add option="-g" />
|
||||
<Add directory="/usr/include/python2.6" />
|
||||
<Add directory="/usr/include/gtk-2.0/" />
|
||||
<Add directory="/usr/include/python3.6m" />
|
||||
<Add directory="/usr/include/gtk-3.0/" />
|
||||
<Add directory="/usr/include/glib-2.0" />
|
||||
<Add directory="/usr/lib/glib-2.0/include" />
|
||||
<Add directory="/usr/lib/x86_64-linux-gnu/glib-2.0/include" />
|
||||
<Add directory="/usr/include/cairo/" />
|
||||
<Add directory="/usr/include/pango-1.0/" />
|
||||
<Add directory="/usr/lib/gtk-2.0/include/" />
|
||||
<Add directory="/usr/include/gtk-2.0/gdk/" />
|
||||
<Add directory="/usr/include/gdk-pixbuf-2.0/" />
|
||||
<Add directory="/usr/include/atk-1.0/" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add library="/usr/lib/libgtk-x11-2.0.so" />
|
||||
</Linker>
|
||||
</Target>
|
||||
<Target title="Release">
|
||||
<Option output="bin/Release/glib" prefix_auto="1" extension_auto="1" />
|
||||
@@ -42,13 +38,15 @@
|
||||
</Build>
|
||||
<Compiler>
|
||||
<Add option="-Wall" />
|
||||
<Add option="`pkg-config gtk+-2.0 --cflags`" />
|
||||
<Add directory="/usr/include/python2.6" />
|
||||
<Add option="`pkg-config gtk+-3.0 --cflags`" />
|
||||
<Add directory="/usr/include/gtk-3.0" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add option="`pkg-config gtk+-2.0 --libs`" />
|
||||
<Add library="python2.6" />
|
||||
<Add directory="/usr/lib" />
|
||||
<Add option="`pkg-config gtk+-3.0 --libs`" />
|
||||
<Add library="python3.6m" />
|
||||
<Add library="glib-2.0" />
|
||||
<Add library="gobject-2.0" />
|
||||
<Add directory="/usr/lib/x86_64-linux-gnu/" />
|
||||
</Linker>
|
||||
<Unit filename="main.c">
|
||||
<Option compilerVar="CC" />
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user