int loadGtk() { #ifdef AIX #define DLFLAGS RTLD_LAZY | RTLD_MEMBER #else #define DLFLAGS RTLD_LAZY #endif char *overlayScrollbar = getenv("LIBOVERLAY_SCROLLBAR"); if (overlayScrollbar == NULL) { setenv("LIBOVERLAY_SCROLLBAR", "0", 0); } void *gdkLib = NULL, *gtkLib = NULL, *objLib = NULL, *pixLib = NULL, *x11Lib = NULL; char *gtk3 = getenv("SWT_GTK3"); if (gtk3 == NULL || strcmp(gtk3,"1") == 0) { gdkLib = dlopen(GDK3_LIB, DLFLAGS); gtkLib = dlopen(GTK3_LIB, DLFLAGS); if (gtkLib != NULL) { const char * (*func)(int, int, int); dlerror(); *(void**) (&func) = dlsym(gtkLib, "gtk_check_version"); if (dlerror() == NULL && func) { const char *check = (*func)(3, 9, 0); if (check == NULL) { dlclose(gdkLib); dlclose(gtkLib); gdkLib = gtkLib = NULL; setenv("SWT_GTK3","0",1); } } } } if (!gtkLib || !gdkLib) { gdkLib = dlopen(GDK_LIB, DLFLAGS); gtkLib = dlopen(GTK_LIB, DLFLAGS); setenv("SWT_GTK3","0",1); } objLib = dlopen(GOBJ_LIB, DLFLAGS); pixLib = dlopen(PIXBUF_LIB, DLFLAGS); x11Lib = dlopen(X11_LIB, DLFLAGS); /* initialize ptr struct to 0's */ memset(>k, 0, sizeof(struct GTK_PTRS)); if ( gtkLib == NULL || loadGtkSymbols(gtkLib, gtkFunctions) != 0) return -1; if ( gdkLib == NULL || loadGtkSymbols(gdkLib, gdkFunctions) != 0) return -1; if ( pixLib == NULL || loadGtkSymbols(pixLib, pixFunctions) != 0) return -1; if ( objLib == NULL || loadGtkSymbols(objLib, gobjFunctions) != 0) return -1; if ( x11Lib == NULL || loadGtkSymbols(x11Lib, x11Functions) != 0) return -1; return 0; }
int loadGtk() { #ifdef AIX #define DLFLAGS RTLD_LAZY | RTLD_MEMBER #else #define DLFLAGS RTLD_LAZY #endif char *overlayScrollbar = getenv("LIBOVERLAY_SCROLLBAR"); if (overlayScrollbar == NULL) { setenv("LIBOVERLAY_SCROLLBAR", "0", 0); } char *oxygenGtkHack = getenv("OXYGEN_DISABLE_INNER_SHADOWS_HACK"); if (oxygenGtkHack == NULL) { setenv("OXYGEN_DISABLE_INNER_SHADOWS_HACK", "1", 0); } /* Disable GTK scaling*/ setenv("GDK_SCALE", "1", 1); void *gdkLib = NULL, *gtkLib = NULL, *objLib = NULL, *pixLib = NULL, *x11Lib = NULL; char *gtk3 = getenv("SWT_GTK3"); if (gtk3 == NULL || strcmp(gtk3,"1") == 0) { gdkLib = dlopen(GDK3_LIB, DLFLAGS); gtkLib = dlopen(GTK3_LIB, DLFLAGS); /* Work around for https://bugzilla.gnome.org/show_bug.cgi?id=677329, see Eclipse bug 435742 */ char *gdkCoreDeviceEvents = getenv("GDK_CORE_DEVICE_EVENTS"); if (gdkCoreDeviceEvents == NULL) { setenv("GDK_CORE_DEVICE_EVENTS", "1", 0); } } if (!gtkLib || !gdkLib) { //if GTK+ 2 gdkLib = dlopen(GDK_LIB, DLFLAGS); gtkLib = dlopen(GTK_LIB, DLFLAGS); setenv("SWT_GTK3","0",1); const char * (*func)(int, int, int); dlerror(); *(void**) (&func) = dlsym(gtkLib, "gtk_check_version"); if (dlerror() == NULL && func) { const char *check = (*func)(minGtkMajorVersion, minGtkMinorVersion, minGtkMicroVersion); if (check != NULL) { GtkWidget* dialog; int gtkMajorVersion, gtkMinorVersion, gtkMicroVersion; void *gtkMajorPtr, *gtkMinorPtr, *gtkMicroPtr; /* this code is applicable for GTK+ 2 only*/ dlerror(); gtkMajorPtr = dlsym(gtkLib, "gtk_major_version"); if ((dlerror() != NULL) || (gtkMajorPtr == NULL)) return -1; gtkMajorVersion = *(int *)gtkMajorPtr; gtkMinorPtr = dlsym(gtkLib, "gtk_minor_version"); if ((dlerror() != NULL) || (gtkMinorPtr == NULL)) return -1; gtkMinorVersion = *(int *)gtkMinorPtr; gtkMicroPtr = dlsym(gtkLib, "gtk_micro_version"); if ((dlerror() != NULL) || (gtkMicroPtr == NULL)) return -1; gtkMicroVersion = *(int *)gtkMicroPtr; objLib = dlopen(GOBJ_LIB, DLFLAGS); pixLib = dlopen(PIXBUF_LIB, DLFLAGS); x11Lib = dlopen(X11_LIB, DLFLAGS); memset(>k, 0, sizeof(struct GTK_PTRS)); if ( gtkLib == NULL || loadGtkSymbols(gtkLib, gtkFunctions) != 0) return -1; if ( gdkLib == NULL || loadGtkSymbols(gdkLib, gdkFunctions) != 0) return -1; if ( pixLib == NULL || loadGtkSymbols(pixLib, pixFunctions) != 0) return -1; if ( objLib == NULL || loadGtkSymbols(objLib, gobjFunctions) != 0) return -1; if ( x11Lib == NULL || loadGtkSymbols(x11Lib, x11Functions) != 0) return -1; /* Initialize GTK. */ if (gtk.gtk_init_with_args) { GError *error = NULL; if (!gtk.gtk_init_with_args(0, NULL, NULL, NULL, NULL, &error)) { printf("%s", gtkInitFail); exit (1); } } dialog = gtk.gtk_message_dialog_new(NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s %d.%d.%d %s %d.%d.%d.\n%s %d.%d.%d %s", minVerMsg1, minGtkMajorVersion, minGtkMinorVersion, minGtkMicroVersion, minVerMsg2, gtkMajorVersion, gtkMinorVersion, gtkMicroVersion, upgradeWarning1, minGtkMajorVersion, minGtkMinorVersion, minGtkMicroVersion, upgradeWarning2); gtk.gtk_window_set_title((GtkWindow*)dialog, minVerTitle); gtk.gtk_dialog_run((GtkDialog*)dialog); gtk.gtk_widget_destroy(dialog); dlclose(gdkLib); dlclose(gtkLib); gdkLib = gtkLib = NULL; exit (1); } } } objLib = dlopen(GOBJ_LIB, DLFLAGS); pixLib = dlopen(PIXBUF_LIB, DLFLAGS); x11Lib = dlopen(X11_LIB, DLFLAGS); /* initialize ptr struct to 0's */ memset(>k, 0, sizeof(struct GTK_PTRS)); if ( gtkLib == NULL || loadGtkSymbols(gtkLib, gtkFunctions) != 0) return -1; if ( gdkLib == NULL || loadGtkSymbols(gdkLib, gdkFunctions) != 0) return -1; if ( pixLib == NULL || loadGtkSymbols(pixLib, pixFunctions) != 0) return -1; if ( objLib == NULL || loadGtkSymbols(objLib, gobjFunctions) != 0) return -1; if ( x11Lib == NULL || loadGtkSymbols(x11Lib, x11Functions) != 0) return -1; return 0; }
int loadGtk() { #ifdef AIX #define DLFLAGS RTLD_LAZY | RTLD_MEMBER #else #define DLFLAGS RTLD_LAZY #endif void *gioLib = NULL, *glibLib = NULL, *gdkLib = NULL, *gtkLib = NULL, *objLib = NULL, *pixLib = NULL; gdkLib = dlopen(GDK3_LIB, DLFLAGS); gtkLib = dlopen(GTK3_LIB, DLFLAGS); if (!gtkLib || !gdkLib) { const char * (*func)(int, int, int); dlerror(); *(void**) (&func) = dlsym(gtkLib, "gtk_check_version"); if (dlerror() == NULL && func) { const char *check = (*func)(minGtkMajorVersion, minGtkMinorVersion, minGtkMicroVersion); if (check != NULL) { GtkWidget* dialog; int gtkMajorVersion, gtkMinorVersion, gtkMicroVersion; void *gtkMajorPtr, *gtkMinorPtr, *gtkMicroPtr; /* this code is applicable for GTK+ 2 only*/ dlerror(); gtkMajorPtr = dlsym(gtkLib, "gtk_major_version"); if ((dlerror() != NULL) || (gtkMajorPtr == NULL)) return -1; gtkMajorVersion = *(int *)gtkMajorPtr; gtkMinorPtr = dlsym(gtkLib, "gtk_minor_version"); if ((dlerror() != NULL) || (gtkMinorPtr == NULL)) return -1; gtkMinorVersion = *(int *)gtkMinorPtr; gtkMicroPtr = dlsym(gtkLib, "gtk_micro_version"); if ((dlerror() != NULL) || (gtkMicroPtr == NULL)) return -1; gtkMicroVersion = *(int *)gtkMicroPtr; objLib = dlopen(GOBJ_LIB, DLFLAGS); pixLib = dlopen(PIXBUF_LIB, DLFLAGS); gioLib = dlopen(GIO_LIB, DLFLAGS); glibLib= dlopen(GLIB_LIB, DLFLAGS); memset(>k, 0, sizeof(struct GTK_PTRS)); if ( gtkLib == NULL || loadGtkSymbols(gtkLib, gtkFunctions) != 0) return -1; if ( gdkLib == NULL || loadGtkSymbols(gdkLib, gdkFunctions) != 0) return -1; if ( gioLib == NULL || loadGtkSymbols(gdkLib, gioFunctions) != 0) return -1; if ( glibLib == NULL || loadGtkSymbols(gdkLib, glibFunctions) != 0) return -1; if ( pixLib == NULL || loadGtkSymbols(pixLib, pixFunctions) != 0) return -1; if ( objLib == NULL || loadGtkSymbols(objLib, gobjFunctions) != 0) return -1; /* Initialize GTK. */ if (gtk.gtk_init_with_args) { GError *error = NULL; if (!gtk.gtk_init_with_args(0, NULL, NULL, NULL, NULL, &error)) { printf("%s", gtkInitFail); exit (1); } } dialog = gtk.gtk_message_dialog_new(NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s %d.%d.%d %s %d.%d.%d.\n%s %d.%d.%d %s", minVerMsg1, minGtkMajorVersion, minGtkMinorVersion, minGtkMicroVersion, minVerMsg2, gtkMajorVersion, gtkMinorVersion, gtkMicroVersion, upgradeWarning1, minGtkMajorVersion, minGtkMinorVersion, minGtkMicroVersion, upgradeWarning2); gtk.gtk_window_set_title((GtkWindow*)dialog, minVerTitle); gtk.gtk_dialog_run((GtkDialog*)dialog); gtk.gtk_widget_destroy(dialog); dlclose(gdkLib); dlclose(gtkLib); gdkLib = gtkLib = NULL; exit (1); } } } objLib = dlopen(GOBJ_LIB, DLFLAGS); pixLib = dlopen(PIXBUF_LIB, DLFLAGS); gioLib = dlopen(GIO_LIB, DLFLAGS); glibLib= dlopen(GLIB_LIB, DLFLAGS); /* initialize ptr struct to 0's */ memset(>k, 0, sizeof(struct GTK_PTRS)); if ( gtkLib == NULL || loadGtkSymbols(gtkLib, gtkFunctions) != 0) return -1; if ( gdkLib == NULL || loadGtkSymbols(gdkLib, gdkFunctions) != 0) return -1; if ( gioLib == NULL || loadGtkSymbols(gdkLib, gioFunctions) != 0) return -1; if ( glibLib == NULL || loadGtkSymbols(gdkLib, glibFunctions) != 0) return -1; if ( pixLib == NULL || loadGtkSymbols(pixLib, pixFunctions) != 0) return -1; if ( objLib == NULL || loadGtkSymbols(objLib, gobjFunctions) != 0) return -1; return 0; }