mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 10:58:52 +00:00
Revert the XForms 'intelligent graphics exposure' patch because it is
currently breaking selection, etc. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9327 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
37e82a5463
commit
b6cb6b2a38
@ -1,3 +1,11 @@
|
||||
2004-11-26 Angus Leeming <leeming@lyx.org>
|
||||
|
||||
* xscreen.C:
|
||||
* XWorkArea.C: revert the 2004-05-04 patch that used graphics
|
||||
exposure events to paint the changing screen efficiently. It
|
||||
currently results in spurious release events being emitted,
|
||||
buggering up selection, etc.
|
||||
|
||||
2004-11-29 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
|
||||
|
||||
* input_validators.C: use support::contains instead of strchr
|
||||
|
@ -175,9 +175,8 @@ XWorkArea::XWorkArea(LyXView & owner, int w, int h)
|
||||
XGCValues val;
|
||||
|
||||
val.function = GXcopy;
|
||||
val.graphics_exposures = false;
|
||||
copy_gc = XCreateGC(fl_get_display(), RootWindow(fl_get_display(), 0),
|
||||
GCFunction | GCGraphicsExposures, &val);
|
||||
GCFunction, &val);
|
||||
}
|
||||
|
||||
|
||||
@ -189,13 +188,17 @@ XWorkArea::~XWorkArea()
|
||||
}
|
||||
|
||||
|
||||
void XWorkArea::updateGeometry(int width, int height)
|
||||
void XWorkArea::redraw(int width, int height)
|
||||
{
|
||||
static int cur_width = -1;
|
||||
static int cur_height = -1;
|
||||
|
||||
if (cur_width == width && cur_height == height && workareapixmap)
|
||||
if (cur_width == width && cur_height == height && workareapixmap) {
|
||||
XCopyArea(fl_get_display(),
|
||||
getPixmap(), getWin(), copy_gc,
|
||||
0, 0, width, height, xpos(), ypos());
|
||||
return;
|
||||
}
|
||||
|
||||
cur_width = width;
|
||||
cur_height = height;
|
||||
@ -219,20 +222,6 @@ void XWorkArea::updateGeometry(int width, int height)
|
||||
}
|
||||
|
||||
|
||||
void XWorkArea::paint(int x, int y, int w, int h)
|
||||
{
|
||||
lyxerr[Debug::WORKAREA]
|
||||
<< "XWorkarea::paint " << w << 'x' << h
|
||||
<< '+' << x << '+' << y << endl;
|
||||
|
||||
updateGeometry(workWidth(), workHeight());
|
||||
XCopyArea(fl_get_display(),
|
||||
getPixmap(), getWin(),
|
||||
copy_gc, x, y, w, h,
|
||||
work_area->x + x, work_area->y + y);
|
||||
}
|
||||
|
||||
|
||||
void XWorkArea::setScrollbarParams(int height, int pos, int line_height)
|
||||
{
|
||||
// we need to cache this for scroll_cb
|
||||
@ -295,7 +284,7 @@ int XWorkArea::work_area_handler(FL_OBJECT * ob, int event,
|
||||
FL_Coord, FL_Coord,
|
||||
int key, void * xev)
|
||||
{
|
||||
if (event != 11)
|
||||
if (event != 10 && event != 11)
|
||||
lyxerr[Debug::WORKAREA] << "Workarea event: EVENT: " << event << endl;
|
||||
|
||||
XEvent * ev = static_cast<XEvent*>(xev);
|
||||
@ -306,35 +295,12 @@ int XWorkArea::work_area_handler(FL_OBJECT * ob, int event,
|
||||
|
||||
switch (event) {
|
||||
|
||||
case FL_DRAW: {
|
||||
case FL_DRAW:
|
||||
if (!area->work_area || !area->work_area->form->visible)
|
||||
return 1;
|
||||
|
||||
if (ev) {
|
||||
lyxerr[Debug::WORKAREA]
|
||||
<< "work_area_handler, handling X11 "
|
||||
"expose event "
|
||||
<< ev->xexpose.width << 'x'
|
||||
<< ev->xexpose.height << '+'
|
||||
<< ev->xexpose.x << '+'
|
||||
<< ev->xexpose.y << endl;
|
||||
|
||||
// X11 generates XEvents with x, y relative to the
|
||||
// top left corner of the window.
|
||||
// XScreen::expose emulates this behaviour.
|
||||
// We therefore need to remove this offset before
|
||||
// generating the pixmap.
|
||||
int const x = ev->xexpose.x - ob->x;
|
||||
int const y = ev->xexpose.y - ob->y;
|
||||
|
||||
area->paint(x, y,
|
||||
ev->xexpose.width, ev->xexpose.height);
|
||||
} else
|
||||
area->paint(0, 0,
|
||||
area->workWidth(), area->workHeight());
|
||||
|
||||
lyxerr[Debug::WORKAREA] << "Workarea event: DRAW" << endl;
|
||||
area->redraw(area->workWidth(), area->workHeight());
|
||||
break;
|
||||
}
|
||||
|
||||
case FL_PUSH:
|
||||
if (!ev || ev->xbutton.button == 0) break;
|
||||
|
@ -67,10 +67,7 @@ public:
|
||||
private:
|
||||
/// generate the pixmap, and copy backing pixmap to it,
|
||||
/// and send resize event if needed
|
||||
void updateGeometry(int, int);
|
||||
|
||||
///
|
||||
void paint(int x, int y, int w, int h);
|
||||
void redraw(int, int);
|
||||
|
||||
/// GC used for copying to the screen
|
||||
GC copy_gc;
|
||||
|
@ -158,20 +158,13 @@ void XScreen::expose(int x, int y, int w, int h)
|
||||
lyxerr[Debug::GUI] << "XScreen::expose " << w << 'x' << h
|
||||
<< '+' << x << '+' << y << endl;
|
||||
|
||||
XEvent ev;
|
||||
|
||||
ev.type = Expose;
|
||||
ev.xexpose.window = owner_.getWin();
|
||||
// Adjust the x,y data so that XWorkArea can handle XEvents
|
||||
// received from here in identical fashion to those it receives
|
||||
// direct from X11.
|
||||
ev.xexpose.x = owner_.xpos() + x;
|
||||
ev.xexpose.y = owner_.ypos() + y;
|
||||
ev.xexpose.width = w;
|
||||
ev.xexpose.height = h;
|
||||
ev.xexpose.count = 0;
|
||||
|
||||
XSendEvent(fl_get_display(), owner_.getWin(), False, 0, &ev);
|
||||
XCopyArea(fl_get_display(),
|
||||
owner_.getPixmap(),
|
||||
owner_.getWin(),
|
||||
gc_copy,
|
||||
x, y, w, h,
|
||||
x + owner_.xpos(),
|
||||
y + owner_.ypos());
|
||||
}
|
||||
|
||||
} // namespace frontend
|
||||
|
Loading…
Reference in New Issue
Block a user