Checkpointing changes. Not part of the build. Pep up window scrolling performance by compressing motion notify events. Also, add an option to the appshell to turn on gdk window paint debugging with MOZ_DEBUG_PAINTS=1 in the environment.
git-svn-id: svn://10.0.0.236/trunk@110407 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
#include "nsIEventQueueService.h"
|
||||
#include "nsIServiceManagerUtils.h"
|
||||
#include "plhash.h"
|
||||
#include "prenv.h"
|
||||
|
||||
#include <gtk/gtkmain.h>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user