Commit Graph

1041 Commits

Author SHA1 Message Date
Florian Müllner
71d503dc6e st/theme-node-transition: Guard against 0-sized offscreen box
We know beforehand that setting up the framebuffers will fail in
that case, so we can avoid cluttering the log with warnings.

(Although the warning would likely indicate a stylesheet bug)

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/289

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2326>
2022-08-04 18:12:31 +00:00
Alessandro Bono
77d0471bc4 st/settings: Connect to mouse settings
This is likely a typo.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2402>
2022-08-04 16:59:33 +00:00
Florian Müllner
a06b469fbb st: Only notify on property changes
Since commit 5a23c96bd9 we use EXPLICIT_NOTIFY for properties,
however there are still cases where we still notify unconditionally
from the setter, because we don't check the existing value first.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2325>
2022-06-08 14:16:28 +00:00
Florian Müllner
d72abf5268 st/button: Add :icon-name property
GTK4 added a convenience property for icon-only buttons. While that
use case is not quite as common in the shell as in GTK apps, it still
seems common enough to mirror the GTK API.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2254>
2022-05-06 13:39:40 +00:00
Sebastian Keller
f0a0471927 st/theme-node: Only try to parse non-empty inline styles
Otherwise cr_parser_new_from_buf() will fail creating a parser for a
buffer of length 0, resulting in further errors due to the parser being
NULL. This could happen when extensions were trying to set the style of
a widget to an empty string.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4634
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2286>
2022-04-29 21:50:55 +00:00
Jakub Steiner
e831a9240d HC: Do not set icon theme from gnome-icon-theme-extra
- High contrast icons are regular symbolic icons

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2414

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2243>
2022-03-30 17:11:37 +02:00
Florian Müllner
35120dd69c st/theme-node: Default to right text-align in RTL
When neither the theme node itself nor any of its parents specifies
an explicit text direction, we default to aligning to the left.

That's a good default for LTR locales, but for RTL aligning to the
right is a better one.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2247>
2022-03-28 15:49:39 +00:00
Daniel van Vugt
918c063693 st: Generate shadows from the silhouette of the source texture
As first mentioned in commit 672171093, the CSS spec defines shadow
colors independently from the colors casting the shadow. It's not
a physical light simulation so a shadow is allowed to be a different
color from texture casting it.

This means we only care about the shape of the source where alpha
values of zero are adjacent to alpha values of non-zero. And all such
non-zero pixels should be treated as fully opaque for the purpose of
shadow generation. While this would be wrong for a physical light
simulation it does allow us to cast shadows around semi-translucent
shapes and better support CSS.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4477
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1918>
2022-03-05 13:55:37 +00:00
Carlos Garnacho
a595fc6d47 st: Move StWidget away from clutter_event_get_source()
Ask the stage about the device actor instead for hover tracking.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2216>
2022-03-04 12:27:34 +00:00
Carlos Garnacho
6064a3e020 st: Move StEntry away from clutter_event_get_source()
Ask the stage about the device actor instead. Since leaving the
StEntry also means leaving the contained ClutterText, the checks
on LEAVE can be just removed.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2216>
2022-03-04 12:27:34 +00:00
Carlos Garnacho
7b7e5ac0de st: Move StButton away from clutter_event_get_source()
Ask the stage about the device actor instead.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2216>
2022-03-04 12:27:34 +00:00
Florian Müllner
574594ec22 st/theme-node: Add missing precondition checks
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4851

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2207>
2022-02-22 12:43:06 +01:00
Jonas Dreßler
8f4427f87b st/scroll-view: Don't queue redraw in update_fade_effect()
ClutterEffects are responsible for queueing redraws when their
properties change (and StScrollViewFade is a good citizen already), also
Clutter itself should queue a redraw when adding/removing an effect.

