0cc4549
From 2efa35a812a6f1e35e4959a357f50feff7e598f5 Mon Sep 17 00:00:00 2001
0cc4549
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
0cc4549
Date: Tue, 6 Nov 2012 23:21:06 +0000
0cc4549
Subject: [PATCH] Resolves: fdo#56198 collect scrollbar click preference
0cc4549
 settings
0cc4549
0cc4549
for gtk and merge with aqua equivalent so as to alternate "jump to here"
0cc4549
behavior for primary button vs primary means scroll by single page. Secondary
0cc4549
button takes the alternative behaviour
0cc4549
0cc4549
Change-Id: I0a96f3131f41ec87052da39cbe96bfd895ca53f6
0cc4549
---
0cc4549
 vcl/aqua/source/window/salframe.cxx           |  6 +++---
0cc4549
 vcl/inc/svdata.hxx                            |  1 -
0cc4549
 vcl/inc/vcl/settings.hxx                      | 17 ++++++++++++-----
0cc4549
 vcl/source/app/settings.cxx                   | 15 +++++++++------
0cc4549
 vcl/source/control/scrbar.cxx                 | 24 ++++++++++++++++--------
0cc4549
 vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx      | 10 +++++++---
0cc4549
 vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx | 10 +++++++---
0cc4549
 7 files changed, 54 insertions(+), 29 deletions(-)
0cc4549
0cc4549
diff --git a/vcl/aqua/source/window/salframe.cxx b/vcl/aqua/source/window/salframe.cxx
0cc4549
index 924210d..cf7c048 100644
0cc4549
--- a/vcl/aqua/source/window/salframe.cxx
0cc4549
+++ b/vcl/aqua/source/window/salframe.cxx
0cc4549
@@ -1146,7 +1146,7 @@ rtl::OUString AquaSalFrame::GetKeyName( sal_uInt16 nKeyCode )
0cc4549
 
0cc4549
 // -----------------------------------------------------------------------
0cc4549
 
0cc4549
-static void getAppleScrollBarVariant(void)
0cc4549
+static void getAppleScrollBarVariant(StyleSettings &rSettings)
0cc4549
 {
0cc4549
     bool bIsScrollbarDoubleMax = true; // default is DoubleMax
0cc4549
 
0cc4549
@@ -1183,7 +1183,7 @@ static void getAppleScrollBarVariant(void)
0cc4549
         if( jumpStr )
0cc4549
         {
0cc4549
             if( CFGetTypeID( jumpStr ) == CFBooleanGetTypeID() )
0cc4549
-                ImplGetSVData()->maNWFData.mbScrollbarJumpPage = (jumpStr == kCFBooleanTrue);
0cc4549
+                rSettings.SetPrimaryButtonWarpsSlider(jumpStr == kCFBooleanTrue);
0cc4549
             CFRelease( jumpStr );
0cc4549
         }
0cc4549
         CFRelease( jumpScroll );
0cc4549
@@ -1324,7 +1324,7 @@ void AquaSalFrame::UpdateSettings( AllSettings& rSettings )
0cc4549
     // no mnemonics on aqua
0cc4549
     aStyleSettings.SetOptions( aStyleSettings.GetOptions() | STYLE_OPTION_NOMNEMONICS );
0cc4549
 
0cc4549
-    getAppleScrollBarVariant();
0cc4549
+    getAppleScrollBarVariant(aStyleSettings);
0cc4549
 
0cc4549
     // set scrollbar size
0cc4549
     aStyleSettings.SetScrollBarSize( static_cast<long int>([NSScroller scrollerWidth]) );
0cc4549
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
0cc4549
index af547e9..974a67f 100644
0cc4549
--- a/vcl/inc/svdata.hxx
0cc4549
+++ b/vcl/inc/svdata.hxx
0cc4549
@@ -294,7 +294,6 @@ struct ImplSVNWFData
0cc4549
     bool                    mbCheckBoxNeedsErase:1;         // set true for platforms that should draw the
0cc4549
                                                             // window background before drawing the native
0cc4549
                                                             // checkbox
0cc4549
-    bool                    mbScrollbarJumpPage:1;          // true for "jump to here" behavior
0cc4549
     bool                    mbCanDrawWidgetAnySize:1;       // set to true currently on gtk
0cc4549
 };
0cc4549
 
0cc4549
diff --git a/vcl/inc/vcl/settings.hxx b/vcl/inc/vcl/settings.hxx
0cc4549
index 9a0a856..1052b49 100644
0cc4549
--- a/vcl/inc/vcl/settings.hxx
0cc4549
+++ b/vcl/inc/vcl/settings.hxx
5331ac8
@@ -323,7 +323,10 @@
0cc4549
     sal_uLong                           mnPreferredSymbolsStyle;
