Fresco/Berlin/src DesktopImpl.cc,1.14,1.15 ScreenManager.cc,1.75,1.76

Neil John Pilgrim <[email protected]>
Newsgroups gmane.comp.video.fresco.cvs
Message-ID <[email protected]>
Update of /cvs/fresco/Fresco/Berlin/src
In directory purcel:/tmp/cvs-serv29796/Berlin/src

Modified Files:
	DesktopImpl.cc ScreenManager.cc 
Log Message:
- Hitting ESC on desktop should now exit server cleanly (no inf-loops/crashes)
- Hitting Ctrl-C on controlling terminal of server should now exit it cleanly
- On exiting cleanly, server references are unpublished
=> Closes bug82 and bug126


Index: DesktopImpl.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Berlin/src/DesktopImpl.cc,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- DesktopImpl.cc	29 May 2002 06:49:41 -0000	1.14
+++ DesktopImpl.cc	23 Jan 2003 00:43:01 -0000	1.15
@@ -35,10 +35,12 @@
 using namespace Layout;
 
 DesktopImpl::DesktopImpl(CORBA::ORB_ptr orb,
-			 Stage_ptr stage) :
+			 Stage_ptr stage,
+                         Prague::Semaphore &shutdown_sem) :
   ControllerImpl(false),
   _stage(RefCount_var<Layout::Stage>::increment(stage)),
-  _orb(CORBA::ORB::_duplicate(orb))
+  _orb(CORBA::ORB::_duplicate(orb)),
+  my_shutdown_semaphore(shutdown_sem)
 {
   // Attention !!: this invokes _this(), which implicitely activates the desktop.
   ControllerImpl::body(_stage);
@@ -81,5 +83,5 @@
 {
   Trace trace(this, "DesktopImpl::key_press");
   const Input::Toggle &toggle = event[0].attr.selection();
-  if (toggle.number == Babylon::UC_ESCAPE) _orb->shutdown(false);
+  if (toggle.number == Babylon::UC_ESCAPE) my_shutdown_semaphore.post();
 }

Index: ScreenManager.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Berlin/src/ScreenManager.cc,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -d -r1.75 -r1.76
--- ScreenManager.cc	2 Jun 2002 23:42:19 -0000	1.75
+++ ScreenManager.cc	23 Jan 2003 00:43:01 -0000	1.76
@@ -29,13 +29,17 @@
 #include "Berlin/RegionImpl.hh"
 #include "Berlin/Logger.hh"
 #include "Berlin/ScreenManager.hh"
+#include <Prague/Sys/Thread.hh>
 #include <sstream>
 
 using namespace Prague;
 using namespace Fresco;
 
 ScreenManager::ScreenManager(Graphic_ptr g, EventManager *em, DrawingKit_ptr d)
-  : _screen(g), _emanager(em), _drawing(DrawingKit::_duplicate(d))
+  : _screen(g), 
+    _emanager(em), 
+    _drawing(DrawingKit::_duplicate(d)),
+    my_thread(&ScreenManager::run_thread, this)
 {
 }
 
@@ -111,6 +115,17 @@
     Logger::log(Logger::lifecycle) << "Provider<Transform> pool size is " << Provider<TransformImpl>::size() << std::endl;
     Logger::log(Logger::lifecycle) << "Provider<Region> pool size is " << Provider<RegionImpl>::size() << std::endl;
   }
+}
+
+void ScreenManager::start()
+{
+  my_thread.start();
+}
+
+void *ScreenManager::run_thread(void *X)
+{
+  ScreenManager * const s = reinterpret_cast<ScreenManager*>(X);
+  s->run();
 }
 
 void ScreenManager::run()
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.