diff --git a/mozilla/widget/src/gtk2/nsAppShell.cpp b/mozilla/widget/src/gtk2/nsAppShell.cpp index 492d129a68d..a0a5612c903 100644 --- a/mozilla/widget/src/gtk2/nsAppShell.cpp +++ b/mozilla/widget/src/gtk2/nsAppShell.cpp @@ -37,6 +37,7 @@ #include "nsIEventQueueService.h" #include "nsIServiceManagerUtils.h" #include "plhash.h" +#include "prenv.h" #include @@ -86,6 +87,10 @@ nsAppShell::Create(int *argc, char **argv) // XXX add all of the command line handling gtk_init(argc, &argv); + + if (PR_GetEnv("MOZ_DEBUG_PAINTS")) { + gdk_window_set_debug_updates(TRUE); + } return NS_OK; } diff --git a/mozilla/widget/src/gtk2/nsWindow.cpp b/mozilla/widget/src/gtk2/nsWindow.cpp index 415df37d081..562c75b96de 100644 --- a/mozilla/widget/src/gtk2/nsWindow.cpp +++ b/mozilla/widget/src/gtk2/nsWindow.cpp @@ -820,18 +820,41 @@ nsWindow::OnLeaveNotifyEvent(GtkWidget *aWidget, GdkEventCrossing *aEvent) void nsWindow::OnMotionNotifyEvent(GtkWidget *aWidget, GdkEventMotion *aEvent) { + + // see if we can compress this event + XEvent xevent; + PRPackedBool synthEvent = PR_FALSE; + while (XCheckWindowEvent(GDK_WINDOW_XDISPLAY(aEvent->window), + GDK_WINDOW_XWINDOW(aEvent->window), + ButtonMotionMask, &xevent)) { + synthEvent = PR_TRUE; + } + nsMouseEvent event; InitMouseEvent(event, NS_MOUSE_MOVE); + + if (synthEvent) { + event.point.x = nscoord(xevent.xmotion.x); + event.point.y = nscoord(xevent.xmotion.y); - event.point.x = nscoord(aEvent->x); - event.point.y = nscoord(aEvent->y); + event.isShift = (xevent.xmotion.state & GDK_SHIFT_MASK) + ? PR_TRUE : PR_FALSE; + event.isControl = (xevent.xmotion.state & GDK_CONTROL_MASK) + ? PR_TRUE : PR_FALSE; + event.isAlt = (xevent.xmotion.state & GDK_MOD1_MASK) + ? PR_TRUE : PR_FALSE; + } + else { + event.point.x = nscoord(aEvent->x); + event.point.y = nscoord(aEvent->y); - event.isShift = (aEvent->state & GDK_SHIFT_MASK) - ? PR_TRUE : PR_FALSE; - event.isControl = (aEvent->state & GDK_CONTROL_MASK) - ? PR_TRUE : PR_FALSE; - event.isAlt = (aEvent->state & GDK_MOD1_MASK) - ? PR_TRUE : PR_FALSE; + event.isShift = (aEvent->state & GDK_SHIFT_MASK) + ? PR_TRUE : PR_FALSE; + event.isControl = (aEvent->state & GDK_CONTROL_MASK) + ? PR_TRUE : PR_FALSE; + event.isAlt = (aEvent->state & GDK_MOD1_MASK) + ? PR_TRUE : PR_FALSE; + } nsEventStatus status; DispatchEvent(&event, status);