0cc4549
     sal_uInt16                          mnSkipDisabledInMenus;
0cc4549
     sal_Bool                            mbHideDisabledMenuItems;
0cc4549
-    sal_Bool                            mnAcceleratorsInContextMenus;
0cc4549
+    sal_Bool                            mbAcceleratorsInContextMenus;
0cc4549
+    //mbPrimaryButtonWarpsSlider == true for "jump to here" behavior for primary button, otherwise
0cc4549
+    //primary means scroll by single page. Secondary button takes the alternative behaviour
0cc4549
+    sal_Bool                        mbPrimaryButtonWarpsSlider;
0cc4549
     Wallpaper                       maWorkspaceGradient;
5331ac8
     const void*                     mpFontOptions;
5331ac8
 };
5331ac8
@@ -628,10 +631,14 @@
0cc4549
                                         { CopyData(); mpData->mbHideDisabledMenuItems = bHideDisabledMenuItems; }
0cc4549
     sal_Bool                            GetHideDisabledMenuItems() const
0cc4549
                                         { return mpData->mbHideDisabledMenuItems; }
0cc4549
-    void                                                       SetAcceleratorsInContextMenus( sal_Bool bAcceleratorsInContextMenus )
0cc4549
-                                        { CopyData(); mpData->mnAcceleratorsInContextMenus = bAcceleratorsInContextMenus; }
0cc4549
-    sal_Bool                            GetAcceleratorsInContextMenus() const
0cc4549
-                                        { return mpData->mnAcceleratorsInContextMenus; }
0cc4549
+    void                            SetAcceleratorsInContextMenus( sal_Bool bAcceleratorsInContextMenus )
0cc4549
+                                        { CopyData(); mpData->mbAcceleratorsInContextMenus = bAcceleratorsInContextMenus; }
0cc4549
+    sal_Bool                        GetAcceleratorsInContextMenus() const
0cc4549
+                                        { return mpData->mbAcceleratorsInContextMenus; }
0cc4549
+    void                            SetPrimaryButtonWarpsSlider( sal_Bool bPrimaryButtonWarpsSlider )
0cc4549
+                                        { CopyData(); mpData->mbPrimaryButtonWarpsSlider = bPrimaryButtonWarpsSlider; }
0cc4549
+    sal_Bool                        GetPrimaryButtonWarpsSlider() const
0cc4549
+                                        { return mpData->mbPrimaryButtonWarpsSlider; }
0cc4549
 
0cc4549
     void                            SetCairoFontOptions( const void *pOptions )
0cc4549
                                         { CopyData(); mpData->mpFontOptions = pOptions;  }
0cc4549
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
0cc4549
index 273e118..a2acdad 100644
0cc4549
--- a/vcl/source/app/settings.cxx
0cc4549
+++ b/vcl/source/app/settings.cxx
0cc4549
@@ -337,11 +337,12 @@ ImplStyleData::ImplStyleData( const ImplStyleData& rData ) :
0cc4549
     mnUseImagesInMenus          = rData.mnUseImagesInMenus;
0cc4549
     mbPreferredUseImagesInMenus = rData.mbPreferredUseImagesInMenus;
0cc4549
     mnSkipDisabledInMenus       = rData.mnSkipDisabledInMenus;
0cc4549
-    mbHideDisabledMenuItems              = rData.mbHideDisabledMenuItems;
0cc4549
-    mnAcceleratorsInContextMenus    = rData.mnAcceleratorsInContextMenus;
0cc4549
+    mbHideDisabledMenuItems     = rData.mbHideDisabledMenuItems;
0cc4549
+    mbAcceleratorsInContextMenus = rData.mbAcceleratorsInContextMenus;
0cc4549
+    mbPrimaryButtonWarpsSlider  = rData.mbPrimaryButtonWarpsSlider;
0cc4549
     mnToolbarIconSize           = rData.mnToolbarIconSize;
0cc4549
     mnSymbolsStyle              = rData.mnSymbolsStyle;
0cc4549
-    mnPreferredSymbolsStyle         = rData.mnPreferredSymbolsStyle;
0cc4549
+    mnPreferredSymbolsStyle     = rData.mnPreferredSymbolsStyle;
0cc4549
     mpFontOptions               = rData.mpFontOptions;
0cc4549
 }
0cc4549
 
0cc4549
@@ -425,10 +426,11 @@ void ImplStyleData::SetStandardStyles()
0cc4549
     mnUseSystemUIFonts          = 1;
0cc4549
     mnUseFlatBorders            = 0;
0cc4549
     mnUseFlatMenues             = 0;
0cc4549
-    mbPreferredUseImagesInMenus         = sal_True;
0cc4549
+    mbPreferredUseImagesInMenus = sal_True;
0cc4549
     mnSkipDisabledInMenus       = (sal_uInt16)sal_False;
