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()