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()); CommandEvent* pCommandEvent = reinterpret_cast<CommandEvent*>(rEvent.GetData());
if (pCommandEvent == NULL) if (pCommandEvent != NULL)
return sal_False;
switch (pCommandEvent->GetCommand()) switch (pCommandEvent->GetCommand())
{ {
case COMMAND_WHEEL: case COMMAND_WHEEL:
{ return ProcessWheelEvent(pCommandEvent, rEvent)
if ( ! mpVerticalScrollBar ? sal_True
|| ! mpVerticalScrollBar->IsVisible()) : sal_False;
return sal_False;
default:
// Ignore all wheel commands from outside the vertical break;
// scroll bar. Otherwise after a scroll we might land on }
// a spin field and subsequent wheel events would change }
// the value of that control.
return Window::Notify(rEvent);
}
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()) if (rEvent.GetWindow() != mpVerticalScrollBar.get())
return sal_True; return true;
// Get the wheel data and check that it describes a valid // Get the wheel data and check that it describes a valid vertical
// vertical scroll. // scroll.
const CommandWheelData* pData = pCommandEvent->GetWheelData(); const CommandWheelData* pData = pCommandEvent->GetWheelData();
if (pData==NULL if (pData==NULL
|| pData->GetModifier() || pData->GetModifier()
|| pData->GetMode() != COMMAND_WHEEL_SCROLL || pData->GetMode() != COMMAND_WHEEL_SCROLL
|| pData->IsHorz()) || pData->IsHorz())
return sal_False; return false;
// Execute the actual scroll action. // Execute the actual scroll action.
long nDelta = pData->GetDelta(); long nDelta = pData->GetDelta();
mpVerticalScrollBar->DoScroll( mpVerticalScrollBar->DoScroll(
mpVerticalScrollBar->GetThumbPos() - nDelta); mpVerticalScrollBar->GetThumbPos() - nDelta);
return sal_True; return true;
}
default:
break;
}
return sal_False;
} }
......
...@@ -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