This makes the mose wheel work on XForms again.

Wheel handling is now done the same way in XForms as in QT. (or very
similar.)

Index: BufferView_pimpl.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/BufferView_pimpl.C,v
retrieving revision 1.548
diff -u -p -b -r1.548 BufferView_pimpl.C
--- BufferView_pimpl.C	5 Jul 2004 14:34:50 -0000	1.548
+++ BufferView_pimpl.C	1 Aug 2004 14:45:53 -0000
@@ -355,7 +355,6 @@ void BufferView::Pimpl::setBuffer(Buffer
 	// This is done after the layout combox has been populated
 	if (buffer_)
 		owner_->setLayout(cursor_.paragraph().layout()->name());
-		
 
 	if (buffer_ && lyx::graphics::Previews::status() != LyXRC::PREVIEW_OFF)
 		lyx::graphics::Previews::get().generateBufferPreviews(*buffer_);
Index: text3.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text3.C,v
retrieving revision 1.255
diff -u -p -b -r1.255 text3.C
--- text3.C	25 Jul 2004 00:04:42 -0000	1.255
+++ text3.C	1 Aug 2004 14:45:54 -0000
@@ -1118,20 +1118,6 @@ void LyXText::dispatch(LCursor & cur, Fu
 
 	// Single-click on work area
 	case LFUN_MOUSE_PRESS: {
-		// ok ok, this is a hack (for xforms)
-		// We shouldn't go further down as we really need to. Only do the
-		// scrolling and be done with this. Otherwise we may open some
-		// dialogs (Jug 20020424).
-		if (cmd.button() == mouse_button::button4) {
-			bv->scroll(-lyxrc.wheel_jump);
-			break;
-		}
-
-		if (cmd.button() == mouse_button::button5) {
-			bv->scroll(lyxrc.wheel_jump);
-			break;
-		}
-
 		// Right click on a footnote flag opens float menu
 		if (cmd.button() == mouse_button::button3) {
 			cur.clearSelection();
@@ -1185,13 +1171,6 @@ void LyXText::dispatch(LCursor & cur, Fu
 	}
 
 	case LFUN_MOUSE_RELEASE: {
-		// do nothing if we used the mouse wheel
-		if (cmd.button() == mouse_button::button4
-		 || cmd.button() == mouse_button::button5) {
-			cur.undispatched();
-			break;
-		}
-
 		selection_possible = false;
 
 		if (cmd.button() == mouse_button::button2)
Index: frontends/qt2/QContentPane.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QContentPane.C,v
retrieving revision 1.31
diff -u -p -b -r1.31 QContentPane.C
--- frontends/qt2/QContentPane.C	20 May 2004 09:36:27 -0000	1.31
+++ frontends/qt2/QContentPane.C	1 Aug 2004 14:45:54 -0000
@@ -216,11 +216,9 @@ void QContentPane::wheelEvent(QWheelEven
 
 void QContentPane::keyPressEvent(QKeyEvent * e)
 {
-	typedef boost::shared_ptr<LyXKeySym> LyXKeySymPtr;
-
-	QLyXKeySym * sym = new QLyXKeySym;
+	boost::shared_ptr<QLyXKeySym> sym(new QLyXKeySym);
 	sym->set(e);
-	wa_->workAreaKeyPress(LyXKeySymPtr(sym), q_key_state(e->state()));
+	wa_->workAreaKeyPress(sym, q_key_state(e->state()));
 }
 
 
Index: frontends/xforms/XWorkArea.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/xforms/XWorkArea.C,v
retrieving revision 1.47
diff -u -p -b -r1.47 XWorkArea.C
--- frontends/xforms/XWorkArea.C	19 May 2004 15:11:37 -0000	1.47
+++ frontends/xforms/XWorkArea.C	1 Aug 2004 14:45:54 -0000
@@ -333,6 +333,30 @@ int XWorkArea::work_area_handler(FL_OBJE
 
 	case FL_PUSH:
 		if (!ev || ev->xbutton.button == 0) break;
+
+		if (ev->xbutton.button == 4 || ev->xbutton.button == 5) {
+			static long last_wheel;
+
+			long cur_wheel = ev->xbutton.time;
+			if (last_wheel == cur_wheel)
+				break;
+
+			last_wheel = cur_wheel;
+
+			float l, r;
+			fl_get_scrollbar_increment(area->scrollbar, &l, &r);
+
+			if (ev->xbutton.button == 4)
+				l *= -1.0;
+
+			fl_set_scrollbar_value(
+				area->scrollbar,
+				fl_get_scrollbar_value(area->scrollbar) + l);
+
+			area->scroll_cb();
+			break;
+		}
+
 		// Should really have used xbutton.state
 		lyxerr[Debug::WORKAREA] << "Workarea event: PUSH" << endl;
 		area->dispatch(
@@ -345,7 +369,14 @@ int XWorkArea::work_area_handler(FL_OBJE
 	case FL_RELEASE:
 		if (!ev || ev->xbutton.button == 0) break;
 		// Should really have used xbutton.state
+
+		if (ev->xbutton.button == 4 || ev->xbutton.button == 5) {
+			// We ingnore wheel event here
+			break;
+		}
+
 		lyxerr[Debug::WORKAREA] << "Workarea event: RELEASE" << endl;
+
 		area->dispatch(
 			FuncRequest(LFUN_MOUSE_RELEASE,
 				    ev->xbutton.x - ob->x,
@@ -526,6 +557,12 @@ int XWorkArea::work_area_handler(FL_OBJE
 
 	case FL_DBLCLICK:
 		if (ev) {
+			if (ev->xbutton.button == 4 || ev->xbutton.button == 5) {
+				// Ignore wheel events
+				break;
+			}
+
+
 			lyxerr[Debug::WORKAREA] << "Workarea event: DBLCLICK" << endl;
 			FuncRequest cmd(LFUN_MOUSE_DOUBLE,
 					ev->xbutton.x - ob->x,
@@ -537,6 +574,11 @@ int XWorkArea::work_area_handler(FL_OBJE
 
 	case FL_TRPLCLICK:
 		if (ev) {
+			if (ev->xbutton.button == 4 || ev->xbutton.button == 5) {
+				// Ignore wheel events
+				break;
+			}
+
 			lyxerr[Debug::WORKAREA] << "Workarea event: TRPLCLICK" << endl;
 			FuncRequest cmd(LFUN_MOUSE_TRIPLE,
 					ev->xbutton.x - ob->x,
-- 
        Lgb

Reply via email to