Users of Clutter should never have to queue redraws themselves (unless
they're implementing a custom ClutterEffect or ClutterContent), so don't
queue a redraw here.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2189>
2022-02-16 20:15:28 +00:00
Jonas Dreßler
0b9b13942a st/scroll-view: Only update fade effect on CSS changes if CSS sets it
The fade effect can also be added to the scroll view programatically
instead of using CSS via the st_scroll_view_update_fade_effect() API.

We make use of this API in the appDisplay, but since commit ba547ec1d
the fade margins get overridden to 0.0 from the ::style-changed handler.
Fix this by only setting the fade margins when CSS actually defines a
custom vfade/hfade offset.

Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5079
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2189>
2022-02-16 20:15:28 +00:00
Jonas Dreßler
ba547ec1db st/widget: Emit "style-changed" on all theme changes
Since now the resource consumption of the "style-changed" signal
handlers should be significantly lower, we can start emitting the signal
in all cases again as it was originally intended. This fixes some small
visual issues, like the battery percentage in the panel only being shown
on hover or updating the size of StIcons on scale-factor changes.

This effectively reverts f74c07b9ac

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1708

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2099>
2022-02-14 13:50:03 +00:00
Jonas Dreßler
09903b6426 st/label: Compare shadow spec before invalidating shadow on style change
Just like with the last commit for StEntry, check whether the text
shadow actually changed before invalidating the pipeline on style
changes of StLabel.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1744>
2022-02-14 12:52:20 +00:00
Jonas Dreßler
ba774e1fa2 st/entry: Compare shadow spec before invalidating shadow on style change
Instead of doing a lot of useless work every time we receive the
style-changed signal, only invalidate our text shadow pipeline in case
the shadow actually changed.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1744>
2022-02-14 12:52:20 +00:00
Jonas Dreßler
3b4a1fcd51 st/shadow: Add a fast path to comparisons
We do this in most places in St, it's consistent to do it here, too.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1744>
2022-02-14 12:52:20 +00:00
Jonas Dreßler
8b3e1e01f6 st/label: Invalidate text shadow on style changes to ClutterText
Just like with the last commit, listen to some ClutterText property
changes to catch style changes that were trigerred by
_st_set_text_from_style() and invalidate the shadow spec on changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1744>
2022-02-14 12:52:20 +00:00
Jonas Dreßler
898334f31d st/entry: Invalidate text shadow on style changes to ClutterText
We update a few properties of ClutterText when the CSS changes via
_st_set_text_from_style() (which we call when receiving the
style-changed signal).

Right now we simply invalidate the text shadow every time we receive the
style-changed signal, but we're going to change that with the next
commits. To ensure the shadow still gets invalidated on CSS changed that
might affect the shadow, listen to a bunch of property changes that will
get notified when any property that affects the shadow changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1744>
2022-02-14 12:52:20 +00:00
Jonas Dreßler
2bb36db9e8 st/entry: Invalidate shadow on cursor position/size changes
When text shadows are used, the cursor indicating the current position
also casts a shadow.

This means we have to regenerate the shadow texture after the cursor
position changed, so invalidate the shadow in that case.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1744>
2022-02-14 12:52:20 +00:00
Florian Müllner
5a23c96bd9 st: Specify G_PARAM_EXPLICIT_NOTIFY where appropriate
We are now consistently calling notify() when a property does change.

With that we can opt out of g_object_set()'s implicit change notifications,
so that notify is only emitted when a property *actually* changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2168>
2022-02-10 13:09:37 +00:00
Florian Müllner
bfb52aaf9d st: Use g_object_notify_by_pspec() where possible
It's slightly more efficient not having to do property lookups. While
that is unlikely to be a concern for the properties in question, it's
still good practice and makes the code base a bit more consistent.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2168>
2022-02-10 13:09:37 +00:00
Florian Müllner
76e5e22dac st: Add static setters
Even where properties can only be set via g_object_set(), separate
setters help with code organization and consistency with other
properties.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2168>
2022-02-10 13:09:37 +00:00
Florian Müllner
6a6b7eb341 st/scroll-view: Add missing notify call
Another property where changes aren't notified when going through
the public setter.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2168>
2022-02-10 13:09:37 +00:00
Florian Müllner
621c8606df st/entry: Add missing notify calls
Whoops, at the moment changes of most properties are only notified
when going through g_object_set() and not when using the public
setters.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2168>
2022-02-10 13:09:37 +00:00
Sam Hewitt
0e3ddb1f02 theme: Remove icon resources from theme
- move all icons to the icons directory
- rename some icons to be more meaningful
- put all icons on a resource sheet
- update references to icon name changes
- deprecate icons for those in standard set

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2141>
2022-02-04 13:59:20 +00:00
Florian Müllner
c85643d9d5 st/settings: Switch icon-theme when "high-contrast" is active
This is in line with how GTK handles the setting. Since we are not
using GtkSettings for the icon theme, we have to replicate the
behavior ourselves.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2069>
2022-02-01 14:11:07 +00:00
Alexander Mikhaylenko
f67418c682 st/settings: Use the new high-contrast gsettings key
We now have a dedicated "high-contrast" setting that we can
use instead of a "magic" theme name.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2069>
2022-02-01 14:11:07 +00:00
Carlos Garnacho
a8a9d4f806 st: Use ClutterGrab for StScrollBar implicit grab
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:29 +01:00
Carlos Garnacho
bcfcacdb56 st: Use ClutterGrab for StButton implicit grab
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:29 +01:00
Florian Müllner
88a8bc7419 st/box-layout: Deprecate :pack-start property
A property for reversing the visible order of children is a bit odd.

It has also been unused by actual gnome-shell code since 2010, and the
somewhat related pack_start()/pack_end() API in GtkBox(Layout) is gone
in GTK4.

With that in mind, turn the property into a no-op and deprecate it,
so that it can be dropped next cycle.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2085>
2022-01-07 21:47:47 +00:00
Florian Müllner
daf729de11 build: Replace deprecated meson functions
Replace deprecated functions with their direct replacements:

 - dep.get_pkgconfig_variable() → dep.get_variable()
 - prg.path() → prg.full_path()
 - source/build_root() → project_source/build_root()

In one case we need meson.global_source_root() that was only
added in meson 0.58, so bump the requirement to that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2077>
2021-12-23 15:52:21 +00:00
Sebastian Keller
7e0c6dc2c1 st/scroll-view-fade: Simplify shader a bit
The shader was using too many ALU instructions for Intel 945GM hardware,
so simplify it a bit. The resulting math is the same, but a few
redundant operations have been removed.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4883
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2072>
2021-12-21 15:04:01 +00:00
Carlos Garnacho
ff4ff66498 Revert "st: Only use clutter_actor_invalidate_paint_volume() if the API exists"
Since we are past the 40 API change hurdle, it is safe to revert this
commit.

This reverts commit 1cefd589da.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2010>
2021-10-27 19:51:27 +02:00
Ray Strode
ddb6276a49 st/password-entry: Fix crash when DConf changes after StEntry is destroyed
commit 8721c5db37 made StPasswordEntry
honor the 'disable-show-password' setting.

Unfortunately, it introduced a lifecycle bug where the signal handler
for noticing setting changes can out live the entry itself.

This commit fixes the problem by using g_signal_connect_object

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2004>
2021-10-12 15:27:35 -04:00
Marco Trevisan (Treviño)
2bcc6c09ed st/icon: Ensure icons are updated if theme node is invalid
Icons that are changed while an actor is not mapped may not have a theme
node associated with, and thus we'd end up not updating them at all.
In fact we return early in st_update_icon(), and this was not an issue
until commit 0b1dfbf6f3, because we'd end up to update the icon anyways
once the style was changed (and so with a valid theme node), but since
such change we might not updating the icon if no theme detail changed.

To prevent this, add a flag to require an icon update when the theme
changed, if no successfully update happened earlier.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4568
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1983>
2021-09-30 18:55:11 +02:00
Jonas Ådahl
563437de91 Always assume GLSL is supported
The support for GLSL has been advertised as unconditionally supported by
mutter for a while, and has now lost the 'GLSL' feature completely. Lets
remove the checks.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1985>
2021-09-21 16:37:01 +02:00
Florian Müllner
0eff22ebcd build: Add option to turn off tests
St's theme test now requires the libmutter-test library, which is only
built when tests are enabled. Instead of mandating a particular build
configuration in mutter, add a corresponding option in gnome-shell as
well.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1975>
2021-09-07 12:53:47 +00:00
Florian Müllner
f719ea8d69 st/scroll-bar: Remove pointless condition
Both branches are identical (which is correct - orientation or
text direction is irrelevant for the trough).

Spotted by coverity in CID 351261.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1950>
2021-08-13 15:16:54 +02:00
Florian Müllner
6e629c0f10 st/icon: Only get resource-scale after peeking theme node
If an actor is not on any stage view, then it doesn't have a valid
resource scale, which will hit an assert later.

When that is the case (for example when running headless), we expect
that there is no valid theme node (yet) either, so simply moving
the clutter_actor_get_resource_scale() call after peeking at the
theme node is enough to avoid the crash.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4522

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1935>
2021-08-05 10:03:51 +00:00
Ray Strode
8721c5db37 st/password-entry: Honor disable-show-password key
StPasswordEntry provides an optional icon for the user to
show their password in clear text.

This commit disables that icon if password showing is locked
down.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/687>
2021-07-30 14:17:07 +00:00
Ray Strode
162d694d9a st/settings: Add new disable-show-password setting
There's now a setting

org.gnome.desktop.lockdown disable-show-password

that ostensibly lets admins prevent from users from
showing their password in password dialogs.

gnome-shell currently ignores this key.

As a first step, this commit adds the setting to StSettings.

Future commits will use the new setting.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/687>
2021-07-30 14:17:07 +00:00
Ray Strode
4ae06a2879 st/settings: Fix indentation on settings keys
Most of the keys are aligned, but "screen-magnifier-enabled" isn't.

This commit lines all the keys up, giving a little more breathing
room for future keys that have longer names.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/687>
2021-07-30 14:17:07 +00:00
Jonas Dreßler
ba428ed6b0 st/scroll-bar: Remove unneeded style-changed handler
Same reasoning as the last commit, this is already handled in the
default vfunc override of StWidget.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/953>
2021-07-30 13:59:18 +00:00
Jonas Dreßler
85ffb96924 st/scroll-view: Don't emit superfluous style-changed events on children
Since we correctly call the `style_changed` vfunc superclass at the end
of our own function anyway, the style changes will get propagated to the
children of the scrollView inside `st_widget_real_style_changed` anyway.

So remove those unneeded and quite expensive (because they cause the
theme node to be regenerated) calls to `st_widget_style_changed`.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/953>
2021-07-30 13:59:18 +00:00
Jonas Dreßler
f6553ef5f0 st/icon: Chain up to parent vfunc in override
GObject vfunc overrides are always supposed to call their parent vfunc,
this was forgotten here, so fix it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/953>
2021-07-30 13:59:18 +00:00
Jonas Dreßler
0b1dfbf6f3 st/icon: Check icon properties for changes before regenerating texture
Properly compare the new icon properties of StIcon to the old ones on
style-changes and only update the icon texture in case something
changed. This should help reduce the amount of texture cache requests
when we start emitting all "style-changed" signals again.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/953>
2021-07-30 13:59:18 +00:00
Jonas Dreßler
13562033d7 st/icon: Store paint scaled icon size instead of normal size
This makes it easier to track size changes when the paint scale changes,
since in those cases we basically want to do the same thing as when the
normal icon size changes: Request a new texture from the cache.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/953>
2021-07-30 13:59:18 +00:00
Jonas Ådahl
5acab6c300 Port to MetaContext
This ports over gnome-shell and the theme test case to MetaContext,
instead of the various functions that were available before.

The test case is changed to use the special test context, used to
construct contexts for testing. It's part of a shared libary separate
from the main libmutter one.

This enables building mutter tests during CI, as the test framework is
needed by some of gnome-shell's tests.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1840>
2021-07-15 12:42:17 +00:00