[haiku-webkit-commits] r496 - in webkit/trunk/WebKit/haiku: API WebPositive

  • From: webkit@xxxxxxxxxxxxxxx
  • To: haiku-webkit-commits@xxxxxxxxxxxxx
  • Date: Sun, 16 May 2010 19:37:34 +0000

Author: stippi
Date: Sun May 16 19:37:33 2010
New Revision: 496
URL: http://mmlr.dyndns.org/changeset/496

Log:
* Moved auto-hiding the mouse pointer into BWebView::Pulse().
* Unhide the interface when the user invokes CMD-L (Open location).
* Make sure the progress bar is really hidden, sometimes it would be
  visible again after unhiding the rest of the interface.
* Added a setting for the auto-hiding the mouse pointer feature. It defaults
  to true, since I think it's useful for an app where the pointer would
  usually be in the way.
* Hide the mouse pointer in any case as soon as the user begins typing, also
  hide potentially showing tool tips in that case.

Modified:
   webkit/trunk/WebKit/haiku/API/WebView.cpp
   webkit/trunk/WebKit/haiku/API/WebView.h
   webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.cpp
   webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.h
   webkit/trunk/WebKit/haiku/WebPositive/SettingsKeys.cpp
   webkit/trunk/WebKit/haiku/WebPositive/SettingsKeys.h
   webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.cpp
   webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.h

Modified: webkit/trunk/WebKit/haiku/API/WebView.cpp
==============================================================================
--- webkit/trunk/WebKit/haiku/API/WebView.cpp   Sun May 16 15:11:03 2010        
(r495)
+++ webkit/trunk/WebKit/haiku/API/WebView.cpp   Sun May 16 19:37:33 2010        
(r496)
@@ -48,8 +48,12 @@
 }
 
 BWebView::BWebView(const char* name)
-    : BView(name, B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE | 
B_NAVIGABLE)
+    : BView(name, B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE
+       | B_NAVIGABLE | B_PULSE_NEEDED)
     , fLastMouseButtons(0)
+    , fLastMouseMovedTime(-2000000)
+    , fLastMousePos(0, 0)
+    , fAutoHidePointer(false)
     , fOffscreenBitmap(0)
     , fOffscreenViewClean(false)
     , fWebPage(new BWebPage(this))
@@ -207,6 +211,8 @@
 
 void BWebView::MouseMoved(BPoint where, uint32, const BMessage*)
 {
+       fLastMousePos = where;
+       fLastMouseMovedTime = system_time();
     _DispatchMouseEvent(where, B_MOUSE_MOVED);
 }
 
@@ -224,6 +230,10 @@
 
 void BWebView::KeyDown(const char*, int32)
 {
+       if (Bounds().Contains(fLastMousePos))
+               be_app->ObscureCursor();
+       HideToolTip();
+
     _DispatchKeyEvent(B_KEY_DOWN);
 }
 
@@ -232,6 +242,17 @@
     _DispatchKeyEvent(B_KEY_UP);
 }
 
+void BWebView::Pulse()
+{
+       if (!fAutoHidePointer || !IsFocus() || !Window()->IsActive())
+               return;
+
+       if (Bounds().Contains(fLastMousePos)
+               && system_time() - fLastMouseMovedTime > 2000000) {
+               be_app->ObscureCursor();
+       }
+}
+
 // #pragma mark - public API
 
 BString BWebView::MainFrameTitle() const
@@ -316,6 +337,11 @@
     UnlockLooper();
 }
 
