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;