From a69e7a45780e94f4330a91facfe35126c678e34e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lars=20Gullik=20Bj=C3=B8nnes?= Date: Tue, 15 Aug 2000 09:41:24 +0000 Subject: [PATCH] more keyboard/keysym changes git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@972 a592a061-630c-0410-9148-cb99ea01b6c8 --- ChangeLog | 7 +++++++ src/BufferView_pimpl.C | 2 ++ src/LyXView.C | 9 +++++---- src/WorkArea.C | 36 +++++++++++++++++++++++++++--------- src/lyxfunc.C | 2 +- src/lyxfunc.h | 6 +++--- src/lyxlookup.h | 4 ---- 7 files changed, 45 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8dc3b64968..6a666ce928 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2000-08-15 Lars Gullik Bjønnes + + * src/WorkArea.C (work_area_handler): more work to get te + FL_KEYBOARD to work with xforms 0.88 too, please test. + + * src/BufferView_pimpl.C (workAreaKeyPress): add XForms 0.88 guard. + 2000-08-15 Dekel Tsur * src/frontends/ButtonPolicies.C: make gcc happy when compiling with diff --git a/src/BufferView_pimpl.C b/src/BufferView_pimpl.C index 11970de6f3..c7e7d6b641 100644 --- a/src/BufferView_pimpl.C +++ b/src/BufferView_pimpl.C @@ -516,7 +516,9 @@ int BufferView::Pimpl::scrollDown(long time) void BufferView::Pimpl::workAreaKeyPress(KeySym keysym, unsigned int state) { +#if FL_REVISION > 88 bv_->owner()->getLyXFunc()->processKeySym(keysym, state); +#endif } diff --git a/src/LyXView.C b/src/LyXView.C index a32725d0b0..2e28a73a68 100644 --- a/src/LyXView.C +++ b/src/LyXView.C @@ -211,7 +211,8 @@ int LyXView::atCloseMainFormCB(FL_FORM *, void *) // Wrapper for the above -extern "C" int C_LyXView_atCloseMainFormCB(FL_FORM * form, void * p) +extern "C" +int C_LyXView_atCloseMainFormCB(FL_FORM * form, void * p) { return LyXView::atCloseMainFormCB(form, p); } @@ -319,7 +320,7 @@ void LyXView::create_form_form_main(int width, int height) } -#if FL_REVISION < 89 +#if 0 extern "C" int C_LyXView_KeyPressMask_raw_callback(FL_FORM * fl, void * xev); #endif @@ -341,7 +342,7 @@ void LyXView::init() autosave_timeout.start(); } -#if FL_REVISION < 89 +#if 0 // Install the raw callback for keyboard events fl_register_raw_callback(form_, KeyPressMask, @@ -400,7 +401,7 @@ void LyXView::UpdateDocumentClassChoice() } -#if FL_REVISION < 89 +#if 0 // This is necessary, since FL_FREE-Objects doesn't get all keypress events // as FL_KEYBOARD events :-( Matthias 280596 int LyXView::KeyPressMask_raw_callback(FL_FORM * fl, void * xev) diff --git a/src/WorkArea.C b/src/WorkArea.C index 7633b8362b..ca9bd91de1 100644 --- a/src/WorkArea.C +++ b/src/WorkArea.C @@ -21,6 +21,7 @@ #include "BufferView.h" #include "LyXView.h" #include "lyxfunc.h" +#include "lyxlookup.h" using std::endl; @@ -319,15 +320,17 @@ int WorkArea::work_area_handler(FL_OBJECT * ob, int event, case FL_KEYBOARD: { lyxerr[Debug::KEY] << "Workarea event: KEYBOARD"; - if (static_cast(ev)->type == KeyPress) - lyxerr << "KeyPress" << endl; - else - lyxerr << "KeyRelease" << endl; KeySym keysym = 0; - char s_r[10]; + char dummy[1]; XKeyEvent * xke = reinterpret_cast(ev); - XLookupString(xke, s_r, 10, &keysym, 0); +#if FL_REVISION < 89 + // XForms < 0.89 does not have compose support + // so we are using our own compose support + LyXLookupString(ev, dummy, 1, &keysym); +#else + XLookupString(xke, dummy, 1, &keysym, 0); +#endif if (lyxerr.debugging(Debug::KEY)) { char const * tmp = XKeysymToString(key); char const * tmp2 = XKeysymToString(keysym); @@ -340,20 +343,35 @@ int WorkArea::work_area_handler(FL_OBJECT * ob, int event, << keysym << "]" << endl; } +#if FL_REVISION < 89 + if (keysym == NoSymbol) { + lyxerr[Debug::KEY] + << "Empty kdb action (probably composing)" + << endl; + break; + } + KeySym ret_key = keysym; +#else if (!key) break; - KeySym ret_key = (keysym ? keysym : key); +#endif unsigned int ret_state = xke->state; static Time last_time_pressed = 0; static unsigned int last_key_pressed = 0; static unsigned int last_state_pressed = 0; - if (xke->time - last_time_pressed < 50 // should perhaps be tunable + //lyxerr << "Workarea Diff: " << xke->time - last_time_pressed + // << endl; + if (xke->time - last_time_pressed < 40 // should perhaps be tunable && xke->state == last_state_pressed && xke->keycode == last_key_pressed) { lyxerr[Debug::KEY] << "Workarea: Purging X events." << endl; - XSync(fl_get_display(), 1); + //lyxerr << "Workarea Events: " + // << XEventsQueued(fl_get_display(), QueuedAlready) + // << endl; + if (XEventsQueued(fl_get_display(), QueuedAlready) > 0) + XSync(fl_get_display(), 1); // This purge make f.ex. scrolling stop immidiatly when // releasing the PageDown button. The question is if // this purging of XEvents can cause any harm... diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 94a287c9ae..03c725ebd8 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -316,7 +316,7 @@ int LyXFunc::processKeySym(KeySym keysym, unsigned int state) } -#if FL_REVISION < 89 +#if 0 int LyXFunc::processKeyEvent(XEvent * ev) { char s_r[10]; diff --git a/src/lyxfunc.h b/src/lyxfunc.h index ced5a7dc41..4aa874c670 100644 --- a/src/lyxfunc.h +++ b/src/lyxfunc.h @@ -49,13 +49,13 @@ public: /// Same again but for xtl buffers. Still looking for better idea. bool Dispatch(int action, auto_mem_buffer &); - #if FL_REVISION < 89 +#if 0 /// A keyboard event is processed to execute a lyx action. int processKeyEvent(XEvent * ev); - #else +#else /// int processKeySym(KeySym k, unsigned int state); - #endif +#endif /// func_status getStatus(int ac) const; diff --git a/src/lyxlookup.h b/src/lyxlookup.h index a2495b1993..16205309c7 100644 --- a/src/lyxlookup.h +++ b/src/lyxlookup.h @@ -13,10 +13,6 @@ different input methods for different frames, but for now we can keep it as it is. */ -#ifdef __GNUG__ -#pragma interface -#endif - #include /// Initialize the compose key handling -- 2.39.2