diff options
author | Joey Hess <joey@kitenet.net> | 2013-07-09 19:56:30 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-07-09 19:56:30 -0400 |
commit | ffb8a2d9d6140fb50d9d3553be923b0b8f5cffed (patch) | |
tree | ace4e7fa5a5d5f6cb225b6246d87a565b10a58af | |
parent | a16a6979515886f2496c5204b886dc76748a3c82 (diff) |
Install XDG desktop icon files.
The icon files will be installed when running make install or cabal
install. Did not try to run update-icon-caches, since I think it's debian
specific, and dh_icons will take care of that for the Debian package.
Using the favicon as a 16x16 icon. At 24x24 the svg displays pretty well,
although the dotted lines are rather faint. The svg is ok at all higher
resolutions.
The standalone linux build auto-installs the desktop and autostart files
when run. I have not made it auto-install the icon file too, because
a) that would take more work to include them in the tarball and find them
b) it would need to be an install to ~/.icons/, and I don't know if that
really works!
-rw-r--r-- | Assistant/Install/AutoStart.hs | 1 | ||||
-rw-r--r-- | Assistant/Install/Menu.hs | 1 | ||||
-rw-r--r-- | Build/DesktopFile.hs | 21 | ||||
-rw-r--r-- | Build/InstallDesktopFile.hs | 2 | ||||
-rw-r--r-- | Utility/FreeDesktop.hs | 21 | ||||
-rw-r--r-- | debian/changelog | 6 | ||||
-rw-r--r-- | doc/favicon.png | bin | 0 -> 714 bytes |
7 files changed, 45 insertions, 7 deletions
diff --git a/Assistant/Install/AutoStart.hs b/Assistant/Install/AutoStart.hs index 13b4bc7ab..b03d20224 100644 --- a/Assistant/Install/AutoStart.hs +++ b/Assistant/Install/AutoStart.hs @@ -35,4 +35,5 @@ fdoAutostart command = genDesktopEntry "Autostart" False (command ++ " assistant --autostart") + Nothing [] diff --git a/Assistant/Install/Menu.hs b/Assistant/Install/Menu.hs index cb9b76ba6..940a2b32c 100644 --- a/Assistant/Install/Menu.hs +++ b/Assistant/Install/Menu.hs @@ -27,4 +27,5 @@ fdoDesktopMenu command = genDesktopEntry "Track and sync the files in your Git Annex" False (command ++ " webapp") + (Just "git-annex") -- icon base name ["Network", "FileTransfer"] diff --git a/Build/DesktopFile.hs b/Build/DesktopFile.hs index 3c6816e60..55a22352a 100644 --- a/Build/DesktopFile.hs +++ b/Build/DesktopFile.hs @@ -1,4 +1,4 @@ -{- Generating and installing a desktop menu entry file +{- Generating and installing a desktop menu entry file and icon, - and a desktop autostart file. (And OSX equivilants.) - - Copyright 2012 Joey Hess <joey@kitenet.net> @@ -28,6 +28,7 @@ import System.Posix.Files #endif import System.FilePath import Data.Maybe +import System.IO systemwideInstall :: IO Bool #ifndef mingw32_HOST_OS @@ -48,14 +49,28 @@ inDestDir f = do writeFDODesktop :: FilePath -> IO () writeFDODesktop command = do - datadir <- ifM systemwideInstall ( return systemDataDir, userDataDir ) + systemwide <- systemwideInstall + + datadir <- if systemwide then return systemDataDir else userDataDir installMenu command =<< inDestDir (desktopMenuFilePath "git-annex" datadir) - configdir <- ifM systemwideInstall ( return systemConfigDir, userConfigDir ) + installIcon "doc/logo.svg" =<< inDestDir + =<< iconFilePath "git-annex.svg" "scalable" systemwide + installIcon "doc/favicon.png" =<< inDestDir + =<< iconFilePath "git-annex.png" "16x16" systemwide + + configdir <- if systemwide then return systemConfigDir else userConfigDir installAutoStart command =<< inDestDir (autoStartPath "git-annex" configdir) +installIcon :: FilePath -> FilePath -> IO () +installIcon src dest = do + createDirectoryIfMissing True (parentDir dest) + withBinaryFile src ReadMode $ \hin -> + withBinaryFile dest WriteMode $ \hout -> + hGetContents hin >>= hPutStr hout + writeOSXDesktop :: FilePath -> IO () writeOSXDesktop command = do installAutoStart command =<< inDestDir =<< ifM systemwideInstall diff --git a/Build/InstallDesktopFile.hs b/Build/InstallDesktopFile.hs index f168f1b9b..c8a3f07f5 100644 --- a/Build/InstallDesktopFile.hs +++ b/Build/InstallDesktopFile.hs @@ -1,4 +1,4 @@ -{- Generating and installing a desktop menu entry file +{- Generating and installing a desktop menu entry file and icon, - and a desktop autostart file. (And OSX equivilants.) - - Copyright 2012 Joey Hess <joey@kitenet.net> diff --git a/Utility/FreeDesktop.hs b/Utility/FreeDesktop.hs index e3ced6d74..6338948d2 100644 --- a/Utility/FreeDesktop.hs +++ b/Utility/FreeDesktop.hs @@ -3,6 +3,7 @@ - http://standards.freedesktop.org/basedir-spec/latest/ - http://standards.freedesktop.org/desktop-entry-spec/latest/ - http://standards.freedesktop.org/menu-spec/latest/ + - http://standards.freedesktop.org/icon-theme-spec/latest/ - - Copyright 2012 Joey Hess <joey@kitenet.net> - @@ -16,6 +17,7 @@ module Utility.FreeDesktop ( writeDesktopMenuFile, desktopMenuFilePath, autoStartPath, + iconFilePath, systemDataDir, systemConfigDir, userDataDir, @@ -34,6 +36,7 @@ import System.Directory import System.FilePath import Data.List import Data.String.Utils +import Data.Maybe import Control.Applicative type DesktopEntry = [(Key, Value)] @@ -54,18 +57,19 @@ toString (ListV l) where escapesemi = join "\\;" . split ";" -genDesktopEntry :: String -> String -> Bool -> FilePath -> [String] -> DesktopEntry -genDesktopEntry name comment terminal program categories = +genDesktopEntry :: String -> String -> Bool -> FilePath -> Maybe String -> [String] -> DesktopEntry +genDesktopEntry name comment terminal program icon categories = catMaybes [ item "Type" StringV "Application" , item "Version" NumericV 1.0 , item "Name" StringV name , item "Comment" StringV comment , item "Terminal" BoolV terminal , item "Exec" StringV program + , maybe Nothing (item "Icon" StringV) icon , item "Categories" ListV (map StringV categories) ] where - item x c y = (x, c y) + item x c y = Just (x, c y) buildDesktopMenuFile :: DesktopEntry -> String buildDesktopMenuFile d = unlines ("[Desktop Entry]" : map keyvalue d) ++ "\n" @@ -89,6 +93,17 @@ autoStartPath :: String -> FilePath -> FilePath autoStartPath basename configdir = configdir </> "autostart" </> desktopfile basename +{- Path to use for an icon file. + - The resolution is something like "48x48" or "scalable". -} +iconFilePath :: FilePath -> String -> Bool -> IO FilePath +iconFilePath file resolution systemwide + | systemwide = return $ systemDataDir </> "icons" </> subpath + | otherwise = do + home <- myHomeDir + return $ home </> ".icons" </> subpath + where + subpath = "hicolor" </> resolution </> "apps" </> file + desktopfile :: FilePath -> FilePath desktopfile f = f ++ ".desktop" diff --git a/debian/changelog b/debian/changelog index ad7a5976e..6a5d2af55 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +git-annex (4.20130710) UNRELEASED; urgency=low + + * Install XDG desktop icon files. + + -- Joey Hess <joeyh@debian.org> Tue, 09 Jul 2013 19:17:13 -0400 + git-annex (4.20130709) unstable; urgency=low * --all: New switch that makes git-annex operate on all data stored diff --git a/doc/favicon.png b/doc/favicon.png Binary files differnew file mode 100644 index 000000000..1efbebdd7 --- /dev/null +++ b/doc/favicon.png |