packages feed

tianbar-1.1.0.1: src/System/Tianbar.hs

module System.Tianbar where

import Data.GI.Base
import qualified Data.Text as T

import GI.Gdk.Enums hiding (WindowTypeToplevel)
import GI.Gdk.Objects.Display
import GI.Gdk.Objects.Screen
import GI.Gdk.Structs.Rectangle

import GI.Gtk.Enums
import qualified GI.Gtk.Functions as GtkFunctions
import GI.Gtk.Objects.Box
import GI.Gtk.Objects.Container
import GI.Gtk.Objects.Widget
import GI.Gtk.Objects.Window

import System.Environment (getArgs, getProgName)

import System.Tianbar.Configuration
import System.Tianbar.StrutProperties
import System.Tianbar.WebKit


topStrut :: Rectangle -> IO StrutProperties
topStrut rect = do
    mX <- get rect rectangleX
    mY <- get rect rectangleY
    mW <- get rect rectangleWidth
    let x = fromIntegral mX
        w = fromIntegral mW - 1
        h = barHeight + fromIntegral mY
     in return (0, 0, h, 0, 0, 0, 0, 0, x, x + w, 0, 0)


sizeMainWindow :: Window -> IO ()
sizeMainWindow window = do
    Just disp <- displayGetDefault
    screen <- displayGetDefaultScreen disp
    monitorSize <- screenGetMonitorGeometry screen (fromIntegral myMonitor)

    monitorX <- get monitorSize rectangleX
    monitorY <- get monitorSize rectangleY
    monitorW <- get monitorSize rectangleWidth

    let windowX = monitorX
    let windowY = monitorY
    let windowWidth = fromIntegral monitorW
    let windowHeight = fromIntegral barHeight

    windowSetDefaultSize window (fromIntegral monitorW) (fromIntegral barHeight)
    windowMove window windowX windowY
    windowResize window windowWidth windowHeight

    strut <- topStrut monitorSize
    setStrutProperties window strut


main :: IO ()
main = do
    progName <- getProgName
    args <- getArgs
    _ <- GtkFunctions.init $ Just $ map T.pack (progName : args)

    Just disp <- displayGetDefault
    screen <- displayGetDefaultScreen disp

    window <- windowNew WindowTypeToplevel
    widgetSetName window $ T.pack appName

    windowSetTypeHint window WindowTypeHintDock
    windowSetScreen window screen

    _ <- onWidgetRealize window $ sizeMainWindow window
    _ <- onScreenMonitorsChanged screen $ sizeMainWindow window

    box <- boxNew OrientationHorizontal 0
    containerAdd window box

    wk <- tianbarWebkitNew
    boxPackStart box wk True True 0

    widgetShow window
    widgetShow box

    GtkFunctions.main