diff --git a/src/servers/input/AddOnManager.cpp b/src/servers/input/AddOnManager.cpp index 4b1d515fd6..62be7d58e3 100644 --- a/src/servers/input/AddOnManager.cpp +++ b/src/servers/input/AddOnManager.cpp @@ -22,9 +22,9 @@ #include "InputServer.h" -AddOnManager::AddOnManager() - : - fLock("add-on manager") +AddOnManager::AddOnManager(bool safeMode) + : fLock("add-on manager"), + fSafeMode(safeMode) { } @@ -266,8 +266,11 @@ AddOnManager::RegisterAddOns() node_ref nref; BDirectory directory; BPath path; - for (uint i = 0 ; i < sizeof(directories) / sizeof(directory_which) ; i++) - for (uint j = 0 ; j < sizeof(subDirectories) / sizeof(char[24]) ; j++) { + uint i = 0; + if (fSafeMode) // when safemode, only B_BEOS_ADDONS_DIRECTORY is used + i = 2; + for (i = 0 ; i < sizeof(directories) / sizeof(directory_which) ; i++) + for (uint32 j = 0 ; j < sizeof(subDirectories) / sizeof(char[24]) ; j++) { if ((find_directory(directories[i], &path) == B_OK) && (path.Append(subDirectories[j]) == B_OK) && (directory.SetTo(path.Path()) == B_OK) diff --git a/src/servers/input/AddOnManager.h b/src/servers/input/AddOnManager.h index 7c373736a2..8db6af9e2c 100644 --- a/src/servers/input/AddOnManager.h +++ b/src/servers/input/AddOnManager.h @@ -20,7 +20,7 @@ class AddOnManager { public: - AddOnManager(); + AddOnManager(bool safeMode); ~AddOnManager(); void LoadState(); @@ -60,6 +60,8 @@ class AddOnManager { AddOnMonitorHandler *fHandler; AddOnMonitor *fAddOnMonitor; + + bool fSafeMode; }; #endif // _ADD_ON_MANAGER_H diff --git a/src/servers/input/InputServer.cpp b/src/servers/input/InputServer.cpp index d15e211d2e..3d2f212b01 100644 --- a/src/servers/input/InputServer.cpp +++ b/src/servers/input/InputServer.cpp @@ -109,7 +109,7 @@ InputServer::InputServer(void) : BApplication(INPUTSERVER_SIGNATURE), InitKeyboardMouseStates(); - fAddOnManager = new AddOnManager(); + fAddOnManager = new AddOnManager(SafeMode()); fAddOnManager->LoadState(); }