+void BWebView::SetAutoHidePointer(bool doIt)
+{
+       fAutoHidePointer = doIt;
+}
+
 void BWebView::SetUserData(BWebView::UserData* userData)
 {
        if (fUserData == userData)

Modified: webkit/trunk/WebKit/haiku/API/WebView.h
==============================================================================
--- webkit/trunk/WebKit/haiku/API/WebView.h     Sun May 16 15:11:03 2010        
(r495)
+++ webkit/trunk/WebKit/haiku/API/WebView.h     Sun May 16 19:37:33 2010        
(r496)
@@ -73,6 +73,8 @@
        virtual void                            KeyDown(const char* bytes, 
int32 numBytes);
        virtual void                            KeyUp(const char* bytes, int32 
numBytes);
 
+       virtual void                            Pulse();
+
        // BWebPage API exposure
                        BWebPage*                       WebPage() const { 
return fWebPage; }
 
@@ -100,6 +102,8 @@
        // BWebview API
                        void                            
SendFakeMouseMovedEvent();
 
+                       void                            SetAutoHidePointer(bool 
doIt);
+
                        void                            SetUserData(UserData* 
cookie);
                        UserData*                       GetUserData() const;
 
@@ -124,6 +128,9 @@
                        void                            
_DispatchKeyEvent(uint32 sanityWhat);
 private:
                        uint32                          fLastMouseButtons;
+                       bigtime_t                       fLastMouseMovedTime;
+                       BPoint                          fLastMousePos;
+                       bool                            fAutoHidePointer;
 
                        BBitmap*                        fOffscreenBitmap;
                        BView*                          fOffscreenView;

Modified: webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.cpp
==============================================================================
--- webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.cpp     Sun May 16 
15:11:03 2010        (r495)
+++ webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.cpp     Sun May 16 
19:37:33 2010        (r496)
@@ -203,7 +203,8 @@
        fAppSettings(appSettings),
        fZoomTextOnly(true),
        fShowTabsIfSinglePageOpen(true),
-       fAutoHideInterfaceInFullscreenMode(false)
+       fAutoHideInterfaceInFullscreenMode(false),
+       fAutoHidePointer(true)
 {
        // Begin listening to settings changes and read some current values.
        fAppSettings->AddListener(BMessenger(this));
@@ -211,6 +212,9 @@
        fShowTabsIfSinglePageOpen = fAppSettings->GetValue(
                kSettingsKeyShowTabsIfSinglePageOpen, 
fShowTabsIfSinglePageOpen);
 
+       fAutoHidePointer = fAppSettings->GetValue(kSettingsKeyAutoHidePointer,
+               fAutoHidePointer);
+
        fNewWindowPolicy = fAppSettings->GetValue(kSettingsKeyNewWindowPolicy,
                (uint32)OpenStartPage);
        fNewTabPolicy = fAppSettings->GetValue(kSettingsKeyNewTabPolicy,
@@ -506,6 +510,7 @@
 {
        switch (message->what) {
                case OPEN_LOCATION:
+                       _ShowInterface(true);
                        if (fURLInputGroup->TextView()->IsFocus())
                                fURLInputGroup->TextView()->SelectAll();
                        else
@@ -770,6 +775,11 @@
                                        fShowTabsIfSinglePageOpen = flag;
                                        _UpdateTabGroupVisibility();
                                }
+                       } else if (name == kSettingsKeyAutoHidePointer
+                               && message->FindBool("value", &flag) == B_OK) {
+                               fAutoHidePointer = flag;
+                               if (CurrentWebView())
+                                       
CurrentWebView()->SetAutoHidePointer(fAutoHidePointer);
                        } else if (name == kSettingsKeyStartPageURL
                                && message->FindString("value", &string) == 
B_OK) {
                                fStartPageURL = string;
@@ -882,6 +892,8 @@
        BWebWindow::SetCurrentWebView(webView);
 
        if (webView != NULL) {
+               webView->SetAutoHidePointer(fAutoHidePointer);
+
                _UpdateTitle(webView->MainFrameTitle());
 
                // Restore the previous focus or focus the web view.
@@ -1838,22 +1850,16 @@
 void
 BrowserWindow::_CheckAutoHideInterface()
 {
-       if (!fIsFullscreen || !fAutoHideInterfaceInFullscreenMode)
+       if (!fIsFullscreen || !fAutoHideInterfaceInFullscreenMode
+               || (CurrentWebView() != NULL && !CurrentWebView()->IsFocus())) {
                return;
-
-       bigtime_t now = system_time();
-       float navigationGroupBottom = fNavigationGroup->IsVisible() ?
-               fNavigationGroup->Frame().bottom : 0;
-       if (fLastMousePos.y > navigationGroupBottom
-               && now - fLastMouseMovedTime > 1500000) {
-               be_app->ObscureCursor();
        }
 
        if (fLastMousePos.y == 0)
                _ShowInterface(true);
        else if (fNavigationGroup->IsVisible()
                && fLastMousePos.y > fNavigationGroup->Frame().bottom
-               && now - fLastMouseMovedTime > 3000000) {
+               && system_time() - fLastMouseMovedTime > 3000000) {
                // NOTE: Do not re-use navigationGroupBottom in the above
                // check, since we only want to hide the interface when it is 
visible.
                _ShowInterface(false);
@@ -1887,7 +1893,7 @@
        }
        // TODO: Setting the group visible seems to unhide the status bar.
        // Fix in Haiku?
-       if (!fLoadingProgressBar->IsHidden())
+       while (!fLoadingProgressBar->IsHidden())
                fLoadingProgressBar->Hide();
 }
 

Modified: webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.h
==============================================================================
--- webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.h       Sun May 16 
15:11:03 2010        (r495)
+++ webkit/trunk/WebKit/haiku/WebPositive/BrowserWindow.h       Sun May 16 
19:37:33 2010        (r496)
@@ -228,6 +228,7 @@
                        bool                            fZoomTextOnly;
                        bool                            
fShowTabsIfSinglePageOpen;
                        bool                            
fAutoHideInterfaceInFullscreenMode;
+                       bool                            fAutoHidePointer;
                        uint32                          fNewWindowPolicy;
                        uint32                          fNewTabPolicy;
                        BString                         fStartPageURL;

Modified: webkit/trunk/WebKit/haiku/WebPositive/SettingsKeys.cpp
==============================================================================
--- webkit/trunk/WebKit/haiku/WebPositive/SettingsKeys.cpp      Sun May 16 
15:11:03 2010        (r495)
+++ webkit/trunk/WebKit/haiku/WebPositive/SettingsKeys.cpp      Sun May 16 
19:37:33 2010        (r496)
@@ -32,6 +32,7 @@
        = "show tabs if single page open";
 const char* kSettingsKeyAutoHideInterfaceInFullscreenMode
        = "auto hide interface in full screen mode";
+const char* kSettingsKeyAutoHidePointer = "auto hide pointer";
 
 const char* kSettingsKeyNewWindowPolicy = "new window policy";
 const char* kSettingsKeyNewTabPolicy = "new tab policy";

Modified: webkit/trunk/WebKit/haiku/WebPositive/SettingsKeys.h
==============================================================================
--- webkit/trunk/WebKit/haiku/WebPositive/SettingsKeys.h        Sun May 16 
15:11:03 2010        (r495)
+++ webkit/trunk/WebKit/haiku/WebPositive/SettingsKeys.h        Sun May 16 
19:37:33 2010        (r496)
@@ -33,6 +33,7 @@
 extern const char* kSettingsKeyDownloadPath;
 extern const char* kSettingsKeyShowTabsIfSinglePageOpen;
 extern const char* kSettingsKeyAutoHideInterfaceInFullscreenMode;
+extern const char* kSettingsKeyAutoHidePointer;
 
 extern const char* kSettingsKeyNewWindowPolicy;
 extern const char* kSettingsKeyNewTabPolicy;

Modified: webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.cpp
==============================================================================
--- webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.cpp    Sun May 16 
15:11:03 2010        (r495)
+++ webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.cpp    Sun May 16 
19:37:33 2010        (r496)
@@ -59,30 +59,31 @@
 #define B_TRANSLATE_CONTEXT "Settings Window"
 
 enum {
-       MSG_APPLY                                                       = 
'aply',
-       MSG_CANCEL                                                      = 
'cncl',
-       MSG_REVERT                                                      = 
'rvrt',
-
-       MSG_START_PAGE_CHANGED                          = 'hpch',
-       MSG_SEARCH_PAGE_CHANGED                         = 'spch',
-       MSG_DOWNLOAD_FOLDER_CHANGED                     = 'dnfc',
-       MSG_NEW_WINDOWS_BEHAVIOR_CHANGED        = 'nwbc',
-       MSG_NEW_TABS_BEHAVIOR_CHANGED           = 'ntbc',
-       MSG_HISTORY_MENU_DAYS_CHANGED           = 'digm',
-       MSG_TAB_DISPLAY_BEHAVIOR_CHANGED        = 'tdbc',
-       MSG_AUTO_HIDE_BEHAVIOR_CHANGED          = 'ahbc',
-
-       MSG_STANDARD_FONT_CHANGED                       = 'stfc',
-       MSG_SERIF_FONT_CHANGED                          = 'sefc',
-       MSG_SANS_SERIF_FONT_CHANGED                     = 'ssfc',
-       MSG_FIXED_FONT_CHANGED                          = 'ffch',
-
-       MSG_STANDARD_FONT_SIZE_SELECTED         = 'sfss',
-       MSG_FIXED_FONT_SIZE_SELECTED            = 'ffss',
-
-       MSG_USE_PROXY_CHANGED                           = 'upsc',
-       MSG_PROXY_ADDRESS_CHANGED                       = 'psac',
-       MSG_PROXY_PORT_CHANGED                          = 'pspc',
+       MSG_APPLY                                                               
        = 'aply',
+       MSG_CANCEL                                                              
        = 'cncl',
+       MSG_REVERT                                                              
        = 'rvrt',
+
+       MSG_START_PAGE_CHANGED                                          = 
'hpch',
+       MSG_SEARCH_PAGE_CHANGED                                         = 
'spch',
+       MSG_DOWNLOAD_FOLDER_CHANGED                                     = 
'dnfc',
+       MSG_NEW_WINDOWS_BEHAVIOR_CHANGED                        = 'nwbc',
+       MSG_NEW_TABS_BEHAVIOR_CHANGED                           = 'ntbc',
+       MSG_HISTORY_MENU_DAYS_CHANGED                           = 'digm',
+       MSG_TAB_DISPLAY_BEHAVIOR_CHANGED                        = 'tdbc',
+       MSG_AUTO_HIDE_INTERFACE_BEHAVIOR_CHANGED        = 'ahic',
+       MSG_AUTO_HIDE_POINTER_BEHAVIOR_CHANGED          = 'ahpc',
+
+       MSG_STANDARD_FONT_CHANGED                                       = 
'stfc',
+       MSG_SERIF_FONT_CHANGED                                          = 
'sefc',
+       MSG_SANS_SERIF_FONT_CHANGED                                     = 
'ssfc',
+       MSG_FIXED_FONT_CHANGED                                          = 
'ffch',
+
+       MSG_STANDARD_FONT_SIZE_SELECTED                         = 'sfss',
+       MSG_FIXED_FONT_SIZE_SELECTED                            = 'ffss',
+
+       MSG_USE_PROXY_CHANGED                                           = 
'upsc',
+       MSG_PROXY_ADDRESS_CHANGED                                       = 
'psac',
+       MSG_PROXY_PORT_CHANGED                                          = 
'pspc',
 };
 
 static const int32 kDefaultFontSize = 14;
@@ -199,7 +200,8 @@
                case MSG_NEW_TABS_BEHAVIOR_CHANGED:
                case MSG_HISTORY_MENU_DAYS_CHANGED:
                case MSG_TAB_DISPLAY_BEHAVIOR_CHANGED:
-               case MSG_AUTO_HIDE_BEHAVIOR_CHANGED:
+               case MSG_AUTO_HIDE_INTERFACE_BEHAVIOR_CHANGED:
+               case MSG_AUTO_HIDE_POINTER_BEHAVIOR_CHANGED:
                case MSG_STANDARD_FONT_CHANGED:
                case MSG_SERIF_FONT_CHANGED:
                case MSG_SANS_SERIF_FONT_CHANGED:
@@ -327,9 +329,14 @@
 
        fAutoHideInterfaceInFullscreenMode = new BCheckBox("auto-hide 
interface",
                B_TRANSLATE("Auto-hide interface in fullscreen mode."),
-               new BMessage(MSG_AUTO_HIDE_BEHAVIOR_CHANGED));
+               new BMessage(MSG_AUTO_HIDE_INTERFACE_BEHAVIOR_CHANGED));
        fAutoHideInterfaceInFullscreenMode->SetValue(B_CONTROL_OFF);
 
+       fAutoHidePointer = new BCheckBox("auto-hide pointer",
+               B_TRANSLATE("Auto-hide mouse pointer."),
+               new BMessage(MSG_AUTO_HIDE_POINTER_BEHAVIOR_CHANGED));
+       fAutoHidePointer->SetValue(B_CONTROL_ON);
+
        BView* view = BGroupLayoutBuilder(B_VERTICAL, spacing / 2)
                .Add(BGridLayoutBuilder(spacing / 2, spacing / 2)
                        .Add(fStartPageControl->CreateLabelLayoutItem(), 0, 0)
@@ -352,6 +359,7 @@
                .Add(BSpaceLayoutItem::CreateHorizontalStrut(spacing))
                .Add(fShowTabsIfOnlyOnePage)
                .Add(fAutoHideInterfaceInFullscreenMode)
+               .Add(fAutoHidePointer)
                .Add(fDaysInHistoryMenuControl)
                .Add(BSpaceLayoutItem::CreateHorizontalStrut(spacing))
 
@@ -528,6 +536,10 @@
                != 
fSettings->GetValue(kSettingsKeyAutoHideInterfaceInFullscreenMode,
                        false));
 
+       canApply = canApply || (
+               (fAutoHidePointer->Value() == B_CONTROL_ON)
+               != fSettings->GetValue(kSettingsKeyAutoHidePointer, true));
+
        canApply = canApply || (_MaxHistoryAge()
                != BrowsingHistory::DefaultInstance()->MaxHistoryItemAge());
 
@@ -591,6 +603,8 @@
                fShowTabsIfOnlyOnePage->Value() == B_CONTROL_ON);
        fSettings->SetValue(kSettingsKeyAutoHideInterfaceInFullscreenMode,
                fAutoHideInterfaceInFullscreenMode->Value() == B_CONTROL_ON);
+       fSettings->SetValue(kSettingsKeyAutoHidePointer,
+               fAutoHidePointer->Value() == B_CONTROL_ON);
 
        // New page policies
        fSettings->SetValue(kSettingsKeyNewWindowPolicy, _NewWindowPolicy());
@@ -656,6 +670,8 @@
        fAutoHideInterfaceInFullscreenMode->SetValue(
                
fSettings->GetValue(kSettingsKeyAutoHideInterfaceInFullscreenMode,
                        false));
+       fAutoHidePointer->SetValue(
+               fSettings->GetValue(kSettingsKeyAutoHidePointer, true));
 
        BString text;
        text << BrowsingHistory::DefaultInstance()->MaxHistoryItemAge();

Modified: webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.h
==============================================================================
--- webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.h      Sun May 16 
15:11:03 2010        (r495)
+++ webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.h      Sun May 16 
19:37:33 2010        (r496)
@@ -97,6 +97,7 @@
                        BTextControl*           fDaysInHistoryMenuControl;
                        BCheckBox*                      fShowTabsIfOnlyOnePage;
                        BCheckBox*                      
fAutoHideInterfaceInFullscreenMode;
+                       BCheckBox*                      fAutoHidePointer;
 
                        FontSelectionView*      fStandardFontView;
                        FontSelectionView*      fSerifFontView;

Other related posts: