Author: af
Date: Thu May 16 11:08:30 2013
New Revision: 1483297

URL: http://svn.apache.org/r1483297
Log:
122321: Fix processing of scroll whell to not block other events.

Modified:
    openoffice/trunk/main/sfx2/source/sidebar/Deck.cxx
    openoffice/trunk/main/sfx2/source/sidebar/Deck.hxx
    openoffice/trunk/main/sfx2/source/sidebar/FocusManager.cxx

Modified: openoffice/trunk/main/sfx2/source/sidebar/Deck.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/Deck.cxx?rev=1483297&r1=1483296&r2=1483297&view=diff
==============================================================================
--- openoffice/trunk/main/sfx2/source/sidebar/Deck.cxx (original)
+++ openoffice/trunk/main/sfx2/source/sidebar/Deck.cxx Thu May 16 11:08:30 2013
@@ -222,49 +222,57 @@ void Deck::DataChanged (const DataChange
 
 long Deck::Notify (NotifyEvent& rEvent)
 {
-    if (rEvent.GetType() != EVENT_COMMAND)
-        return sal_False;
+    if (rEvent.GetType() == EVENT_COMMAND)
+    {
+        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;
+            }
+    }
+    
+    return Window::Notify(rEvent);
+}
 
-    CommandEvent* pCommandEvent = 
reinterpret_cast<CommandEvent*>(rEvent.GetData());
-    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;
 }
 
 

Modified: openoffice/trunk/main/sfx2/source/sidebar/Deck.hxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/Deck.hxx?rev=1483297&r1=1483296&r2=1483297&view=diff
==============================================================================
--- openoffice/trunk/main/sfx2/source/sidebar/Deck.hxx (original)
+++ openoffice/trunk/main/sfx2/source/sidebar/Deck.hxx Thu May 16 11:08:30 2013
@@ -104,8 +104,9 @@ private:
     ::boost::scoped_ptr<ScrollBar> mpVerticalScrollBar;
     
     DECL_LINK(HandleVerticalScrollBarChange,void*);
-
-    
+    bool ProcessWheelEvent (
+        CommandEvent* pCommandEvent,
+        NotifyEvent& rEvent);
 };
 
 

Modified: openoffice/trunk/main/sfx2/source/sidebar/FocusManager.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/FocusManager.cxx?rev=1483297&r1=1483296&r2=1483297&view=diff
==============================================================================
--- openoffice/trunk/main/sfx2/source/sidebar/FocusManager.cxx (original)
+++ openoffice/trunk/main/sfx2/source/sidebar/FocusManager.cxx Thu May 16 
11:08:30 2013
@@ -559,6 +559,10 @@ IMPL_LINK(FocusManager, WindowEventListe
         case VCLEVENT_WINDOW_GETFOCUS:
         case VCLEVENT_WINDOW_LOSEFOCUS:
             pSource->Invalidate();
+            return 1;
+
+        default:
+            break;
     }
 
     return 0;
@@ -613,14 +617,14 @@ IMPL_LINK(FocusManager, ChildEventListen
                         break;
                 }
             }
-            break;
+            return 1;
         }
 
         default:
             break;
     }
 
-    return 1;
+    return 0;
 }
 
 


Reply via email to