0cc4549
     mbHideDisabledMenuItems     = sal_False;
0cc4549
-    mnAcceleratorsInContextMenus    = sal_True;
0cc4549
+    mbAcceleratorsInContextMenus = sal_True;
0cc4549
+    mbPrimaryButtonWarpsSlider = sal_False;
0cc4549
 
0cc4549
     Gradient aGrad( GradientStyle_LINEAR, DEFAULT_WORKSPACE_GRADIENT_START_COLOR, DEFAULT_WORKSPACE_GRADIENT_END_COLOR );
0cc4549
     maWorkspaceGradient = Wallpaper( aGrad );
0cc4549
@@ -852,7 +854,8 @@ sal_Bool StyleSettings::operator ==( const StyleSettings& rSet ) const
0cc4549
          (mpData->mbPreferredUseImagesInMenus == rSet.mpData->mbPreferredUseImagesInMenus) &&
0cc4549
          (mpData->mnSkipDisabledInMenus     == rSet.mpData->mnSkipDisabledInMenus)      &&
0cc4549
          (mpData->mbHideDisabledMenuItems   == rSet.mpData->mbHideDisabledMenuItems)    &&
0cc4549
-         (mpData->mnAcceleratorsInContextMenus  == rSet.mpData->mnAcceleratorsInContextMenus)       &&
0cc4549
+         (mpData->mbAcceleratorsInContextMenus  == rSet.mpData->mbAcceleratorsInContextMenus)&&
0cc4549
+         (mpData->mbPrimaryButtonWarpsSlider == rSet.mpData->mbPrimaryButtonWarpsSlider) &&
0cc4549
          (mpData->maFontColor               == rSet.mpData->maFontColor ))
0cc4549
         return sal_True;
0cc4549
     else
0cc4549
diff --git a/vcl/source/control/scrbar.cxx b/vcl/source/control/scrbar.cxx
0cc4549
index dad66f6..9e90362 100644
0cc4549
--- a/vcl/source/control/scrbar.cxx
0cc4549
+++ b/vcl/source/control/scrbar.cxx
5331ac8
@@ -948,7 +948,12 @@
0cc4549
 
0cc4549
 void ScrollBar::MouseButtonDown( const MouseEvent& rMEvt )
