Skip to content

Commit

Permalink
Checking in some widget changes to support scrolling with the mouse
Browse files Browse the repository at this point in the history
wheel.  Layout changes (to make it actually work) will follow soon,
and also a Windows implementation.  r=blizzard.
  • Loading branch information
bryner%uiuc.edu committed Nov 17, 1999
1 parent 8a5d58f commit f6edbd1
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
8 changes: 8 additions & 0 deletions widget/public/nsGUIEvent.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,10 @@ struct nsCompositionEvent : public nsInputEvent {
nsTextEventReply theReply;
};

struct nsMouseScrollEvent : public nsInputEvent {
PRInt32 deltaLines;
};

/**
* Tooltip event
*/
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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) || \
Expand Down
31 changes: 31 additions & 0 deletions widget/src/gtk/nsWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit f6edbd1

Please sign in to comment.