diff --git a/ags/runner/Runner.ts b/ags/runner/Runner.ts index 3a8086a..ea2119b 100644 --- a/ags/runner/Runner.ts +++ b/ags/runner/Runner.ts @@ -46,9 +46,7 @@ export namespace Runner { showResultsPlaceHolderOnStartup?: boolean; }; - export function close() { - runnerInstance?.close(); - } + export function close() { runnerInstance?.close(); } const plugins = new Set([]); @@ -98,6 +96,7 @@ export namespace Runner { if(resultWidget instanceof ResultWidget) { entry.isFocus = false; resultWidget.onClick(); + resultWidget.closeOnClick && Runner.close(); } }, primary_icon_name: "system-search" @@ -140,13 +139,14 @@ export namespace Runner { resultsList.insert(resultWidget, -1); resultsList.connect("row-activated", (_, row: Gtk.ListBoxRow) => { - const rWidget = row.get_child()!; + const rWidget = row.get_child(); if(rWidget instanceof ResultWidget) { - if(!onClickTimeout) { - rWidget.onClick(); - // Timeout, so it doesn't fire the event a hundred times :skull: - onClickTimeout = timeout(500, () => onClickTimeout = undefined); - } + if(onClickTimeout) return; + + // Timeout, so it doesn't fire the event a hundred times :skull: + onClickTimeout = timeout(500, () => onClickTimeout = undefined); + rWidget.onClick(); + rWidget.closeOnClick && Runner.close(); } }); }); @@ -172,6 +172,7 @@ export namespace Runner { && keyVal !== Gdk.KEY_Down && keyVal !== Gdk.KEY_Up && keyVal !== Gdk.KEY_Return) { searchEntry.grab_focus_without_selecting(); + return; } event.get_keyval()[1] === Gdk.KEY_F5 && diff --git a/ags/runner/plugins/media.ts b/ags/runner/plugins/media.ts index 2bd4226..38e2864 100644 --- a/ags/runner/plugins/media.ts +++ b/ags/runner/plugins/media.ts @@ -11,6 +11,7 @@ export const PluginMedia = { if(!player) return new ResultWidget({ icon: "folder-music-symbolic", title: "Couldn't find any players", + closeOnClick: false, description: "No media / player found with mpris" } as ResultWidgetProps); return [ @@ -18,6 +19,7 @@ export const PluginMedia = { icon: bind(player, "playbackStatus").as((status) => status === AstalMpris.PlaybackStatus.PLAYING ? "media-playback-pause-symbolic" : "media-playback-start-symbolic"), + closeOnClick: false, title: Variable.derive([ bind(player, "title"), bind(player, "artist"), @@ -29,6 +31,7 @@ export const PluginMedia = { } as ResultWidgetProps), new ResultWidget({ icon: "media-skip-backward-symbolic", + closeOnClick: false, title: Variable.derive([ bind(player, "title"), bind(player, "artist") @@ -39,6 +42,7 @@ export const PluginMedia = { } as ResultWidgetProps), new ResultWidget({ icon: "media-skip-forward-symbolic", + closeOnClick: false, title: Variable.derive([ bind(player, "title"), bind(player, "artist") diff --git a/ags/widget/runner/ResultWidget.ts b/ags/widget/runner/ResultWidget.ts index 74ca302..1b677ab 100644 --- a/ags/widget/runner/ResultWidget.ts +++ b/ags/widget/runner/ResultWidget.ts @@ -1,6 +1,5 @@ import { Binding, register } from "astal"; import { Gtk, Widget } from "astal/gtk3"; -import { Runner } from "../../runner/Runner"; export { ResultWidget, ResultWidgetProps }; @@ -22,21 +21,15 @@ class ResultWidget extends Widget.Box { constructor(props: ResultWidgetProps) { - super(); - if(props.icon) - this.icon = props.icon; - if(props.setup) - this.setup = props.setup; - if(props.closeOnClick !== undefined) - this.closeOnClick = props.closeOnClick; + super({ + className: "result", + hexpand: true + }); - this.onClick = () => { - props.onClick && props.onClick(); - this.closeOnClick && Runner.close(); - }; - - this.set_class_name("result"); - this.set_hexpand(true); + this.icon = props.icon; + this.setup = props.setup; + this.closeOnClick = props.closeOnClick ?? true; + this.onClick = () => props.onClick?.(); this.add(new Widget.Icon({ visible: Boolean(props.icon),