Checking in some widget changes to support scrolling with the mouse
wheel. Layout changes (to make it actually work) will follow soon, and also a Windows implementation. r=blizzard. git-svn-id: svn://10.0.0.236/trunk@53757 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -179,6 +179,10 @@ struct nsCompositionEvent : public nsInputEvent {
|
||||
nsTextEventReply theReply;
|
||||
};
|
||||
|
||||
struct nsMouseScrollEvent : public nsInputEvent {
|
||||
PRInt32 deltaLines;
|
||||
};
|
||||
|
||||
/**
|
||||
* Tooltip event
|
||||
*/
|
||||
@@ -229,6 +233,7 @@ enum nsDragDropEventStatus {
|
||||
#define NS_TEXT_EVENT 12
|
||||
#define NS_COMPOSITION_START 13
|
||||
#define NS_COMPOSITION_END 14
|
||||
#define NS_MOUSE_SCROLL_EVENT 15
|
||||
|
||||
/**
|
||||
* GUI MESSAGES
|
||||
@@ -342,6 +347,9 @@ enum nsDragDropEventStatus {
|
||||
#define NS_XUL_COMMAND_UPDATE (NS_MENU_EVENT_START+4)
|
||||
//@}
|
||||
|
||||
// Scroll events
|
||||
#define NS_MOUSE_SCROLL_START 1600
|
||||
#define NS_MOUSE_SCROLL (NS_MOUSE_SCROLL_START)
|
||||
|
||||
#define NS_IS_MOUSE_EVENT(evnt) \
|
||||
(((evnt)->message == NS_MOUSE_LEFT_BUTTON_DOWN) || \
|
||||
|
||||
@@ -1901,6 +1901,7 @@ nsWidget::OnLeaveNotifySignal(GdkEventCrossing * aGdkCrossingEvent)
|
||||
nsWidget::OnButtonPressSignal(GdkEventButton * aGdkButtonEvent)
|
||||
{
|
||||
nsMouseEvent event;
|
||||
nsMouseScrollEvent scrollEvent;
|
||||
PRUint32 eventType = 0;
|
||||
|
||||
#if defined(DEBUG_pavlov) || defined(DEBUG_akkana)
|
||||
@@ -1952,6 +1953,30 @@ nsWidget::OnButtonPressSignal(GdkEventButton * aGdkButtonEvent)
|
||||
eventType = NS_MOUSE_RIGHT_BUTTON_DOWN;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
case 5:
|
||||
if (aGdkButtonEvent->button == 4)
|
||||
scrollEvent.deltaLines = -3;
|
||||
else
|
||||
scrollEvent.deltaLines = 3;
|
||||
|
||||
scrollEvent.message = NS_MOUSE_SCROLL;
|
||||
scrollEvent.widget = this;
|
||||
scrollEvent.eventStructType = NS_MOUSE_SCROLL_EVENT;
|
||||
|
||||
scrollEvent.point.x = nscoord(aGdkButtonEvent->x);
|
||||
scrollEvent.point.y = nscoord(aGdkButtonEvent->y);
|
||||
|
||||
scrollEvent.isShift = (aGdkButtonEvent->state & GDK_SHIFT_MASK) ? PR_TRUE : PR_FALSE;
|
||||
scrollEvent.isControl = (aGdkButtonEvent->state & GDK_CONTROL_MASK) ? PR_TRUE : PR_FALSE;
|
||||
scrollEvent.isAlt = (aGdkButtonEvent->state & GDK_MOD1_MASK) ? PR_TRUE : PR_FALSE;
|
||||
scrollEvent.time = aGdkButtonEvent->time;
|
||||
AddRef();
|
||||
if (mEventCallback)
|
||||
DispatchWindowEvent(&scrollEvent);
|
||||
Release();
|
||||
return;
|
||||
|
||||
// Single-click default.
|
||||
default:
|
||||
eventType = NS_MOUSE_LEFT_BUTTON_DOWN;
|
||||
@@ -2002,6 +2027,12 @@ nsWidget::OnButtonReleaseSignal(GdkEventButton * aGdkButtonEvent)
|
||||
eventType = NS_MOUSE_RIGHT_BUTTON_UP;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
case 5:
|
||||
// We don't really need to do anything here, but we don't want
|
||||
// LEFT_BUTTON_UP to happen
|
||||
return;
|
||||
|
||||
default:
|
||||
eventType = NS_MOUSE_LEFT_BUTTON_UP;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user