summaryrefslogtreecommitdiff
path: root/app/Main.hs
blob: 25ad7d4e66c311c0d86f5ce0db15b1dd6ba9b518 (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
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE ImplicitParams #-}

import Control.Monad (void)
import Control.Exception (bracket_)
import Data.Maybe (fromJust)
import Data.GI.Base

import qualified GI.Gtk as Gtk
import qualified GI.Gdk as Gdk
import qualified GI.Gio as Gio
import qualified GI.Foobar as FB

activate :: Gtk.Application -> IO ()
activate app = do
  provider <- new Gtk.CssProvider []
  provider.loadFromResource "/foobar/styles/default.css"
  disp <- Gdk.displayGetDefault
  Gtk.styleContextAddProviderForDisplay (fromJust disp)
                                        provider
                                        (fromIntegral Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
  button <- new Gtk.Button [ #label := "Hello, world!" ]
  window <- new Gtk.ApplicationWindow [ #application := app
                                      , #title := "Test"
                                      , #child := button ]
  _ <- FB.serverProxyNewForBusSync Gio.BusTypeSession
                                   []
                                   "com.github.hannesschulze.foobar"
                                   "/com/github/hannesschulze/foobar/server"
                                   (Nothing :: Maybe Gio.Cancellable)
  window.show

main :: IO ()
main = do
  bracket_
    (do FB.stylesRegisterResource; FB.iconsRegisterResource)
    (do FB.stylesUnregisterResource; FB.iconsUnregisterResource) $
    do app <- new Gtk.Application [ #applicationId := "com.github.hannesschulze.foobar-hs"
                                  , On #activate (activate ?self) ]
       void $ app.run Nothing