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!
This commit is contained in:
Joey Hess 2013-07-09 19:56:30 -04:00
parent ea6fdc745f
commit 19b8bcbe30
7 changed files with 45 additions and 7 deletions

View file

@ -35,4 +35,5 @@ fdoAutostart command = genDesktopEntry
"Autostart" "Autostart"
False False
(command ++ " assistant --autostart") (command ++ " assistant --autostart")
Nothing
[] []

View file

@ -27,4 +27,5 @@ fdoDesktopMenu command = genDesktopEntry
"Track and sync the files in your Git Annex" "Track and sync the files in your Git Annex"
False False
(command ++ " webapp") (command ++ " webapp")
(Just "git-annex") -- icon base name
["Network", "FileTransfer"] ["Network", "FileTransfer"]

View file

@ -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.) - and a desktop autostart file. (And OSX equivilants.)
- -
- Copyright 2012 Joey Hess <joey@kitenet.net> - Copyright 2012 Joey Hess <joey@kitenet.net>
@ -28,6 +28,7 @@ import System.Posix.Files
#endif #endif
import System.FilePath import System.FilePath
import Data.Maybe import Data.Maybe
import System.IO
systemwideInstall :: IO Bool systemwideInstall :: IO Bool
#ifndef mingw32_HOST_OS #ifndef mingw32_HOST_OS
@ -48,14 +49,28 @@ inDestDir f = do
writeFDODesktop :: FilePath -> IO () writeFDODesktop :: FilePath -> IO ()
writeFDODesktop command = do writeFDODesktop command = do
datadir <- ifM systemwideInstall ( return systemDataDir, userDataDir ) systemwide <- systemwideInstall
datadir <- if systemwide then return systemDataDir else userDataDir
installMenu command installMenu command
=<< inDestDir (desktopMenuFilePath "git-annex" datadir) =<< 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 installAutoStart command
=<< inDestDir (autoStartPath "git-annex" configdir) =<< 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 :: FilePath -> IO ()
writeOSXDesktop command = do writeOSXDesktop command = do
installAutoStart command =<< inDestDir =<< ifM systemwideInstall installAutoStart command =<< inDestDir =<< ifM systemwideInstall

View file

@ -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.) - and a desktop autostart file. (And OSX equivilants.)
- -
- Copyright 2012 Joey Hess <joey@kitenet.net> - Copyright 2012 Joey Hess <joey@kitenet.net>

View file

@ -3,6 +3,7 @@
- http://standards.freedesktop.org/basedir-spec/latest/ - http://standards.freedesktop.org/basedir-spec/latest/
- http://standards.freedesktop.org/desktop-entry-spec/latest/ - http://standards.freedesktop.org/desktop-entry-spec/latest/
- http://standards.freedesktop.org/menu-spec/latest/ - http://standards.freedesktop.org/menu-spec/latest/
- http://standards.freedesktop.org/icon-theme-spec/latest/
- -
- Copyright 2012 Joey Hess <joey@kitenet.net> - Copyright 2012 Joey Hess <joey@kitenet.net>
- -
@ -16,6 +17,7 @@ module Utility.FreeDesktop (
writeDesktopMenuFile, writeDesktopMenuFile,
desktopMenuFilePath, desktopMenuFilePath,
autoStartPath, autoStartPath,
iconFilePath,
systemDataDir, systemDataDir,
systemConfigDir, systemConfigDir,
userDataDir, userDataDir,
@ -34,6 +36,7 @@ import System.Directory
import System.FilePath import System.FilePath
import Data.List import Data.List
import Data.String.Utils import Data.String.Utils
import Data.Maybe
import Control.Applicative import Control.Applicative
type DesktopEntry = [(Key, Value)] type DesktopEntry = [(Key, Value)]
@ -54,18 +57,19 @@ toString (ListV l)
where where
escapesemi = join "\\;" . split ";" escapesemi = join "\\;" . split ";"
genDesktopEntry :: String -> String -> Bool -> FilePath -> [String] -> DesktopEntry genDesktopEntry :: String -> String -> Bool -> FilePath -> Maybe String -> [String] -> DesktopEntry
genDesktopEntry name comment terminal program categories = genDesktopEntry name comment terminal program icon categories = catMaybes
[ item "Type" StringV "Application" [ item "Type" StringV "Application"
, item "Version" NumericV 1.0 , item "Version" NumericV 1.0
, item "Name" StringV name , item "Name" StringV name
, item "Comment" StringV comment , item "Comment" StringV comment
, item "Terminal" BoolV terminal , item "Terminal" BoolV terminal
, item "Exec" StringV program , item "Exec" StringV program
, maybe Nothing (item "Icon" StringV) icon
, item "Categories" ListV (map StringV categories) , item "Categories" ListV (map StringV categories)
] ]
where where
item x c y = (x, c y) item x c y = Just (x, c y)
buildDesktopMenuFile :: DesktopEntry -> String buildDesktopMenuFile :: DesktopEntry -> String
buildDesktopMenuFile d = unlines ("[Desktop Entry]" : map keyvalue d) ++ "\n" buildDesktopMenuFile d = unlines ("[Desktop Entry]" : map keyvalue d) ++ "\n"
@ -89,6 +93,17 @@ autoStartPath :: String -> FilePath -> FilePath
autoStartPath basename configdir = autoStartPath basename configdir =
configdir </> "autostart" </> desktopfile basename 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 :: FilePath -> FilePath
desktopfile f = f ++ ".desktop" desktopfile f = f ++ ".desktop"

6
debian/changelog vendored
View file

@ -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 git-annex (4.20130709) unstable; urgency=low
* --all: New switch that makes git-annex operate on all data stored * --all: New switch that makes git-annex operate on all data stored

BIN
doc/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 B