popupwindow: switch to class
This commit is contained in:
parent
bb0a071034
commit
476fbe69d3
2 changed files with 48 additions and 38 deletions
|
|
@ -8,7 +8,7 @@ import { Apps } from "../services/apps";
|
||||||
import Math, { type HistoryItem } from "../services/math";
|
import Math, { type HistoryItem } from "../services/math";
|
||||||
import { getAppCategoryIcon } from "../utils/icons";
|
import { getAppCategoryIcon } from "../utils/icons";
|
||||||
import { launch } from "../utils/system";
|
import { launch } from "../utils/system";
|
||||||
import { convertPopupWindowProps, setupCustomTooltip } from "../utils/widgets";
|
import { PopupWindow, setupCustomTooltip } from "../utils/widgets";
|
||||||
|
|
||||||
type Mode = "apps" | "files" | "math";
|
type Mode = "apps" | "files" | "math";
|
||||||
|
|
||||||
|
|
@ -346,7 +346,7 @@ const LauncherContent = ({
|
||||||
);
|
);
|
||||||
|
|
||||||
@register()
|
@register()
|
||||||
export default class Launcher extends Widget.Window {
|
export default class Launcher extends PopupWindow {
|
||||||
readonly mode: Variable<Mode>;
|
readonly mode: Variable<Mode>;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|
@ -354,8 +354,7 @@ export default class Launcher extends Widget.Window {
|
||||||
const mode = Variable<Mode>("apps");
|
const mode = Variable<Mode>("apps");
|
||||||
const showResults = Variable.derive([bind(entry, "textLength"), mode], (t, m) => t > 0 || m !== "apps");
|
const showResults = Variable.derive([bind(entry, "textLength"), mode], (t, m) => t > 0 || m !== "apps");
|
||||||
|
|
||||||
super(
|
super({
|
||||||
convertPopupWindowProps({
|
|
||||||
name: "launcher",
|
name: "launcher",
|
||||||
anchor: Astal.WindowAnchor.TOP,
|
anchor: Astal.WindowAnchor.TOP,
|
||||||
keymode: Astal.Keymode.EXCLUSIVE,
|
keymode: Astal.Keymode.EXCLUSIVE,
|
||||||
|
|
@ -372,8 +371,7 @@ export default class Launcher extends Widget.Window {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: <LauncherContent mode={mode} showResults={showResults} entry={entry} />,
|
child: <LauncherContent mode={mode} showResults={showResults} entry={entry} />,
|
||||||
})
|
});
|
||||||
);
|
|
||||||
|
|
||||||
this.mode = mode;
|
this.mode = mode;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Binding } from "astal";
|
import { Binding, register } from "astal";
|
||||||
import { App, Astal, Gdk, Widget } from "astal/gtk3";
|
import { App, Astal, Gdk, Widget } from "astal/gtk3";
|
||||||
import AstalHyprland from "gi://AstalHyprland";
|
import AstalHyprland from "gi://AstalHyprland";
|
||||||
|
|
||||||
|
|
@ -52,7 +52,10 @@ const extendProp = <T,>(
|
||||||
override: (prop: T | undefined) => T | undefined
|
override: (prop: T | undefined) => T | undefined
|
||||||
) => prop && (prop instanceof Binding ? prop.as(override) : override(prop));
|
) => prop && (prop instanceof Binding ? prop.as(override) : override(prop));
|
||||||
|
|
||||||
export const convertPopupWindowProps = (props: Widget.WindowProps): Widget.WindowProps => ({
|
@register()
|
||||||
|
export class PopupWindow extends Widget.Window {
|
||||||
|
constructor(props: Widget.WindowProps) {
|
||||||
|
super({
|
||||||
keymode: Astal.Keymode.ON_DEMAND,
|
keymode: Astal.Keymode.ON_DEMAND,
|
||||||
exclusivity: Astal.Exclusivity.IGNORE,
|
exclusivity: Astal.Exclusivity.IGNORE,
|
||||||
...props,
|
...props,
|
||||||
|
|
@ -68,5 +71,14 @@ export const convertPopupWindowProps = (props: Widget.WindowProps): Widget.Windo
|
||||||
},
|
},
|
||||||
borderWidth: 20, // To allow shadow, cause if not it gets cut off
|
borderWidth: 20, // To allow shadow, cause if not it gets cut off
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export const PopupWindow = (props: Widget.WindowProps) => <window {...convertPopupWindowProps(props)} />;
|
popup_at_widget(widget: JSX.Element, event: Gdk.Event) {
|
||||||
|
const { width, height } = widget.get_allocation();
|
||||||
|
const [_, x, y] = event.get_coords();
|
||||||
|
const { x: cx, y: cy } = AstalHyprland.get_default().get_cursor_position();
|
||||||
|
this.marginLeft = cx + ((width - this.get_preferred_width()[1]) / 2 - x);
|
||||||
|
this.marginTop = cy + (height - y);
|
||||||
|
this.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue