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:
blizzard%redhat.com
2001-12-12 22:51:19 +00:00
parent 9b31886395
commit 300b42a22d
2 changed files with 36 additions and 8 deletions

View File

@@ -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;
}

View File

@@ -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);