aboutsummaryrefslogtreecommitdiff
path: root/.config/ags/widget/bar/PanelButton.ts
blob: 332b46d2c2003288a8f69fa9edd9738d113cfb60 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import options from "options"
import { ButtonProps } from "types/widgets/button"

type PanelButtonProps = ButtonProps & {
  window?: string,
  flat?: boolean
}

export default ({
  window = "",
  flat,
  child,
  setup,
  ...rest
}: PanelButtonProps) => Widget.Button({
  child: Widget.Box({ child }),
  setup: self => {
    let open = false

    self.toggleClassName("panel-button")
    self.toggleClassName(window)

    self.hook(options.bar.flatButtons, () => {
      self.toggleClassName("flat", flat ?? options.bar.flatButtons.value)
    })

    self.hook(App, (_, win, visible) => {
      if (win !== window)
        return

      if (open && !visible) {
        open = false
        self.toggleClassName("active", false)
      }

      if (visible) {
        open = true
        self.toggleClassName("active")
      }
    })

    if (setup)
      setup(self)
  },
  ...rest,
})