also if neither the applet or main window is visible a stack overflow will occur because the code path is recursive once on_visibility_changed() is called. example

MainWindow::win32_show() will call visibility_changed_signal.emit() which goes off and then

```
 	workrave.exe!sigc::bound_mem_functor0<void,GUI>::operator()()  Line 1787 + 0x3f bytes	C++
 	workrave.exe!sigc::adaptor_functor<sigc::bound_mem_functor0<void,GUI> >::operator()()  Line 251 + 0x2b bytes	C++
 	workrave.exe!sigc::internal::slot_call0<sigc::bound_mem_functor0<void,GUI>,void>::call_it(sigc::internal::slot_rep * rep)  Line 104	C++
 	workrave.exe!sigc::internal::signal_emit0<void,sigc::nil>::emit(sigc::internal::signal_impl * impl)  Line 772 + 0x1c bytes	C++
 	workrave.exe!sigc::signal0<void,sigc::nil>::emit()  Line 2667 + 0x2f bytes	C++
 	workrave.exe!StatusIcon::config_changed_notify(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & key)  Line 242	C++
 	workrave.exe!Configurator::fire_configurator_event(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & key)  Line 691 + 0x19 bytes	C++
 	workrave.exe!Configurator::set_value(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & key, Variant & value, workrave::ConfigFlags flags)  Line 229	C++
 	workrave.exe!Configurator::set_value(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & key, bool v, workrave::ConfigFlags flags)  Line 388 + 0x14 bytes	C++
 	workrave.exe!GUIConfig::set_trayicon_enabled(bool b)  Line 116 + 0x2c bytes	C++
 	workrave.exe!GUI::process_visibility()  Line 1555 + 0x7 bytes	C++
 	workrave.exe!GUI::on_visibility_changed()  Line 1544	C++


 	workrave.exe!sigc::bound_mem_functor0<void,GUI>::operator()()  Line 1787 + 0x3f bytes	C++
 	workrave.exe!sigc::adaptor_functor<sigc::bound_mem_functor0<void,GUI> >::operator()()  Line 251 + 0x2b bytes	C++
 	workrave.exe!sigc::internal::slot_call0<sigc::bound_mem_functor0<void,GUI>,void>::call_it(sigc::internal::slot_rep * rep)  Line 104	C++
 	workrave.exe!sigc::internal::signal_emit0<void,sigc::nil>::emit(sigc::internal::signal_impl * impl)  Line 772 + 0x1c bytes	C++
 	workrave.exe!sigc::signal0<void,sigc::nil>::emit()  Line 2667 + 0x2f bytes	C++
 	workrave.exe!StatusIcon::config_changed_notify(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & key)  Line 242	C++
 	workrave.exe!Configurator::fire_configurator_event(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & key)  Line 691 + 0x19 bytes	C++
 	workrave.exe!Configurator::set_value(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & key, Variant & value, workrave::ConfigFlags flags)  Line 229	C++
 	workrave.exe!Configurator::set_value(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & key, bool v, workrave::ConfigFlags flags)  Line 388 + 0x14 bytes	C++
 	workrave.exe!GUIConfig::set_trayicon_enabled(bool b)  Line 116 + 0x2c bytes	C++
 	workrave.exe!GUI::process_visibility()  Line 1555 + 0x7 bytes	C++
 	workrave.exe!GUI::on_visibility_changed()  Line 1544	C++
```

over and over again until so. click on the tray icon to reproduce