bustle 0.5.4 → 0.6.1
raw patch · 39 files changed
+554/−1107 lines, 39 filesdep −gtk2hs-buildtoolsdep −parsecdep ~hgettextbinary-added
Dependencies removed: gtk2hs-buildtools, parsec
Dependency ranges changed: hgettext
Files
- Bustle.hs +2/−0
- Bustle/Loader.hs +5/−27
- Bustle/Loader/OldSkool.hs +0/−248
- Bustle/Loader/Pcap.hs +2/−2
- Bustle/Renderer.hs +10/−7
- Bustle/Stats.hs +8/−9
- Bustle/Translation.hs +10/−1
- Bustle/Types.hs +6/−5
- Bustle/UI/AboutDialog.hs +4/−3
- Bustle/UI/DetailsView.hs +3/−6
- Bustle/Upgrade.hs +0/−63
- INSTALL.md +0/−1
- LICENSE.bundled-libraries +0/−238
- Makefile +25/−34
- NEWS.md +19/−0
- bustle.cabal +30/−38
- bustle.sh +0/−17
- c-sources/bustle-pcap.c +25/−5
- data/OpenTwoDialog.ui +1/−1
- data/bustle.appdata.xml.in +0/−30
- data/bustle.desktop.in +0/−10
- data/bustle.ui +1/−1
- data/icons/16x16/bustle.png binary
- data/icons/16x16/org.freedesktop.Bustle.png binary
- data/icons/22x22/bustle.png binary
- data/icons/22x22/org.freedesktop.Bustle.png binary
- data/icons/256x256/bustle.png binary
- data/icons/256x256/org.freedesktop.Bustle.png binary
- data/icons/32x32/bustle.png binary
- data/icons/32x32/org.freedesktop.Bustle.png binary
- data/icons/48x48/bustle.png binary
- data/icons/48x48/org.freedesktop.Bustle.png binary
- data/icons/scalable/bustle-symbolic.svg +0/−104
- data/icons/scalable/bustle.svg +0/−253
- data/icons/scalable/org.freedesktop.Bustle-symbolic.svg +104/−0
- data/icons/scalable/org.freedesktop.Bustle.svg +253/−0
- data/org.freedesktop.Bustle.appdata.xml.in +36/−0
- data/org.freedesktop.Bustle.desktop.in +10/−0
- ldd-me-up.sh +0/−4
Bustle.hs view
@@ -24,6 +24,7 @@ import System.Environment (getArgs) import System.Exit (exitFailure) import Control.Monad (when)+import System.Glib.Utils (setApplicationName) import Bustle.Noninteractive import Bustle.Translation import Bustle.UI@@ -51,6 +52,7 @@ main :: IO () main = do initTranslation+ setApplicationName (__ "Bustle") args <- getArgs case args of
Bustle/Loader.hs view
@@ -25,17 +25,11 @@ ) where -import Control.Exception import Control.Monad.Except import Control.Arrow ((***)) -import Text.Printf--import qualified Bustle.Loader.OldSkool as Old import qualified Bustle.Loader.Pcap as Pcap-import Bustle.Upgrade (upgrade) import Bustle.Types-import Bustle.Translation (__) import Bustle.Util (io) data LoadError = LoadError FilePath String@@ -48,27 +42,15 @@ -> ExceptT LoadError io ([String], Log) readLog f = do pcapResult <- io $ Pcap.readPcap f- liftM (id *** filter (isRelevant . deEvent)) $ case pcapResult of- Right ms -> return ms- Left _ -> liftM ((,) []) readOldLogFile- where- readOldLogFile = do- result <- liftIO $ try $ readFile f- case result of- Left e -> throwError $ LoadError f (show (e :: IOException))- Right input -> do- let oldResult = fmap upgrade $ Old.readLog input- case oldResult of- Left e -> throwError $ LoadError f (printf (__ "Parse error %s") (show e))- Right r -> return r+ case pcapResult of+ Right ms -> return $ (id *** filter (isRelevant . deEvent)) ms+ Left ioe -> throwError $ LoadError f (show ioe) isRelevant :: Event -> Bool isRelevant (NOCEvent _) = True isRelevant (MessageEvent m) = case m of- Signal {} -> none [ senderIsBus- , isDisconnected- ]+ Signal {} -> not senderIsBus MethodCall {} -> none3 MethodReturn {} -> none3 Error {} -> none3@@ -79,11 +61,7 @@ destIsBus = destination m == busDriver busDriver = O (OtherName dbusName) - -- When the monitor is forcibly disconnected from the bus, the- -- Disconnected message has no sender; the old logger spat out <none>.- isDisconnected = sender m == O (OtherName Old.senderWhenDisconnected)- none bs = not $ or bs- none3 = none [senderIsBus, destIsBus, isDisconnected]+ none3 = none [senderIsBus, destIsBus]
− Bustle/Loader/OldSkool.hs
@@ -1,248 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{--Bustle.Loader.OldSkool: reads the output of bustle-dbus-monitor-Copyright © 2008–2011 Collabora Ltd.--This library is free software; you can redistribute it and/or-modify it under the terms of the GNU Lesser General Public-License as published by the Free Software Foundation; either-version 2.1 of the License, or (at your option) any later version.--This library is distributed in the hope that it will be useful,-but WITHOUT ANY WARRANTY; without even the implied warranty of-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU-Lesser General Public License for more details.--You should have received a copy of the GNU Lesser General Public-License along with this library; if not, write to the Free Software-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA--}-module Bustle.Loader.OldSkool- ( readLog- , senderWhenDisconnected- )-where--import Bustle.Types-import qualified DBus as D-import Text.ParserCombinators.Parsec hiding (Parser)-import Data.Map (Map)-import Data.Maybe (isJust)-import qualified Data.Map as Map-import Control.Monad (when, guard)-import Control.Applicative ((<$>), (<*>), (<*))--type Parser a = GenParser Char (Map (TaggedBusName, Serial) (Detailed Message)) a--t :: Parser Char-t = char '\t'--nameChars :: Parser String-nameChars = many1 (noneOf "\t\n")--- this should be--- nameChars = many1 (oneOf "._-" <|> alphaNum)--- but making it more tolerant lets us shoehorn misc into this field until the--- log format is less shit.--parseUniqueName :: Parser UniqueName-parseUniqueName = do- char ':'- rest <- nameChars- case D.parseBusName (':':rest) of- Just n -> return $ UniqueName n- Nothing -> fail $ "':" ++ rest ++ "' is not a valid unique name"- <?> "unique name"---- FIXME: this shouldn't exist.-senderWhenDisconnected :: D.BusName-senderWhenDisconnected = D.busName_ "org.freedesktop.DBus.Local"--parseMissingName :: Parser OtherName-parseMissingName = do- none- return $ OtherName senderWhenDisconnected--parseSpecifiedOtherName :: Parser OtherName-parseSpecifiedOtherName = do- x <- nameChars- case D.parseBusName x of- Just n -> return $ OtherName n- Nothing -> fail $ "'" ++ x ++ "' is not a valid name"--parseOtherName :: Parser OtherName-parseOtherName = parseMissingName <|> parseSpecifiedOtherName- <?>- "non-unique name"--parseBusName :: Parser TaggedBusName-parseBusName = (fmap U parseUniqueName) <|> (fmap O parseOtherName)--parseSerial :: Parser Serial-parseSerial = read <$> many1 digit <?> "serial"--parseTimestamp :: Parser Microseconds-parseTimestamp = do- seconds <- i- t- µs <- i- return $ µsFromPair seconds µs- where i = read <$> many1 digit <?> "timestamp"--none :: Parser (Maybe a)-none = do- string "<none>"- return Nothing--pathify :: String -> D.ObjectPath-pathify s = case D.parseObjectPath s of- Just p -> p- Nothing -> D.objectPath_ "/unparseable/object/path"--interfacify :: String -> Maybe D.InterfaceName-interfacify = D.parseInterfaceName--memberNamify :: String -> D.MemberName-memberNamify s = case D.parseMemberName s of- Just m -> m- Nothing -> D.memberName_ "UnparseableMemberName"--entireMember :: Parser Member-entireMember = do- let p = pathify <$> many1 (oneOf "/_" <|> alphaNum) <?> "path"- i = none <|> fmap interfacify (many1 (oneOf "._" <|> alphaNum)) <?> "iface"- m = memberNamify <$> many1 (oneOf "_" <|> alphaNum) <?> "membername"- Member <$> p <* t <*> i <* t <*> m- <?> "member"--addPendingCall :: Detailed Message -> Parser ()-addPendingCall dm = updateState $ Map.insert (sender m, serial m) dm- where- m = deEvent dm--findPendingCall :: TaggedBusName -> Serial -> Parser (Maybe (Detailed Message))-findPendingCall dest s = do- pending <- getState- let key = (dest, s)- ret = Map.lookup key pending- when (isJust ret) $ updateState (Map.delete key)- return ret--methodCall :: Parser DetailedEvent-methodCall = do- char 'c'- t- µs <- parseTimestamp- t- m <- MethodCall <$> parseSerial <* t- <*> parseBusName <* t <*> parseBusName <* t <*> entireMember- let dm = Detailed µs m Nothing- addPendingCall dm- return $ fmap MessageEvent dm- <?> "method call"--parseReturnOrError :: String- -> (Maybe (Detailed Message) -> TaggedBusName -> TaggedBusName -> Message)- -> Parser DetailedEvent-parseReturnOrError prefix constructor = do- string prefix <* t- ts <- parseTimestamp <* t- parseSerial <* t- replySerial <- parseSerial <* t- s <- parseBusName <* t- d <- parseBusName- call <- findPendingCall d replySerial- -- If we can see a call, use its sender and destination as the destination- -- and sender for the reply. This might prove unnecessary in the event of- -- moving the name collapsing into the UI.- let (s', d') = case call of- Just (Detailed _ m _) -> (destination m, sender m)- Nothing -> (s, d)- message = constructor call s' d'- return $ Detailed ts (MessageEvent message) Nothing- <?> "method return or error"--methodReturn, parseError :: Parser DetailedEvent-methodReturn = parseReturnOrError "r" MethodReturn <?> "method return"-parseError = parseReturnOrError "err" Error <?> "error"--signal :: Parser DetailedEvent-signal = do- string "sig"- t- µs <- parseTimestamp- t- -- Ignore serial- m <- Signal <$> (parseSerial >> t >> parseBusName) <* t- <*> return Nothing- <*> entireMember- return $ Detailed µs (MessageEvent m) Nothing- <?> "signal"--method :: Parser DetailedEvent-method = char 'm' >> (methodCall <|> methodReturn)- <?> "method call or return"--noName :: Parser ()-noName = char '!' >> return ()- <?> "the empty name '!'"--perhaps :: Parser a -> Parser (Maybe a)-perhaps act = (noName >> return Nothing) <|> fmap Just act--sameUnique :: UniqueName -> UniqueName -> Parser ()-sameUnique u u' = guard (u == u')- <?> "owner to be " ++ unUniqueName u ++ ", not " ++ unUniqueName u'--atLeastOne :: OtherName -> Parser a-atLeastOne n = fail ""- <?> unOtherName n ++ " to gain or lose an owner"--nameOwnerChanged :: Parser DetailedEvent-nameOwnerChanged = do- string "nameownerchanged"- t- ts <- parseTimestamp- t- n <- parseBusName- t- m <- parseNOCDetails n- return $ Detailed ts (NOCEvent m) Nothing--parseNOCDetails :: TaggedBusName- -> Parser NOC-parseNOCDetails n =- case n of- U u -> do- old <- perhaps parseUniqueName- case old of- Nothing -> do- t- u' <- parseUniqueName- sameUnique u u'- return $ Connected u- Just u' -> do- sameUnique u u'- t- noName- return $ Disconnected u- O o -> do- old <- perhaps parseUniqueName- t- new <- perhaps parseUniqueName- c <- case (old, new) of- (Nothing, Nothing) -> atLeastOne o- (Just a, Nothing) -> return $ Released a- (Nothing, Just b) -> return $ Claimed b- (Just a, Just b) -> return $ Stolen a b- return $ NameChanged o c--event :: Parser DetailedEvent-event = method <|> signal <|> nameOwnerChanged <|> parseError--events :: Parser [DetailedEvent]-events = sepEndBy event (char '\n') <* eof--readLog :: String -> Either ParseError [DetailedEvent]-readLog filename = runParser events Map.empty "" filename---- vim: sw=2 sts=2
Bustle/Loader/Pcap.hs view
@@ -156,7 +156,7 @@ -> StateT PendingMessages m B.DetailedEvent bustlify µs bytes m = do bm <- buildBustledMessage- return $ B.Detailed µs bm (Just (bytes, m))+ return $ B.Detailed µs bm bytes m where sender = receivedMessageSender m -- FIXME: can we do away with the un-Maybe-ing and just push that Nothing@@ -173,7 +173,7 @@ } -- FIXME: we shouldn't need to construct almost the same thing here -- and 10 lines above maybe?- insertPending sender serial mc (B.Detailed µs call (Just (bytes, m)))+ insertPending sender serial mc (B.Detailed µs call bytes m) return $ B.MessageEvent call (ReceivedMethodReturn _serial mr) -> do
Bustle/Renderer.hs view
@@ -376,12 +376,15 @@ ai <- lookupUniqueName bus u return (u, ai) - -- … but more than one match means we're screwed.- several -> error $ concat [ "internal error: "- , show o- , " in several apps: "- , show several- ]+ -- … but more than one match means we've messed up. This can happen+ -- with logs generated by dbus-monitor --pcap, which doesn't perform+ -- an initial dump of all names on the bus.+ (d:ds) -> do+ warn $ concat [ unOtherName o+ , " owned by several apps: "+ , show (d:ds)+ ]+ return d -- Finds a TaggedBusName in a map of applications lookupApp :: Bus@@ -661,7 +664,7 @@ processMessage :: Bus -> Detailed Message -> Renderer ()-processMessage bus dm@(Detailed _ m _) = do+processMessage bus dm@(Detailed _ m _ _) = do orly <- shouldShow bus m when orly $ case m of Signal {} -> do
Bustle/Stats.hs view
@@ -45,8 +45,8 @@ repr :: DetailedEvent -> Maybe (TallyType, Maybe InterfaceName, MemberName)-repr (Detailed _ (NOCEvent _) _) = Nothing-repr (Detailed _ (MessageEvent msg) _) =+repr (Detailed _ (NOCEvent _) _ _) = Nothing+repr (Detailed _ (MessageEvent msg) _ _) = case msg of MethodCall { member = m } -> Just (TallyMethod, iface m, membername m) Signal { member = m } -> Just (TallySignal, iface m, membername m)@@ -72,8 +72,7 @@ mean :: (Eq a, Fractional a) => [a] -> a mean = acc 0 0- where acc 0 _ [] = error "mean of empty list"- acc n t [] = t / n+ where acc n t [] = t / n acc n t (x:xs) = acc (n + 1) (t + x) xs data TimeInfo =@@ -109,7 +108,7 @@ methodReturn dm = do let m = deEvent dm guard (isReturn m)- Detailed start (call@(MethodCall {})) _ <- inReplyTo m+ Detailed start (call@(MethodCall {})) _ _ <- inReplyTo m return ( iface (member call) , membername (member call) , deTimestamp dm - start@@ -159,14 +158,14 @@ f :: Detailed Message -> Map (SizeType, Maybe InterfaceName, MemberName) [Int] -> Map (SizeType, Maybe InterfaceName, MemberName) [Int]- f dm = case (sizeKeyRepr dm, deDetails dm) of- (Just key, Just (size, _)) -> Map.insertWith' (++) key [size]- _ -> id+ f dm = case sizeKeyRepr dm of+ Just key -> Map.insertWith' (++) key [deMessageSize dm]+ _ -> id callDetails :: Message -> Maybe (Maybe InterfaceName, MemberName) callDetails msg = do- Detailed _ msg' _ <- inReplyTo msg+ Detailed _ msg' _ _ <- inReplyTo msg return (iface (member msg'), membername (member msg')) sizeKeyRepr :: Detailed Message
Bustle/Translation.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} module Bustle.Translation ( initTranslation@@ -5,13 +6,18 @@ ) where +#ifdef USE_HGETTEXT import Text.I18N.GetText import System.Locale.SetLocale import System.IO.Unsafe import GetText_bustle+#endif initTranslation :: IO ()+__ :: String -> String++#ifdef USE_HGETTEXT initTranslation = do setLocale LC_ALL (Just "") domain <- getMessageCatalogDomain@@ -21,5 +27,8 @@ return () -- FIXME: I do not like this unsafePerformIO one little bit.-__ :: String -> String __ = unsafePerformIO . getText+#else+initTranslation = return ()+__ = id+#endif
Bustle/Types.hs view
@@ -165,14 +165,15 @@ data Detailed e = Detailed { deTimestamp :: Microseconds , deEvent :: e- , deDetails :: Maybe (MessageSize, ReceivedMessage)+ , deMessageSize :: MessageSize+ , deReceivedMessage :: ReceivedMessage } deriving (Show, Eq, Functor) type DetailedEvent = Detailed Event instance Ord e => Ord (Detailed e) where- compare (Detailed µs x _) (Detailed µs' y _)+ compare (Detailed µs x _ _) (Detailed µs' y _ _) = compare (µs, x) (µs', y) data Change = Claimed UniqueName@@ -184,10 +185,10 @@ -> ([Detailed NOC], [Detailed Message]) partitionDetaileds = partitionEithers . map f where- f (Detailed µs e details) =+ f (Detailed µs e size rm) = case e of- NOCEvent n -> Left $ Detailed µs n details- MessageEvent m -> Right $ Detailed µs m details+ NOCEvent n -> Left $ Detailed µs n size rm+ MessageEvent m -> Right $ Detailed µs m size rm mentionedNames :: Message -> [TaggedBusName] mentionedNames m = sender m:dest
Bustle/UI/AboutDialog.hs view
@@ -46,11 +46,11 @@ dialog `set` [ aboutDialogName := __ "Bustle" , aboutDialogVersion := showVersion version , aboutDialogComments := __ "Someone's favourite D-Bus profiler"- , aboutDialogWebsite := "http://www.freedesktop.org/wiki/Software/Bustle/"+ , aboutDialogWebsite := "https://www.freedesktop.org/wiki/Software/Bustle/" , aboutDialogAuthors := authors- , aboutDialogCopyright := "© 2008–2015 Will Thompson, Collabora Ltd. and contributors"+ , aboutDialogCopyright := "© 2008–2017 Will Thompson, Collabora Ltd. and contributors" , aboutDialogLicense := license- , aboutDialogLogoIconName := Just "bustle"+ , aboutDialogLogoIconName := Just "org.freedesktop.Bustle" , windowModal := True , windowTransientFor := window ]@@ -68,4 +68,5 @@ , "Sergei Trofimovich" , "Alex Merry" , "Philip Withnall"+ , "Jonny Lamb" ]
Bustle/UI/DetailsView.hs view
@@ -100,7 +100,7 @@ return $ DetailsView table title pathLabel memberLabel view pickTitle :: Detailed Message -> Marquee-pickTitle (Detailed _ m _) = case m of+pickTitle (Detailed _ m _ _) = case m of MethodCall {} -> b (escape (__ "Method call")) MethodReturn {} -> b (escape (__ "Method return")) Error {} -> b (escape (__ "Error"))@@ -114,7 +114,7 @@ toPangoMarkup $ formatMember (iface m) (membername m) getMember :: Detailed Message -> Maybe Member-getMember (Detailed _ m _) = case m of+getMember (Detailed _ m _ _) = case m of MethodCall {} -> Just $ member m Signal {} -> Just $ member m MethodReturn {} -> callMember@@ -123,10 +123,7 @@ callMember = fmap (member . deEvent) $ inReplyTo m formatMessage :: Detailed Message -> String-formatMessage (Detailed _ _ Nothing) =- __ "No message body information is available. Please capture a fresh log \- \using a recent version of Bustle!"-formatMessage (Detailed _ _ (Just (_size, rm))) =+formatMessage (Detailed _ _ _ rm) = formatArgs $ D.receivedMessageBody rm where formatArgs = intercalate "\n" . map (format_Variant VariantStyleSignature)
− Bustle/Upgrade.hs
@@ -1,63 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{--Bustle.Upgrade: synthesise information missing from old logs-Copyright (C) 2009 Collabora Ltd.--This library is free software; you can redistribute it and/or-modify it under the terms of the GNU Lesser General Public-License as published by the Free Software Foundation; either-version 2.1 of the License, or (at your option) any later version.--This library is distributed in the hope that it will be useful,-but WITHOUT ANY WARRANTY; without even the implied warranty of-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU-Lesser General Public License for more details.--You should have received a copy of the GNU Lesser General Public-License along with this library; if not, write to the Free Software-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA--}-module Bustle.Upgrade (upgrade) where--import Control.Monad.State-import Data.Set (Set)-import qualified Data.Set as Set--import Bustle.Types---- Bustle <0.2.0 did not log NameOwnerChanged; this adds fake ones to logs--- lacking them-upgrade :: [DetailedEvent] -> [DetailedEvent]-upgrade es =- case partitionDetaileds es of- ([], ms) -> concat $ evalState (mapM synthesiseNOC ms) Set.empty- _ -> es--synthesiseNOC :: Detailed Message -> State (Set TaggedBusName) [DetailedEvent]-synthesiseNOC de@(Detailed µs m _) = do- fakes <- mapM synthDM $ mentionedNames m- return ( concat fakes ++ [fmap MessageEvent de] )- where- synthDM :: TaggedBusName -> State (Set TaggedBusName) [DetailedEvent]- synthDM n = do- fakes <- synth n- return $ map (\fake -> Detailed µs (NOCEvent fake) Nothing) fakes--synth :: TaggedBusName- -> State (Set TaggedBusName) [NOC]-synth n = do- b <- gets (Set.member n)- if b- then return []- else do- modify (Set.insert n)- return $ case n of- U u -> [ Connected u ]- O o -> [ Connected (fakeName o)- , NameChanged o (Claimed (fakeName o))- ]--fakeName :: OtherName -> UniqueName-fakeName = fakeUniqueName . unOtherName---- vim: sw=2 sts=2
INSTALL.md view
@@ -14,7 +14,6 @@ libghc-mtl-dev \ libghc-cairo-dev \ libghc-gtk-dev \- libghc-parsec3-dev \ libghc-glade-dev \ libghc-dbus-dev \ libghc-pcap-dev \
− LICENSE.bundled-libraries
@@ -1,238 +0,0 @@-Shipping these libraries in the tarball is monstrous, and I'm sorry. I just-wanted to ship this thing. Anyway, these libraries are slurped right out of the-OS packages on the system the tarball was built on. Here are some licenses:--libffi:-- libffi - Copyright (c) 1996-2010 Red Hat, Inc and others.- See source files for details.-- Permission is hereby granted, free of charge, to any person obtaining- a copy of this software and associated documentation files (the- ``Software''), to deal in the Software without restriction, including- without limitation the rights to use, copy, modify, merge, publish,- distribute, sublicense, and/or sell copies of the Software, and to- permit persons to whom the Software is furnished to do so, subject to- the following conditions:-- The above copyright notice and this permission notice shall be included- in all copies or substantial portions of the Software.-- THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.--libpcap:-- Copyright (C) 1993-2008 The Regents of the University of California.-- Redistribution and use in source and binary forms, with or without- modification, are permitted provided that the following conditions- are met:-- 1. Redistributions of source code must retain the above copyright- notice, this list of conditions and the following disclaimer.- 2. Redistributions in binary form must reproduce the above copyright- notice, this list of conditions and the following disclaimer in- the documentation and/or other materials provided with the- distribution.- 3. The names of the authors may not be used to endorse or promote- products derived from this software without specific prior- written permission.-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.--libgmp:-- Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003,- 2004, 2005, 2006, 2007 Free Software Foundation, Inc.-- This file is part of the GNU MP Library.-- The GNU MP Library is free software; you can redistribute it and/or modify- it under the terms of the GNU Lesser General Public License as published by- the Free Software Foundation; either version 3 of the License, or (at your- option) any later version.-- The GNU MP Library is distributed in the hope that it will be useful, but- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public- License for more details.-- You should have received a copy of the GNU Lesser General Public License- along with the GNU MP Library. If not, see http://www.gnu.org/licenses/.--The source code is available from http://www.freedesktop.org/software/bustle/-Your complimentary copy of the GNU Lesser General Public License follows:-- GNU LESSER GENERAL PUBLIC LICENSE- Version 3, 29 June 2007-- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>- Everyone is permitted to copy and distribute verbatim copies- of this license document, but changing it is not allowed.--- This version of the GNU Lesser General Public License incorporates-the terms and conditions of version 3 of the GNU General Public-License, supplemented by the additional permissions listed below.-- 0. Additional Definitions.-- As used herein, "this License" refers to version 3 of the GNU Lesser-General Public License, and the "GNU GPL" refers to version 3 of the GNU-General Public License.-- "The Library" refers to a covered work governed by this License,-other than an Application or a Combined Work as defined below.-- An "Application" is any work that makes use of an interface provided-by the Library, but which is not otherwise based on the Library.-Defining a subclass of a class defined by the Library is deemed a mode-of using an interface provided by the Library.-- A "Combined Work" is a work produced by combining or linking an-Application with the Library. The particular version of the Library-with which the Combined Work was made is also called the "Linked-Version".-- The "Minimal Corresponding Source" for a Combined Work means the-Corresponding Source for the Combined Work, excluding any source code-for portions of the Combined Work that, considered in isolation, are-based on the Application, and not on the Linked Version.-- The "Corresponding Application Code" for a Combined Work means the-object code and/or source code for the Application, including any data-and utility programs needed for reproducing the Combined Work from the-Application, but excluding the System Libraries of the Combined Work.-- 1. Exception to Section 3 of the GNU GPL.-- You may convey a covered work under sections 3 and 4 of this License-without being bound by section 3 of the GNU GPL.-- 2. Conveying Modified Versions.-- If you modify a copy of the Library, and, in your modifications, a-facility refers to a function or data to be supplied by an Application-that uses the facility (other than as an argument passed when the-facility is invoked), then you may convey a copy of the modified-version:-- a) under this License, provided that you make a good faith effort to- ensure that, in the event an Application does not supply the- function or data, the facility still operates, and performs- whatever part of its purpose remains meaningful, or-- b) under the GNU GPL, with none of the additional permissions of- this License applicable to that copy.-- 3. Object Code Incorporating Material from Library Header Files.-- The object code form of an Application may incorporate material from-a header file that is part of the Library. You may convey such object-code under terms of your choice, provided that, if the incorporated-material is not limited to numerical parameters, data structure-layouts and accessors, or small macros, inline functions and templates-(ten or fewer lines in length), you do both of the following:-- a) Give prominent notice with each copy of the object code that the- Library is used in it and that the Library and its use are- covered by this License.-- b) Accompany the object code with a copy of the GNU GPL and this license- document.-- 4. Combined Works.-- You may convey a Combined Work under terms of your choice that,-taken together, effectively do not restrict modification of the-portions of the Library contained in the Combined Work and reverse-engineering for debugging such modifications, if you also do each of-the following:-- a) Give prominent notice with each copy of the Combined Work that- the Library is used in it and that the Library and its use are- covered by this License.-- b) Accompany the Combined Work with a copy of the GNU GPL and this license- document.-- c) For a Combined Work that displays copyright notices during- execution, include the copyright notice for the Library among- these notices, as well as a reference directing the user to the- copies of the GNU GPL and this license document.-- d) Do one of the following:-- 0) Convey the Minimal Corresponding Source under the terms of this- License, and the Corresponding Application Code in a form- suitable for, and under terms that permit, the user to- recombine or relink the Application with a modified version of- the Linked Version to produce a modified Combined Work, in the- manner specified by section 6 of the GNU GPL for conveying- Corresponding Source.-- 1) Use a suitable shared library mechanism for linking with the- Library. A suitable mechanism is one that (a) uses at run time- a copy of the Library already present on the user's computer- system, and (b) will operate properly with a modified version- of the Library that is interface-compatible with the Linked- Version.-- e) Provide Installation Information, but only if you would otherwise- be required to provide such information under section 6 of the- GNU GPL, and only to the extent that such information is- necessary to install and execute a modified version of the- Combined Work produced by recombining or relinking the- Application with a modified version of the Linked Version. (If- you use option 4d0, the Installation Information must accompany- the Minimal Corresponding Source and Corresponding Application- Code. If you use option 4d1, you must provide the Installation- Information in the manner specified by section 6 of the GNU GPL- for conveying Corresponding Source.)-- 5. Combined Libraries.-- You may place library facilities that are a work based on the-Library side by side in a single library together with other library-facilities that are not Applications and are not covered by this-License, and convey such a combined library under terms of your-choice, if you do both of the following:-- a) Accompany the combined library with a copy of the same work based- on the Library, uncombined with any other library facilities,- conveyed under the terms of this License.-- b) Give prominent notice with the combined library that part of it- is a work based on the Library, and explaining where to find the- accompanying uncombined form of the same work.-- 6. Revised Versions of the GNU Lesser General Public License.-- The Free Software Foundation may publish revised and/or new versions-of the GNU Lesser General Public License from time to time. Such new-versions will be similar in spirit to the present version, but may-differ in detail to address new problems or concerns.-- Each version is given a distinguishing version number. If the-Library as you received it specifies that a certain numbered version-of the GNU Lesser General Public License "or any later version"-applies to it, you have the option of following the terms and-conditions either of that published version or of any later version-published by the Free Software Foundation. If the Library as you-received it does not specify a version number of the GNU Lesser-General Public License, you may choose any version of the GNU Lesser-General Public License ever published by the Free Software Foundation.-- If the Library as you received it specifies that a proxy can decide-whether future versions of the GNU Lesser General Public License shall-apply, that proxy's public statement of acceptance of any version is-permanent authorization for you to choose that version for the-Library.
Makefile view
@@ -13,13 +13,13 @@ $(NULL) MANPAGE = bustle-pcap.1-DESKTOP_FILE = bustle.desktop-APPDATA_FILE = bustle.appdata.xml+DESKTOP_FILE = org.freedesktop.Bustle.desktop+APPDATA_FILE = org.freedesktop.Bustle.appdata.xml ICON_SIZES = 16x16 22x22 32x32 48x48 256x256 ICONS = \- data/icons/scalable/bustle.svg \- data/icons/scalable/bustle-symbolic.svg \- $(foreach size,$(ICON_SIZES),data/icons/$(size)/bustle.png) \+ data/icons/scalable/org.freedesktop.Bustle.svg \+ data/icons/scalable/org.freedesktop.Bustle-symbolic.svg \+ $(foreach size,$(ICON_SIZES),data/icons/$(size)/org.freedesktop.Bustle.png) \ $(NULL) all: $(BINARIES) $(MANPAGE) $(DESKTOP_FILE) $(APPDATA_FILE) $(ICONS)@@ -31,12 +31,20 @@ bustle-pcap.1: dist/build/bustle-pcap help2man --output=$@ --no-info --name='Generate D-Bus logs for bustle' $< -bustle.desktop: data/bustle.desktop.in+org.freedesktop.Bustle.desktop: data/org.freedesktop.Bustle.desktop.in LC_ALL=C intltool-merge -d -u po $< $@ -bustle.appdata.xml: data/bustle.appdata.xml.in+org.freedesktop.Bustle.appdata.xml: data/org.freedesktop.Bustle.appdata.xml.in LC_ALL=C intltool-merge -x -u po $< $@ +# https://github.com/flathub/flathub/wiki/Review-Guidelines+validate-metadata: org.freedesktop.Bustle.desktop org.freedesktop.Bustle.appdata.xml+ desktop-file-validate org.freedesktop.Bustle.desktop+ appstream-util validate-relax org.freedesktop.Bustle.appdata.xml+ # This is only a SHOULD. Screenshots currently violate it because they+ # are hidpi.+ appstream-util validate org.freedesktop.Bustle.appdata.xml || true+ dist/build/bustle-pcap: $(BUSTLE_PCAP_SOURCES) $(BUSTLE_PCAP_HEADERS) @mkdir -p dist/build $(CC) -Idist/build/autogen $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) \@@ -61,9 +69,9 @@ mkdir -p $(DATADIR)/appdata cp $(APPDATA_FILE) $(DATADIR)/appdata $(foreach size,$(ICON_SIZES),mkdir -p $(DATADIR)/icons/hicolor/$(size)/apps; )- $(foreach size,$(ICON_SIZES),cp data/icons/$(size)/bustle.png $(DATADIR)/icons/hicolor/$(size)/apps; )+ $(foreach size,$(ICON_SIZES),cp data/icons/$(size)/org.freedesktop.Bustle.png $(DATADIR)/icons/hicolor/$(size)/apps; ) mkdir -p $(DATADIR)/icons/hicolor/scalable/apps- cp data/icons/scalable/bustle-symbolic.svg $(DATADIR)/icons/hicolor/scalable/apps+ cp data/icons/scalable/org.freedesktop.Bustle-symbolic.svg $(DATADIR)/icons/hicolor/scalable/apps $(MAKE) update-icon-cache uninstall:@@ -71,8 +79,8 @@ rm -f $(MAN1DIR)/$(MANPAGE) rm -f $(DATADIR)/applications/$(DESKTOP_FILE) rm -f $(DATADIR)/appdata/$(APPDATA_FILE)- $(foreach size,$(ICON_SIZES),rm -f $(DATADIR)/icons/hicolor/$(size)/apps/bustle.png)- rm -f $(DATADIR)/icons/hicolor/scalable/apps/bustle-symbolic.svg+ $(foreach size,$(ICON_SIZES),rm -f $(DATADIR)/icons/hicolor/$(size)/apps/org.freedesktop.Bustle.png)+ rm -f $(DATADIR)/icons/hicolor/scalable/apps/org.freedesktop.Bustle-symbolic.svg $(MAKE) update-icon-cache clean:@@ -92,28 +100,13 @@ echo "*** $(gtk_update_icon_cache)"; \ fi -# Binary tarball stuff. Please ignore this unless you're making a release.-TOP := $(shell pwd)-TARBALL_PARENT_DIR := dist-TARBALL_DIR := $(shell git describe --tags)-$(shell gcc -dumpmachine | perl -pe 's/-.*//')-TARBALL_FULL_DIR := $(TARBALL_PARENT_DIR)/$(TARBALL_DIR)-TARBALL := $(TARBALL_DIR).tar.bz2-maintainer-binary-tarball: all- mkdir -p $(TARBALL_FULL_DIR)- cabal install --prefix=$(TOP)/$(TARBALL_FULL_DIR) \- --datadir=$(TOP)/$(TARBALL_FULL_DIR) --datasubdir=.- cp bustle.sh README.md $(TARBALL_FULL_DIR)- perl -pi -e 's{^ bustle-pcap}{ ./bustle-pcap};' \- -e 's{^ bustle} { ./bustle.sh};' \- $(TARBALL_FULL_DIR)/README.md- cp $(BINARIES) $(MANPAGE) $(DESKTOP_FILE) $(APPDATA_FILE) $(TARBALL_FULL_DIR)- mkdir -p $(TARBALL_FULL_DIR)/lib- cp LICENSE.bundled-libraries $(TARBALL_FULL_DIR)/lib- ./ldd-me-up.sh $(TARBALL_FULL_DIR)/bin/bustle \- | xargs -I XXX cp XXX $(TARBALL_FULL_DIR)/lib- cd $(TARBALL_PARENT_DIR) && tar cjf $(TARBALL) $(TARBALL_DIR)- rm -r $(TARBALL_FULL_DIR)+# Flatpak stuff+org.freedesktop.Bustle.flatpak: flatpak/org.freedesktop.Bustle.json+ rm -rf _build+ flatpak-builder --repo=repo -v _build $<+ flatpak build-bundle repo org.freedesktop.Bustle.flatpak org.freedesktop.Bustle +# Maintainer stuff maintainer-update-messages-pot: find Bustle -name '*.hs' -print0 | xargs -0 hgettext -k __ -o po/messages.pot @@ -122,9 +115,7 @@ cabal sdist git tag -s -m 'Bustle '`cat dist/build/autogen/version.txt` \ bustle-`cat dist/build/autogen/version.txt`- make maintainer-binary-tarball gpg --detach-sign --armor dist/bustle-`cat dist/build/autogen/version.txt`.tar.gz- gpg --detach-sign --armor dist/bustle-`cat dist/build/autogen/version.txt`-x86_64.tar.bz2 .travis.yml: bustle.cabal make_travis_yml.hs ./make_travis_yml.hs $< libpcap-dev libgtk-3-dev libcairo2-dev happy-1.19.4 alex-3.1.3 > $@
NEWS.md view
@@ -1,3 +1,22 @@+Bustle 0.6.1 (2017-07-27)+-------------------------++* Trivial fix to bustle.cabal.++Bustle 0.6.0 (2017-07-26)+-------------------------++* Fix leaks in bustle-pcap.c. (Jonny Lamb, <https://bugs.freedesktop.org/show_bug.cgi?id=93904>)+* Add a Flatpak build manifest.+* Don't crash if reading a file with libpcap fails. <https://bugs.freedesktop.org/show_bug.cgi?id=100220>+* Note that libpcap 1.8.0 and 1.8.1 (and hence Bustle) will still refuse to read log files generated by Bustle. This is fixed in libpcap Git by commits [1a6b088](https://github.com/the-tcpdump-group/libpcap/commit/1a6b088a88886eac782008f37a7219a32b86da45) and [42c3865](https://github.com/the-tcpdump-group/libpcap/commit/42c3865d71a3d3ad3fc61ee382ad3b5113d40552).+* Add a Flatpak build manifest, which bundles a new-enough Git snapshot of libpcap.+* Remove scripts to build artisan binary tarballs.+* Drop support for pre-0.3.1 text-only log files. If you still have any valuable logs from before 2012, I can only apologise.+* Add a Cabal flag to disable hgettext support. Since there are no non-English translations, the only user-visible impact is that some ‘curly quotes’ in three dialog boxes become 'legacy quotes'.+* Rename bustle.desktop (etc.) to org.freedesktop.Bustle.desktop (etc.).+* Fix a crash when reading logs generated with `dbus-monitor --pcap`.+ Bustle 0.5.4 (2016-01-27) -------------------------
bustle.cabal view
@@ -1,15 +1,15 @@ Name: bustle Category: Network, Desktop-Version: 0.5.4-Cabal-Version: >= 1.18-Tested-With: GHC >= 7.8.4 && < 7.11+Version: 0.6.1+Cabal-Version: >= 1.24+Tested-With: GHC == 7.8.*, GHC == 7.10.* Synopsis: Draw sequence diagrams of D-Bus traffic Description: Draw sequence diagrams of D-Bus traffic License: OtherLicense License-file: LICENSE Author: Will Thompson <will@willthompson.co.uk> Maintainer: Will Thompson <will@willthompson.co.uk>-Homepage: http://www.freedesktop.org/wiki/Software/Bustle/+Homepage: https://www.freedesktop.org/wiki/Software/Bustle/ Data-files: data/dfeet-method.png, data/dfeet-signal.png, data/bustle.ui,@@ -31,11 +31,6 @@ run-uninstalled.sh , Test/data/log-with-h.bustle - -- Stuff for the stupid binary tarballs- , bustle.sh- , ldd-me-up.sh- , LICENSE.bundled-libraries- -- inlined copy of the Cabal hooks from hgettext; -- see https://github.com/fpco/stackage/issues/746 , GetText.hs@@ -45,25 +40,37 @@ , po/*.pot -- intl bits- , data/bustle.appdata.xml.in- , data/bustle.desktop.in+ , data/org.freedesktop.Bustle.appdata.xml.in+ , data/org.freedesktop.Bustle.desktop.in -- icons- , data/icons/16x16/bustle.png- , data/icons/22x22/bustle.png- , data/icons/32x32/bustle.png- , data/icons/48x48/bustle.png- , data/icons/256x256/bustle.png- , data/icons/scalable/bustle.svg- , data/icons/scalable/bustle-symbolic.svg+ , data/icons/16x16/org.freedesktop.Bustle.png+ , data/icons/22x22/org.freedesktop.Bustle.png+ , data/icons/32x32/org.freedesktop.Bustle.png+ , data/icons/48x48/org.freedesktop.Bustle.png+ , data/icons/256x256/org.freedesktop.Bustle.png+ , data/icons/scalable/org.freedesktop.Bustle.svg+ , data/icons/scalable/org.freedesktop.Bustle-symbolic.svg x-gettext-po-files: po/*.po x-gettext-domain-name: bustle +custom-setup+ setup-depends:+ base >= 4 && < 5,+ Cabal >= 1.24,+ filepath,+ directory,+ process+ Source-Repository head Type: git Location: git://anongit.freedesktop.org/bustle +Flag hgettext+ Description: Enable translations. Since there are no translations this is currently rather pointless.+ Default: True+ Flag InteractiveTests Description: Build interactive test programs Default: False@@ -72,19 +79,11 @@ Description: Build with the multi-threaded runtime Default: True -Flag WithGtk2HsBuildTools- Description: Build-depend on gtk2hs-buildtools. They aren't (currently)- used to build Bustle itself but are needed to build- dependencies like gtk3, which for whatever reason do not- Build-Depend on the tools.- Default: False- Executable bustle Main-is: Bustle.hs Other-modules: Bustle.Application.Monad , Bustle.Diagram , Bustle.Loader- , Bustle.Loader.OldSkool , Bustle.Loader.Pcap , Bustle.Marquee , Bustle.Monitor@@ -103,7 +102,6 @@ , Bustle.UI.OpenTwoDialog , Bustle.UI.Recorder , Bustle.UI.Util- , Bustle.Upgrade , Bustle.Util , Bustle.VariantFormatter default-language: Haskell2010@@ -124,18 +122,16 @@ , glib , gio , gtk3- , hgettext >= 0.1.5 , mtl >= 2.2.1 , pango- , parsec , pcap , process- , setlocale , text , time-- if flag(WithGtk2HsBuildTools)- Build-Depends: gtk2hs-buildtools+ if flag(hgettext)+ Build-Depends: hgettext >= 0.1.5+ , setlocale+ cpp-options: -DUSE_HGETTEXT Executable test-monitor if flag(InteractiveTests)@@ -161,14 +157,12 @@ -- 0.13.6 doesn't compile with GCC 5: https://github.com/gtk2hs/gtk2hs/issues/104 , gtk3 >= 0.13.7 , glib- , hgettext , mtl , pango- , parsec , pcap- , setlocale , text + Executable dump-messages if flag(InteractiveTests) buildable: True@@ -221,8 +215,6 @@ , mtl , text , pango- , hgettext- , setlocale , test-framework , test-framework-hunit , HUnit
− bustle.sh
@@ -1,17 +0,0 @@-#!/bin/sh-set -e--root="$(dirname $(readlink -f ${0}))"--bustle_datadir="${root}"-export bustle_datadir--bustle_localedir="${root}/locale"-export bustle_localedir--LD_LIBRARY_PATH="${root}/lib:${LD_LIBRARY_PATH}"-export LD_LIBRARY_PATH--bustle="${root}"/bin/bustle--exec $bustle "${@}"
c-sources/bustle-pcap.c view
@@ -109,6 +109,7 @@ gchar *usage; GError *error = NULL; gboolean ret;+ gint exit_status = -1; context = g_option_context_new ("FILENAME"); g_option_context_add_main_entries (context, entries, NULL);@@ -121,7 +122,9 @@ { fprintf (stderr, "%s\n", error->message); fprintf (stderr, "%s", usage);- exit (2);++ exit_status = 2;+ goto out; } if (version)@@ -130,13 +133,17 @@ fprintf (stdout, "Copyright 2011 Will Thompson <will@willthompson.co.uk>\n"); fprintf (stdout, "This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"); fprintf (stdout, "Written by Will Thompson <will@willthompson.co.uk>\n");- exit (0);++ exit_status = 0;+ goto out; } else if (session_specified && system_specified) { fprintf (stderr, "You may only specify one of --session and --system\n"); fprintf (stderr, "%s", usage);- exit (2);++ exit_status = 2;+ goto out; } else if (system_specified) {@@ -153,10 +160,21 @@ { fprintf (stderr, "You must specify exactly one output filename\n"); fprintf (stderr, "%s", usage);- exit (2);++ exit_status = 2;+ goto out; } - *filename = filenames[0];+ *filename = g_strdup (filenames[0]);++out:+ g_free (usage);+ g_strfreev (filenames);+ g_option_context_free (context);+ g_clear_error (&error);++ if (exit_status > -1)+ exit (exit_status); } static void@@ -196,6 +214,7 @@ if (pcap == NULL) { fprintf (stderr, "%s", error->message);+ g_clear_error (&error); exit (1); } @@ -214,6 +233,7 @@ bustle_pcap_monitor_stop (pcap); g_object_unref (pcap);+ g_free (filename); return 0; }
data/OpenTwoDialog.ui view
@@ -8,7 +8,7 @@ <property name="resizable">False</property> <property name="modal">True</property> <property name="type_hint">dialog</property>- <property name="icon-name">bustle</property>+ <property name="icon-name">org.freedesktop.Bustle</property> <child internal-child="vbox"> <object class="GtkBox" id="dialog-vbox1"> <property name="visible">True</property>
− data/bustle.appdata.xml.in
@@ -1,30 +0,0 @@-<?xml version="1.0" encoding="UTF-8"?>-<!-- Copyright 2014 Philip Withnall <philip@tecnocode.co.uk> -->-<application>- <id type="desktop">bustle.desktop</id>- <metadata_license>CC-BY-SA-3.0</metadata_license>- <project_license>LGPL-2.1+ and GPL-2.0+ and GPL-3.0</project_license>- <description>- <!-- Translators: These are the application description paragraphs in the AppData file. -->- <_p>Bustle draws sequence diagrams of D-Bus activity.</_p>- <_p>It shows signal emissions, method calls and their- corresponding returns, with time stamps for each individual- event and the duration of each method call. This can help- you check for unwanted D-Bus traffic, and pinpoint why your- D-Bus-based application isn't performing as well as you- like. It also provides statistics like signal frequencies- and average method call times.</_p>- </description>- <screenshots>- <screenshot type="default">- <!-- Translators: This should be the URI of a 2400×1350, pixel screenshot of Bustle in your language. If you can't take a screenshot, leave the string as the English screenshot. -->- <_image type="source">https://wiki.freedesktop.org/www/Software/Bustle/bustle-0.5.2-1.png</_image>- </screenshot>- <screenshot>- <!-- Translators: This should be the URI of a 2400×1350, pixel screenshot of Bustle in your language. If you can't take a screenshot, leave the string as the English screenshot. -->- <_image type="source">https://wiki.freedesktop.org/www/Software/Bustle/bustle-0.5.2-2.png</_image>- </screenshot>- </screenshots>- <url type="homepage">http://willthompson.co.uk/bustle/</url>- <updatecontact>philip_at_tecnocode.co.uk</updatecontact>-</application>
− data/bustle.desktop.in
@@ -1,10 +0,0 @@-[Desktop Entry]-_Name=Bustle-_Comment=Draw sequence diagrams of D-Bus activity-Exec=bustle-Icon=bustle-Terminal=false-Type=Application-Categories=GTK;Development;Debugger;Profiling;-StartupNotify=true-_Keywords=debug;profile;d-bus;dbus;sequence;monitor;
data/bustle.ui view
@@ -5,7 +5,7 @@ <property name="can_focus">False</property> <property name="default_width">900</property> <property name="default_height">700</property>- <property name="icon-name">bustle</property>+ <property name="icon-name">org.freedesktop.Bustle</property> <property name="title" translatable="yes">Bustle</property> <child type="titlebar"> <object class="GtkHeaderBar" id="header">
− data/icons/16x16/bustle.png
binary file changed (519 → absent bytes)
+ data/icons/16x16/org.freedesktop.Bustle.png view
binary file changed (absent → 519 bytes)
− data/icons/22x22/bustle.png
binary file changed (716 → absent bytes)
+ data/icons/22x22/org.freedesktop.Bustle.png view
binary file changed (absent → 716 bytes)
− data/icons/256x256/bustle.png
binary file changed (8774 → absent bytes)
+ data/icons/256x256/org.freedesktop.Bustle.png view
binary file changed (absent → 8774 bytes)
− data/icons/32x32/bustle.png
binary file changed (1049 → absent bytes)
+ data/icons/32x32/org.freedesktop.Bustle.png view
binary file changed (absent → 1049 bytes)
− data/icons/48x48/bustle.png
binary file changed (1669 → absent bytes)
+ data/icons/48x48/org.freedesktop.Bustle.png view
binary file changed (absent → 1669 bytes)
− data/icons/scalable/bustle-symbolic.svg
@@ -1,104 +0,0 @@-<?xml version="1.0" encoding="UTF-8" standalone="no"?>-<!-- Created with Inkscape (http://www.inkscape.org/) -->--<svg- xmlns:dc="http://purl.org/dc/elements/1.1/"- xmlns:cc="http://creativecommons.org/ns#"- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"- xmlns:svg="http://www.w3.org/2000/svg"- xmlns="http://www.w3.org/2000/svg"- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"- width="600"- height="600"- id="svg2"- version="1.1"- inkscape:version="0.91 r13725"- sodipodi:docname="bustle-symbolic.svg">- <defs- id="defs4" />- <sodipodi:namedview- id="base"- pagecolor="#ffffff"- bordercolor="#666666"- borderopacity="1.0"- inkscape:pageopacity="0.0"- inkscape:pageshadow="2"- inkscape:zoom="1.18"- inkscape:cx="296.02826"- inkscape:cy="407.83651"- inkscape:document-units="px"- inkscape:current-layer="layer1"- showgrid="false"- inkscape:window-width="1440"- inkscape:window-height="824"- inkscape:window-x="0"- inkscape:window-y="27"- inkscape:window-maximized="1"- fit-margin-top="0"- fit-margin-left="0"- fit-margin-right="0"- fit-margin-bottom="0"- showguides="true"- inkscape:guide-bbox="true">- <inkscape:grid- type="xygrid"- id="grid3834"- empspacing="5"- visible="true"- enabled="true"- snapvisiblegridlinesonly="true"- originx="-56.941089px"- originy="-465.18127px" />- </sodipodi:namedview>- <metadata- id="metadata7">- <rdf:RDF>- <cc:Work- rdf:about="">- <dc:format>image/svg+xml</dc:format>- <dc:type- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />- <dc:title></dc:title>- </cc:Work>- </rdf:RDF>- </metadata>- <g- inkscape:label="Layer 1"- inkscape:groupmode="layer"- id="layer1"- transform="translate(-56.941089,12.819102)">- <path- style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#dedede;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:57.94400024;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:5.19999981;stroke-dasharray:115.88800049, 57.94400024;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"- d="m 349.58008,-12.728516 c -19.78034,0.499891 -39.51808,2.890348 -58.82031,7.2539096 4.10872,18.8723954 8.21745,37.7447914 12.32617,56.6171874 33.74925,-7.665785 69.12626,-7.971229 103.02539,-1.0293 3.71633,-18.821141 8.65912,-38.435398 11.61328,-56.7636714 -22.39128,-4.5980686 -45.29405,-6.6135646 -68.14453,-6.0781256 z m 105.80078,78.716797 c 31.47813,14.008295 59.87299,34.867319 82.70703,60.664059 14.44727,-12.81901 28.89453,-25.63802 43.3418,-38.457028 C 553.05494,56.141376 517.74279,30.253699 478.60547,12.900391 470.86393,30.596354 463.1224,48.292318 455.38086,65.988281 Z M 227.18164,16.626953 C 189.51961,34.723972 155.71119,60.77538 128.625,92.591797 c 14.7487,12.470703 29.49739,24.941413 44.24609,37.412113 22.37137,-26.20404 50.37565,-47.593699 81.60157,-62.169926 -8.17123,-17.501302 -16.34245,-35.002604 -24.51368,-52.503906 -0.92578,0.432292 -1.85156,0.864583 -2.77734,1.296875 z M 568.0293,168.66016 c 16.99699,30.09909 27.33124,63.91871 30.12695,98.36914 19.23893,-1.70833 38.47787,-3.41667 57.7168,-5.125 -3.5014,-42.55686 -16.29754,-84.32012 -37.26568,-121.51953 -16.85936,9.42513 -33.71871,18.85026 -50.57807,28.27539 z M 89.939453,150.27539 c -18.701268,36.38678 -29.811885,76.6502 -32.357428,117.48438 19.276042,1.22135 38.552083,2.44271 57.828125,3.66406 2.15345,-34.4883 11.88032,-68.47463 28.29492,-98.88281 -17.08268,-9.01302 -34.16536,-18.02605 -51.248045,-27.03907 -0.839191,1.59115 -1.678381,3.18229 -2.517572,4.77344 z"- id="path4626"- inkscape:connector-curvature="0" />- <circle- style="fill:none;stroke:#bebebe;stroke-width:75.08624021;stroke-miterlimit:5.19999981;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"- id="path2985-7"- cx="381.42856"- cy="433.79074"- transform="matrix(0.50880116,0,0,0.55776489,164.13818,45.848517)"- ry="118.57143"- rx="130" />- <path- style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:5.19999981;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"- d="m 430,220 30,55 -85,0 0,50 85,0 -30,55 170,-80 z"- transform="translate(56.941089,-12.819102)"- id="path3757-7"- inkscape:connector-curvature="0"- sodipodi:nodetypes="cccccccc" />- <path- style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:5.19999981;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"- d="m 170,220 -170,80 170,80 -30,-55 85,0 0,-50 -85,0 z"- transform="translate(56.941089,-12.819102)"- id="path3761-7"- inkscape:connector-curvature="0"- sodipodi:nodetypes="cccccccc" />- <path- style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:34.40008163;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:5.19999981;stroke-dasharray:none;stroke-dashoffset:94.40000153;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"- d="m 356.94141,187.18164 c -55.02475,0 -100.00001,44.97526 -100,100 -1e-5,55.02475 44.97525,100 100,100 55.02475,0 100,-44.97525 100,-100 0,-55.02475 -44.97525,-100 -100,-100 z m 0,34.39844 c 36.43357,0 65.59961,29.168 65.59961,65.60156 0,36.43356 -29.16604,65.59961 -65.59961,65.59961 -36.43357,0 -65.59961,-29.16605 -65.59961,-65.59961 0,-36.43356 29.16604,-65.60156 65.59961,-65.60156 z"- id="path4619"- inkscape:connector-curvature="0" />- </g>-</svg>
− data/icons/scalable/bustle.svg
@@ -1,253 +0,0 @@-<?xml version="1.0" encoding="UTF-8" standalone="no"?>-<!-- Created with Inkscape (http://www.inkscape.org/) -->--<svg- xmlns:dc="http://purl.org/dc/elements/1.1/"- xmlns:cc="http://creativecommons.org/ns#"- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"- xmlns:svg="http://www.w3.org/2000/svg"- xmlns="http://www.w3.org/2000/svg"- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"- width="605.06"- height="605.06"- id="svg2"- version="1.1"- inkscape:version="0.48.4 r9939"- sodipodi:docname="bustle.svg">- <defs- id="defs4">- <inkscape:path-effect- is_visible="true"- id="path-effect4126"- effect="spiro" />- <inkscape:path-effect- is_visible="true"- id="path-effect4123"- effect="spiro" />- <inkscape:path-effect- is_visible="true"- id="path-effect4120"- effect="spiro" />- <inkscape:path-effect- is_visible="true"- id="path-effect4117"- effect="spiro" />- <inkscape:path-effect- effect="spiro"- id="path-effect3770"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3763"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3759"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3770-1"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3770-3"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3759-7"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3763-2"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3770-6"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3770-3-1"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3770-6-2"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3763-2-7"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3770-3-1-2"- is_visible="true" />- <inkscape:path-effect- effect="spiro"- id="path-effect3759-7-2"- is_visible="true" />- <filter- id="filter4104"- inkscape:label="Chalk and sponge"- inkscape:menu="Distort"- inkscape:menu-tooltip="Low turbulence gives sponge look and high turbulence chalk"- width="1.6"- height="2"- y="-0.5"- x="-0.30000001"- color-interpolation-filters="sRGB">- <feTurbulence- id="feTurbulence4106"- baseFrequency="0.4"- type="fractalNoise"- seed="0"- numOctaves="5"- result="result1" />- <feOffset- id="feOffset4108"- dx="-5"- dy="-5"- result="result2" />- <feDisplacementMap- id="feDisplacementMap4110"- in2="result1"- xChannelSelector="R"- yChannelSelector="G"- scale="30"- in="SourceGraphic" />- </filter>- <filter- id="filter4183"- inkscape:label="Chalk and sponge"- inkscape:menu="Distort"- inkscape:menu-tooltip="Low turbulence gives sponge look and high turbulence chalk"- width="1.6"- height="2"- y="-0.5"- x="-0.30000001"- color-interpolation-filters="sRGB">- <feTurbulence- id="feTurbulence4185"- baseFrequency="0.4"- type="fractalNoise"- seed="0"- numOctaves="5"- result="result1" />- <feOffset- id="feOffset4187"- dx="-5"- dy="-5"- result="result2" />- <feDisplacementMap- id="feDisplacementMap4189"- in2="result1"- xChannelSelector="R"- yChannelSelector="G"- scale="30"- in="SourceGraphic" />- </filter>- <inkscape:path-effect- is_visible="true"- id="path-effect4117-2"- effect="spiro" />- </defs>- <sodipodi:namedview- id="base"- pagecolor="#ffffff"- bordercolor="#666666"- borderopacity="1.0"- inkscape:pageopacity="0.0"- inkscape:pageshadow="2"- inkscape:zoom="0.59"- inkscape:cx="351.05408"- inkscape:cy="216.30891"- inkscape:document-units="px"- inkscape:current-layer="layer1"- showgrid="false"- inkscape:window-width="1388"- inkscape:window-height="833"- inkscape:window-x="50"- inkscape:window-y="223"- inkscape:window-maximized="0"- fit-margin-top="0"- fit-margin-left="0"- fit-margin-right="0"- fit-margin-bottom="0">- <inkscape:grid- type="xygrid"- id="grid3834"- empspacing="5"- visible="true"- enabled="true"- snapvisiblegridlinesonly="true"- originx="-56.941089px"- originy="-465.18127px" />- </sodipodi:namedview>- <metadata- id="metadata7">- <rdf:RDF>- <cc:Work- rdf:about="">- <dc:format>image/svg+xml</dc:format>- <dc:type- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />- <dc:title />- </cc:Work>- </rdf:RDF>- </metadata>- <g- inkscape:label="Layer 1"- inkscape:groupmode="layer"- id="layer1"- transform="translate(-56.941089,17.879098)">- <path- style="fill:none;stroke:#74b674;stroke-width:27.59247017;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:82.77741051, 27.59247017;stroke-dashoffset:27.59247017"- d="m 70.761814,288.36996 c -0.01207,-1.2669 -0.02449,-2.53589 -0.02449,-3.80671 0,-159.41492 129.271656,-288.6461129 288.736206,-288.6461129 159.46457,0 288.73621,129.2311929 288.73621,288.6461129 l 0,0 0,0 c 0,1.27082 -0.009,2.53969 -0.0245,3.80671"- id="path3802-8"- inkscape:connector-curvature="0" />- <path- sodipodi:type="arc"- style="fill:none;stroke:#000000;stroke-width:34.42315674;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"- id="path2985-7"- sodipodi:cx="381.42856"- sodipodi:cy="433.79074"- sodipodi:rx="130"- sodipodi:ry="118.57143"- d="m 511.42856,433.79074 a 130,118.57143 0 1 1 -260,0 130,118.57143 0 1 1 260,0 z"- transform="matrix(0.50880116,0,0,0.55776489,164.13818,45.848517)"- />- <path- style="fill:none;stroke:#000000;stroke-width:18.45480156;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"- d="m 417.41556,287.80173 211.44171,0"- id="path3757-7"- inkscape:path-effect="#path-effect3759-7"- inkscape:original-d="m 417.41556,287.80173 211.44171,0"- inkscape:connector-curvature="0"- />- <path- style="fill:none;stroke:#000000;stroke-width:18.17925262;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"- d="m 294.08479,287.66116 -211.718251,0.2812"- id="path3761-7"- inkscape:path-effect="#path-effect3763-2"- inkscape:original-d="m 294.08479,287.66116 -211.718251,0.2812"- inkscape:connector-curvature="0"- />- <path- style="fill:none;stroke:#000000;stroke-width:18.33793068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"- d="M 200.97285,226.67532 77.897224,289.6408 200.97285,348.92819"- id="path3768-2"- inkscape:path-effect="#path-effect3770-6"- inkscape:original-d="M 200.97285,226.67532 77.897224,289.6408 200.97285,348.92819"- inkscape:connector-curvature="0"- sodipodi:nodetypes="ccc"- />- <path- style="fill:none;stroke:#000000;stroke-width:18.33793068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"- d="M 520.66838,225.39683 643.74401,288.36232 520.66838,347.6497"- id="path3768-9-7"- inkscape:path-effect="#path-effect3770-3-1"- inkscape:original-d="M 520.66838,225.39683 643.74401,288.36232 520.66838,347.6497"- inkscape:connector-curvature="0"- sodipodi:nodetypes="ccc"- />- </g>-</svg>
+ data/icons/scalable/org.freedesktop.Bustle-symbolic.svg view
@@ -0,0 +1,104 @@+<?xml version="1.0" encoding="UTF-8" standalone="no"?>+<!-- Created with Inkscape (http://www.inkscape.org/) -->++<svg+ xmlns:dc="http://purl.org/dc/elements/1.1/"+ xmlns:cc="http://creativecommons.org/ns#"+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"+ xmlns:svg="http://www.w3.org/2000/svg"+ xmlns="http://www.w3.org/2000/svg"+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"+ width="600"+ height="600"+ id="svg2"+ version="1.1"+ inkscape:version="0.91 r13725"+ sodipodi:docname="bustle-symbolic.svg">+ <defs+ id="defs4" />+ <sodipodi:namedview+ id="base"+ pagecolor="#ffffff"+ bordercolor="#666666"+ borderopacity="1.0"+ inkscape:pageopacity="0.0"+ inkscape:pageshadow="2"+ inkscape:zoom="1.18"+ inkscape:cx="296.02826"+ inkscape:cy="407.83651"+ inkscape:document-units="px"+ inkscape:current-layer="layer1"+ showgrid="false"+ inkscape:window-width="1440"+ inkscape:window-height="824"+ inkscape:window-x="0"+ inkscape:window-y="27"+ inkscape:window-maximized="1"+ fit-margin-top="0"+ fit-margin-left="0"+ fit-margin-right="0"+ fit-margin-bottom="0"+ showguides="true"+ inkscape:guide-bbox="true">+ <inkscape:grid+ type="xygrid"+ id="grid3834"+ empspacing="5"+ visible="true"+ enabled="true"+ snapvisiblegridlinesonly="true"+ originx="-56.941089px"+ originy="-465.18127px" />+ </sodipodi:namedview>+ <metadata+ id="metadata7">+ <rdf:RDF>+ <cc:Work+ rdf:about="">+ <dc:format>image/svg+xml</dc:format>+ <dc:type+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />+ <dc:title></dc:title>+ </cc:Work>+ </rdf:RDF>+ </metadata>+ <g+ inkscape:label="Layer 1"+ inkscape:groupmode="layer"+ id="layer1"+ transform="translate(-56.941089,12.819102)">+ <path+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#dedede;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:57.94400024;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:5.19999981;stroke-dasharray:115.88800049, 57.94400024;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"+ d="m 349.58008,-12.728516 c -19.78034,0.499891 -39.51808,2.890348 -58.82031,7.2539096 4.10872,18.8723954 8.21745,37.7447914 12.32617,56.6171874 33.74925,-7.665785 69.12626,-7.971229 103.02539,-1.0293 3.71633,-18.821141 8.65912,-38.435398 11.61328,-56.7636714 -22.39128,-4.5980686 -45.29405,-6.6135646 -68.14453,-6.0781256 z m 105.80078,78.716797 c 31.47813,14.008295 59.87299,34.867319 82.70703,60.664059 14.44727,-12.81901 28.89453,-25.63802 43.3418,-38.457028 C 553.05494,56.141376 517.74279,30.253699 478.60547,12.900391 470.86393,30.596354 463.1224,48.292318 455.38086,65.988281 Z M 227.18164,16.626953 C 189.51961,34.723972 155.71119,60.77538 128.625,92.591797 c 14.7487,12.470703 29.49739,24.941413 44.24609,37.412113 22.37137,-26.20404 50.37565,-47.593699 81.60157,-62.169926 -8.17123,-17.501302 -16.34245,-35.002604 -24.51368,-52.503906 -0.92578,0.432292 -1.85156,0.864583 -2.77734,1.296875 z M 568.0293,168.66016 c 16.99699,30.09909 27.33124,63.91871 30.12695,98.36914 19.23893,-1.70833 38.47787,-3.41667 57.7168,-5.125 -3.5014,-42.55686 -16.29754,-84.32012 -37.26568,-121.51953 -16.85936,9.42513 -33.71871,18.85026 -50.57807,28.27539 z M 89.939453,150.27539 c -18.701268,36.38678 -29.811885,76.6502 -32.357428,117.48438 19.276042,1.22135 38.552083,2.44271 57.828125,3.66406 2.15345,-34.4883 11.88032,-68.47463 28.29492,-98.88281 -17.08268,-9.01302 -34.16536,-18.02605 -51.248045,-27.03907 -0.839191,1.59115 -1.678381,3.18229 -2.517572,4.77344 z"+ id="path4626"+ inkscape:connector-curvature="0" />+ <circle+ style="fill:none;stroke:#bebebe;stroke-width:75.08624021;stroke-miterlimit:5.19999981;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"+ id="path2985-7"+ cx="381.42856"+ cy="433.79074"+ transform="matrix(0.50880116,0,0,0.55776489,164.13818,45.848517)"+ ry="118.57143"+ rx="130" />+ <path+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:5.19999981;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"+ d="m 430,220 30,55 -85,0 0,50 85,0 -30,55 170,-80 z"+ transform="translate(56.941089,-12.819102)"+ id="path3757-7"+ inkscape:connector-curvature="0"+ sodipodi:nodetypes="cccccccc" />+ <path+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:60;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:5.19999981;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"+ d="m 170,220 -170,80 170,80 -30,-55 85,0 0,-50 -85,0 z"+ transform="translate(56.941089,-12.819102)"+ id="path3761-7"+ inkscape:connector-curvature="0"+ sodipodi:nodetypes="cccccccc" />+ <path+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:34.40008163;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:5.19999981;stroke-dasharray:none;stroke-dashoffset:94.40000153;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"+ d="m 356.94141,187.18164 c -55.02475,0 -100.00001,44.97526 -100,100 -1e-5,55.02475 44.97525,100 100,100 55.02475,0 100,-44.97525 100,-100 0,-55.02475 -44.97525,-100 -100,-100 z m 0,34.39844 c 36.43357,0 65.59961,29.168 65.59961,65.60156 0,36.43356 -29.16604,65.59961 -65.59961,65.59961 -36.43357,0 -65.59961,-29.16605 -65.59961,-65.59961 0,-36.43356 29.16604,-65.60156 65.59961,-65.60156 z"+ id="path4619"+ inkscape:connector-curvature="0" />+ </g>+</svg>
+ data/icons/scalable/org.freedesktop.Bustle.svg view
@@ -0,0 +1,253 @@+<?xml version="1.0" encoding="UTF-8" standalone="no"?>+<!-- Created with Inkscape (http://www.inkscape.org/) -->++<svg+ xmlns:dc="http://purl.org/dc/elements/1.1/"+ xmlns:cc="http://creativecommons.org/ns#"+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"+ xmlns:svg="http://www.w3.org/2000/svg"+ xmlns="http://www.w3.org/2000/svg"+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"+ width="605.06"+ height="605.06"+ id="svg2"+ version="1.1"+ inkscape:version="0.48.4 r9939"+ sodipodi:docname="bustle.svg">+ <defs+ id="defs4">+ <inkscape:path-effect+ is_visible="true"+ id="path-effect4126"+ effect="spiro" />+ <inkscape:path-effect+ is_visible="true"+ id="path-effect4123"+ effect="spiro" />+ <inkscape:path-effect+ is_visible="true"+ id="path-effect4120"+ effect="spiro" />+ <inkscape:path-effect+ is_visible="true"+ id="path-effect4117"+ effect="spiro" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3770"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3763"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3759"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3770-1"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3770-3"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3759-7"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3763-2"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3770-6"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3770-3-1"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3770-6-2"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3763-2-7"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3770-3-1-2"+ is_visible="true" />+ <inkscape:path-effect+ effect="spiro"+ id="path-effect3759-7-2"+ is_visible="true" />+ <filter+ id="filter4104"+ inkscape:label="Chalk and sponge"+ inkscape:menu="Distort"+ inkscape:menu-tooltip="Low turbulence gives sponge look and high turbulence chalk"+ width="1.6"+ height="2"+ y="-0.5"+ x="-0.30000001"+ color-interpolation-filters="sRGB">+ <feTurbulence+ id="feTurbulence4106"+ baseFrequency="0.4"+ type="fractalNoise"+ seed="0"+ numOctaves="5"+ result="result1" />+ <feOffset+ id="feOffset4108"+ dx="-5"+ dy="-5"+ result="result2" />+ <feDisplacementMap+ id="feDisplacementMap4110"+ in2="result1"+ xChannelSelector="R"+ yChannelSelector="G"+ scale="30"+ in="SourceGraphic" />+ </filter>+ <filter+ id="filter4183"+ inkscape:label="Chalk and sponge"+ inkscape:menu="Distort"+ inkscape:menu-tooltip="Low turbulence gives sponge look and high turbulence chalk"+ width="1.6"+ height="2"+ y="-0.5"+ x="-0.30000001"+ color-interpolation-filters="sRGB">+ <feTurbulence+ id="feTurbulence4185"+ baseFrequency="0.4"+ type="fractalNoise"+ seed="0"+ numOctaves="5"+ result="result1" />+ <feOffset+ id="feOffset4187"+ dx="-5"+ dy="-5"+ result="result2" />+ <feDisplacementMap+ id="feDisplacementMap4189"+ in2="result1"+ xChannelSelector="R"+ yChannelSelector="G"+ scale="30"+ in="SourceGraphic" />+ </filter>+ <inkscape:path-effect+ is_visible="true"+ id="path-effect4117-2"+ effect="spiro" />+ </defs>+ <sodipodi:namedview+ id="base"+ pagecolor="#ffffff"+ bordercolor="#666666"+ borderopacity="1.0"+ inkscape:pageopacity="0.0"+ inkscape:pageshadow="2"+ inkscape:zoom="0.59"+ inkscape:cx="351.05408"+ inkscape:cy="216.30891"+ inkscape:document-units="px"+ inkscape:current-layer="layer1"+ showgrid="false"+ inkscape:window-width="1388"+ inkscape:window-height="833"+ inkscape:window-x="50"+ inkscape:window-y="223"+ inkscape:window-maximized="0"+ fit-margin-top="0"+ fit-margin-left="0"+ fit-margin-right="0"+ fit-margin-bottom="0">+ <inkscape:grid+ type="xygrid"+ id="grid3834"+ empspacing="5"+ visible="true"+ enabled="true"+ snapvisiblegridlinesonly="true"+ originx="-56.941089px"+ originy="-465.18127px" />+ </sodipodi:namedview>+ <metadata+ id="metadata7">+ <rdf:RDF>+ <cc:Work+ rdf:about="">+ <dc:format>image/svg+xml</dc:format>+ <dc:type+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />+ <dc:title />+ </cc:Work>+ </rdf:RDF>+ </metadata>+ <g+ inkscape:label="Layer 1"+ inkscape:groupmode="layer"+ id="layer1"+ transform="translate(-56.941089,17.879098)">+ <path+ style="fill:none;stroke:#74b674;stroke-width:27.59247017;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:82.77741051, 27.59247017;stroke-dashoffset:27.59247017"+ d="m 70.761814,288.36996 c -0.01207,-1.2669 -0.02449,-2.53589 -0.02449,-3.80671 0,-159.41492 129.271656,-288.6461129 288.736206,-288.6461129 159.46457,0 288.73621,129.2311929 288.73621,288.6461129 l 0,0 0,0 c 0,1.27082 -0.009,2.53969 -0.0245,3.80671"+ id="path3802-8"+ inkscape:connector-curvature="0" />+ <path+ sodipodi:type="arc"+ style="fill:none;stroke:#000000;stroke-width:34.42315674;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"+ id="path2985-7"+ sodipodi:cx="381.42856"+ sodipodi:cy="433.79074"+ sodipodi:rx="130"+ sodipodi:ry="118.57143"+ d="m 511.42856,433.79074 a 130,118.57143 0 1 1 -260,0 130,118.57143 0 1 1 260,0 z"+ transform="matrix(0.50880116,0,0,0.55776489,164.13818,45.848517)"+ />+ <path+ style="fill:none;stroke:#000000;stroke-width:18.45480156;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"+ d="m 417.41556,287.80173 211.44171,0"+ id="path3757-7"+ inkscape:path-effect="#path-effect3759-7"+ inkscape:original-d="m 417.41556,287.80173 211.44171,0"+ inkscape:connector-curvature="0"+ />+ <path+ style="fill:none;stroke:#000000;stroke-width:18.17925262;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"+ d="m 294.08479,287.66116 -211.718251,0.2812"+ id="path3761-7"+ inkscape:path-effect="#path-effect3763-2"+ inkscape:original-d="m 294.08479,287.66116 -211.718251,0.2812"+ inkscape:connector-curvature="0"+ />+ <path+ style="fill:none;stroke:#000000;stroke-width:18.33793068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"+ d="M 200.97285,226.67532 77.897224,289.6408 200.97285,348.92819"+ id="path3768-2"+ inkscape:path-effect="#path-effect3770-6"+ inkscape:original-d="M 200.97285,226.67532 77.897224,289.6408 200.97285,348.92819"+ inkscape:connector-curvature="0"+ sodipodi:nodetypes="ccc"+ />+ <path+ style="fill:none;stroke:#000000;stroke-width:18.33793068;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"+ d="M 520.66838,225.39683 643.74401,288.36232 520.66838,347.6497"+ id="path3768-9-7"+ inkscape:path-effect="#path-effect3770-3-1"+ inkscape:original-d="M 520.66838,225.39683 643.74401,288.36232 520.66838,347.6497"+ inkscape:connector-curvature="0"+ sodipodi:nodetypes="ccc"+ />+ </g>+</svg>
+ data/org.freedesktop.Bustle.appdata.xml.in view
@@ -0,0 +1,36 @@+<?xml version="1.0" encoding="UTF-8"?>+<!-- Copyright 2014 Philip Withnall <philip@tecnocode.co.uk> -->+<application>+ <id type="desktop">org.freedesktop.Bustle.desktop</id>+ <metadata_license>CC-BY-SA-3.0</metadata_license>+ <project_license>LGPL-2.1+ and GPL-2.0+ and GPL-3.0</project_license>+ <_name>Bustle</_name>+ <_summary>Draw sequence diagrams of D-Bus activity</_summary>+ <description>+ <!-- Translators: These are the application description paragraphs in the AppData file. -->+ <_p>Bustle draws sequence diagrams of D-Bus activity.+ It shows signal emissions, method calls and their+ corresponding returns, with time stamps for each individual+ event and the duration of each method call. This can help+ you check for unwanted D-Bus traffic, and pinpoint why your+ D-Bus-based application isn't performing as well as you+ like. It also provides statistics like signal frequencies+ and average method call times.</_p>+ </description>+ <screenshots>+ <screenshot type="default">+ <!-- Translators: This should be the URI of a 2400×1350, pixel screenshot of Bustle in your language. If you can't take a screenshot, leave the string as the English screenshot. -->+ <_image type="source">https://wiki.freedesktop.org/www/Software/Bustle/bustle-0.5.2-1.png</_image>+ </screenshot>+ <screenshot>+ <!-- Translators: This should be the URI of a 2400×1350, pixel screenshot of Bustle in your language. If you can't take a screenshot, leave the string as the English screenshot. -->+ <_image type="source">https://wiki.freedesktop.org/www/Software/Bustle/bustle-0.5.2-2.png</_image>+ </screenshot>+ </screenshots>+ <url type="homepage">https://www.freedesktop.org/wiki/Software/Bustle/</url>+ <updatecontact>will_at_willthompson.co.uk</updatecontact>+ <translation type="gettext">bustle</translation>+ <provides>+ <id>bustle.desktop</id>+ </provides>+</application>
+ data/org.freedesktop.Bustle.desktop.in view
@@ -0,0 +1,10 @@+[Desktop Entry]+_Name=Bustle+_Comment=Draw sequence diagrams of D-Bus activity+Exec=bustle+Icon=org.freedesktop.Bustle+Terminal=false+Type=Application+Categories=GTK;Development;Debugger;Profiling;+StartupNotify=true+_Keywords=debug;profile;d-bus;dbus;sequence;monitor;
− ldd-me-up.sh
@@ -1,4 +0,0 @@-#!/bin/sh-set -e--ldd $1 | perl -lne 'm{(lib(?:ffi|gmp|pcap)\S+) => (\S+) } and print $2'