Set window location but do not Invoke() when opening prefs window.
We do not want the Deskbar window location to change on open/show
prefs window, only when you change the preference.
The root problem here is that we currently do not support horizontal
mini-mode in Deskbar preferences, only vertical. Consequently, opening
the prefs window switches Deskbar into vertical mini-mode when in
horizontal mini-mode. Leave the state alone so this doesn't happen.
Change-Id: Ife00e02f4bc16344fed47d23b9d768aa46b8d7f7
Reviewed-on: https://review.haiku-os.org/c/haiku/+/11524
Haiku-Format: Haiku-format Bot <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
(cherry picked from commit 6674947bb98ba64da5af9d5de6f894850a194b98)
Reviewed-on: https://review.haiku-os.org/c/haiku/+/11533
Create a _SetWindowLocation() convenience method. This gets called in
the constructor, on Show() and when the Deskbar window state changes.
Do not Invoke() on SetValue(), call Invoke() after except when Deskbar
tells preferences to update its value instead of the other way around.
When focused numpad 4 and left arrow set top left expando mode,
numpad 6 and right arrow set top right expando mode. These are the
"left" and "right" positions of Deskbar. We can safely assume that
bottom left/right expando mode will never be implemented, only top.
Add a small horizontal space between the window location control and
the checkboxes, they are a bit too close to each other.
Fixes#20057.
Change-Id: I43289e4bf0e021ca2665a4f65a135edf6faff29e
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10835
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: John Scipione <[email protected]>
The application name should never appear in a translatable string.
Otherwise it will always show translated in the app, even if the
user configured the Locale prefs to not "Translate app and folder
names".
Always concatenate the B_TRANSLATE_SYSTEM_NAME'ed string.
Use a regular BAboutWindow in the Sounds prefs.
Change-Id: I85f02a3aa6c76b22266d495cf7514cc499bc31e8
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10234
Reviewed-by: Adrien Destugues <[email protected]>
2 concrete classes which are currently implemented:
* BSpinner (works on int32s)
* BDecimalSpinner (works on doubles)
In addition BAbstractSpinner now inherits from BControl instead of
BView/BInvoker. This allowed for code simplification at the cost of needing to
cast for the decimal version because SetValue(int32 value) comes from BControl.
Also, add a spinner_button_style enum with 3 options:
* SPINNER_BUTTON_HORIZONTAL_ARROWS
* SPINNER_BUTTON_VERTICAL_ARROWS
* SPINNER_BUTTON_PLUS_MINUS
which sets the spinner arrows to either use horizontal arrows (left/right)
vertical arrows, (up/down), or +/- symbols (the default).
If the spinner button is using horizontal arrows you can decrement and increment
the spinner value by pushing control+left/right, otherwise you can increment and
decrement by pushing up or down. The reason for needing control is so that you
can move the cursor in the textbox otherwise.
Switch the 3 apps that are currently using BSpinners to use the integer variety
in Deskbar preferences, WebPostive preferences, and Screen preferences.
The Deskbar and Time preferences were both relying on BCheckBox's
previous unlimited max width to get their containing BBoxes to be the
right size. Adjust the box constraints to make this happen at the level
of the box instead.
* Deskbar now uses ~/config/settings/deskbar/menu_entries for its menu,
falling back to /system/data/deskbar/menu_entries, when the former
doesn't exist. The latter always exists and is a virtual directory
merging the deskbar/menu subdirectories of ~/config/settings/ and
<any installation location>/data/. So, if a package provides a
deskbar menu symlink, it is added automatically when the package is
activated. The user can add own menu items by putting stuff into
~/config/settings/deskbar/menu/, only use their own organization by
symlinking it to menu_entries, or do fun stuff by making menu_entries
a customized virtual directory.
* HaikuImage: No longer create any deskbar menu symlinks in the user's
settings directory. Instead add them to the Haiku package.
* OptionalPackages: At least for the optional packages that do have
hpkgs, no longer create deskbar menu symlinks in the user's settings
directory.
* Move all Deskbar settings files to ~/config/settings/deskbar/ and
drop the "Deskbar_" prefix.
* Put the Open in Tracker... button back in Menu.
* Put the window checkboxes in 2 columns.
* Use vertical struts instead of insets for spacing in a couple places.
* Move desk_settings and clock_settings struct to a new header entitled
'BarSettings.h' so it can be included in BarApp.h and PreferencesWindow.h.
* Refactor desk_settings to only include used, or at least relevant settings,
some cruft had built up over time.
* Refactor the InitSettings() method, all the B_OK checking wasn't working so
I removed it. Defaults get set up to and if the corresponding setting is
found in the settings file it is replaced, else, it is not.
* Reorder the struct and code so it goes in the order that the settings appear:
applications, then recent items, then window settings.
* Simplify the preferences window revert and defaults code based on using the
prebuild desk_settings structs in BarApp instead of creating our own and
copying. All initial setup is in the constructor.
* Remove locking from Prefs window QuitRequested(), thanks Axel.
* Remove kConfigClose message, no longer needed since window sticks
around and is hidden on close instead of being deleted.
* delete fPreferencesWindow on BarApp QuitRequested() so it will
remove the memory used by preference window when Deskbar quits.
... instead of destroying and creating it each time.
This is taking another page from Tracker's book. It allows the prefs
window to maintain it's current state as long as the application
remains open. Since both Tracker and Deskbar are meant to always be
open this means that the state is kept all the time unless the app
crashes, quite useful.
This completes the move of clock preferences from Deskbar to Time.
This closes#7331. Also closing #8769 as invalid as it has been
discussed to death and 12/24 hour setting seems to belong in Locale
prefs only.
Clock preferences have been moved into their own settings file as
well so perhaps will be moved to their own replicant in the future.
* Added a new Clock tab to the Time preflet. Added Clock related
controls there. They all function by communicating with Deskbar.
* Put controls in a BBox controlled by the Show clock checkbox.
This more clearly shows that all the clock settings are dependent
on the show clock setting since it doesn't matter what your clock
settings are if you don't show the clock.
* Make revert work.
* Split clock settings into it's own file and struct.
* Re-add the time zone setting.
* Remove the clock settings from the Deskbar preference window, they
are in Time now.
* Make Locale preferences accepts B_LOCALE_CHANGED message, although
not used.
* Create my own kIndentSpacing parameter from ControlLook which sets
the indent spacing width to match the previously used spacing. This
lines the indented checkbox up with the text of the unindented
checkbox above it. This matches what it looked like before I
updated the dialog to use font-aware spacing, while keeping the
same relative spacing at different font sizes.
* Nobody thought time zone was a particularly useful option to have
in the clock.
* You can still open Time preferences from Deskbar by right clicking
on the clock, but, since there isn't a big connection between
the clock settings in Deskbar and Time preferences anymore
this button isn't needed here.
* There are still 2 clock options, Show seconds, and Show day of week
and day of week is localized as well so this wasn't a total wash.
* 12/24 hour clock is set from the Locale prefs only.
* Redirect B_LOCALE_CHANGED message to the replicant tray instead
of the time view and tell the replicant tray to update the time
instead of updating the time view directly. This is because there
was a bug where if the AM/PM marker grew the time view over the
replicant tray icons when switching from 24 hour to 12 hour clock
it wouldn't reflow the replicant tray icons like it should.
* Rename the replicant tray view from "Status" to "_replicant_tray_"
because BarApp uses FindView() to get the view by name and I'm
assuming that this method can have conflicts. Following the example
of the "_deskbar_tv_" naming convention.
* rename B_TRANSLATE_CONTEXT to B_TRANSLATION_CONTEXT and
B_TRANSLATE_WITH_CONTEXT to B_TRANSLATE_CONTEXT, squashing a TODO
* adjust all uses of both macros in Haiku's source tree
* use correct header guard for collecting/Catalog.h
The renamed macros require adjustments to all external applications
using catalogs.
Added two new methods to the Locale Kit in order to create a custom time
formats from a format string. One method is outputs into a char* array,
the other into a BString() and you can set the timezone.
These methods should be cleaned up, we only need 2, one to get
the time in a predefined style, the other to get a custom time format.
Also should probably do the same for dates and datetimes. But I'll let
this go for now.
I added myself to the Locale.cpp file. I retained the copyright instead
of assigning it to Haiku, Inc. because the file is under the OpenBeOS
license and I don't know what the concequences of copyright sharing are
for that license, unlike MIT.
These new methods are used to generate custom time formats in Deskbar.
Instead of using a set of Radio Buttons to choose between the predefined
time options I build my own by creating a format string and passing it
to the Locale Kit. The format string is generated from 3 checkboxes,
show seconds, show day of week, and show time zone. You can mix and match
between them choose any that you like. By default they are all off.
There are 3 new deskbar settings associated with these new options:
showSeconds, showDayOfWeek, and showTimeZone. timeFormat has gone away.
The time format string gets cached and updated only when Update() gets called
on the TimeView class.
In order to fit all the options in (there is 1 more than before) I had to
reduce the font size of the clock to 11pt when all options are turned on in
12 hour mode. For those with no imagination it looks like this:
http://imagebin.org/208162
Renamed "Open time preferences..." menuitem to "Time preferences...".
Renamed "Show Time" and "Hide Time" to "Show time" and "Hide time".
Other changes include refactoring the header files a bit. There were a lot
of headers included by header files uneccessarily. For instance BarWindow.h
now only includes <Window.h> and <Deskbar.h>. This change is mainly to
to speed up the compile time since it takes a while right now.
I copy the fBarView pointer from BarWindow in the BarApp constructor and then
use that throughout the file rather than getting the pointer from the window
each time by calling BarView(). BarView() is still available in the header
for other classes though.
I moved some message constants around since it was getting a bit jumbled.
Most of the messages related to settings are in PreferenceWindow.h.
fChangeState is moved to BarView.h since that is where the ChangeState()
function is and BarView.cpp uses that constant.
The time interval and format constants are in TimeView.h.
Make some methods public in their respective classes where it made sense.
The preference window methods to update dependent items are public, that
might get called from BarWindow when a message gets received at some point.
Also made ShowHideTime() and Time() public in StatusView.h. These methods
activate showing and hiding the clock and return the fTime clock object.
No reason they should be private.
I reindented the StatusView.h and PreferenceWindow.h headers to the standard
style. Question here, are the public: protected: and private: lines inside
of classes suppose to get indented 1 tab or not? I've seen both, the style
guide says no indent but 1 indent seems reasonable and looks pretty good.
Style fixes here and there. That's enough for one commit I think.
* 12/24 hour settings come from and alter BLocale
* Time formats are short, medium, long. Short is default. Come from
Locale kit.
* Don't delete fClock (now fTime) when hiding, just hide and show
the view.
* BarView now has nothing to do with setting or keeping track of
time settings. This is all handled in TTimeView. TReplicantTray
is responsible for updating the replicant tray and doing showing
and hiding. TTimeView is responsible for drawing according to the
clock settings.
* Remove fShowInterval and fShowSeconds from BarView
* Remove ampmMode setting and replace it with timeFormat.
* Reset targets in DeskbarMenu.
Originally I was trying to solve a bug where the TTimeView
was relying on the Deskbar settings too much. The settings
should only by set on quit and accessed on startup or a crash can
cause Deskbar to be in an unusual state.
I realize that the timezone is not very helpful. I'd like to provide
the day of week in a short format instead, i.e. Wed for Wednesday or
similar based on your locale. Blame the Locale Kit for now allowing
me to be able to use a custom TimeFormat. Once a custom TimeFormats
becomes possible from the Locale Kit Deskbar can be updated to use
them.