Aviso: eu não testei este método
Eu vejo que você já cobre a parte referente à API do Launcher, se não é bem parecido com o que você já fez.
Sobre a integração do Pidgin, olhando para a API, descobri que o Pidgin notifica via DBus quase tudo o que acontece com o cliente.
Com cuidado, você pode ver que há uma lista dos sinais disponíveis. Uma delas é a conversação relacionada . Um deles é o conversation-updated
sinal . Detalhado por:
Analisando os tipos de atualizações que podem vir com esse sinal, encontre PURPLE_CONV_UPDATE_UNSEEN
que é acionado quando o estado invisível é atualizado.
Agora, tudo que você precisa fazer é adaptar seu código para lidar com esse sinal.
Editar:
Eu testei o método e ele funciona. Em este pastebin é o meu código de exemplo, se você quiser dar uma olhada.