diff --git a/src/kits/opengl/GLRendererRoster.cpp b/src/kits/opengl/GLRendererRoster.cpp index 03872d00f4..06a14c7139 100644 --- a/src/kits/opengl/GLRendererRoster.cpp +++ b/src/kits/opengl/GLRendererRoster.cpp @@ -5,9 +5,11 @@ * Authors: */ +#include +#include + #include #include -#include #include #include #include "GLDispatcher.h" @@ -17,13 +19,49 @@ #include +#ifdef HAIKU_TARGET_PLATFORM_HAIKU +extern "C" status_t _kern_get_safemode_option(const char *parameter, + char *buffer, size_t *_bufferSize); +#else +extern "C" status_t _kget_safemode_option_(const char *parameter, + char *buffer, size_t *_bufferSize); +#endif + GLRendererRoster::GLRendererRoster(BGLView *view, ulong options) : fNextID(0), fView(view), - fOptions(options) + fOptions(options), + fSafeMode(false) { - AddDefaultPaths(); + char parameter[32]; + size_t parameterLength = sizeof(parameter); + +#ifdef HAIKU_TARGET_PLATFORM_HAIKU + if (_kern_get_safemode_option(B_SAFEMODE_SAFE_MODE, parameter, ¶meterLength) == B_OK) +#else + if (_kget_safemode_option_(B_SAFEMODE_SAFE_MODE, parameter, ¶meterLength) == B_OK) +#endif + { + if (!strcasecmp(parameter, "enabled") || !strcasecmp(parameter, "on") + || !strcasecmp(parameter, "true") || !strcasecmp(parameter, "yes") + || !strcasecmp(parameter, "enable") || !strcmp(parameter, "1")) + fSafeMode = true; + } + +#ifdef HAIKU_TARGET_PLATFORM_HAIKU + if (_kern_get_safemode_option(B_SAFEMODE_DISABLE_USER_ADD_ONS, parameter, ¶meterLength) == B_OK) +#else + if (_kget_safemode_option_(B_SAFEMODE_DISABLE_USER_ADD_ONS, parameter, ¶meterLength) == B_OK) +#endif + { + if (!strcasecmp(parameter, "enabled") || !strcasecmp(parameter, "on") + || !strcasecmp(parameter, "true") || !strcasecmp(parameter, "yes") + || !strcasecmp(parameter, "enable") || !strcmp(parameter, "1")) + fSafeMode = true; + } + + AddDefaultPaths(); } @@ -55,7 +93,7 @@ GLRendererRoster::AddDefaultPaths() B_BEOS_ADDONS_DIRECTORY, }; - for (uint32 i = 0; i < sizeof(paths) / sizeof(paths[0]); i++) { + for (uint32 i = fSafeMode ? 2 : 0; i < sizeof(paths) / sizeof(paths[0]); i++) { BPath path; status_t status = find_directory(paths[i], &path, true); if (status == B_OK && path.Append("opengl") == B_OK) diff --git a/src/kits/opengl/GLRendererRoster.h b/src/kits/opengl/GLRendererRoster.h index e27bbef108..af8c62920a 100644 --- a/src/kits/opengl/GLRendererRoster.h +++ b/src/kits/opengl/GLRendererRoster.h @@ -35,6 +35,7 @@ class GLRendererRoster { int32 fNextID; BGLView *fView; ulong fOptions; + bool fSafeMode; }; #endif /* _GLRENDERER_ROSTER_H */ diff --git a/src/kits/opengl/Jamfile b/src/kits/opengl/Jamfile index d6687e0345..58b4bb492c 100644 --- a/src/kits/opengl/Jamfile +++ b/src/kits/opengl/Jamfile @@ -2,7 +2,7 @@ SubDir HAIKU_TOP src kits opengl ; SetSubDirSupportedPlatformsBeOSCompatible ; -UsePrivateHeaders opengl ; +UsePrivateHeaders kernel opengl ; if $(TARGET_PLATFORM) != haiku { UseHeaders [ FDirName $(HAIKU_TOP) headers os opengl ] : true ;