0cc4549
 {
0cc4549
-    if ( rMEvt.IsLeft() || rMEvt.IsMiddle() )
0cc4549
+    bool bPrimaryWarps = GetSettings().GetStyleSettings().GetPrimaryButtonWarpsSlider();
0cc4549
+    bool bWarp = bPrimaryWarps ? rMEvt.IsLeft() : rMEvt.IsMiddle();
0cc4549
+    bool bPrimaryWarping = bWarp && rMEvt.IsLeft();
0cc4549
+    bool bPage = bPrimaryWarps ? rMEvt.IsRight() : rMEvt.IsLeft();
0cc4549
+
0cc4549
+    if (rMEvt.IsLeft() || rMEvt.IsMiddle() || rMEvt.IsRight())
0cc4549
     {
0cc4549
         const Point&    rMousePos = rMEvt.GetPosPixel();
0cc4549
         sal_uInt16          nTrackFlags = 0;
5331ac8
@@ -964,7 +969,7 @@
0cc4549
                 bIsInside:
0cc4549
                 maBtn1Rect.IsInside( rMousePos ) )
0cc4549
         {
0cc4549
-            if ( !(mnStateFlags & SCRBAR_STATE_BTN1_DISABLE) )
0cc4549
+            if (rMEvt.IsLeft() && !(mnStateFlags & SCRBAR_STATE_BTN1_DISABLE) )
0cc4549
             {
0cc4549
                 nTrackFlags     = STARTTRACK_BUTTONREPEAT;
0cc4549
                 meScrollType    = SCROLL_LINEUP;
5331ac8
@@ -978,7 +983,7 @@
0cc4549
                 bIsInside:
0cc4549
                 maBtn2Rect.IsInside( rMousePos ) )
0cc4549
         {
0cc4549
-            if ( !(mnStateFlags & SCRBAR_STATE_BTN2_DISABLE) )
0cc4549
+            if (rMEvt.IsLeft() && !(mnStateFlags & SCRBAR_STATE_BTN2_DISABLE) )
0cc4549
             {
0cc4549
                 nTrackFlags     = STARTTRACK_BUTTONREPEAT;
0cc4549
                 meScrollType    = SCROLL_LINEDOWN;
5331ac8
@@ -992,7 +997,10 @@
0cc4549
             bool bThumbHit = HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? PART_THUMB_HORZ : PART_THUMB_VERT,
0cc4549
                                                    maThumbRect, rMousePos, bIsInside )
0cc4549
                              ? bIsInside : maThumbRect.IsInside( rMousePos );
0cc4549
-            bool bDragHandling = rMEvt.IsMiddle() || bThumbHit || ImplGetSVData()->maNWFData.mbScrollbarJumpPage;
0cc4549
+
0cc4549
+            bool bThumbAction = bWarp || bPage;
0cc4549
+
0cc4549
+            bool bDragHandling = bWarp || (bThumbHit && bThumbAction);
0cc4549
             if( bDragHandling )
0cc4549
             {
0cc4549
                 if( mpData )
5331ac8
@@ -1009,7 +1017,7 @@
0cc4549
                     mnDragDraw      = SCRBAR_DRAW_THUMB;
0cc4549
 
0cc4549
                     // calculate mouse offset
0cc4549
-                    if( rMEvt.IsMiddle() || (ImplGetSVData()->maNWFData.mbScrollbarJumpPage && !bThumbHit) )
0cc4549
+                    if (bWarp && (!bThumbHit || !bPrimaryWarping))
0cc4549
                     {
0cc4549
                         bDragToMouse = sal_True;
0cc4549
                         if ( GetStyle() & WB_HORZ )
5331ac8
@@ -1031,9 +1039,9 @@
5331ac8
                 else
5331ac8
                     Sound::Beep( SOUND_DISABLE, this );
0cc4549
             }
0cc4549
-            else if( HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? PART_TRACK_HORZ_AREA : PART_TRACK_VERT_AREA,
0cc4549
+            else if(bPage && (HitTestNativeControl( CTRL_SCROLLBAR, bHorizontal? PART_TRACK_HORZ_AREA : PART_TRACK_VERT_AREA,
5331ac8
                                            aControlRegion, rMousePos, bIsInside )?
5331ac8
-                bIsInside : sal_True )
0cc4549
+                bIsInside : sal_True) )
0cc4549
             {
0cc4549
                 nTrackFlags = STARTTRACK_BUTTONREPEAT;
0cc4549
 
0cc4549
diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
0cc4549
index 65df181..1451476 100644
0cc4549
--- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
0cc4549
+++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
0cc4549
@@ -3987,9 +3987,13 @@ void GtkSalGraphics::updateSettings( AllSettings& rSettings )
0cc4549
     aMouseSettings.SetMenuDelay( iMenuPopupDelay );
0cc4549
     rSettings.SetMouseSettings( aMouseSettings );
0cc4549
 
0cc4549
-    gboolean showmenuicons = true;
0cc4549
-    g_object_get( pSettings, "gtk-menu-images", &showmenuicons, (char *)NULL );
0cc4549
-    aStyleSet.SetPreferredUseImagesInMenus( showmenuicons );
0cc4549
+    gboolean showmenuicons = true, primarybuttonwarps = false;
0cc4549
+    g_object_get( pSettings,
0cc4549
+        "gtk-menu-images", &showmenuicons,
0cc4549
+        "gtk-primary-button-warps-slider", &primarybuttonwarps,
0cc4549
+        (char *)NULL );
0cc4549
+    aStyleSet.SetPreferredUseImagesInMenus(showmenuicons);
0cc4549
+    aStyleSet.SetPrimaryButtonWarpsSlider(primarybuttonwarps);
0cc4549
 
0cc4549
     // set scrollbar settings
0cc4549
     gint slider_width = 14;
0cc4549
diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
0cc4549
index 0774699f..1037d9d 100644
0cc4549
--- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
0cc4549
+++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
0cc4549
@@ -1376,9 +1376,13 @@ void GtkSalGraphics::updateSettings( AllSettings& rSettings )
0cc4549
     aMouseSettings.SetMenuDelay( iMenuPopupDelay );
0cc4549
     rSettings.SetMouseSettings( aMouseSettings );
0cc4549
 
0cc4549
-    gboolean showmenuicons = true;
0cc4549
-    g_object_get( pSettings, "gtk-menu-images", &showmenuicons, (char *)NULL );
0cc4549
-    aStyleSet.SetPreferredUseImagesInMenus( showmenuicons );
0cc4549
+    gboolean showmenuicons = true, primarybuttonwarps = false;
0cc4549
+    g_object_get( pSettings,
0cc4549
+        "gtk-menu-images", &showmenuicons,
0cc4549
+        "gtk-primary-button-warps-slider", &primarybuttonwarps,
0cc4549
+        (char *)NULL );
0cc4549
+    aStyleSet.SetPreferredUseImagesInMenus(showmenuicons);
0cc4549
+    aStyleSet.SetPrimaryButtonWarpsSlider(primarybuttonwarps);
0cc4549
 
0cc4549
     // set scrollbar settings
0cc4549
     gint slider_width = 14;
0cc4549
-- 
0cc4549
1.7.11.7
0cc4549