X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fxforms%2FXWorkArea.C;h=51f9a4e405b439b75818cbdeacb50ee1f926a4f8;hb=37e82a546392d43f787826b85481a11f2a27af15;hp=ff5e6f534f5584b661a40b46ee52c1111cb27042;hpb=2a31934f38d624bef25c0b177852233eee9768f0;p=lyx.git diff --git a/src/frontends/xforms/XWorkArea.C b/src/frontends/xforms/XWorkArea.C index ff5e6f534f..51f9a4e405 100644 --- a/src/frontends/xforms/XWorkArea.C +++ b/src/frontends/xforms/XWorkArea.C @@ -24,6 +24,8 @@ #include +using boost::shared_ptr; + using std::abs; using std::dec; using std::endl; @@ -147,17 +149,17 @@ XWorkArea::XWorkArea(LyXView & owner, int w, int h) // Hand control of the layout of these widgets to the // Layout Engine. XFormsView & xview = dynamic_cast(owner); - BoxList & boxlist = xview.getBox(XFormsView::Center).children(); + BoxList & boxlist = xview.getBox(XFormsView::Center)->children(); - wa_box_ = &boxlist.push_back(Box(0,0)); + wa_box_ = boxlist.push_back(Box(0,0)); wa_box_->set(Box::Horizontal); - Box & frame_box = widgets_.add(frame, wa_box_->children(), 0, 0); - frame_box.set(Box::Expand); + shared_ptr frame_box = widgets_.add(frame, wa_box_->children(), 0, 0); + frame_box->set(Box::Expand); int const bw = int(abs(fl_get_border_width())); - Box & wa_box = embed(work_area, frame_box.children(), widgets_, bw); - wa_box.set(Box::Expand); + shared_ptr wa_box = embed(work_area, frame_box->children(), widgets_, bw); + wa_box->set(Box::Expand); widgets_.add(scrollbar, wa_box_->children(), 17, 0); @@ -293,6 +295,9 @@ int XWorkArea::work_area_handler(FL_OBJECT * ob, int event, FL_Coord, FL_Coord, int key, void * xev) { + if (event != 11) + lyxerr[Debug::WORKAREA] << "Workarea event: EVENT: " << event << endl; + XEvent * ev = static_cast(xev); XWorkArea * area = static_cast(ob->u_vdata); @@ -333,6 +338,30 @@ int XWorkArea::work_area_handler(FL_OBJECT * ob, int event, 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 +374,14 @@ int XWorkArea::work_area_handler(FL_OBJECT * ob, int event, 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, @@ -354,6 +390,8 @@ int XWorkArea::work_area_handler(FL_OBJECT * ob, int event, break; case FL_DRAG: { + lyxerr[Debug::WORKAREA] << "Workarea event: DRAG 0" << endl; + if (!ev || !area->scrollbar) break; @@ -526,6 +564,12 @@ int XWorkArea::work_area_handler(FL_OBJECT * ob, int event, 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 +581,11 @@ int XWorkArea::work_area_handler(FL_OBJECT * ob, int event, 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,