Add a callback mechanism to the options dialog so that other parts of vncviewer
can pick up on changes.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4421 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/OptionsDialog.cxx b/vncviewer/OptionsDialog.cxx
index f69a299..8fe7eec 100644
--- a/vncviewer/OptionsDialog.cxx
+++ b/vncviewer/OptionsDialog.cxx
@@ -42,6 +42,8 @@
 using namespace rdr;
 using namespace rfb;
 
+std::map<OptionsCallback*, void*> OptionsDialog::callbacks;
+
 OptionsDialog::OptionsDialog()
   : Fl_Window(450, 450, _("VNC Viewer: Connection Options"))
 {
@@ -101,6 +103,18 @@
 }
 
 
+void OptionsDialog::addCallback(OptionsCallback *cb, void *data)
+{
+  callbacks[cb] = data;
+}
+
+
+void OptionsDialog::removeCallback(OptionsCallback *cb)
+{
+  callbacks.erase(cb);
+}
+
+
 void OptionsDialog::show(void)
 {
   loadOptions();
@@ -333,6 +347,11 @@
   fullScreen.setParam(fullScreenCheckbox->value());
   useLocalCursor.setParam(localCursorCheckbox->value());
   dotWhenNoCursor.setParam(dotCursorCheckbox->value());
+
+  std::map<OptionsCallback*, void*>::const_iterator iter;
+
+  for (iter = callbacks.begin();iter != callbacks.end();++iter)
+    iter->first(iter->second);
 }