mirror of
https://github.com/edu4rdshl/gnome-shell.git
synced 2026-07-17 23:24:51 +00:00
Merge branch 'for-45' into 'gnome-45'
Backports for 45.8 See merge request GNOME/gnome-shell!3395
This commit is contained in:
commit
8854ea4c93
17 changed files with 152 additions and 145 deletions
|
|
@ -1,7 +1,7 @@
|
|||
include:
|
||||
- remote: 'https://gitlab.gnome.org/GNOME/citemplates/raw/HEAD/flatpak/flatpak_ci_initiative.yml'
|
||||
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/057b052e682d8e5a20c1eb2dd60d5b87d2b56856/templates/fedora.yml'
|
||||
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/34f4ade99434043f88e164933f570301fd18b125/templates/ci-fairy.yml'
|
||||
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bc70242ffb8402243e934659ecc1a2d1c89eca2b/templates/ci-fairy.yml'
|
||||
- project: 'Infrastructure/openshift-images/gnome-release-service'
|
||||
file: '/ci-templates/release-module.yml'
|
||||
|
||||
|
|
@ -42,7 +42,7 @@ workflow:
|
|||
- if: '$CI_COMMIT_TAG'
|
||||
- if: '$CI_COMMIT_BRANCH'
|
||||
|
||||
.pipeline_guard: &pipeline_guard
|
||||
.pipeline-guard:
|
||||
rules:
|
||||
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
||||
- if: '$CI_COMMIT_TAG'
|
||||
|
|
@ -95,7 +95,8 @@ check_commit_log:
|
|||
else
|
||||
echo "Not a merge request" ;
|
||||
fi
|
||||
<<: *pipeline_guard
|
||||
rules:
|
||||
- !reference [.pipeline-guard, rules]
|
||||
artifacts:
|
||||
expire_in: 1 week
|
||||
paths:
|
||||
|
|
@ -114,7 +115,8 @@ check-merge-request:
|
|||
else
|
||||
echo "Not a merge request" ;
|
||||
fi
|
||||
<<: *pipeline_guard
|
||||
rules:
|
||||
- !reference [.pipeline-guard, rules]
|
||||
artifacts:
|
||||
expire_in: 1 week
|
||||
paths:
|
||||
|
|
@ -174,8 +176,6 @@ potfile_js_check:
|
|||
build:
|
||||
stage: build
|
||||
needs: ["check_commit_log"]
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: normal
|
||||
before_script:
|
||||
- .gitlab-ci/checkout-mutter.sh
|
||||
- meson mutter mutter/build --prefix=/usr
|
||||
|
|
@ -189,12 +189,12 @@ build:
|
|||
paths:
|
||||
- mutter
|
||||
- build
|
||||
- subprojects/gvc
|
||||
|
||||
test:
|
||||
stage: test
|
||||
needs: ["build"]
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: normal
|
||||
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
|
||||
NO_AT_BRIDGE: "1"
|
||||
before_script:
|
||||
|
|
@ -218,8 +218,6 @@ test-coverity:
|
|||
needs: ["build"]
|
||||
stage: analyze
|
||||
allow_failure: true
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: normal
|
||||
before_script:
|
||||
- sudo meson install -C mutter/build
|
||||
script:
|
||||
|
|
@ -261,9 +259,6 @@ distinfo:
|
|||
reports:
|
||||
dotenv: dist.env
|
||||
paths:
|
||||
- build
|
||||
- mutter
|
||||
- subprojects/jasmine-gjs
|
||||
- dist.env
|
||||
rules:
|
||||
- if: '$CI_COMMIT_TAG'
|
||||
|
|
@ -272,7 +267,6 @@ dist:
|
|||
variables:
|
||||
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
|
||||
NO_AT_BRIDGE: "1"
|
||||
GIT_SUBMODULE_STRATEGY: normal
|
||||
stage: deploy
|
||||
needs: ["build"]
|
||||
before_script:
|
||||
|
|
@ -289,6 +283,7 @@ dist:
|
|||
dist-tarball:
|
||||
extends: dist
|
||||
needs:
|
||||
- build
|
||||
- distinfo
|
||||
artifacts:
|
||||
expose_as: 'Get tarball here'
|
||||
|
|
|
|||
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -1,3 +0,0 @@
|
|||
[submodule "subprojects/gvc"]
|
||||
path = subprojects/gvc
|
||||
url = ../../GNOME/libgnome-volume-control.git
|
||||
|
|
@ -660,7 +660,14 @@ export class ShellUserVerifier extends Signals.EventEmitter {
|
|||
this.emit('reset');
|
||||
}
|
||||
|
||||
_onVerificationComplete() {
|
||||
_onVerificationComplete(_client, serviceName) {
|
||||
const isCredentialManager = !!this._credentialManagers[serviceName];
|
||||
const isForeground = this.serviceIsForeground(serviceName);
|
||||
if (isCredentialManager && isForeground) {
|
||||
this._credentialManagers[serviceName].token = null;
|
||||
this._preemptingService = null;
|
||||
}
|
||||
|
||||
this.emit('verification-complete');
|
||||
}
|
||||
|
||||
|
|
@ -740,10 +747,10 @@ export class ShellUserVerifier extends Signals.EventEmitter {
|
|||
// If the login failed with the preauthenticated oVirt credentials
|
||||
// then discard the credentials and revert to default authentication
|
||||
// mechanism.
|
||||
let foregroundService = Object.keys(this._credentialManagers).find(service =>
|
||||
this.serviceIsForeground(service));
|
||||
if (foregroundService) {
|
||||
this._credentialManagers[foregroundService].token = null;
|
||||
const isCredentialManager = !!this._credentialManagers[serviceName];
|
||||
const isForeground = this.serviceIsForeground(serviceName);
|
||||
if (isCredentialManager && isForeground) {
|
||||
this._credentialManagers[serviceName].token = null;
|
||||
this._preemptingService = null;
|
||||
this._verificationFailed(serviceName, false);
|
||||
return;
|
||||
|
|
@ -757,7 +764,7 @@ export class ShellUserVerifier extends Signals.EventEmitter {
|
|||
// if the password service fails, then cancel everything.
|
||||
// But if, e.g., fingerprint fails, still give
|
||||
// password authentication a chance to succeed
|
||||
if (this.serviceIsForeground(serviceName))
|
||||
if (isForeground)
|
||||
this._failCounter++;
|
||||
|
||||
this._verificationFailed(serviceName, true);
|
||||
|
|
|
|||
|
|
@ -113,6 +113,8 @@ class PortalWindow extends Gtk.ApplicationWindow {
|
|||
super._init({
|
||||
application,
|
||||
title: _('Hotspot Login'),
|
||||
default_width: 600,
|
||||
default_height: 450,
|
||||
});
|
||||
|
||||
const headerbar = new Gtk.HeaderBar();
|
||||
|
|
@ -153,7 +155,6 @@ class PortalWindow extends Gtk.ApplicationWindow {
|
|||
this._syncUri();
|
||||
|
||||
this.set_child(this._webView);
|
||||
this.set_size_request(600, 450);
|
||||
this.maximize();
|
||||
this.present_with_time(timestamp);
|
||||
|
||||
|
|
|
|||
|
|
@ -108,8 +108,6 @@ export const BarLevel = GObject.registerClass({
|
|||
}
|
||||
|
||||
vfunc_style_changed() {
|
||||
super.vfunc_style_changed();
|
||||
|
||||
const themeNode = this.get_theme_node();
|
||||
this._barLevelHeight = themeNode.get_length('-barlevel-height');
|
||||
this._barLevelBorderWidth =
|
||||
|
|
@ -135,6 +133,8 @@ export const BarLevel = GObject.registerClass({
|
|||
themeNode.lookup_color('-barlevel-overdrive-border-color', false);
|
||||
this._barLevelOverdriveBorderColor = hasOverdriveBorderColor
|
||||
? barLevelOverdriveBorderColor : this._barLevelOverdriveColor;
|
||||
|
||||
super.vfunc_style_changed();
|
||||
}
|
||||
|
||||
vfunc_repaint() {
|
||||
|
|
|
|||
|
|
@ -498,6 +498,11 @@ export const Notification = GObject.registerClass({
|
|||
|
||||
destroy(reason = NotificationDestroyedReason.DISMISSED) {
|
||||
this.emit('destroy', reason);
|
||||
|
||||
if (this._updateDatetimeId)
|
||||
GLib.source_remove(this._updateDatetimeId);
|
||||
delete this._updateDatetimeId;
|
||||
|
||||
this.run_dispose();
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1089,16 +1089,11 @@ class Workspace extends St.Widget {
|
|||
this.connect('destroy', this._onDestroy.bind(this));
|
||||
|
||||
this._skipTaskbarSignals = new Map();
|
||||
const windows = global.get_window_actors().map(a => a.meta_window)
|
||||
.filter(this._isMyWindow, this);
|
||||
|
||||
// Create clones for windows that should be
|
||||
// visible in the Overview
|
||||
this._windows = [];
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
if (this._isOverviewWindow(windows[i]))
|
||||
this._addWindowClone(windows[i]);
|
||||
}
|
||||
this._layoutFrozenId = 0;
|
||||
|
||||
// DND requires this to be set
|
||||
this._delegate = this;
|
||||
|
||||
// Track window changes, but let the window tracker process them first
|
||||
this.metaWorkspace?.connectObject(
|
||||
|
|
@ -1109,10 +1104,10 @@ class Workspace extends St.Widget {
|
|||
'window-entered-monitor', this._windowEnteredMonitor.bind(this), GObject.ConnectFlags.AFTER,
|
||||
'window-left-monitor', this._windowLeftMonitor.bind(this), GObject.ConnectFlags.AFTER,
|
||||
this);
|
||||
this._layoutFrozenId = 0;
|
||||
|
||||
// DND requires this to be set
|
||||
this._delegate = this;
|
||||
// Create clones for windows that should be
|
||||
// visible in the Overview
|
||||
global.get_window_actors().map(a => this._doAddWindow(a.meta_window));
|
||||
}
|
||||
|
||||
_shouldLeaveOverview() {
|
||||
|
|
@ -1207,7 +1202,7 @@ class Workspace extends St.Widget {
|
|||
|
||||
// We might have the window in our list already if it was on all workspaces and
|
||||
// now was moved to this workspace
|
||||
if (this._lookupIndex(metaWin) !== -1)
|
||||
if (this.containsMetaWindow(metaWin))
|
||||
return;
|
||||
|
||||
if (!this._isMyWindow(metaWin))
|
||||
|
|
|
|||
|
|
@ -440,6 +440,11 @@ class WorkspacesView extends WorkspacesViewBase {
|
|||
}
|
||||
}
|
||||
|
||||
_raiseActiveWorkspace() {
|
||||
const activeWorkspace = this.getActiveWorkspace();
|
||||
this.set_child_above_sibling(activeWorkspace, null);
|
||||
}
|
||||
|
||||
_updateWorkspaces() {
|
||||
let workspaceManager = global.workspace_manager;
|
||||
let newNumWorkspaces = workspaceManager.n_workspaces;
|
||||
|
|
@ -472,10 +477,12 @@ class WorkspacesView extends WorkspacesViewBase {
|
|||
|
||||
this._updateWorkspacesState();
|
||||
this._updateVisibility();
|
||||
this._raiseActiveWorkspace();
|
||||
}
|
||||
|
||||
_activeWorkspaceChanged(_wm, _from, _to, _direction) {
|
||||
this._scrollToActive();
|
||||
this._raiseActiveWorkspace();
|
||||
}
|
||||
|
||||
_onDestroy() {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ gtk_req = '>= 4.0'
|
|||
mutter_req = '>= 45.0'
|
||||
polkit_req = '>= 0.100'
|
||||
schemas_req = '>= 42.beta'
|
||||
startup_req = '>= 0.11'
|
||||
systemd_req = '>= 246'
|
||||
ibus_req = '>= 1.5.19'
|
||||
gnome_desktop_req = '>= 40'
|
||||
|
|
@ -75,7 +74,6 @@ atk_bridge_dep = dependency('atk-bridge-2.0')
|
|||
ecal_dep = dependency('libecal-2.0', version: ecal_req)
|
||||
eds_dep = dependency('libedataserver-1.2', version: eds_req)
|
||||
gcr_dep = dependency('gcr-4', version: gcr_req)
|
||||
gdk_x11_dep = dependency('gdk-x11-3.0')
|
||||
gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0')
|
||||
gi_dep = dependency('gobject-introspection-1.0', version: gi_req)
|
||||
gio_dep = dependency('gio-2.0', version: gio_req)
|
||||
|
|
@ -89,7 +87,6 @@ cogl_dep = dependency(cogl_pc, version: mutter_req)
|
|||
cogl_pango_dep = dependency(cogl_pango_pc, version: mutter_req)
|
||||
mutter_dep = dependency(libmutter_pc, version: mutter_req)
|
||||
polkit_dep = dependency('polkit-agent-1', version: polkit_req)
|
||||
startup_dep = dependency('libstartup-notification-1.0', version: startup_req)
|
||||
ibus_dep = dependency('ibus-1.0', version: ibus_req)
|
||||
x11_dep = dependency('x11')
|
||||
schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req)
|
||||
|
|
|
|||
|
|
@ -60,12 +60,12 @@ gnome_shell_deps = [
|
|||
mtk_dep,
|
||||
clutter_dep,
|
||||
cogl_pango_dep,
|
||||
startup_dep,
|
||||
gi_dep,
|
||||
polkit_dep,
|
||||
gcr_dep,
|
||||
libsystemd_dep,
|
||||
libpipewire_dep,
|
||||
x11_dep,
|
||||
]
|
||||
|
||||
gnome_shell_deps += nm_deps
|
||||
|
|
|
|||
|
|
@ -298,7 +298,11 @@ shell_camera_monitor_disconnect_core (ShellCameraMonitor *monitor)
|
|||
g_clear_handle_id (&monitor->delayed_disable_id, g_source_remove);
|
||||
|
||||
spa_hook_remove (&monitor->registry_listener);
|
||||
g_clear_pointer ((struct pw_proxy**) &monitor->registry, pw_proxy_destroy);
|
||||
if (monitor->registry != NULL)
|
||||
{
|
||||
pw_proxy_destroy ((struct pw_proxy *) monitor->registry);
|
||||
monitor->registry = NULL;
|
||||
}
|
||||
spa_hook_remove (&monitor->core_listener);
|
||||
g_clear_pointer (&monitor->core, pw_core_disconnect);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,24 +66,12 @@ enum {
|
|||
|
||||
static GParamSpec *props[N_PROPS] = { NULL, };
|
||||
|
||||
static CoglTexture *
|
||||
st_scroll_view_fade_create_texture (ClutterOffscreenEffect *effect,
|
||||
gfloat min_width,
|
||||
gfloat min_height)
|
||||
{
|
||||
CoglContext *ctx =
|
||||
clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
||||
|
||||
return COGL_TEXTURE (cogl_texture_2d_new_with_size (ctx, min_width, min_height));
|
||||
}
|
||||
|
||||
static char *
|
||||
st_scroll_view_fade_get_static_shader_source (ClutterShaderEffect *effect)
|
||||
{
|
||||
return g_strdup (st_scroll_view_fade_glsl);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect,
|
||||
ClutterPaintNode *node,
|
||||
|
|
@ -394,7 +382,6 @@ st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
|
|||
shader_class->get_static_shader_source = st_scroll_view_fade_get_static_shader_source;
|
||||
|
||||
offscreen_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
|
||||
offscreen_class->create_texture = st_scroll_view_fade_create_texture;
|
||||
offscreen_class->paint_target = st_scroll_view_fade_paint_target;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1362,6 +1362,92 @@ st_theme_node_prerender_background (StThemeNode *node,
|
|||
return texture;
|
||||
}
|
||||
|
||||
static void
|
||||
st_theme_node_maybe_prerender_background (StThemeNodePaintState *state,
|
||||
StThemeNode *node,
|
||||
float width,
|
||||
float height,
|
||||
float resource_scale)
|
||||
{
|
||||
gboolean has_border;
|
||||
gboolean has_border_radius;
|
||||
gboolean has_inset_box_shadow;
|
||||
gboolean has_large_corners;
|
||||
StShadow *box_shadow_spec;
|
||||
|
||||
box_shadow_spec = st_theme_node_get_box_shadow (node);
|
||||
|
||||
has_inset_box_shadow = box_shadow_spec && box_shadow_spec->inset;
|
||||
|
||||
if (node->border_width[ST_SIDE_TOP] > 0 ||
|
||||
node->border_width[ST_SIDE_LEFT] > 0 ||
|
||||
node->border_width[ST_SIDE_RIGHT] > 0 ||
|
||||
node->border_width[ST_SIDE_BOTTOM] > 0)
|
||||
has_border = TRUE;
|
||||
else
|
||||
has_border = FALSE;
|
||||
|
||||
if (node->border_radius[ST_CORNER_TOPLEFT] > 0 ||
|
||||
node->border_radius[ST_CORNER_TOPRIGHT] > 0 ||
|
||||
node->border_radius[ST_CORNER_BOTTOMLEFT] > 0 ||
|
||||
node->border_radius[ST_CORNER_BOTTOMRIGHT] > 0)
|
||||
has_border_radius = TRUE;
|
||||
else
|
||||
has_border_radius = FALSE;
|
||||
|
||||
/* The cogl code pads each corner to the maximum border radius,
|
||||
* which results in overlapping corner areas if the radius
|
||||
* exceeds the actor's halfsize, causing rendering errors.
|
||||
* Fall back to cairo in these cases. */
|
||||
has_large_corners = FALSE;
|
||||
|
||||
if (has_border_radius) {
|
||||
guint border_radius[4];
|
||||
int corner;
|
||||
|
||||
st_theme_node_reduce_border_radius (node, width, height, border_radius);
|
||||
|
||||
for (corner = 0; corner < 4; corner ++) {
|
||||
if (border_radius[corner] * 2 > height ||
|
||||
border_radius[corner] * 2 > width) {
|
||||
has_large_corners = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
state->corner_material[ST_CORNER_TOPLEFT] =
|
||||
st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_TOPLEFT);
|
||||
state->corner_material[ST_CORNER_TOPRIGHT] =
|
||||
st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_TOPRIGHT);
|
||||
state->corner_material[ST_CORNER_BOTTOMRIGHT] =
|
||||
st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_BOTTOMRIGHT);
|
||||
state->corner_material[ST_CORNER_BOTTOMLEFT] =
|
||||
st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_BOTTOMLEFT);
|
||||
|
||||
/* Use cairo to prerender the node if there is a gradient, or
|
||||
* background image with borders and/or rounded corners,
|
||||
* or large corners, since we can't do those things
|
||||
* easily with cogl.
|
||||
*
|
||||
* FIXME: if we could figure out ahead of time that a
|
||||
* background image won't overlap with the node borders,
|
||||
* then we could use cogl for that case.
|
||||
*/
|
||||
if ((node->background_gradient_type != ST_GRADIENT_NONE)
|
||||
|| (has_inset_box_shadow && (has_border || node->background_color.alpha > 0))
|
||||
|| (st_theme_node_get_background_image (node) && (has_border || has_border_radius))
|
||||
|| has_large_corners)
|
||||
{
|
||||
state->prerendered_texture = st_theme_node_prerender_background (node, width, height, resource_scale);
|
||||
|
||||
if (state->prerendered_texture)
|
||||
state->prerendered_pipeline = _st_create_texture_pipeline (state->prerendered_texture);
|
||||
else
|
||||
state->prerendered_pipeline = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void st_theme_node_paint_borders (StThemeNodePaintState *state,
|
||||
CoglFramebuffer *framebuffer,
|
||||
const ClutterActorBox *box,
|
||||
|
|
@ -1487,10 +1573,7 @@ st_theme_node_render_resources (StThemeNodePaintState *state,
|
|||
float height,
|
||||
float resource_scale)
|
||||
{
|
||||
gboolean has_border;
|
||||
gboolean has_border_radius;
|
||||
gboolean has_inset_box_shadow;
|
||||
gboolean has_large_corners;
|
||||
StShadow *box_shadow_spec;
|
||||
|
||||
g_return_if_fail (width > 0 && height > 0);
|
||||
|
|
@ -1512,72 +1595,7 @@ st_theme_node_render_resources (StThemeNodePaintState *state,
|
|||
box_shadow_spec = st_theme_node_get_box_shadow (node);
|
||||
has_inset_box_shadow = box_shadow_spec && box_shadow_spec->inset;
|
||||
|
||||
if (node->border_width[ST_SIDE_TOP] > 0 ||
|
||||
node->border_width[ST_SIDE_LEFT] > 0 ||
|
||||
node->border_width[ST_SIDE_RIGHT] > 0 ||
|
||||
node->border_width[ST_SIDE_BOTTOM] > 0)
|
||||
has_border = TRUE;
|
||||
else
|
||||
has_border = FALSE;
|
||||
|
||||
if (node->border_radius[ST_CORNER_TOPLEFT] > 0 ||
|
||||
node->border_radius[ST_CORNER_TOPRIGHT] > 0 ||
|
||||
node->border_radius[ST_CORNER_BOTTOMLEFT] > 0 ||
|
||||
node->border_radius[ST_CORNER_BOTTOMRIGHT] > 0)
|
||||
has_border_radius = TRUE;
|
||||
else
|
||||
has_border_radius = FALSE;
|
||||
|
||||
/* The cogl code pads each corner to the maximum border radius,
|
||||
* which results in overlapping corner areas if the radius
|
||||
* exceeds the actor's halfsize, causing rendering errors.
|
||||
* Fall back to cairo in these cases. */
|
||||
has_large_corners = FALSE;
|
||||
|
||||
if (has_border_radius) {
|
||||
guint border_radius[4];
|
||||
int corner;
|
||||
|
||||
st_theme_node_reduce_border_radius (node, width, height, border_radius);
|
||||
|
||||
for (corner = 0; corner < 4; corner ++) {
|
||||
if (border_radius[corner] * 2 > height ||
|
||||
border_radius[corner] * 2 > width) {
|
||||
has_large_corners = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
state->corner_material[ST_CORNER_TOPLEFT] =
|
||||
st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_TOPLEFT);
|
||||
state->corner_material[ST_CORNER_TOPRIGHT] =
|
||||
st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_TOPRIGHT);
|
||||
state->corner_material[ST_CORNER_BOTTOMRIGHT] =
|
||||
st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_BOTTOMRIGHT);
|
||||
state->corner_material[ST_CORNER_BOTTOMLEFT] =
|
||||
st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_BOTTOMLEFT);
|
||||
|
||||
/* Use cairo to prerender the node if there is a gradient, or
|
||||
* background image with borders and/or rounded corners,
|
||||
* or large corners, since we can't do those things
|
||||
* easily with cogl.
|
||||
*
|
||||
* FIXME: if we could figure out ahead of time that a
|
||||
* background image won't overlap with the node borders,
|
||||
* then we could use cogl for that case.
|
||||
*/
|
||||
if ((node->background_gradient_type != ST_GRADIENT_NONE)
|
||||
|| (has_inset_box_shadow && (has_border || node->background_color.alpha > 0))
|
||||
|| (st_theme_node_get_background_image (node) && (has_border || has_border_radius))
|
||||
|| has_large_corners)
|
||||
state->prerendered_texture = st_theme_node_prerender_background (node, width, height,
|
||||
resource_scale);
|
||||
|
||||
if (state->prerendered_texture)
|
||||
state->prerendered_pipeline = _st_create_texture_pipeline (state->prerendered_texture);
|
||||
else
|
||||
state->prerendered_pipeline = NULL;
|
||||
st_theme_node_maybe_prerender_background (state, node, width, height, resource_scale);
|
||||
|
||||
if (box_shadow_spec && !has_inset_box_shadow)
|
||||
{
|
||||
|
|
@ -1616,14 +1634,12 @@ st_theme_node_update_resources (StThemeNodePaintState *state,
|
|||
float height,
|
||||
float resource_scale)
|
||||
{
|
||||
gboolean had_prerendered_texture = FALSE;
|
||||
gboolean had_box_shadow = FALSE;
|
||||
StShadow *box_shadow_spec;
|
||||
|
||||
g_return_if_fail (width > 0 && height > 0);
|
||||
|
||||
/* Free handles we can't reuse */
|
||||
had_prerendered_texture = (state->prerendered_texture != NULL);
|
||||
cogl_clear_object (&state->prerendered_texture);
|
||||
|
||||
if (state->prerendered_pipeline != NULL)
|
||||
|
|
@ -1645,20 +1661,7 @@ st_theme_node_update_resources (StThemeNodePaintState *state,
|
|||
|
||||
box_shadow_spec = st_theme_node_get_box_shadow (node);
|
||||
|
||||
if (had_prerendered_texture)
|
||||
{
|
||||
state->prerendered_texture = st_theme_node_prerender_background (node, width, height, resource_scale);
|
||||
state->prerendered_pipeline = _st_create_texture_pipeline (state->prerendered_texture);
|
||||
}
|
||||
else
|
||||
{
|
||||
int corner_id;
|
||||
|
||||
for (corner_id = 0; corner_id < 4; corner_id++)
|
||||
if (state->corner_material[corner_id] == NULL)
|
||||
state->corner_material[corner_id] =
|
||||
st_theme_node_lookup_corner (node, width, height, resource_scale, corner_id);
|
||||
}
|
||||
st_theme_node_maybe_prerender_background (state, node, width, height, resource_scale);
|
||||
|
||||
if (had_box_shadow)
|
||||
state->box_shadow_pipeline = _st_create_shadow_pipeline (box_shadow_spec,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
metainfo = app_id + '.metainfo.xml'
|
||||
i18n.merge_file(
|
||||
input: base_id + '.metainfo.xml.in',
|
||||
input: configure_file(
|
||||
input: base_id + '.metainfo.xml.in',
|
||||
output: app_id + '.metainfo.xml.in',
|
||||
configuration: {'app_id': app_id},
|
||||
),
|
||||
output: metainfo,
|
||||
po_dir: po_dir,
|
||||
install: true,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>org.gnome.Extensions</id>
|
||||
<id>@app_id@</id>
|
||||
|
||||
<name>Extensions</name>
|
||||
<summary>Manage your GNOME Extensions</summary>
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
<project_group>GNOME</project_group>
|
||||
<developer_name>The GNOME Project</developer_name>
|
||||
|
||||
<launchable type="desktop-id">org.gnome.Extensions.desktop</launchable>
|
||||
<launchable type="desktop-id">@app_id@.desktop</launchable>
|
||||
|
||||
<kudos>
|
||||
<kudo>HiDpiIcon</kudo>
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 91f3f41490666a526ed78af744507d7ee1134323
|
||||
6
subprojects/gvc.wrap
Normal file
6
subprojects/gvc.wrap
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[wrap-git]
|
||||
directory=gvc
|
||||
url=https://gitlab.gnome.org/GNOME/libgnome-volume-control.git
|
||||
push-url=ssh://git@gitlab.gnome.org:GNOME/libgnome-volume-control.git
|
||||
revision=5f9768a2eac29c1ed56f1fbb449a77a3523683b6
|
||||
depth=1
|
||||
Loading…
Add table
Add a link
Reference in a new issue