dash: Move getAppFromSource() into static method

This is a small helper function that is used by the DND handling
in the dash and its items.

It turns out that some extensions used to override it, which is
no longer possible: We don't export it, and if we did, it would
be read-only.

To make the function available again, expose it as static method
on the dash itself.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2903>
This commit is contained in:
Florian Müllner 2023-08-19 18:31:24 +02:00 committed by Marge Bot
parent f22f5d902c
commit 610b72d43a

View File

@ -20,16 +20,6 @@ const DASH_ITEM_LABEL_SHOW_TIME = 150;
const DASH_ITEM_LABEL_HIDE_TIME = 100; const DASH_ITEM_LABEL_HIDE_TIME = 100;
const DASH_ITEM_HOVER_TIMEOUT = 300; const DASH_ITEM_HOVER_TIMEOUT = 300;
/**
* @param {AppDisplay.AppIcon} source
*/
function getAppFromSource(source) {
if (source instanceof AppDisplay.AppIcon)
return source.app;
else
return null;
}
export const DashIcon = GObject.registerClass( export const DashIcon = GObject.registerClass(
class DashIcon extends AppDisplay.AppIcon { class DashIcon extends AppDisplay.AppIcon {
_init(app) { _init(app) {
@ -263,14 +253,14 @@ class ShowAppsIcon extends DashItemContainer {
} }
handleDragOver(source, _actor, _x, _y, _time) { handleDragOver(source, _actor, _x, _y, _time) {
if (!this._canRemoveApp(getAppFromSource(source))) if (!this._canRemoveApp(Dash.getAppFromSource(source)))
return DND.DragMotionResult.NO_DROP; return DND.DragMotionResult.NO_DROP;
return DND.DragMotionResult.MOVE_DROP; return DND.DragMotionResult.MOVE_DROP;
} }
acceptDrop(source, _actor, _x, _y, _time) { acceptDrop(source, _actor, _x, _y, _time) {
let app = getAppFromSource(source); const app = Dash.getAppFromSource(source);
if (!this._canRemoveApp(app)) if (!this._canRemoveApp(app))
return false; return false;
@ -321,6 +311,16 @@ const baseIconSizes = [16, 22, 24, 32, 48, 64];
export const Dash = GObject.registerClass({ export const Dash = GObject.registerClass({
Signals: {'icon-size-changed': {}}, Signals: {'icon-size-changed': {}},
}, class Dash extends St.Widget { }, class Dash extends St.Widget {
/**
* @param {object} source
*/
static getAppFromSource(source) {
if (source instanceof AppDisplay.AppIcon)
return source.app;
else
return null;
}
_init() { _init() {
this._maxWidth = -1; this._maxWidth = -1;
this._maxHeight = -1; this._maxHeight = -1;
@ -444,7 +444,7 @@ export const Dash = GObject.registerClass({
} }
_onItemDragMotion(dragEvent) { _onItemDragMotion(dragEvent) {
let app = getAppFromSource(dragEvent.source); const app = Dash.getAppFromSource(dragEvent.source);
if (app == null) if (app == null)
return DND.DragMotionResult.CONTINUE; return DND.DragMotionResult.CONTINUE;
@ -860,7 +860,7 @@ export const Dash = GObject.registerClass({
} }
handleDragOver(source, actor, x, _y, _time) { handleDragOver(source, actor, x, _y, _time) {
let app = getAppFromSource(source); const app = Dash.getAppFromSource(source);
// Don't allow favoriting of transient apps // Don't allow favoriting of transient apps
if (app == null || app.is_window_backed()) if (app == null || app.is_window_backed())
@ -947,7 +947,7 @@ export const Dash = GObject.registerClass({
// Draggable target interface // Draggable target interface
acceptDrop(source, _actor, _x, _y, _time) { acceptDrop(source, _actor, _x, _y, _time) {
let app = getAppFromSource(source); const app = Dash.getAppFromSource(source);
// Don't allow favoriting of transient apps // Don't allow favoriting of transient apps
if (app == null || app.is_window_backed()) if (app == null || app.is_window_backed())