From a12cf089ee7a609f3380eff8e0cfa516ea76b862 Mon Sep 17 00:00:00 2001 From: Jim906 Date: Tue, 29 Mar 2022 14:03:19 -0400 Subject: [PATCH] FileTypes: save ApplicationTypeWindow position * Move the default size and position settings for ApplicationTypeWindow from its constructor to FileTypesWindow::fSettings, and update these settings when the window is closed. * Add _Frame() for extracting a BRect from fSettings. * Keep a BPoint parameter in the constructor, which allows each new instance of the window to be slightly offset from the last one. * Submitted in response to a comment by humdinger on https://review.haiku-os.org/c/haiku/+/4926 Change-Id: I0fa8a9ca8f18cf4093363bff713f0f80f6c04cd5 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5164 Reviewed-by: Adrien Destugues Tested-by: Commit checker robot --- .../filetypes/ApplicationTypeWindow.cpp | 17 ++- .../filetypes/ApplicationTypeWindow.h | 122 +++++++++--------- src/preferences/filetypes/FileTypes.cpp | 9 +- 3 files changed, 83 insertions(+), 65 deletions(-) diff --git a/src/preferences/filetypes/ApplicationTypeWindow.cpp b/src/preferences/filetypes/ApplicationTypeWindow.cpp index c54cbaa680..8f255ad6db 100755 --- a/src/preferences/filetypes/ApplicationTypeWindow.cpp +++ b/src/preferences/filetypes/ApplicationTypeWindow.cpp @@ -298,10 +298,10 @@ SupportedTypeListView::AcceptsDrag(const BMessage* message) // #pragma mark - -ApplicationTypeWindow::ApplicationTypeWindow(BPoint position, +ApplicationTypeWindow::ApplicationTypeWindow(const BMessage& settings, BPoint offset, const BEntry& entry) : - BWindow(BRect(0.0f, 0.0f, 250.0f, 340.0f).OffsetBySelf(position), + BWindow(_Frame(settings).OffsetBySelf(offset), B_TRANSLATE("Application type"), B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS | B_FRAME_EVENTS | B_AUTO_UPDATE_SIZE_LIMITS), @@ -531,6 +531,15 @@ ApplicationTypeWindow::~ApplicationTypeWindow() BMimeType::StopWatching(this); } +BRect +ApplicationTypeWindow::_Frame(const BMessage& settings) const +{ + BRect rect; + if (settings.FindRect("app_type_frame", &rect) == B_OK) + return rect; + + return BRect(100.0f, 110.0f, 250.0f, 340.0f); +} BString ApplicationTypeWindow::_Title(const BEntry& entry) @@ -1076,6 +1085,10 @@ ApplicationTypeWindow::QuitRequested() } } + BMessage update(kMsgSettingsChanged); + update.AddRect("app_type_frame", Frame()); + be_app_messenger.SendMessage(&update); + be_app->PostMessage(kMsgTypeWindowClosed); return true; } diff --git a/src/preferences/filetypes/ApplicationTypeWindow.h b/src/preferences/filetypes/ApplicationTypeWindow.h index 3f00d32a22..5d3199e85d 100644 --- a/src/preferences/filetypes/ApplicationTypeWindow.h +++ b/src/preferences/filetypes/ApplicationTypeWindow.h @@ -25,81 +25,83 @@ class MimeTypeListView; class ApplicationTypeWindow : public BWindow { - public: - ApplicationTypeWindow(BPoint position, const BEntry& entry); - virtual ~ApplicationTypeWindow(); +public: + ApplicationTypeWindow(const BMessage& settings, BPoint offset, + const BEntry& entry); + virtual ~ApplicationTypeWindow(); - virtual void MessageReceived(BMessage* message); - virtual bool QuitRequested(); + virtual void MessageReceived(BMessage* message); + virtual bool QuitRequested(); - private: - BString _Title(const BEntry& entry); - void _SetTo(const BEntry& entry); - void _UpdateAppFlagsEnabled(); - void _MakeNumberTextControl(BTextControl* control); - void _Save(); +private: + BRect _Frame(const BMessage& settings) const; + BString _Title(const BEntry& entry); + void _SetTo(const BEntry& entry); + void _UpdateAppFlagsEnabled(); + void _MakeNumberTextControl(BTextControl* control); + void _Save(); - bool _Flags(uint32& flags) const; - BMessage _SupportedTypes() const; - version_info _VersionInfo() const; + bool _Flags(uint32& flags) const; + BMessage _SupportedTypes() const; + version_info _VersionInfo() const; - void _CheckSaveMenuItem(uint32 flags); - uint32 _NeedsSaving(uint32 flags) const; + void _CheckSaveMenuItem(uint32 flags); + uint32 _NeedsSaving(uint32 flags) const; - private: - struct AppInfo { - BString signature; - bool gotFlags; - uint32 flags; - version_info versionInfo; +private: + struct AppInfo { + BString signature; + bool gotFlags; + uint32 flags; + version_info versionInfo; - BMessage supportedTypes; + BMessage supportedTypes; - bool iconChanged; - bool typeIconsChanged; - }; - enum { - CHECK_SIGNATUR = 1 << 0, - CHECK_FLAGS = 1 << 1, - CHECK_VERSION = 1 << 2, - CHECK_ICON = 1 << 3, + bool iconChanged; + bool typeIconsChanged; + }; + enum { + CHECK_SIGNATUR = 1 << 0, + CHECK_FLAGS = 1 << 1, + CHECK_VERSION = 1 << 2, + CHECK_ICON = 1 << 3, - CHECK_TYPES = 1 << 4, - CHECK_TYPE_ICONS = 1 << 5, + CHECK_TYPES = 1 << 4, + CHECK_TYPE_ICONS = 1 << 5, - CHECK_ALL = 0xffffffff - }; + CHECK_ALL = 0xffffffff + }; - private: - BEntry fEntry; - AppInfo fOriginalInfo; +private: + BEntry fEntry; + AppInfo fOriginalInfo; - BTextControl* fSignatureControl; - IconView* fIconView; - Icon fIcon; + BTextControl* fSignatureControl; + IconView* fIconView; + Icon fIcon; - BCheckBox* fFlagsCheckBox; - BRadioButton* fSingleLaunchButton; - BRadioButton* fMultipleLaunchButton; - BRadioButton* fExclusiveLaunchButton; - BCheckBox* fArgsOnlyCheckBox; - BCheckBox* fBackgroundAppCheckBox; + BCheckBox* fFlagsCheckBox; + BRadioButton* fSingleLaunchButton; + BRadioButton* fMultipleLaunchButton; + BRadioButton* fExclusiveLaunchButton; + BCheckBox* fArgsOnlyCheckBox; + BCheckBox* fBackgroundAppCheckBox; - BListView* fTypeListView; - BButton* fAddTypeButton; - BButton* fRemoveTypeButton; - IconView* fTypeIconView; + BListView* fTypeListView; + BButton* fAddTypeButton; + BButton* fRemoveTypeButton; + IconView* fTypeIconView; - BTextControl* fMajorVersionControl; - BTextControl* fMiddleVersionControl; - BTextControl* fMinorVersionControl; - BPopUpMenu* fVarietyMenu; - BTextControl* fInternalVersionControl; - BTextControl* fShortDescriptionControl; - BTextView* fLongDescriptionView; + BTextControl* fMajorVersionControl; + BTextControl* fMiddleVersionControl; + BTextControl* fMinorVersionControl; + BPopUpMenu* fVarietyMenu; + BTextControl* fInternalVersionControl; + BTextControl* fShortDescriptionControl; + BTextView* fLongDescriptionView; - BMenuItem* fSaveMenuItem; - uint32 fChangedProperties; + BMenuItem* fSaveMenuItem; + uint32 fChangedProperties; }; #endif // APPLICATION_TYPE_WINDOW_H diff --git a/src/preferences/filetypes/FileTypes.cpp b/src/preferences/filetypes/FileTypes.cpp index 0d3cd0f259..447be50af6 100644 --- a/src/preferences/filetypes/FileTypes.cpp +++ b/src/preferences/filetypes/FileTypes.cpp @@ -125,6 +125,9 @@ Settings::UpdateFrom(BMessage* message) if (message->FindRect("app_types_frame", &frame) == B_OK) fMessage.ReplaceRect("app_types_frame", frame); + if (message->FindRect("app_type_frame", &frame) == B_OK) + fMessage.ReplaceRect("app_type_frame", frame); + bool showIcons; if (message->FindBool("show_icons", &showIcons) == B_OK) fMessage.ReplaceBool("show_icons", showIcons); @@ -148,6 +151,7 @@ Settings::_SetDefaults() { fMessage.AddRect("file_types_frame", BRect(80.0f, 80.0f, 600.0f, 480.0f)); fMessage.AddRect("app_types_frame", BRect(100.0f, 100.0f, 540.0f, 480.0f)); + fMessage.AddRect("app_type_frame", BRect(100.0f, 110.0f, 250.0f, 340.0f)); fMessage.AddBool("show_icons", true); fMessage.AddBool("show_rule", false); fMessage.AddFloat("left_split_weight", 0.2); @@ -248,10 +252,9 @@ FileTypes::RefsReceived(BMessage* message) message->RemoveData("refs", --index); // There are some refs left that want to be handled by the type window - BPoint point(100.0f + kCascadeOffset * fTypeWindowCount, - 110.0f + kCascadeOffset * fTypeWindowCount); + BPoint totalOffset(kCascadeOffset * fTypeWindowCount, kCascadeOffset * fTypeWindowCount); - BWindow* window = new ApplicationTypeWindow(point, entry); + BWindow* window = new ApplicationTypeWindow(fSettings.Message(), totalOffset, entry); window->Show(); fTypeWindowCount++;