]> Dogcows Code - chaz/openbox/commitdiff
in synch mode, chew up 100% cpu, cuz we cant select on the display's fd
authorDana Jansens <danakj@orodu.net>
Tue, 7 Jan 2003 19:24:38 +0000 (19:24 +0000)
committerDana Jansens <danakj@orodu.net>
Tue, 7 Jan 2003 19:24:38 +0000 (19:24 +0000)
otk/display.cc
otk/eventdispatcher.cc
otk/otk_wrap.cc
otk/timerqueuemanager.cc
otk/timerqueuemanager.hh
src/openbox.cc

index 6fc6117cd2e5a72af0a40de1523ff26201c2f642..32674be9736787564ebb6799f33976a325741aca 100644 (file)
@@ -65,8 +65,8 @@ int OBDisplay::xerrorHandler(Display *d, XErrorEvent *e)
   {
     XGetErrorText(d, e->error_code, errtxt, 128);
     printf("X Error: %s\n", errtxt);
-    if (e->error_code != BadWindow)
-      abort();
+//    if (e->error_code != BadWindow)
+//      abort();
   }
 #else
   (void)d;
index 36802f164d59f021e210d1a1e88ec00983040687..576139618ce9bc5061d2daefbf00c3f4efa0dcd3 100644 (file)
@@ -104,14 +104,14 @@ void OtkEventDispatcher::dispatchEvents(void)
       if (e.xfocus.detail == NotifyNonlinear) {
         focus = e.xfocus.window;
         unfocus = None;
-        //printf("FocusIn focus=%lx unfocus=%lx\n", focus, unfocus);
+        printf("FocusIn focus=%lx unfocus=%lx\n", focus, unfocus);
       }
     } else if (e.type == FocusOut) {
       // any other types are not ones we're interested in
       if (e.xfocus.detail == NotifyNonlinear) {
         unfocus = e.xfocus.window;
         focus = None;
-        //printf("FocusOut focus=%lx unfocus=%lx\n", focus, unfocus);
+        printf("FocusOut focus=%lx unfocus=%lx\n", focus, unfocus);
       }
     // madly compress all crossing events
     } else if (e.type == EnterNotify) {
@@ -120,14 +120,14 @@ void OtkEventDispatcher::dispatchEvents(void)
         // any other types are not ones we're interested in
         enter = e.xcrossing.window;
         enter_root = e.xcrossing.root;
-        //printf("Enter enter=%lx leave=%lx\n", enter, leave);
+        printf("Enter enter=%lx leave=%lx\n", enter, leave);
       }
     } else if (e.type == LeaveNotify) {
       // any other types are not ones we're interested in
       if (e.xcrossing.mode == NotifyNormal) {
         leave = e.xcrossing.window;
         leave_root = e.xcrossing.root;
-        //printf("Leave enter=%lx leave=%lx\n", enter, leave);
+        printf("Leave enter=%lx leave=%lx\n", enter, leave);
       }
     } else {
       // normal events
@@ -137,7 +137,7 @@ void OtkEventDispatcher::dispatchEvents(void)
 
   if (unfocus != None) {
     // the last focus event was an FocusOut, so where the hell is the focus at?
-    //printf("UNFOCUSING: %lx\n", unfocus);
+    printf("UNFOCUSING: %lx\n", unfocus);
     _focus_e.xfocus.type = FocusOut;
     _focus_e.xfocus.window = unfocus;
     dispatch(_focus_e.xfocus.window, _focus_e);
@@ -146,13 +146,13 @@ void OtkEventDispatcher::dispatchEvents(void)
   } else if (focus != None && focus != _focus) {
     // the last focus event was a FocusIn, so unfocus what used to be focus and
     // focus this new target
-    //printf("FOCUSING: %lx\n", focus);
+    printf("FOCUSING: %lx\n", focus);
     _focus_e.xfocus.type = FocusIn;
     _focus_e.xfocus.window = focus;
     dispatch(_focus_e.xfocus.window, _focus_e);
 
     if (_focus != None) {
-      //printf("UNFOCUSING: %lx\n", _focus);
+      printf("UNFOCUSING: %lx\n", _focus);
       _focus_e.xfocus.type = FocusOut;
       _focus_e.xfocus.window = _focus;
       dispatch(_focus_e.xfocus.window, _focus_e);
index 8acf2c99db75082b2a6aa196183df8000e621045..57a87fa6ab999de64afe5d933005726a01f0759f 100644 (file)
@@ -12501,11 +12501,17 @@ static PyObject *_wrap_delete_OBTimerQueueManager(PyObject *self, PyObject *args
 static PyObject *_wrap_OBTimerQueueManager_fire(PyObject *self, PyObject *args) {
     PyObject *resultobj;
     otk::OBTimerQueueManager *arg1 = (otk::OBTimerQueueManager *) 0 ;
+    bool arg2 = (bool) true ;
     PyObject * obj0  = 0 ;
+    PyObject * obj1  = 0 ;
     
-    if(!PyArg_ParseTuple(args,(char *)"O:OBTimerQueueManager_fire",&obj0)) goto fail;
+    if(!PyArg_ParseTuple(args,(char *)"O|O:OBTimerQueueManager_fire",&obj0,&obj1)) goto fail;
     if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_otk__OBTimerQueueManager,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
-    (arg1)->fire();
+    if (obj1) {
+        arg2 = (bool) PyInt_AsLong(obj1);
+        if (PyErr_Occurred()) SWIG_fail;
+    }
+    (arg1)->fire(arg2);
     
     Py_INCREF(Py_None); resultobj = Py_None;
     return resultobj;
index a37fe94dbca4827e8ccff7aed72f4f090cea140e..793351543d8e33a4e2c9775be19c0993ab187cd3 100644 (file)
@@ -9,7 +9,7 @@
 
 namespace otk {
 
-void OBTimerQueueManager::fire()
+void OBTimerQueueManager::fire(bool wait)
 {
   fd_set rfds;
   timeval now, tm, *timeout = (timeval *) 0;
@@ -19,17 +19,19 @@ void OBTimerQueueManager::fire()
   FD_ZERO(&rfds);
   FD_SET(xfd, &rfds); // break on any x events
 
-  if (! timerList.empty()) {
-    const OBTimer* const timer = timerList.top();
-
-    gettimeofday(&now, 0);
-    tm = timer->remainingTime(now);
-
-    timeout = &tm;
+  if (wait) {
+    if (! timerList.empty()) {
+      const OBTimer* const timer = timerList.top();
+      
+      gettimeofday(&now, 0);
+      tm = timer->remainingTime(now);
+      
+      timeout = &tm;
+    }
+
+    select(xfd + 1, &rfds, 0, 0, timeout);
   }
 
-  select(xfd + 1, &rfds, 0, 0, timeout);
-
   // check for timer timeout
   gettimeofday(&now, 0);
 
index 48e15e5b2cf283ef1ebe7c4dcd712a565f924ce9..af81ecfe0d6c82220405c452cce74c1c73bd8ce7 100644 (file)
@@ -22,11 +22,12 @@ public:
   //! Destroys the OBTimerQueueManager
   virtual ~OBTimerQueueManager() {}
 
-  //! Will wait for and fire the next timer in the queue.
+  //! Fire the next timer in the queue.
   /*!
-    The function will stop waiting if an event is received from the X server.
+    @param wait If true, this function will wait for the next timer, breaking
+                on any events from the X server.
   */
-  virtual void fire();
+  virtual void fire(bool wait = true);
 
   //! Adds a new timer to the queue
   /*!
index 4e098cb839d0f501c66ada6728806914b21054e5..dda528483f15630460b60474e71730a8838ac7f1 100644 (file)
@@ -306,7 +306,7 @@ void Openbox::showHelp()
 void Openbox::eventLoop()
 {
   while (!_shutdown) {
-    _timermanager.fire();
+    _timermanager.fire(!_sync); // wait if not in sync mode
     dispatchEvents(); // from OtkEventDispatcher
     XFlush(otk::OBDisplay::display); // flush here before we go wait for timers
   }
This page took 0.032684 seconds and 4 git commands to generate.