Kaydet (Commit) 0a5d252c authored tarafından Andre Fischer's avatar Andre Fischer

122321: Fix processing of scroll whell to not block other events.

üst ca7264d7
...@@ -222,49 +222,57 @@ void Deck::DataChanged (const DataChangedEvent& rEvent) ...@@ -222,49 +222,57 @@ void Deck::DataChanged (const DataChangedEvent& rEvent)
long Deck::Notify (NotifyEvent& rEvent) long Deck::Notify (NotifyEvent& rEvent)
{ {
if (rEvent.GetType() != EVENT_COMMAND) if (rEvent.GetType() == EVENT_COMMAND)
return sal_False; {
CommandEvent* pCommandEvent = reinterpret_cast<CommandEvent*>(rEvent.GetData());
if (pCommandEvent != NULL)
switch (pCommandEvent->GetCommand())
{
case COMMAND_WHEEL:
return ProcessWheelEvent(pCommandEvent, rEvent)
? sal_True
: sal_False;
default:
break;
}
}
CommandEvent* pCommandEvent = reinterpret_cast<CommandEvent*>(rEvent.GetData()); return Window::Notify(rEvent);
if (pCommandEvent == NULL) }
return sal_False;
switch (pCommandEvent->GetCommand())
{
case COMMAND_WHEEL:
{
if ( ! mpVerticalScrollBar
|| ! mpVerticalScrollBar->IsVisible())
return sal_False;
// Ignore all wheel commands from outside the vertical
// scroll bar. Otherwise after a scroll we might land on
// a spin field and subsequent wheel events would change
// the value of that control.
if (rEvent.GetWindow() != mpVerticalScrollBar.get())
return sal_True;
// Get the wheel data and check that it describes a valid
// vertical scroll.
const CommandWheelData* pData = pCommandEvent->GetWheelData();
if (pData==NULL
|| pData->GetModifier()
|| pData->GetMode() != COMMAND_WHEEL_SCROLL
|| pData->IsHorz())
return sal_False;
// Execute the actual scroll action.
long nDelta = pData->GetDelta();
mpVerticalScrollBar->DoScroll(
mpVerticalScrollBar->GetThumbPos() - nDelta);
return sal_True;
}
default:
break;
}
return sal_False;
bool Deck::ProcessWheelEvent (
CommandEvent* pCommandEvent,
NotifyEvent& rEvent)
{
if ( ! mpVerticalScrollBar)
return false;
if ( ! mpVerticalScrollBar->IsVisible())
return false;
// Ignore all wheel commands from outside the vertical scroll bar.
// Otherwise after a scroll we might land on a spin field and
// subsequent wheel events would change the value of that control.
if (rEvent.GetWindow() != mpVerticalScrollBar.get())
return true;
// Get the wheel data and check that it describes a valid vertical
// scroll.
const CommandWheelData* pData = pCommandEvent->GetWheelData();
if (pData==NULL
|| pData->GetModifier()
|| pData->GetMode() != COMMAND_WHEEL_SCROLL
|| pData->IsHorz())
return false;
// Execute the actual scroll action.
long nDelta = pData->GetDelta();
mpVerticalScrollBar->DoScroll(
mpVerticalScrollBar->GetThumbPos() - nDelta);
return true;
} }
......
...@@ -104,8 +104,9 @@ private: ...@@ -104,8 +104,9 @@ private:
::boost::scoped_ptr<ScrollBar> mpVerticalScrollBar; ::boost::scoped_ptr<ScrollBar> mpVerticalScrollBar;
DECL_LINK(HandleVerticalScrollBarChange,void*); DECL_LINK(HandleVerticalScrollBarChange,void*);
bool ProcessWheelEvent (
CommandEvent* pCommandEvent,
NotifyEvent& rEvent);
}; };
......
...@@ -559,6 +559,10 @@ IMPL_LINK(FocusManager, WindowEventListener, VclSimpleEvent*, pEvent) ...@@ -559,6 +559,10 @@ IMPL_LINK(FocusManager, WindowEventListener, VclSimpleEvent*, pEvent)
case VCLEVENT_WINDOW_GETFOCUS: case VCLEVENT_WINDOW_GETFOCUS:
case VCLEVENT_WINDOW_LOSEFOCUS: case VCLEVENT_WINDOW_LOSEFOCUS:
pSource->Invalidate(); pSource->Invalidate();
return 1;
default:
break;
} }
return 0; return 0;
...@@ -613,14 +617,14 @@ IMPL_LINK(FocusManager, ChildEventListener, VclSimpleEvent*, pEvent) ...@@ -613,14 +617,14 @@ IMPL_LINK(FocusManager, ChildEventListener, VclSimpleEvent*, pEvent)
break; break;
} }
} }
break; return 1;
} }
default: default:
break; break;
} }
return 1; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment