The attached implements GUII timeout for xforms and KDE.

It also removes the duplicate OkViewPolicy and tidies up a little
in BufferView_pimpl.C

thanks
john

-- 
"IBM's decision to choose the Intel 80x86 processor over 
the Motorola 680x0 probably set the personal computer 
industry back 10 years."
        - Brian Marsden
Index: src/BufferView_pimpl.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/BufferView_pimpl.C,v
retrieving revision 1.64
diff -u -p -r1.64 BufferView_pimpl.C
--- src/BufferView_pimpl.C      2001/01/29 10:24:16     1.64
+++ src/BufferView_pimpl.C      2001/02/07 12:45:33
@@ -33,7 +33,6 @@ using SigC::slot;
 
 using std::pair;
 using std::endl;
-using std::vector;
 using std::make_pair;
 using std::min;
 
@@ -207,7 +206,6 @@ void BufferView::Pimpl::resize(int xpos,
 
 void BufferView::Pimpl::resize()
 {
-       // This will resize the buffer. (Asger)
        if (buffer_)
                resizeCurrentBuffer();
 }
@@ -222,8 +220,8 @@ void BufferView::Pimpl::redraw()
 
 bool BufferView::Pimpl::fitCursor(LyXText * text)
 {
-       Assert(screen_); // it is a programming error to call fitCursor
-       // without a valid screen.
+       Assert(screen_);
+ 
        bool ret = screen_->FitCursor(text, bv_);
        if (ret)
            updateScrollbar();
@@ -393,7 +391,7 @@ void BufferView::Pimpl::updateScrollbar(
 // Callback for scrollbar slider
 void BufferView::Pimpl::scrollCB(double value)
 {
-       if (buffer_ == 0) return;
+       if (!buffer_) return;
 
        current_scrollbar_value = long(value);
        if (current_scrollbar_value < 0)
@@ -404,35 +402,35 @@ void BufferView::Pimpl::scrollCB(double 
 
        screen_->Draw(bv_->text, bv_, current_scrollbar_value);
 
-       if (lyxrc.cursor_follows_scrollbar) {
-               LyXText * vbt = bv_->text;
-               int height = vbt->DefaultHeight();
-               
-               if (vbt->cursor.y() < static_cast<int>((bv_->text->first + height))) {
-                       vbt->SetCursorFromCoordinates(bv_, 0,
-                                                     bv_->text->first +
-                                                     height);
-               } else if (vbt->cursor.y() >
-                          
static_cast<int>((bv_->text->first+workarea_->height()-height)))
-               {
-                       vbt->SetCursorFromCoordinates(bv_, 0,
-                                                     bv_->text->first +
-                                                     workarea_->height()  -
-                                                     height);
-               }
+       if (!lyxrc.cursor_follows_scrollbar) {
+               waitForX();
+               return;
        }
+ 
+       LyXText * vbt = bv_->text;
+ 
+       int height = vbt->DefaultHeight();
+       int first = static_cast<int>((bv_->text->first + height));
+       int last = static_cast<int>((bv_->text->first + workarea_->height() - 
+height));
+
+       if (vbt->cursor.y() < first)
+               vbt->SetCursorFromCoordinates(bv_, 0, first);
+       else if (vbt->cursor.y() > last)
+               vbt->SetCursorFromCoordinates(bv_, 0, last);
+
        waitForX();
 }
 
 
 int BufferView::Pimpl::scrollUp(long time)
 {
-       if (buffer_ == 0) return 0;
+       if (!buffer_) return 0;
        if (!screen_) return 0;
    
        double value = workarea_->getScrollbarValue();
    
-       if (value == 0) return 0;
+       // hemm ... 
+       if (int(value) == 0) return 0;
 
        float add_value =  (bv_->text->DefaultHeight()
                            + float(time) * float(time) * 0.125);
@@ -455,13 +453,14 @@ int BufferView::Pimpl::scrollUp(long tim
 
 int BufferView::Pimpl::scrollDown(long time)
 {
-       if (buffer_ == 0) return 0;
+       if (!buffer_) return 0;
        if (!screen_) return 0;
    
        double value= workarea_->getScrollbarValue();
        pair<float, float> p = workarea_->getScrollbarBounds();
        double max = p.second;
        
+       // hemm ...
        if (value == max) return 0;
 
        float add_value =  (bv_->text->DefaultHeight()
@@ -495,7 +494,7 @@ void BufferView::Pimpl::workAreaMotionNo
        if (!(state & Button1MotionMask))
                return;
 
-       if (buffer_ == 0 || !screen_) return;
+       if (!buffer_ || !screen_) return;
 
        // Check for inset locking
        if (bv_->theLockingInset()) {
@@ -514,22 +513,22 @@ void BufferView::Pimpl::workAreaMotionNo
                return;
        }
    
-       /* The selection possible is needed, that only motion events are 
+       /* The test for not selection possible is needed, that only motion events are 
         * used, where the bottom press event was on the drawing area too */
-       if (selection_possible) {
-               screen_->HideCursor();
+       if (!selection_possible)
+               return;
+ 
+       screen_->HideCursor();
 
-               bv_->text->SetCursorFromCoordinates(bv_, x, y + bv_->text->first);
+       bv_->text->SetCursorFromCoordinates(bv_, x, y + bv_->text->first);
       
-               if (!bv_->text->selection)
-                       update(BufferView::UPDATE); // Maybe an empty line was deleted
+       if (!bv_->text->selection)
+               update(BufferView::UPDATE); // Maybe an empty line was deleted
       
-               bv_->text->SetSelection();
-               screen_->ToggleToggle(bv_->text, bv_);
-               fitCursor(bv_->text);
-               screen_->ShowCursor(bv_->text, bv_);
-       }
-       return;
+       bv_->text->SetSelection();
+       screen_->ToggleToggle(bv_->text, bv_);
+       fitCursor(bv_->text);
+       screen_->ShowCursor(bv_->text, bv_);
 }
 
 
@@ -540,7 +539,7 @@ void BufferView::Pimpl::workAreaButtonPr
        last_click_x = -1;
        last_click_y = -1;
 
-       if (buffer_ == 0 || !screen_) return;
+       if (!buffer_ || !screen_) return;
 
        Inset * inset_hit = checkInsetHit(bv_->text, xpos, ypos, button);
 
@@ -694,7 +693,7 @@ void BufferView::Pimpl::leaveView()
 void BufferView::Pimpl::workAreaButtonRelease(int x, int y,
                                              unsigned int button)
 {
-       if (buffer_ == 0 || screen_ == 0) return;
+       if (!buffer_ || !screen_) return;
 
        // If we hit an inset, we have the inset coordinates in these
        // and inset_hit points to the inset.  If we do not hit an
@@ -720,7 +719,7 @@ void BufferView::Pimpl::workAreaButtonRe
        owner_->showState();
 
        // Did we hit an editable inset?
-       if (inset_hit != 0) {
+       if (inset_hit) {
                // Inset like error, notes and figures
                selection_possible = false;
 
@@ -916,12 +915,6 @@ Inset * BufferView::Pimpl::checkInsetHit
 
 void BufferView::Pimpl::workAreaExpose()
 {
-       // this is a hack to ensure that we only call this through
-       // BufferView::redraw().
-       //if (!lgb_hack) {
-       //      redraw();
-       //}
-       
        static int work_area_width = 0;
        static unsigned int work_area_height = 0;
 
@@ -1048,50 +1041,22 @@ void BufferView::Pimpl::cursorToggle()
        // Quite a nice place for asyncron Inset updating, isn't it?
        // Actually no! This is run even if no buffer exist... so (Lgb)
        if (!buffer_) {
-               goto set_timer_and_return;
-       }
-
-       // NOTE:
-       // On my quest to solve the gs render hangups I am now
-       // disabling the SIGHUP completely, and will do a wait
-       // now and then instead. If the guess that xforms somehow
-       // destroys something is true, this is likely (hopefully)
-       // to solve the problem...at least I hope so. Lgb
-
-       // ...Ok this seems to work...at least it does not make things
-       // worse so far. However I still see gs processes that hangs.
-       // I would really like to know _why_ they are hanging. Anyway
-       // the solution without the SIGCHLD handler seems to be easier
-       // to debug.
-
-       // When attaching gdb to a a running gs that hangs it shows
-       // that it is waiting for input(?) Is it possible for us to
-       // provide that input somehow? Or figure what it is expecing
-       // to read?
-
-       // One solution is to, after some time, look if there are some
-       // old gs processes still running and if there are: kill them
-       // and re render.
-
-       // Another solution is to provide the user an option to rerender
-       // a picture. This would, for the picture in question, check if
-       // there is a gs running for it, if so kill it, and start a new
-       // rendering process.
-
-       // these comments posted to lyx@via
-       {
-               int status = 1;
-               int pid = waitpid(static_cast<pid_t>(0), &status, WNOHANG);
-               if (pid == -1) // error find out what is wrong
-                       ; // ignore it for now.
-               else if (pid > 0)
-                       sigchldhandler(pid, &status);
+               cursor_timeout.restart();
+               return;
        }
+ 
+       int status = 1;
+       int pid = waitpid(static_cast<pid_t>(0), &status, WNOHANG);
+       if (pid == -1) // error find out what is wrong
+               ; // ignore it for now.
+       else if (pid > 0)
+               sigchldhandler(pid, &status);
 
        updatelist.update(bv_);
        
        if (!screen_) {
-               goto set_timer_and_return;
+               cursor_timeout.restart();
+               return;
        }
 
        if (!bv_->theLockingInset()) {
@@ -1100,9 +1065,7 @@ void BufferView::Pimpl::cursorToggle()
                bv_->theLockingInset()->ToggleInsetCursor(bv_);
        }
        
-  set_timer_and_return:
        cursor_timeout.restart();
-       return;
 }
 
 
@@ -1168,9 +1131,6 @@ void BufferView::Pimpl::beforeChange()
 {
        toggleSelection();
        bv_->text->ClearSelection();
-
-       // CHECK
-       //owner_->update_timeout.stop();
 }
 
 
@@ -1338,7 +1298,7 @@ void BufferView::Pimpl::center() 
 
 void BufferView::Pimpl::pasteClipboard(bool asPara) 
 {
-       if (buffer_ == 0) return;
+       if (!buffer_) return;
 
        screen_->HideCursor();
        bv_->beforeChange();
Index: src/BufferView_pimpl.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/BufferView_pimpl.h,v
retrieving revision 1.25
diff -u -p -r1.25 BufferView_pimpl.h
--- src/BufferView_pimpl.h      2001/01/29 17:45:29     1.25
+++ src/BufferView_pimpl.h      2001/02/07 12:45:33
@@ -5,7 +5,7 @@
 
 #include "BufferView.h"
 #include "UpdateInset.h"
-#include "Timeout.h"
+#include "frontends/Timeout.h"
 
 #ifdef __GNUG__
 #pragma interface
Index: src/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ChangeLog,v
retrieving revision 1.37
diff -u -p -r1.37 ChangeLog
--- src/ChangeLog       2001/02/06 17:41:41     1.37
+++ src/ChangeLog       2001/02/07 12:45:33
@@ -1,3 +1,14 @@
+2001-02-07  John Levon  <[EMAIL PROTECTED]>
+
+       * BufferView_pimpl.C: housekeeping
+
+       * BufferView_pimpl.h:
+       * LyXView.h:
+       * Makefile.am:
+       * Timeout.C:
+       * Timeout.h:
+       * minibuffer.h: move Timeout GUI-I
+
 2001-02-06  John Levon  <[EMAIL PROTECTED]>
 
        * Makefile.am: remove LaTeXLog.C, log_form.[Ch]
Index: src/LyXView.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/LyXView.h,v
retrieving revision 1.27
diff -u -p -r1.27 LyXView.h
--- src/LyXView.h       2000/11/04 10:00:08     1.27
+++ src/LyXView.h       2001/02/07 12:45:33
@@ -20,7 +20,7 @@
 #include FORMS_H_LOCATION
 
 #include "LString.h"
-#include "Timeout.h"
+#include "frontends/Timeout.h"
 #include <boost/utility.hpp>
 #include "layout.h"
 
Index: src/Makefile.am
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/Makefile.am,v
retrieving revision 1.67
diff -u -p -r1.67 Makefile.am
--- src/Makefile.am     2001/02/06 17:41:41     1.67
+++ src/Makefile.am     2001/02/07 12:45:33
@@ -73,8 +73,6 @@ lyx_SOURCES = \
        Spacing.h \
        TextCache.C \
        TextCache.h \
-       Timeout.C \
-       Timeout.h \
        ToolbarDefaults.C \
        ToolbarDefaults.h \
        UpdateInset.C \
Index: src/Timeout.C
===================================================================
RCS file: Timeout.C
diff -N Timeout.C
--- src/Timeout.C       Wed Feb  7 13:45:33 2001
+++ /dev/null   Tue May  5 22:32:27 1998
@@ -1,95 +0,0 @@
-/* This file is part of
- * ====================================================== 
- * 
- *           LyX, The Document Processor
- *        
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2000 The LyX Team.
- *
- * ====================================================== */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-#include <config.h>
-
-#include FORMS_H_LOCATION
-
-#include "Timeout.h"
-#include "debug.h"
-
-using std::endl;
-
-extern "C" {
-       static
-       void C_intern_timeout_cb(int, void * data) 
-       {
-               Timeout * to = static_cast<Timeout*>(data);
-               to->emit();
-       }
-}
-
-
-Timeout::Timeout()
-       : type(ONETIME), timeout_ms(0), timeout_id(-1)
-{}
-
-
-Timeout::Timeout(unsigned int msec, Type t)
-       : type(t), timeout_ms(msec), timeout_id(-1)
-{}
-
-
-Timeout::~Timeout() 
-{
-       stop();
-}
-
-
-void Timeout::restart()
-{
-       stop();
-       start();
-}
-
-
-void Timeout::start()
-{
-       if (timeout_id != -1)
-               lyxerr << "Timeout::start: already running!" << endl;
-       timeout_id = fl_add_timeout(timeout_ms,
-                                   C_intern_timeout_cb, this);
-}
-       
-
-void Timeout::stop()
-{
-       if (timeout_id != -1) {
-               fl_remove_timeout(timeout_id);
-               timeout_id = -1;
-       }
-}
-
-
-void Timeout::emit()
-{
-       timeout_id = -1;
-       timeout.emit();
-       if (type == CONTINOUS)
-               start();
-}
-       
-
-Timeout & Timeout::setType(Type t)
-{
-       type = t;
-       return *this;
-}
-
-
-Timeout & Timeout::setTimeout(unsigned int msec)
-{
-       timeout_ms = msec;
-       return *this;
-}
Index: src/Timeout.h
===================================================================
RCS file: Timeout.h
diff -N Timeout.h
--- src/Timeout.h       Wed Feb  7 13:45:33 2001
+++ /dev/null   Tue May  5 22:32:27 1998
@@ -1,69 +0,0 @@
-// -*- C++ -*-
-/* This file is part of
- * ====================================================== 
- * 
- *           LyX, The Document Processor
- *        
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2000 The LyX Team.
- *
- * ====================================================== */
-
-#ifndef TIMEOUT_H
-#define TIMEOUT_H
-
-#include <config.h>
-
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <sigc++/signal_system.h>
-
-#ifdef SIGC_CXX_NAMESPACES
-using SigC::Signal0;
-#endif
-
-/** This class executes the callback when the timeout expires.
-    This class currently uses a regular callback, later it will use
-    signals and slots to provide the same.
-*/
-class Timeout {
-public:
-       ///
-       enum Type {
-               ///
-               ONETIME,
-               ///
-               CONTINOUS
-       };
-       ///
-       Timeout();
-       ///
-       Timeout(unsigned int msec, Type = ONETIME);
-       ///
-       ~Timeout();
-       ///
-       void start();
-       ///
-       void stop();
-       ///
-       void restart();
-       ///
-       Signal0<void> timeout;
-       ///
-       void emit();
-       ///
-       Timeout & setType(Type t);
-       ///
-       Timeout & setTimeout(unsigned int msec);
-private:
-       ///
-       Type type;
-       ///
-       unsigned int timeout_ms;
-       ///
-       int timeout_id;
-};
-
-#endif
Index: src/minibuffer.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/minibuffer.h,v
retrieving revision 1.13
diff -u -p -r1.13 minibuffer.h
--- src/minibuffer.h    2000/10/26 00:07:20     1.13
+++ src/minibuffer.h    2001/02/07 12:45:33
@@ -5,7 +5,7 @@
 #include FORMS_H_LOCATION
 #include "LString.h"
 #include "gettext.h"
-#include "Timeout.h"
+#include "frontends/Timeout.h"
 
 #ifdef __GNUG__
 #pragma interface
Index: src/frontends/ButtonPolicies.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/ButtonPolicies.C,v
retrieving revision 1.11
diff -u -p -r1.11 ButtonPolicies.C
--- src/frontends/ButtonPolicies.C      2001/02/06 17:41:42     1.11
+++ src/frontends/ButtonPolicies.C      2001/02/07 12:45:33
@@ -118,25 +118,6 @@ void PreferencesPolicy::input(SMInput in
 }
 
 
-/*-------------------------------OkViewPolicy------------------------------*/
-
-
-OkViewPolicy::OkViewPolicy()
-       : state_(INITIAL),
-         outputs_(INVALID + 1, ButtonPolicy::ALL_BUTTONS),
-         state_machine_(INVALID + 1,
-                        StateArray(int(SMI_TOTAL), ButtonPolicy::BOGUS))
-{
-}
-
-
-
-void OkViewPolicy::input(SMInput)
-{
-       state_ = VALID;
-}
-
-
 /*-------------------------------OkCancelPolicy------------------------------*/
 
 
Index: src/frontends/ButtonPolicies.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/ButtonPolicies.h,v
retrieving revision 1.13
diff -u -p -r1.13 ButtonPolicies.h
--- src/frontends/ButtonPolicies.h      2001/02/06 17:41:42     1.13
+++ src/frontends/ButtonPolicies.h      2001/02/07 12:45:33
@@ -216,32 +216,6 @@ private:
        StateMachine state_machine_;
 };
 
-/** OK button policy for dialogs that can't mutate the document,
-    and are always valid
- */ 
-class OkViewPolicy : public ButtonPolicy {
-public:
-       ///
-       OkViewPolicy();
-       /// Trigger a transition with this input
-       virtual void input(SMInput);
-       /// activation status
-       virtual bool buttonStatus(Button button) const {
-               return button & outputs_[state_];
-       }
-       /// are we in a read-only state ?
-       virtual bool isReadOnly() const { 
-               return false;
-       }
-private:
-       /// current state
-       State state_;
-       /// which buttons are active
-       StateOutputs outputs_;
-       ///
-       StateMachine state_machine_;
-};
- 
 /** Ok and Cancel buttons for dialogs where read-only operation is blocked.
     The state machine design for this policy allows changes to occur within
     the dialog while a file is read-only -- the okay button is disabled until
Index: src/frontends/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/ChangeLog,v
retrieving revision 1.3
diff -u -p -r1.3 ChangeLog
--- src/frontends/ChangeLog     2001/02/06 17:41:42     1.3
+++ src/frontends/ChangeLog     2001/02/07 12:45:33
@@ -1,3 +1,13 @@
+2001-02-07  John Levon  <[EMAIL PROTECTED]>
+
+       * ButtonPolicies.C:
+       * ButtonPolicies.h: and remove OkViewPolicy,
+         it's a duplicate of IgnorantPolicy
+
+       * Makefile.am:
+       * Timeout.C:
+       * Timeout.h: add GUI-I Timeout class
+
 2001-02-06  John Levon  <[EMAIL PROTECTED]>
 
        * ButtonPolicies.C:
Index: src/frontends/Makefile.am
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/Makefile.am,v
retrieving revision 1.12
diff -u -p -r1.12 Makefile.am
--- src/frontends/Makefile.am   2001/01/26 10:16:04     1.12
+++ src/frontends/Makefile.am   2001/02/07 12:45:33
@@ -20,6 +20,8 @@ libfrontends_la_SOURCES=\
        Liason.h \
        Menubar.C \
        Menubar.h \
+       Timeout.C \
+       Timeout.h \
        Toolbar.C \
        Toolbar.h
 
Index: src/frontends/Timeout.C
===================================================================
RCS file: Timeout.C
diff -N Timeout.C
--- /dev/null   Tue May  5 22:32:27 1998
+++ src/frontends/Timeout.C     Wed Feb  7 13:45:33 2001
@@ -0,0 +1,73 @@
+/*
+ * Timeout.C
+ * (C) 2001 LyX Team
+ * John Levon, [EMAIL PROTECTED]
+ */
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include <config.h>
+
+#include "Timeout.h"
+#include "debug.h"
+
+#include "Timeout_pimpl.h"
+
+Timeout::Timeout()
+       : type(ONETIME), timeout_ms(0)
+{
+       pimpl_ = new Pimpl(this);
+}
+
+
+Timeout::Timeout(unsigned int msec, Type t)
+       : type(t), timeout_ms(msec)
+{
+       pimpl_ = new Pimpl(this);
+}
+
+
+Timeout::~Timeout()
+{
+       pimpl_->stop();
+       delete pimpl_;
+}
+
+
+void Timeout::start()
+{
+       pimpl_->start();
+}
+
+void Timeout::stop()
+{
+       pimpl_->stop();
+}
+
+void Timeout::restart()
+{
+       pimpl_->stop();
+       pimpl_->start();
+}
+
+void Timeout::emit()
+{
+       pimpl_->reset();
+       timeout.emit();
+       if (type == CONTINUOUS)
+               pimpl_->start();
+}
+
+Timeout & Timeout::setType(Type t)
+{
+       type = t;
+       return *this;
+}
+
+
+Timeout & Timeout::setTimeout(unsigned int msec)
+{
+       timeout_ms = msec;
+       return *this;
+}
Index: src/frontends/Timeout.h
===================================================================
RCS file: Timeout.h
diff -N Timeout.h
--- /dev/null   Tue May  5 22:32:27 1998
+++ src/frontends/Timeout.h     Wed Feb  7 13:45:33 2001
@@ -0,0 +1,66 @@
+/*
+ * Timeout.h
+ * (C) 2001 LyX Team
+ * John Levon, [EMAIL PROTECTED]
+ */
+#ifndef TIMEOUT_H
+#define TIMEOUT_H
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <sigc++/signal_system.h>
+
+#ifdef SIGC_CXX_NAMESPACES
+using SigC::Signal0;
+#endif
+
+/**
+ * This class executes the callback when the timeout expires.
+ */
+class Timeout {
+public:
+       ///
+       enum Type {
+               /// one-shot timer
+               ONETIME,
+               /// repeating
+               CONTINUOUS
+       };
+       ///
+       Timeout();
+       ///
+       Timeout(unsigned int msec, Type = ONETIME);
+       ///
+       ~Timeout();
+       /// start the timer
+       void start();
+       /// stop the timer
+       void stop();
+       /// restart the timer
+       void restart();
+       /// signal emitted on timer expiry
+       Signal0<void> timeout;
+       /// emit the signal
+       void emit();
+       /// set the timer type
+       Timeout & setType(Type t);
+       /// set the timeout value
+       Timeout & setTimeout(unsigned int msec);
+
+private:
+       struct Pimpl;
+       friend struct Pimpl;
+       /// implementation
+       Pimpl * pimpl_;
+
+       /// one-shot or repeating
+       Type type;
+       /// timeout value in milliseconds
+       unsigned int timeout_ms;
+};
+
+#endif
Index: src/frontends/kde/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/kde/ChangeLog,v
retrieving revision 1.4
diff -u -p -r1.4 ChangeLog
--- src/frontends/kde/ChangeLog 2001/01/26 17:24:09     1.4
+++ src/frontends/kde/ChangeLog 2001/02/07 12:45:33
@@ -1,3 +1,9 @@
+2001-02-07  John Levon  <[EMAIL PROTECTED]>
+
+       * Timeout_pimpl.h:
+       * Timeout_pimpl.C:
+       * Makefile.am: add Timeout_pimpl
+
 2001-01-26  Dekel Tsur  <[EMAIL PROTECTED]>
 
        * dlg/lengthentry.C: Move the '#include <config.h>' to the top
Index: src/frontends/kde/Makefile.am
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/kde/Makefile.am,v
retrieving revision 1.21
diff -u -p -r1.21 Makefile.am
--- src/frontends/kde/Makefile.am       2001/01/24 11:43:47     1.21
+++ src/frontends/kde/Makefile.am       2001/02/07 12:45:33
@@ -40,6 +40,8 @@ libkde_la_SOURCES = \
        Dialogs.C \
        GUIRunTime.C \
        QtLyXView.h \
+       Timeout_pimpl.C \
+       Timeout_pimpl.h \
        FormCitation.C \
        FormCitation.h \
        FormCopyright.C \
Index: src/frontends/kde/Timeout_pimpl.C
===================================================================
RCS file: Timeout_pimpl.C
diff -N Timeout_pimpl.C
--- /dev/null   Tue May  5 22:32:27 1998
+++ src/frontends/kde/Timeout_pimpl.C   Wed Feb  7 13:45:33 2001
@@ -0,0 +1,51 @@
+/*
+ * Timeout_pimpl.C
+ * (C) 2001 LyX Team
+ * John Levon, [EMAIL PROTECTED]
+ */
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include <config.h>
+
+#include "Timeout_pimpl.h"
+#include "debug.h"
+
+using std::endl;
+
+Timeout::Pimpl::Pimpl(Timeout * owner)
+       : owner_(owner), timeout_id(-1)
+{
+}
+
+
+Timeout::Pimpl::~Pimpl()
+{
+}
+
+void Timeout::Pimpl::timerEvent(QTimerEvent *)
+{
+       owner_->emit();
+}
+ 
+void Timeout::Pimpl::reset()
+{
+       killTimers();
+       timeout_id = -1;
+}
+
+void Timeout::Pimpl::start()
+{
+       if (timeout_id != -1)
+               lyxerr << "Timeout::start: already running!" << endl;
+       timeout_id = startTimer(owner_->timeout_ms);
+}
+       
+
+void Timeout::Pimpl::stop()
+{
+       if (timeout_id != -1)
+               reset();
+}
Index: src/frontends/kde/Timeout_pimpl.h
===================================================================
RCS file: Timeout_pimpl.h
diff -N Timeout_pimpl.h
--- /dev/null   Tue May  5 22:32:27 1998
+++ src/frontends/kde/Timeout_pimpl.h   Wed Feb  7 13:45:33 2001
@@ -0,0 +1,50 @@
+/*
+ * Timeout_pimpl.h
+ * (C) 2001 LyX Team
+ * John Levon, [EMAIL PROTECTED]
+ */
+#ifndef TIMEOUTPIMPL_H
+#define TIMEOUTPIMPL_H
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "frontends/Timeout.h"
+
+#include <sigc++/signal_system.h>
+
+#include <qobject.h> 
+// stupid Qt
+#undef emit
+ 
+/**
+ * This class executes the callback when the timeout expires
+ * using Qt mechanisms
+ */
+struct Timeout::Pimpl : QObject {
+public:
+       ///
+       Pimpl(Timeout *owner_);
+       ///
+       ~Pimpl();
+       /// start the timer
+       void start();
+       /// stop the timer
+       void stop();
+       /// reset
+       void reset();
+
+protected:
+       /// slot
+       virtual void timerEvent(QTimerEvent *);
+private:
+       /// the owning timer
+       Timeout *owner_;
+       /// xforms id
+       int timeout_id;
+};
+
+#endif
Index: src/frontends/xforms/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/ChangeLog,v
retrieving revision 1.10
diff -u -p -r1.10 ChangeLog
--- src/frontends/xforms/ChangeLog      2001/02/06 17:41:42     1.10
+++ src/frontends/xforms/ChangeLog      2001/02/07 12:45:33
@@ -1,3 +1,9 @@
+2001-02-07  John Levon  <[EMAIL PROTECTED]>
+
+       * Makefile.am:
+       * Timeout_pimpl.h:
+       * Timeout_pimpl.C: add Timeout implementation
+
 2001-02-06  John Levon  <[EMAIL PROTECTED]>
 
        * form_browser.h:
Index: src/frontends/xforms/FormBrowser.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/FormBrowser.C,v
retrieving revision 1.1
diff -u -p -r1.1 FormBrowser.C
--- src/frontends/xforms/FormBrowser.C  2001/02/06 17:41:42     1.1
+++ src/frontends/xforms/FormBrowser.C  2001/02/07 12:45:33
@@ -24,7 +24,7 @@ using SigC::slot;
 #endif
 
 FormBrowser::FormBrowser(LyXView * lv, Dialogs * d, const string & name)
-       : FormBaseBD(lv, d, name, new OkViewPolicy),
+       : FormBaseBD(lv, d, name, new IgnorantPolicy),
          dialog_(0)
 {
 }
Index: src/frontends/xforms/Makefile.am
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/Makefile.am,v
retrieving revision 1.26
diff -u -p -r1.26 Makefile.am
--- src/frontends/xforms/Makefile.am    2001/02/06 17:41:42     1.26
+++ src/frontends/xforms/Makefile.am    2001/02/07 12:45:33
@@ -92,6 +92,8 @@ libxforms_la_SOURCES = \
        Menubar_pimpl.h \
        RadioButtonGroup.C \
        RadioButtonGroup.h \
+       Timeout_pimpl.C \
+       Timeout_pimpl.h \
        Toolbar_pimpl.C \
        Toolbar_pimpl.h \
        xform_helpers.C \
Index: src/frontends/xforms/Timeout_pimpl.C
===================================================================
RCS file: Timeout_pimpl.C
diff -N Timeout_pimpl.C
--- /dev/null   Tue May  5 22:32:27 1998
+++ src/frontends/xforms/Timeout_pimpl.C        Wed Feb  7 13:45:33 2001
@@ -0,0 +1,60 @@
+/*
+ * Timeout_pimpl.C
+ * (C) 2001 LyX Team
+ * John Levon, [EMAIL PROTECTED]
+ */
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include <config.h>
+
+#include FORMS_H_LOCATION
+
+#include "Timeout_pimpl.h"
+#include "debug.h"
+
+using std::endl;
+
+extern "C" {
+       static
+       void C_intern_timeout_cb(int, void * data)
+       {
+               Timeout *to = static_cast<Timeout *>(data);
+               to->emit();
+       }
+}
+
+
+Timeout::Pimpl::Pimpl(Timeout * owner)
+       : owner_(owner), timeout_id(-1)
+{
+}
+
+
+Timeout::Pimpl::~Pimpl()
+{
+}
+
+void Timeout::Pimpl::reset()
+{
+       timeout_id = -1;
+}
+
+void Timeout::Pimpl::start()
+{
+       if (timeout_id != -1)
+               lyxerr << "Timeout::start: already running!" << endl;
+       timeout_id = fl_add_timeout(owner_->timeout_ms,
+                                   C_intern_timeout_cb, owner_);
+}
+       
+
+void Timeout::Pimpl::stop()
+{
+       if (timeout_id != -1) {
+               fl_remove_timeout(timeout_id);
+               timeout_id = -1;
+       }
+}
Index: src/frontends/xforms/Timeout_pimpl.h
===================================================================
RCS file: Timeout_pimpl.h
diff -N Timeout_pimpl.h
--- /dev/null   Tue May  5 22:32:27 1998
+++ src/frontends/xforms/Timeout_pimpl.h        Wed Feb  7 13:45:33 2001
@@ -0,0 +1,43 @@
+/*
+ * Timeout_pimpl.h
+ * (C) 2001 LyX Team
+ * John Levon, [EMAIL PROTECTED]
+ */
+#ifndef TIMEOUTPIMPL_H
+#define TIMEOUTPIMPL_H
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "frontends/Timeout.h"
+
+#include <sigc++/signal_system.h>
+
+/**
+ * This class executes the callback when the timeout expires
+ * using XForms mechanisms
+ */
+struct Timeout::Pimpl {
+public:
+       ///
+       Pimpl(Timeout *owner_);
+       ///
+       ~Pimpl();
+       /// start the timer
+       void start();
+       /// stop the timer
+       void stop();
+       /// reset
+       void reset();
+
+private:
+       /// the owning timer
+       Timeout *owner_;
+       /// xforms id
+       int timeout_id;
+};
+
+#endif

Reply via email to