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