diff --git a/src/apps/webpositive/BrowserWindow.cpp b/src/apps/webpositive/BrowserWindow.cpp index 68febf2eff..75f1757ace 100644 --- a/src/apps/webpositive/BrowserWindow.cpp +++ b/src/apps/webpositive/BrowserWindow.cpp @@ -197,6 +197,7 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, B_DOCUMENT_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, B_AUTO_UPDATE_SIZE_LIMITS | B_ASYNCHRONOUS_CONTROLS), fIsFullscreen(false), + fInterfaceVisible(false), fPulseRunner(NULL), fVisibleInterfaceElements(interfaceElements), fAppSettings(appSettings), @@ -290,11 +291,6 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, fFullscreenItem = new BMenuItem("Fullscreen", new BMessage(TOGGLE_FULLSCREEN), B_RETURN); menu->AddItem(fFullscreenItem); - fAutoHideInterfaceInFullscreenItem = new BMenuItem("Auto hide interface " - "in fullscreen mode", - new BMessage(TOGGLE_AUTO_HIDE_INTERFACE_IN_FULLSCREEN)); - menu->AddItem(fAutoHideInterfaceInFullscreenItem); - mainMenu->AddItem(menu); fHistoryMenu = new BMenu("History"); @@ -433,7 +429,7 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, CreateNewTab(url, true, webView); _ShowInterface(true); _SetAutoHideInterfaceInFullscreen(fAppSettings->GetValue( - kAutoHideInterfaceInFullscreenMode, + kSettingsKeyAutoHideInterfaceInFullscreenMode, fAutoHideInterfaceInFullscreenMode)); AddShortcut('F', B_COMMAND_KEY | B_SHIFT_KEY, new BMessage(EDIT_HIDE_FIND_GROUP)); @@ -786,7 +782,7 @@ BrowserWindow::MessageReceived(BMessage* message) } else if (name == kSettingsKeyNewTabPolicy && message->FindUInt32("value", &value) == B_OK) { fNewTabPolicy = value; - } else if (name == kAutoHideInterfaceInFullscreenMode + } else if (name == kSettingsKeyAutoHideInterfaceInFullscreenMode && message->FindBool("value", &flag) == B_OK) { _SetAutoHideInterfaceInFullscreen(flag); } @@ -956,6 +952,7 @@ BrowserWindow::CreateNewTab(const BString& _url, bool select, BWebView* webView) fURLInputGroup->MakeFocus(true); } + _ShowInterface(true); _UpdateTabGroupVisibility(); } @@ -1302,8 +1299,10 @@ void BrowserWindow::_UpdateTabGroupVisibility() { if (Lock()) { - fTabGroup->SetVisible(fShowTabsIfSinglePageOpen - || fTabManager->CountTabs() > 1); + if (fInterfaceVisible) { + fTabGroup->SetVisible(fShowTabsIfSinglePageOpen + || fTabManager->CountTabs() > 1); + } fTabManager->SetCloseButtonsAvailable(fTabManager->CountTabs() > 1); Unlock(); } @@ -1813,10 +1812,10 @@ BrowserWindow::_SetAutoHideInterfaceInFullscreen(bool doIt) return; fAutoHideInterfaceInFullscreenMode = doIt; - fAutoHideInterfaceInFullscreenItem->SetMarked(doIt); - if (fAppSettings->GetValue(kAutoHideInterfaceInFullscreenMode, doIt) - != doIt) { - fAppSettings->SetValue(kAutoHideInterfaceInFullscreenMode, doIt); + if (fAppSettings->GetValue(kSettingsKeyAutoHideInterfaceInFullscreenMode, + doIt) != doIt) { + fAppSettings->SetValue(kSettingsKeyAutoHideInterfaceInFullscreenMode, + doIt); } if (fAutoHideInterfaceInFullscreenMode) { @@ -1858,13 +1857,19 @@ BrowserWindow::_CheckAutoHideInterface() void BrowserWindow::_ShowInterface(bool show) { + if (fInterfaceVisible == show) + return; + + fInterfaceVisible = show; + if (show) { #if !INTEGRATE_MENU_INTO_TAB_BAR fMenuGroup->SetVisible( (fVisibleInterfaceElements & INTERFACE_ELEMENT_MENU) != 0); #endif - fTabGroup->SetVisible( - (fVisibleInterfaceElements & INTERFACE_ELEMENT_TABS) != 0); + fTabGroup->SetVisible((fShowTabsIfSinglePageOpen + || fTabManager->CountTabs() > 1) + && (fVisibleInterfaceElements & INTERFACE_ELEMENT_TABS) != 0); fNavigationGroup->SetVisible( (fVisibleInterfaceElements & INTERFACE_ELEMENT_NAVIGATION) != 0); fStatusGroup->SetVisible( diff --git a/src/apps/webpositive/BrowserWindow.h b/src/apps/webpositive/BrowserWindow.h index 8956bffa2d..1750584fb3 100644 --- a/src/apps/webpositive/BrowserWindow.h +++ b/src/apps/webpositive/BrowserWindow.h @@ -193,7 +193,6 @@ private: BMenuItem* fFindNextMenuItem; BMenuItem* fZoomTextOnlyMenuItem; BMenuItem* fFullscreenItem; - BMenuItem* fAutoHideInterfaceInFullscreenItem; BMenuItem* fBackMenuItem; BMenuItem* fForwardMenuItem; @@ -216,6 +215,7 @@ private: TabManager* fTabManager; bool fIsFullscreen; + bool fInterfaceVisible; BRect fNonFullscreenWindowFrame; BMessageRunner* fPulseRunner; uint32 fVisibleInterfaceElements; diff --git a/src/apps/webpositive/SettingsKeys.cpp b/src/apps/webpositive/SettingsKeys.cpp index f9e3de942f..b65abd8da0 100644 --- a/src/apps/webpositive/SettingsKeys.cpp +++ b/src/apps/webpositive/SettingsKeys.cpp @@ -30,6 +30,8 @@ const char* kSettingsKeyDownloadPath = "download path"; const char* kSettingsKeyShowTabsIfSinglePageOpen = "show tabs if single page open"; +const char* kSettingsKeyAutoHideInterfaceInFullscreenMode + = "auto hide interface in full screen mode"; const char* kSettingsKeyNewWindowPolicy = "new window policy"; const char* kSettingsKeyNewTabPolicy = "new tab policy"; @@ -45,6 +47,3 @@ const char* kDefaultSearchPageURL = "http://www.google.com"; const char* kSettingsKeyUseProxy = "use http proxy"; const char* kSettingsKeyProxyAddress = "http proxy address"; const char* kSettingsKeyProxyPort = "http proxy port"; - -const char* kAutoHideInterfaceInFullscreenMode - = "auto hide interface in full screen mode"; diff --git a/src/apps/webpositive/SettingsKeys.h b/src/apps/webpositive/SettingsKeys.h index 87abb6be7d..08fc6077be 100644 --- a/src/apps/webpositive/SettingsKeys.h +++ b/src/apps/webpositive/SettingsKeys.h @@ -32,6 +32,7 @@ extern const char* kSettingsKeyDownloadPath; extern const char* kSettingsKeyShowTabsIfSinglePageOpen; +extern const char* kSettingsKeyAutoHideInterfaceInFullscreenMode; extern const char* kSettingsKeyNewWindowPolicy; extern const char* kSettingsKeyNewTabPolicy; @@ -46,6 +47,4 @@ extern const char* kSettingsKeyUseProxy; extern const char* kSettingsKeyProxyAddress; extern const char* kSettingsKeyProxyPort; -extern const char* kAutoHideInterfaceInFullscreenMode; - #endif // SETTINGS_KEYS_H diff --git a/src/apps/webpositive/SettingsWindow.cpp b/src/apps/webpositive/SettingsWindow.cpp index b9fa66136a..5026f867dc 100644 --- a/src/apps/webpositive/SettingsWindow.cpp +++ b/src/apps/webpositive/SettingsWindow.cpp @@ -70,6 +70,7 @@ enum { 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', @@ -195,6 +196,7 @@ 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_STANDARD_FONT_CHANGED: case MSG_SERIF_FONT_CHANGED: case MSG_SANS_SERIF_FONT_CHANGED: @@ -311,6 +313,11 @@ SettingsWindow::_CreateGeneralPage(float spacing) new BMessage(MSG_TAB_DISPLAY_BEHAVIOR_CHANGED)); fShowTabsIfOnlyOnePage->SetValue(B_CONTROL_ON); + fAutoHideInterfaceInFullscreenMode = new BCheckBox("auto-hide interface", + TR("Auto-hide interface in fullscreen mode."), + new BMessage(MSG_AUTO_HIDE_BEHAVIOR_CHANGED)); + fAutoHideInterfaceInFullscreenMode->SetValue(B_CONTROL_OFF); + BView* view = BGroupLayoutBuilder(B_VERTICAL, spacing / 2) .Add(BGridLayoutBuilder(spacing / 2, spacing / 2) .Add(fStartPageControl->CreateLabelLayoutItem(), 0, 0) @@ -332,6 +339,7 @@ SettingsWindow::_CreateGeneralPage(float spacing) .Add(new BSeparatorView(B_HORIZONTAL, B_PLAIN_BORDER)) .Add(BSpaceLayoutItem::CreateHorizontalStrut(spacing)) .Add(fShowTabsIfOnlyOnePage) + .Add(fAutoHideInterfaceInFullscreenMode) .Add(fDaysInHistoryMenuControl) .Add(BSpaceLayoutItem::CreateHorizontalStrut(spacing)) @@ -499,6 +507,11 @@ SettingsWindow::_CanApplySettings() const canApply = canApply || ((fShowTabsIfOnlyOnePage->Value() == B_CONTROL_ON) != fSettings->GetValue(kSettingsKeyShowTabsIfSinglePageOpen, true)); + canApply = canApply || ( + (fAutoHideInterfaceInFullscreenMode->Value() == B_CONTROL_ON) + != fSettings->GetValue(kSettingsKeyAutoHideInterfaceInFullscreenMode, + false)); + canApply = canApply || (_MaxHistoryAge() != BrowsingHistory::DefaultInstance()->MaxHistoryItemAge()); @@ -560,6 +573,8 @@ SettingsWindow::_ApplySettings() fSettings->SetValue(kSettingsKeyDownloadPath, fDownloadFolderControl->Text()); fSettings->SetValue(kSettingsKeyShowTabsIfSinglePageOpen, fShowTabsIfOnlyOnePage->Value() == B_CONTROL_ON); + fSettings->SetValue(kSettingsKeyAutoHideInterfaceInFullscreenMode, + fAutoHideInterfaceInFullscreenMode->Value() == B_CONTROL_ON); // New page policies fSettings->SetValue(kSettingsKeyNewWindowPolicy, _NewWindowPolicy()); @@ -622,6 +637,9 @@ SettingsWindow::_RevertSettings() fSettings->GetValue(kSettingsKeyDownloadPath, kDefaultDownloadPath)); fShowTabsIfOnlyOnePage->SetValue( fSettings->GetValue(kSettingsKeyShowTabsIfSinglePageOpen, true)); + fAutoHideInterfaceInFullscreenMode->SetValue( + fSettings->GetValue(kSettingsKeyAutoHideInterfaceInFullscreenMode, + false)); BString text; text << BrowsingHistory::DefaultInstance()->MaxHistoryItemAge(); diff --git a/src/apps/webpositive/SettingsWindow.h b/src/apps/webpositive/SettingsWindow.h index c595632f8e..cfd8f54ce9 100644 --- a/src/apps/webpositive/SettingsWindow.h +++ b/src/apps/webpositive/SettingsWindow.h @@ -96,6 +96,7 @@ private: BTextControl* fDaysInHistoryMenuControl; BCheckBox* fShowTabsIfOnlyOnePage; + BCheckBox* fAutoHideInterfaceInFullscreenMode; FontSelectionView* fStandardFontView; FontSelectionView* fSerifFontView;