diff --git a/src/apps/webpositive/BrowserWindow.cpp b/src/apps/webpositive/BrowserWindow.cpp index 92873f1d97..bc588402db 100644 --- a/src/apps/webpositive/BrowserWindow.cpp +++ b/src/apps/webpositive/BrowserWindow.cpp @@ -203,7 +203,8 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, 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 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, fShowTabsIfSinglePageOpen = fAppSettings->GetValue( kSettingsKeyShowTabsIfSinglePageOpen, fShowTabsIfSinglePageOpen); + fAutoHidePointer = fAppSettings->GetValue(kSettingsKeyAutoHidePointer, + fAutoHidePointer); + fNewWindowPolicy = fAppSettings->GetValue(kSettingsKeyNewWindowPolicy, (uint32)OpenStartPage); fNewTabPolicy = fAppSettings->GetValue(kSettingsKeyNewTabPolicy, @@ -506,6 +510,7 @@ BrowserWindow::MessageReceived(BMessage* message) { switch (message->what) { case OPEN_LOCATION: + _ShowInterface(true); if (fURLInputGroup->TextView()->IsFocus()) fURLInputGroup->TextView()->SelectAll(); else @@ -770,6 +775,11 @@ BrowserWindow::MessageReceived(BMessage* message) 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 @@ BrowserWindow::SetCurrentWebView(BWebView* webView) 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 @@ BrowserWindow::_SetAutoHideInterfaceInFullscreen(bool doIt) 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 @@ BrowserWindow::_ShowInterface(bool show) } // TODO: Setting the group visible seems to unhide the status bar. // Fix in Haiku? - if (!fLoadingProgressBar->IsHidden()) + while (!fLoadingProgressBar->IsHidden()) fLoadingProgressBar->Hide(); } diff --git a/src/apps/webpositive/BrowserWindow.h b/src/apps/webpositive/BrowserWindow.h index 5d272b2eb8..4fd972fcce 100644 --- a/src/apps/webpositive/BrowserWindow.h +++ b/src/apps/webpositive/BrowserWindow.h @@ -228,6 +228,7 @@ private: bool fZoomTextOnly; bool fShowTabsIfSinglePageOpen; bool fAutoHideInterfaceInFullscreenMode; + bool fAutoHidePointer; uint32 fNewWindowPolicy; uint32 fNewTabPolicy; BString fStartPageURL; diff --git a/src/apps/webpositive/SettingsKeys.cpp b/src/apps/webpositive/SettingsKeys.cpp index b65abd8da0..5bd2f32cb9 100644 --- a/src/apps/webpositive/SettingsKeys.cpp +++ b/src/apps/webpositive/SettingsKeys.cpp @@ -32,6 +32,7 @@ const char* kSettingsKeyShowTabsIfSinglePageOpen = "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"; diff --git a/src/apps/webpositive/SettingsKeys.h b/src/apps/webpositive/SettingsKeys.h index 08fc6077be..8f2b96de35 100644 --- a/src/apps/webpositive/SettingsKeys.h +++ b/src/apps/webpositive/SettingsKeys.h @@ -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; diff --git a/src/apps/webpositive/SettingsWindow.cpp b/src/apps/webpositive/SettingsWindow.cpp index 64a75a7117..8cfece44f9 100644 --- a/src/apps/webpositive/SettingsWindow.cpp +++ b/src/apps/webpositive/SettingsWindow.cpp @@ -59,30 +59,31 @@ #define B_TRANSLATE_CONTEXT "Settings Window" enum { - MSG_APPLY = 'aply', - MSG_CANCEL = 'cncl', - MSG_REVERT = 'rvrt', + 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_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_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_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_USE_PROXY_CHANGED = 'upsc', + MSG_PROXY_ADDRESS_CHANGED = 'psac', + MSG_PROXY_PORT_CHANGED = 'pspc', }; static const int32 kDefaultFontSize = 14; @@ -199,7 +200,8 @@ SettingsWindow::MessageReceived(BMessage* message) 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 @@ SettingsWindow::_CreateGeneralPage(float spacing) 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 @@ SettingsWindow::_CreateGeneralPage(float spacing) .Add(BSpaceLayoutItem::CreateHorizontalStrut(spacing)) .Add(fShowTabsIfOnlyOnePage) .Add(fAutoHideInterfaceInFullscreenMode) + .Add(fAutoHidePointer) .Add(fDaysInHistoryMenuControl) .Add(BSpaceLayoutItem::CreateHorizontalStrut(spacing)) @@ -528,6 +536,10 @@ SettingsWindow::_CanApplySettings() const != 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 @@ SettingsWindow::_ApplySettings() 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 @@ SettingsWindow::_RevertSettings() fAutoHideInterfaceInFullscreenMode->SetValue( fSettings->GetValue(kSettingsKeyAutoHideInterfaceInFullscreenMode, false)); + fAutoHidePointer->SetValue( + fSettings->GetValue(kSettingsKeyAutoHidePointer, true)); BString text; text << BrowsingHistory::DefaultInstance()->MaxHistoryItemAge(); diff --git a/src/apps/webpositive/SettingsWindow.h b/src/apps/webpositive/SettingsWindow.h index cfd8f54ce9..9648860bff 100644 --- a/src/apps/webpositive/SettingsWindow.h +++ b/src/apps/webpositive/SettingsWindow.h @@ -97,6 +97,7 @@ private: BTextControl* fDaysInHistoryMenuControl; BCheckBox* fShowTabsIfOnlyOnePage; BCheckBox* fAutoHideInterfaceInFullscreenMode; + BCheckBox* fAutoHidePointer; FontSelectionView* fStandardFontView; FontSelectionView* fSerifFontView;