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:
|
include:
|
||||||
- remote: 'https://gitlab.gnome.org/GNOME/citemplates/raw/HEAD/flatpak/flatpak_ci_initiative.yml'
|
- 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/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'
|
- project: 'Infrastructure/openshift-images/gnome-release-service'
|
||||||
file: '/ci-templates/release-module.yml'
|
file: '/ci-templates/release-module.yml'
|
||||||
|
|
||||||
|
|
@ -42,7 +42,7 @@ workflow:
|
||||||
- if: '$CI_COMMIT_TAG'
|
- if: '$CI_COMMIT_TAG'
|
||||||
- if: '$CI_COMMIT_BRANCH'
|
- if: '$CI_COMMIT_BRANCH'
|
||||||
|
|
||||||
.pipeline_guard: &pipeline_guard
|
.pipeline-guard:
|
||||||
rules:
|
rules:
|
||||||
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
||||||
- if: '$CI_COMMIT_TAG'
|
- if: '$CI_COMMIT_TAG'
|
||||||
|
|
@ -95,7 +95,8 @@ check_commit_log:
|
||||||
else
|
else
|
||||||
echo "Not a merge request" ;
|
echo "Not a merge request" ;
|
||||||
fi
|
fi
|
||||||
<<: *pipeline_guard
|
rules:
|
||||||
|
- !reference [.pipeline-guard, rules]
|
||||||
artifacts:
|
artifacts:
|
||||||
expire_in: 1 week
|
expire_in: 1 week
|
||||||
paths:
|
paths:
|
||||||
|
|
@ -114,7 +115,8 @@ check-merge-request:
|
||||||
else
|
else
|
||||||
echo "Not a merge request" ;
|
echo "Not a merge request" ;
|
||||||
fi
|
fi
|
||||||
<<: *pipeline_guard
|
rules:
|
||||||
|
- !reference [.pipeline-guard, rules]
|
||||||
artifacts:
|
artifacts:
|
||||||
expire_in: 1 week
|
expire_in: 1 week
|
||||||
paths:
|
paths:
|
||||||
|
|
@ -174,8 +176,6 @@ potfile_js_check:
|
||||||
build:
|
build:
|
||||||
stage: build
|
stage: build
|
||||||
needs: ["check_commit_log"]
|
needs: ["check_commit_log"]
|
||||||
variables:
|
|
||||||
GIT_SUBMODULE_STRATEGY: normal
|
|
||||||
before_script:
|
before_script:
|
||||||
- .gitlab-ci/checkout-mutter.sh
|
- .gitlab-ci/checkout-mutter.sh
|
||||||
- meson mutter mutter/build --prefix=/usr
|
- meson mutter mutter/build --prefix=/usr
|
||||||
|
|
@ -189,12 +189,12 @@ build:
|
||||||
paths:
|
paths:
|
||||||
- mutter
|
- mutter
|
||||||
- build
|
- build
|
||||||
|
- subprojects/gvc
|
||||||
|
|
||||||
test:
|
test:
|
||||||
stage: test
|
stage: test
|
||||||
needs: ["build"]
|
needs: ["build"]
|
||||||
variables:
|
variables:
|
||||||
GIT_SUBMODULE_STRATEGY: normal
|
|
||||||
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
|
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
|
||||||
NO_AT_BRIDGE: "1"
|
NO_AT_BRIDGE: "1"
|
||||||
before_script:
|
before_script:
|
||||||
|
|
@ -218,8 +218,6 @@ test-coverity:
|
||||||
needs: ["build"]
|
needs: ["build"]
|
||||||
stage: analyze
|
stage: analyze
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
variables:
|
|
||||||
GIT_SUBMODULE_STRATEGY: normal
|
|
||||||
before_script:
|
before_script:
|
||||||
- sudo meson install -C mutter/build
|
- sudo meson install -C mutter/build
|
||||||
script:
|
script:
|
||||||
|
|
@ -261,9 +259,6 @@ distinfo:
|
||||||
reports:
|
reports:
|
||||||
dotenv: dist.env
|
dotenv: dist.env
|
||||||
paths:
|
paths:
|
||||||
- build
|
|
||||||
- mutter
|
|
||||||
- subprojects/jasmine-gjs
|
|
||||||
- dist.env
|
- dist.env
|
||||||
rules:
|
rules:
|
||||||
- if: '$CI_COMMIT_TAG'
|
- if: '$CI_COMMIT_TAG'
|
||||||
|
|
@ -272,7 +267,6 @@ dist:
|
||||||
variables:
|
variables:
|
||||||
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
|
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
|
||||||
NO_AT_BRIDGE: "1"
|
NO_AT_BRIDGE: "1"
|
||||||
GIT_SUBMODULE_STRATEGY: normal
|
|
||||||
stage: deploy
|
stage: deploy
|
||||||
needs: ["build"]
|
needs: ["build"]
|
||||||
before_script:
|
before_script:
|
||||||
|
|
@ -289,6 +283,7 @@ dist:
|
||||||
dist-tarball:
|
dist-tarball:
|
||||||
extends: dist
|
extends: dist
|
||||||
needs:
|
needs:
|
||||||
|
- build
|
||||||
- distinfo
|
- distinfo
|
||||||
artifacts:
|
artifacts:
|
||||||
expose_as: 'Get tarball here'
|
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');
|
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');
|
this.emit('verification-complete');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -740,10 +747,10 @@ export class ShellUserVerifier extends Signals.EventEmitter {
|
||||||
// If the login failed with the preauthenticated oVirt credentials
|
// If the login failed with the preauthenticated oVirt credentials
|
||||||
// then discard the credentials and revert to default authentication
|
// then discard the credentials and revert to default authentication
|
||||||
// mechanism.
|
// mechanism.
|
||||||
let foregroundService = Object.keys(this._credentialManagers).find(service =>
|
const isCredentialManager = !!this._credentialManagers[serviceName];
|
||||||
this.serviceIsForeground(service));
|
const isForeground = this.serviceIsForeground(serviceName);
|
||||||
if (foregroundService) {
|
if (isCredentialManager && isForeground) {
|
||||||
this._credentialManagers[foregroundService].token = null;
|
this._credentialManagers[serviceName].token = null;
|
||||||
this._preemptingService = null;
|
this._preemptingService = null;
|
||||||
this._verificationFailed(serviceName, false);
|
this._verificationFailed(serviceName, false);
|
||||||
return;
|
return;
|
||||||
|
|
@ -757,7 +764,7 @@ export class ShellUserVerifier extends Signals.EventEmitter {
|
||||||
// if the password service fails, then cancel everything.
|
// if the password service fails, then cancel everything.
|
||||||
// But if, e.g., fingerprint fails, still give
|
// But if, e.g., fingerprint fails, still give
|
||||||
// password authentication a chance to succeed
|
// password authentication a chance to succeed
|
||||||
if (this.serviceIsForeground(serviceName))
|
if (isForeground)
|
||||||
this._failCounter++;
|
this._failCounter++;
|
||||||
|
|
||||||
this._verificationFailed(serviceName, true);
|
this._verificationFailed(serviceName, true);
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,8 @@ class PortalWindow extends Gtk.ApplicationWindow {
|
||||||
super._init({
|
super._init({
|
||||||
application,
|
application,
|
||||||
title: _('Hotspot Login'),
|
title: _('Hotspot Login'),
|
||||||
|
default_width: 600,
|
||||||
|
default_height: 450,
|
||||||
});
|
});
|
||||||
|
|
||||||
const headerbar = new Gtk.HeaderBar();
|
const headerbar = new Gtk.HeaderBar();
|
||||||
|
|
@ -153,7 +155,6 @@ class PortalWindow extends Gtk.ApplicationWindow {
|
||||||
this._syncUri();
|
this._syncUri();
|
||||||
|
|
||||||
this.set_child(this._webView);
|
this.set_child(this._webView);
|
||||||
this.set_size_request(600, 450);
|
|
||||||
this.maximize();
|
this.maximize();
|
||||||
this.present_with_time(timestamp);
|
this.present_with_time(timestamp);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -108,8 +108,6 @@ export const BarLevel = GObject.registerClass({
|
||||||
}
|
}
|
||||||
|
|
||||||
vfunc_style_changed() {
|
vfunc_style_changed() {
|
||||||
super.vfunc_style_changed();
|
|
||||||
|
|
||||||
const themeNode = this.get_theme_node();
|
const themeNode = this.get_theme_node();
|
||||||
this._barLevelHeight = themeNode.get_length('-barlevel-height');
|
this._barLevelHeight = themeNode.get_length('-barlevel-height');
|
||||||
this._barLevelBorderWidth =
|
this._barLevelBorderWidth =
|
||||||
|
|
@ -135,6 +133,8 @@ export const BarLevel = GObject.registerClass({
|
||||||
themeNode.lookup_color('-barlevel-overdrive-border-color', false);
|
themeNode.lookup_color('-barlevel-overdrive-border-color', false);
|
||||||
this._barLevelOverdriveBorderColor = hasOverdriveBorderColor
|
this._barLevelOverdriveBorderColor = hasOverdriveBorderColor
|
||||||
? barLevelOverdriveBorderColor : this._barLevelOverdriveColor;
|
? barLevelOverdriveBorderColor : this._barLevelOverdriveColor;
|
||||||
|
|
||||||
|
super.vfunc_style_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
vfunc_repaint() {
|
vfunc_repaint() {
|
||||||
|
|
|
||||||
|
|
@ -498,6 +498,11 @@ export const Notification = GObject.registerClass({
|
||||||
|
|
||||||
destroy(reason = NotificationDestroyedReason.DISMISSED) {
|
destroy(reason = NotificationDestroyedReason.DISMISSED) {
|
||||||
this.emit('destroy', reason);
|
this.emit('destroy', reason);
|
||||||
|
|
||||||
|
if (this._updateDatetimeId)
|
||||||
|
GLib.source_remove(this._updateDatetimeId);
|
||||||
|
delete this._updateDatetimeId;
|
||||||
|
|
||||||
this.run_dispose();
|
this.run_dispose();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1089,16 +1089,11 @@ class Workspace extends St.Widget {
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
|
||||||
this._skipTaskbarSignals = new Map();
|
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 = [];
|
this._windows = [];
|
||||||
for (let i = 0; i < windows.length; i++) {
|
this._layoutFrozenId = 0;
|
||||||
if (this._isOverviewWindow(windows[i]))
|
|
||||||
this._addWindowClone(windows[i]);
|
// DND requires this to be set
|
||||||
}
|
this._delegate = this;
|
||||||
|
|
||||||
// Track window changes, but let the window tracker process them first
|
// Track window changes, but let the window tracker process them first
|
||||||
this.metaWorkspace?.connectObject(
|
this.metaWorkspace?.connectObject(
|
||||||
|
|
@ -1109,10 +1104,10 @@ class Workspace extends St.Widget {
|
||||||
'window-entered-monitor', this._windowEnteredMonitor.bind(this), GObject.ConnectFlags.AFTER,
|
'window-entered-monitor', this._windowEnteredMonitor.bind(this), GObject.ConnectFlags.AFTER,
|
||||||
'window-left-monitor', this._windowLeftMonitor.bind(this), GObject.ConnectFlags.AFTER,
|
'window-left-monitor', this._windowLeftMonitor.bind(this), GObject.ConnectFlags.AFTER,
|
||||||
this);
|
this);
|
||||||
this._layoutFrozenId = 0;
|
|
||||||
|
|
||||||
// DND requires this to be set
|
// Create clones for windows that should be
|
||||||
this._delegate = this;
|
// visible in the Overview
|
||||||
|
global.get_window_actors().map(a => this._doAddWindow(a.meta_window));
|
||||||
}
|
}
|
||||||
|
|
||||||
_shouldLeaveOverview() {
|
_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
|
// We might have the window in our list already if it was on all workspaces and
|
||||||
// now was moved to this workspace
|
// now was moved to this workspace
|
||||||
if (this._lookupIndex(metaWin) !== -1)
|
if (this.containsMetaWindow(metaWin))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!this._isMyWindow(metaWin))
|
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() {
|
_updateWorkspaces() {
|
||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
let newNumWorkspaces = workspaceManager.n_workspaces;
|
let newNumWorkspaces = workspaceManager.n_workspaces;
|
||||||
|
|
@ -472,10 +477,12 @@ class WorkspacesView extends WorkspacesViewBase {
|
||||||
|
|
||||||
this._updateWorkspacesState();
|
this._updateWorkspacesState();
|
||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
|
this._raiseActiveWorkspace();
|
||||||
}
|
}
|
||||||
|
|
||||||
_activeWorkspaceChanged(_wm, _from, _to, _direction) {
|
_activeWorkspaceChanged(_wm, _from, _to, _direction) {
|
||||||
this._scrollToActive();
|
this._scrollToActive();
|
||||||
|
this._raiseActiveWorkspace();
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ gtk_req = '>= 4.0'
|
||||||
mutter_req = '>= 45.0'
|
mutter_req = '>= 45.0'
|
||||||
polkit_req = '>= 0.100'
|
polkit_req = '>= 0.100'
|
||||||
schemas_req = '>= 42.beta'
|
schemas_req = '>= 42.beta'
|
||||||
startup_req = '>= 0.11'
|
|
||||||
systemd_req = '>= 246'
|
systemd_req = '>= 246'
|
||||||
ibus_req = '>= 1.5.19'
|
ibus_req = '>= 1.5.19'
|
||||||
gnome_desktop_req = '>= 40'
|
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)
|
ecal_dep = dependency('libecal-2.0', version: ecal_req)
|
||||||
eds_dep = dependency('libedataserver-1.2', version: eds_req)
|
eds_dep = dependency('libedataserver-1.2', version: eds_req)
|
||||||
gcr_dep = dependency('gcr-4', version: gcr_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')
|
gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0')
|
||||||
gi_dep = dependency('gobject-introspection-1.0', version: gi_req)
|
gi_dep = dependency('gobject-introspection-1.0', version: gi_req)
|
||||||
gio_dep = dependency('gio-2.0', version: gio_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)
|
cogl_pango_dep = dependency(cogl_pango_pc, version: mutter_req)
|
||||||
mutter_dep = dependency(libmutter_pc, version: mutter_req)
|
mutter_dep = dependency(libmutter_pc, version: mutter_req)
|
||||||
polkit_dep = dependency('polkit-agent-1', version: polkit_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)
|
ibus_dep = dependency('ibus-1.0', version: ibus_req)
|
||||||
x11_dep = dependency('x11')
|
x11_dep = dependency('x11')
|
||||||
schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req)
|
schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req)
|
||||||
|
|
|
||||||
|
|
@ -60,12 +60,12 @@ gnome_shell_deps = [
|
||||||
mtk_dep,
|
mtk_dep,
|
||||||
clutter_dep,
|
clutter_dep,
|
||||||
cogl_pango_dep,
|
cogl_pango_dep,
|
||||||
startup_dep,
|
|
||||||
gi_dep,
|
gi_dep,
|
||||||
polkit_dep,
|
polkit_dep,
|
||||||
gcr_dep,
|
gcr_dep,
|
||||||
libsystemd_dep,
|
libsystemd_dep,
|
||||||
libpipewire_dep,
|
libpipewire_dep,
|
||||||
|
x11_dep,
|
||||||
]
|
]
|
||||||
|
|
||||||
gnome_shell_deps += nm_deps
|
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);
|
g_clear_handle_id (&monitor->delayed_disable_id, g_source_remove);
|
||||||
|
|
||||||
spa_hook_remove (&monitor->registry_listener);
|
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);
|
spa_hook_remove (&monitor->core_listener);
|
||||||
g_clear_pointer (&monitor->core, pw_core_disconnect);
|
g_clear_pointer (&monitor->core, pw_core_disconnect);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -66,24 +66,12 @@ enum {
|
||||||
|
|
||||||
static GParamSpec *props[N_PROPS] = { NULL, };
|
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 *
|
static char *
|
||||||
st_scroll_view_fade_get_static_shader_source (ClutterShaderEffect *effect)
|
st_scroll_view_fade_get_static_shader_source (ClutterShaderEffect *effect)
|
||||||
{
|
{
|
||||||
return g_strdup (st_scroll_view_fade_glsl);
|
return g_strdup (st_scroll_view_fade_glsl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect,
|
st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect,
|
||||||
ClutterPaintNode *node,
|
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;
|
shader_class->get_static_shader_source = st_scroll_view_fade_get_static_shader_source;
|
||||||
|
|
||||||
offscreen_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
|
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;
|
offscreen_class->paint_target = st_scroll_view_fade_paint_target;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1362,6 +1362,92 @@ st_theme_node_prerender_background (StThemeNode *node,
|
||||||
return texture;
|
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,
|
static void st_theme_node_paint_borders (StThemeNodePaintState *state,
|
||||||
CoglFramebuffer *framebuffer,
|
CoglFramebuffer *framebuffer,
|
||||||
const ClutterActorBox *box,
|
const ClutterActorBox *box,
|
||||||
|
|
@ -1487,10 +1573,7 @@ st_theme_node_render_resources (StThemeNodePaintState *state,
|
||||||
float height,
|
float height,
|
||||||
float resource_scale)
|
float resource_scale)
|
||||||
{
|
{
|
||||||
gboolean has_border;
|
|
||||||
gboolean has_border_radius;
|
|
||||||
gboolean has_inset_box_shadow;
|
gboolean has_inset_box_shadow;
|
||||||
gboolean has_large_corners;
|
|
||||||
StShadow *box_shadow_spec;
|
StShadow *box_shadow_spec;
|
||||||
|
|
||||||
g_return_if_fail (width > 0 && height > 0);
|
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);
|
box_shadow_spec = st_theme_node_get_box_shadow (node);
|
||||||
has_inset_box_shadow = box_shadow_spec && box_shadow_spec->inset;
|
has_inset_box_shadow = box_shadow_spec && box_shadow_spec->inset;
|
||||||
|
|
||||||
if (node->border_width[ST_SIDE_TOP] > 0 ||
|
st_theme_node_maybe_prerender_background (state, node, width, height, resource_scale);
|
||||||
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;
|
|
||||||
|
|
||||||
if (box_shadow_spec && !has_inset_box_shadow)
|
if (box_shadow_spec && !has_inset_box_shadow)
|
||||||
{
|
{
|
||||||
|
|
@ -1616,14 +1634,12 @@ st_theme_node_update_resources (StThemeNodePaintState *state,
|
||||||
float height,
|
float height,
|
||||||
float resource_scale)
|
float resource_scale)
|
||||||
{
|
{
|
||||||
gboolean had_prerendered_texture = FALSE;
|
|
||||||
gboolean had_box_shadow = FALSE;
|
gboolean had_box_shadow = FALSE;
|
||||||
StShadow *box_shadow_spec;
|
StShadow *box_shadow_spec;
|
||||||
|
|
||||||
g_return_if_fail (width > 0 && height > 0);
|
g_return_if_fail (width > 0 && height > 0);
|
||||||
|
|
||||||
/* Free handles we can't reuse */
|
/* Free handles we can't reuse */
|
||||||
had_prerendered_texture = (state->prerendered_texture != NULL);
|
|
||||||
cogl_clear_object (&state->prerendered_texture);
|
cogl_clear_object (&state->prerendered_texture);
|
||||||
|
|
||||||
if (state->prerendered_pipeline != NULL)
|
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);
|
box_shadow_spec = st_theme_node_get_box_shadow (node);
|
||||||
|
|
||||||
if (had_prerendered_texture)
|
st_theme_node_maybe_prerender_background (state, node, width, height, resource_scale);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (had_box_shadow)
|
if (had_box_shadow)
|
||||||
state->box_shadow_pipeline = _st_create_shadow_pipeline (box_shadow_spec,
|
state->box_shadow_pipeline = _st_create_shadow_pipeline (box_shadow_spec,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
metainfo = app_id + '.metainfo.xml'
|
metainfo = app_id + '.metainfo.xml'
|
||||||
i18n.merge_file(
|
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,
|
output: metainfo,
|
||||||
po_dir: po_dir,
|
po_dir: po_dir,
|
||||||
install: true,
|
install: true,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<component type="desktop-application">
|
<component type="desktop-application">
|
||||||
<id>org.gnome.Extensions</id>
|
<id>@app_id@</id>
|
||||||
|
|
||||||
<name>Extensions</name>
|
<name>Extensions</name>
|
||||||
<summary>Manage your GNOME Extensions</summary>
|
<summary>Manage your GNOME Extensions</summary>
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
<project_group>GNOME</project_group>
|
<project_group>GNOME</project_group>
|
||||||
<developer_name>The GNOME Project</developer_name>
|
<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>
|
<kudos>
|
||||||
<kudo>HiDpiIcon</kudo>
|
<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