diff --git a/src/servers/input/AddOnManager.cpp b/src/servers/input/AddOnManager.cpp index 378d6b097b..424351b05e 100644 --- a/src/servers/input/AddOnManager.cpp +++ b/src/servers/input/AddOnManager.cpp @@ -476,6 +476,13 @@ AddOnManager::RegisterMethod(BInputServerMethod* method, const entry_ref& ref, } +void +AddOnManager::UnloadReplicant() +{ + BDeskbar().RemoveItem(REPLICANT_CTL_NAME); +} + + void AddOnManager::LoadReplicant() { @@ -756,6 +763,12 @@ status_t AddOnManager::HandleMethodReplicant(BMessage* message, BMessage* reply) { CALLED(); + + if (InputServer::gInputMethodList.CountItems() == 0) { + UnloadReplicant(); + return B_OK; + } + LoadReplicant(); BAutolock lock(InputServer::gInputMethodListLocker); diff --git a/src/servers/input/AddOnManager.h b/src/servers/input/AddOnManager.h index 6c17636813..2e5f851f48 100644 --- a/src/servers/input/AddOnManager.h +++ b/src/servers/input/AddOnManager.h @@ -51,6 +51,7 @@ class AddOnManager : public BLooper { status_t HandleNodeMonitor(BMessage*); void LoadReplicant(); + void UnloadReplicant(); int32 GetReplicantAt(BMessenger target, int32 index) const; status_t GetReplicantName(BMessenger target, int32 uid, BMessage *reply) const; status_t GetReplicantView(BMessenger target, int32 uid, BMessage *reply) const;