diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage index 9a83ddbef3..4a53e69c1c 100644 --- a/build/jam/HaikuImage +++ b/build/jam/HaikuImage @@ -211,45 +211,6 @@ AddDirectoryToHaikuImage home mail out ; # global settings when a package is installed in ~/config AddDirectoryToHaikuImage home config settings global ; -# Deskbar Application links -AddDirectoryToHaikuImage home config settings deskbar menu Applications ; -DESKBAR_APPLICATIONS = ActivityMonitor CharacterMap CodyCam CDPlayer DeskCalc - Devices DiskProbe DriveSetup DiskUsage Expander Icon-O-Matic Installer - Magnify Mail MediaConverter MediaPlayer MidiPlayer People PoorMan - Screenshot SoundRecorder StyledEdit Terminal TV -; -local linkTarget ; -for linkTarget in $(DESKBAR_APPLICATIONS) { - AddSymlinkToHaikuImage home config settings deskbar menu Applications - : /boot/system/apps/$(linkTarget) : $(linkTarget) ; -} - -# Deskbar Desktop applets links -AddDirectoryToHaikuImage home config settings deskbar menu Desktop\ applets ; -DESKBAR_DESKTOP_APPLETS = LaunchBox NetworkStatus PowerStatus ProcessController - Workspaces -; -for linkTarget in $(DESKBAR_DESKTOP_APPLETS) { - AddSymlinkToHaikuImage home config settings deskbar menu Desktop\ applets - : /boot/system/apps/$(linkTarget) : $(linkTarget) ; -} - -# Deskbar Preferences links -AddDirectoryToHaikuImage home config settings deskbar menu Preferences ; -DESKBAR_PREFERENCES = $(SYSTEM_PREFERENCES:B) ; -for linkTarget in $(DESKBAR_PREFERENCES) { - AddSymlinkToHaikuImage home config settings deskbar menu Preferences - : /boot/system/preferences/$(linkTarget) - : $(linkTarget) ; -} - -# Deskbar Demo links -AddDirectoryToHaikuImage home config settings deskbar menu Demos ; -for linkTarget in $(SYSTEM_DEMOS) { - AddSymlinkToHaikuImage home config settings deskbar menu Demos - : /boot/system/demos/$(linkTarget) : $(linkTarget) ; -} - # scripts and data files local userBootScripts = UserBootscript UserSetupEnvironment.sample ; diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages index 06368fb6ce..f73b0b909a 100644 --- a/build/jam/OptionalPackages +++ b/build/jam/OptionalPackages @@ -300,8 +300,6 @@ if [ IsOptionalHaikuImagePackageAdded BePDF ] { InstallOptionalHaikuImagePackage $(hpkgBaseURL)/bepdf-1.1.1~beta5_2013_04_28-1-x86_gcc2.hpkg ; } - AddSymlinkToHaikuImage home config settings deskbar menu Applications - : /boot/common/apps/BePDF/BePDF ; } } @@ -318,8 +316,6 @@ if [ IsOptionalHaikuImagePackageAdded BeZillaBrowser ] { InstallOptionalHaikuImagePackage $(hpkgBaseURL)/bezillabrowser-2.0.0.22pre_2010_05_02-1-x86_gcc2.hpkg ; } - AddSymlinkToHaikuImage home config settings deskbar menu Applications - : /boot/common/apps/BeZillaBrowser/BeZillaBrowser ; } } @@ -630,8 +626,6 @@ if [ IsOptionalHaikuImagePackageAdded DemoPackage_Video ] { # Development if [ IsOptionalHaikuImagePackageAdded Development ] { if $(TARGET_ARCH) = x86 { - AddSymlinkToHaikuImage home config settings deskbar menu Applications - : /boot/system/apps/Debugger : Debugger ; # autotools if $(HAIKU_GCC_VERSION[1]) >= 4 { InstallOptionalHaikuImagePackage @@ -1151,8 +1145,6 @@ if [ IsOptionalHaikuImagePackageAdded KeymapSwitcher ] { InstallOptionalHaikuImagePackage $(hpkgBaseURL)/keymapswitcher-1.2.7.10-1-x86_gcc2.hpkg ; } - AddSymlinkToHaikuImage home config settings deskbar menu Preferences - : /boot/common/bin/KeymapSwitcher ; } else if $(TARGET_ARCH) = x86_64 { InstallOptionalHaikuImagePackage $(baseURL)/KeymapSwitcher-1.2.7-x86_64-2013-01-08.zip @@ -1668,8 +1660,6 @@ if [ IsOptionalHaikuImagePackageAdded Pe ] { InstallOptionalHaikuImagePackage $(hpkgBaseURL)/pe-2.4.3_hg602-4-x86_gcc2.hpkg ; } - AddSymlinkToHaikuImage home config settings deskbar menu Applications - : /boot/common/apps/Pe/Pe ; } } @@ -2016,8 +2006,6 @@ if [ IsOptionalHaikuImagePackageAdded Vision ] { InstallOptionalHaikuImagePackage $(hpkgBaseURL)/vision-0.9.7.r944-1-x86_gcc2.hpkg ; } - AddSymlinkToHaikuImage home config settings deskbar menu Applications - : /boot/common/apps/Vision/Vision ; } } @@ -2132,8 +2120,6 @@ if [ IsOptionalHaikuImagePackageAdded WonderBrush ] { } else { InstallOptionalHaikuImagePackage $(hpkgBaseURL)/wonderbrush-2.1.2-3-x86_gcc2.hpkg ; - AddSymlinkToHaikuImage home config settings deskbar menu Applications - : /boot/common/apps/WonderBrush/WonderBrush ; } } diff --git a/build/jam/packages/Haiku b/build/jam/packages/Haiku index bef7d7fdcc..ee9e3eacc4 100644 --- a/build/jam/packages/Haiku +++ b/build/jam/packages/Haiku @@ -315,6 +315,49 @@ AddFilesToPackage add-ons disk_systems CopyDirectoryToPackage data : mime_db : : : isTarget ; +# Deskbar menu symlinks + +# "Applications" links +DESKBAR_APPLICATIONS = ActivityMonitor CharacterMap CodyCam CDPlayer DeskCalc + Devices DiskProbe DriveSetup DiskUsage Expander Icon-O-Matic Installer + Magnify Mail MediaConverter MediaPlayer MidiPlayer People PoorMan + Screenshot SoundRecorder StyledEdit Terminal TV +; +local linkTarget ; +for linkTarget in $(DESKBAR_APPLICATIONS) { + AddSymlinkToPackage data deskbar menu Applications + : ../../../../apps/$(linkTarget) : $(linkTarget) ; +} + +# "Desktop applets" links +DESKBAR_DESKTOP_APPLETS = LaunchBox NetworkStatus PowerStatus ProcessController + Workspaces +; +for linkTarget in $(DESKBAR_DESKTOP_APPLETS) { + AddSymlinkToPackage data deskbar menu Desktop\ applets + : ../../../../apps/$(linkTarget) : $(linkTarget) ; +} + +# "Preferences" links +AddDirectoryToPackage data deskbar menu Preferences ; +DESKBAR_PREFERENCES = $(SYSTEM_PREFERENCES:B) ; +for linkTarget in $(DESKBAR_PREFERENCES) { + AddSymlinkToPackage data deskbar menu Preferences + : ../../../../preferences/$(linkTarget) + : $(linkTarget) ; +} + +# "Demo" links +AddDirectoryToPackage data deskbar menu Demos ; +for linkTarget in $(SYSTEM_DEMOS) { + AddSymlinkToPackage data deskbar menu Demos + : ../../../../demos/$(linkTarget) : $(linkTarget) ; +} + +# Deskbar menu entries file +AddFilesToPackage data deskbar : menu_entries ; + + # optional # TODO: We should probably build another package (including the data files # above) that can be installed, if desired. diff --git a/build/jam/packages/HaikuDevel b/build/jam/packages/HaikuDevel index 9fbf97447e..6357ccf0de 100644 --- a/build/jam/packages/HaikuDevel +++ b/build/jam/packages/HaikuDevel @@ -89,4 +89,8 @@ if $(TARGET_ARCH) = x86 { : $(mesaGlHeaders) : : : isTarget ; } +# Deskbar menu symlinks +AddSymlinkToPackage data deskbar menu Applications + : ../../../../apps/Debugger : Debugger ; + BuildHaikuPackage $(haikuDevelPackage) : haiku_devel ; diff --git a/src/apps/deskbar/BarApp.cpp b/src/apps/deskbar/BarApp.cpp index cc9a629835..ad170afb2d 100644 --- a/src/apps/deskbar/BarApp.cpp +++ b/src/apps/deskbar/BarApp.cpp @@ -266,13 +266,13 @@ TBarApp::InitSettings() clock.showTimeZone = false; BPath dirPath; - const char* settingsFileName = "Deskbar_settings"; - const char* clockSettingsFileName = "Deskbar_clock_settings"; + const char* settingsFileName = "settings"; + const char* clockSettingsFileName = "clock_settings"; find_directory(B_USER_DESKBAR_DIRECTORY, &dirPath, true); // just make it - if (find_directory(B_USER_SETTINGS_DIRECTORY, &dirPath, true) == B_OK) { + if (GetDeskbarSettingsDirectory(dirPath, true) == B_OK) { BPath filePath = dirPath; filePath.Append(settingsFileName); fSettingsFile = new BFile(filePath.Path(), O_RDWR); diff --git a/src/apps/deskbar/BarWindow.cpp b/src/apps/deskbar/BarWindow.cpp index 08adad8aef..f783376ae4 100644 --- a/src/apps/deskbar/BarWindow.cpp +++ b/src/apps/deskbar/BarWindow.cpp @@ -54,6 +54,7 @@ All rights reserved. #include "BarApp.h" #include "BarMenuBar.h" #include "BarView.h" +#include "DeskbarUtils.h" #include "DeskbarMenu.h" #include "PublicCommands.h" #include "StatusView.h" @@ -115,27 +116,20 @@ TBarWindow::MenusBeginning() { BPath path; entry_ref ref; + BEntry entry; - find_directory (B_USER_DESKBAR_DIRECTORY, &path); - get_ref_for_path(path.Path(), &ref); - - BEntry entry(&ref, true); - if (entry.InitCheck() == B_OK && entry.IsDirectory()) { - // need the entry_ref to the actual item - entry.GetRef(&ref); - // set the nav directory to the deskbar folder + if (GetDeskbarSettingsDirectory(path) == B_OK + && path.Append(kDeskbarMenuEntriesFileName) == B_OK + && entry.SetTo(path.Path(), true) == B_OK + && entry.Exists() + && entry.GetRef(&ref) == B_OK) { + sDeskbarMenu->SetNavDir(&ref); + } else if (GetDeskbarDataDirectory(path) == B_OK + && path.Append(kDeskbarMenuEntriesFileName) == B_OK + && entry.SetTo(path.Path(), true) == B_OK + && entry.Exists() + && entry.GetRef(&ref) == B_OK) { sDeskbarMenu->SetNavDir(&ref); - } else if (!entry.Exists()) { - // the deskbar folder does not exist - // create one now - BDirectory dir; - if (entry.GetParent(&dir) == B_OK) { - BDirectory deskbarDir; - dir.CreateDirectory("deskbar", &deskbarDir); - if (deskbarDir.GetEntry(&entry) == B_OK - && entry.GetRef(&ref) == B_OK) - sDeskbarMenu->SetNavDir(&ref); - } } else { // this really should never happen TRESPASS(); diff --git a/src/apps/deskbar/DeskbarUtils.cpp b/src/apps/deskbar/DeskbarUtils.cpp index b9b7f63e0a..ae6ad77e06 100644 --- a/src/apps/deskbar/DeskbarUtils.cpp +++ b/src/apps/deskbar/DeskbarUtils.cpp @@ -56,6 +56,11 @@ All rights reserved. #include "ExpandoMenuBar.h" +const char* const kDeskbarMenuEntriesFileName = "menu_entries"; + +static const char* const kDeskbarDirectoryName = "deskbar"; + + void AddRefsToDeskbarMenu(const BMessage* m, entry_ref* subdirectory) { @@ -102,3 +107,29 @@ AddRefsToDeskbarMenu(const BMessage* m, entry_ref* subdirectory) } } } + + +status_t +GetDeskbarSettingsDirectory(BPath& _path, bool create) +{ + status_t error = find_directory(B_USER_SETTINGS_DIRECTORY, &_path, create); + if (error != B_OK) + return error; + + error = _path.Append(kDeskbarDirectoryName); + if (error != B_OK) + return error; + + return create ? create_directory(_path.Path(), 0755) : error; +} + + +status_t +GetDeskbarDataDirectory(BPath& _path) +{ + status_t error = find_directory(B_SYSTEM_DATA_DIRECTORY, &_path, false); + if (error != B_OK) + return error; + + return _path.Append(kDeskbarDirectoryName); +} diff --git a/src/apps/deskbar/DeskbarUtils.h b/src/apps/deskbar/DeskbarUtils.h index 7da0f276c4..f80a445e79 100644 --- a/src/apps/deskbar/DeskbarUtils.h +++ b/src/apps/deskbar/DeskbarUtils.h @@ -43,7 +43,14 @@ All rights reserved. class BMessage; + +extern const char* const kDeskbarMenuEntriesFileName; + + void AddRefsToDeskbarMenu(const BMessage* m, entry_ref* subdirectory); +status_t GetDeskbarSettingsDirectory(BPath& _path, bool create = false); +status_t GetDeskbarDataDirectory(BPath& _path); + #endif /* DB_UTILS_H */ diff --git a/src/apps/deskbar/PreferencesWindow.cpp b/src/apps/deskbar/PreferencesWindow.cpp index b4a720de62..06d76491c8 100644 --- a/src/apps/deskbar/PreferencesWindow.cpp +++ b/src/apps/deskbar/PreferencesWindow.cpp @@ -35,13 +35,14 @@ #include #include "BarApp.h" +#include "DeskbarUtils.h" #include "StatusView.h" static const float kIndentSpacing = be_control_look->DefaultItemSpacing() * 2.3; static const uint32 kSettingsViewChanged = 'Svch'; -static const char* kSettingsFileName = "Deskbar_prefs_window_settings"; +static const char* kSettingsFileName = "prefs_window_settings"; #undef B_TRANSLATION_CONTEXT @@ -418,7 +419,7 @@ status_t PreferencesWindow::_InitSettingsFile(BFile* file, bool write) { BPath prefsPath; - status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &prefsPath); + status_t status = GetDeskbarSettingsDirectory(prefsPath); if (status != B_OK) return status; diff --git a/src/apps/deskbar/StatusView.cpp b/src/apps/deskbar/StatusView.cpp index 5cf934b517..952d40dde6 100644 --- a/src/apps/deskbar/StatusView.cpp +++ b/src/apps/deskbar/StatusView.cpp @@ -86,7 +86,7 @@ using std::max; const char* const kInstantiateItemCFunctionName = "instantiate_deskbar_item"; const char* const kInstantiateEntryCFunctionName = "instantiate_deskbar_entry"; -const char* const kReplicantSettingsFile = "Deskbar_replicants"; +const char* const kReplicantSettingsFile = "replicants"; const char* const kReplicantPathField = "replicant_path"; float sMinimumWindowWidth = kGutter + kMinimumTrayWidth + kDragRegionWidth; @@ -467,7 +467,7 @@ TReplicantTray::InitAddOnSupport() fItemList = new BList(); BPath path; - if (find_directory(B_USER_SETTINGS_DIRECTORY, &path, true) == B_OK) { + if (GetDeskbarSettingsDirectory(path, true) == B_OK) { path.Append(kReplicantSettingsFile); BFile file(path.Path(), B_READ_ONLY); @@ -1259,8 +1259,7 @@ TReplicantTray::_SaveSettings() { status_t result; BPath path; - if ((result = find_directory(B_USER_SETTINGS_DIRECTORY, &path, true)) - == B_OK) { + if ((result = GetDeskbarSettingsDirectory(path, true)) == B_OK) { path.Append(kReplicantSettingsFile); BFile file(path.Path(), B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE); diff --git a/src/data/Jamfile b/src/data/Jamfile index 96c7908d13..88b9651533 100644 --- a/src/data/Jamfile +++ b/src/data/Jamfile @@ -1,5 +1,6 @@ SubDir HAIKU_TOP src data ; +HaikuSubInclude deskbar ; HaikuSubInclude etc ; HaikuSubInclude keymaps ; HaikuSubInclude mime_db ; diff --git a/src/data/deskbar/Jamfile b/src/data/deskbar/Jamfile new file mode 100644 index 0000000000..79940df30e --- /dev/null +++ b/src/data/deskbar/Jamfile @@ -0,0 +1,6 @@ +SubDir HAIKU_TOP src data deskbar ; + +local deskbarMenuEntries = menu_entries ; +MakeLocateCommonPlatform $(deskbarMenuEntries) ; +File $(deskbarMenuEntries) : menu_entries ; +SetType $(deskbarMenuEntries) : application/x-vnd.haiku-virtual-directory ; diff --git a/src/data/deskbar/menu_entries b/src/data/deskbar/menu_entries new file mode 100644 index 0000000000..3576decc2a --- /dev/null +++ b/src/data/deskbar/menu_entries @@ -0,0 +1,7 @@ +directory /boot/home/config/settings/deskbar/menu +directory /boot/home/config/non-packaged/data/deskbar/menu +directory /boot/home/config/data/deskbar/menu +directory /boot/common/non-packaged/data/deskbar/menu +directory /boot/common/data/deskbar/menu +directory /boot/system/data/deskbar/menu +