packages feed

bustle 0.4.7 → 0.4.8

raw patch · 22 files changed

+735/−602 lines, 22 files

Files

Bustle/Diagram.hs view
@@ -53,13 +53,13 @@  import Control.Monad.Reader -import Graphics.Rendering.Cairo+import Graphics.Rendering.Cairo (Operator(..), Render, arc, curveTo, fill, getCurrentPoint, lineTo, moveTo, newPath, paint, rectangle, restore, save, setDash, setLineWidth, setOperator, setSourceRGB, stroke) import Graphics.UI.Gtk.Cairo (cairoCreateContext, showLayout) import Graphics.Rendering.Pango.Layout import Graphics.Rendering.Pango.Font -import qualified Bustle.Markup as Markup-import Bustle.Markup (Markup)+import qualified Bustle.Marquee as Marquee+import Bustle.Marquee (Marquee) import Bustle.Util import Bustle.Types (ObjectPath, InterfaceName, MemberName) @@ -430,7 +430,7 @@     stroke      setSourceRGB 0 0 0-    l <- mkLayout (Markup.escape cap) EllipsizeNone AlignLeft+    l <- mkLayout (Marquee.escape cap) EllipsizeNone AlignLeft     (PangoRectangle _ _ textWidth _, _) <- liftIO $ layoutGetExtents l     let tx = min x2 dx + abs (x2 - dx) / 2     moveTo (if x1 > cx then tx - textWidth else tx) (y2 - 5)@@ -445,12 +445,18 @@ {-# NOINLINE font #-}  mkLayout :: (MonadIO m)-         => Markup -> EllipsizeMode -> LayoutAlignment+         => Marquee -> EllipsizeMode -> LayoutAlignment          -> m PangoLayout mkLayout s e a = liftIO $ do     ctx <- cairoCreateContext Nothing     layout <- layoutEmpty ctx-    layoutSetMarkup layout (Markup.unMarkup s)+    -- layoutSetMarkup returns the un-marked-up text. We don't care about it,+    -- but recent versions of Pango give it the type+    --    GlibString string => ... -> IO string+    -- which we need to disambiguate between Text and String. Old versions were+    --    .. -> IO String+    -- so go with that.+    layoutSetMarkup layout (Marquee.toPangoMarkup s) :: IO String     layoutSetFontDescription layout (Just font)     layoutSetEllipsize layout e     layoutSetAlignment layout a@@ -464,7 +470,7 @@  drawHeader :: [String] -> Double -> Double -> Render () drawHeader names x y = forM_ (zip [0..] names) $ \(i, name) -> do-    l <- mkLayout (Markup.escape name) EllipsizeEnd AlignCenter `withWidth` columnWidth+    l <- mkLayout (Marquee.escape name) EllipsizeEnd AlignCenter `withWidth` columnWidth     moveTo (x - (columnWidth / 2)) (y + i * h)     showLayout l   where h = 10@@ -485,14 +491,14 @@       moveTo (x - memberWidth / 2) y'       showLayout l -    path = (if isReturn then id else Markup.b) $ Markup.escape p+    path = (if isReturn then id else Marquee.b) $ Marquee.escape p     fullMethod =-        (if isReturn then Markup.i else id) $ Markup.formatMember i m+        (if isReturn then Marquee.i else id) $ Marquee.formatMember i m  drawTimestamp :: String -> Double -> Double -> Render () drawTimestamp ts x y = do     moveTo (x - timestampWidth / 2) (y - 10)-    showLayout =<< mkLayout (Markup.escape ts) EllipsizeNone AlignLeft `withWidth` timestampWidth+    showLayout =<< mkLayout (Marquee.escape ts) EllipsizeNone AlignLeft `withWidth` timestampWidth  drawClientLines :: NonEmpty Double -> Double -> Double -> Render () drawClientLines xs y1 y2 = saved $ do
− Bustle/Markup.hs
@@ -1,112 +0,0 @@-{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}-{--Bustle.Diagram: My First Type-Safe Markup Library-Copyright © 2011 Will Thompson--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.Markup-  ( Markup-  , unMarkup-  , tag-  , b-  , i-  , light-  , red-  , a-  , escape--  , formatMember-  )-where--import Data.Monoid-import Data.Text (Text)-import qualified Data.Text as T--import Graphics.Rendering.Pango.BasicTypes (Weight(..))-import Graphics.Rendering.Pango.Layout (escapeMarkup)-import Graphics.Rendering.Pango.Markup (markSpan, SpanAttribute(..))--import Bustle.Types (ObjectPath, formatObjectPath, InterfaceName, formatInterfaceName, MemberName, formatMemberName)--newtype Markup = Markup { unMarkup :: String }-    deriving (Show, Read, Ord, Eq)--instance Monoid Markup where-    mempty = Markup ""-    mappend x y = Markup (unMarkup x `mappend` unMarkup y)-    mconcat = Markup . mconcat . map unMarkup----raw :: String -> Markup---raw = Markup--tag :: String -> Markup -> Markup-tag name contents =-    Markup $ concat [ "<", name, ">"-                    , unMarkup contents-                    , "</", name, ">"-                    ]--b, i :: Markup -> Markup-b = tag "b"-i = tag "i"--a :: String-  -> String-  -> Markup-a href contents =-  Markup $ concat [ "<a href=\"", escapeMarkup href, "\">"-                  , escapeMarkup contents-                  , "</a>"-                  ]--span_ :: [SpanAttribute] -> Markup -> Markup-span_ attrs = Markup . markSpan attrs . unMarkup--light :: Markup -> Markup-light = span_ [FontWeight WeightLight]--red :: Markup -> Markup-red = span_ [FontForeground "#ff0000"]---- Kind of a transitional measure because some strings are Strings, and some are Text.-class Unescaped s where-    toString :: s -> String--instance Unescaped String where-    toString = id--instance Unescaped Text where-    toString = T.unpack--instance Unescaped InterfaceName where-    toString = formatInterfaceName--instance Unescaped ObjectPath where-    toString = formatObjectPath--instance Unescaped MemberName where-    toString = formatMemberName--escape :: Unescaped s => s -> Markup-escape = Markup . escapeMarkup . toString--formatMember :: Maybe InterfaceName -> MemberName -> Markup-formatMember iface member = iface' `mappend` b (escape member)-  where-    iface' = case iface of-        Just ifaceName -> escape ifaceName `mappend` Markup "."-        Nothing        -> light (escape "(no interface) ")
+ Bustle/Marquee.hs view
@@ -0,0 +1,114 @@+{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}+{-+Bustle.Marquee: My First Type-Safe Markup Library With A Cutesy Name To Not Collide With Pango's 'Markup' Which Is A Synonym For String+Copyright © 2011 Will Thompson++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.Marquee+  ( Marquee+  , toPangoMarkup+  , tag+  , b+  , i+  , light+  , red+  , a+  , escape++  , formatMember++  , toString+  )+where++import Data.Monoid+import Data.Text (Text)+import qualified Data.Text as T++import Graphics.Rendering.Pango.BasicTypes (Weight(..))+import Graphics.Rendering.Pango.Layout (escapeMarkup)+import Graphics.Rendering.Pango.Markup (markSpan, SpanAttribute(..))++import Bustle.Types (ObjectPath, formatObjectPath, InterfaceName, formatInterfaceName, MemberName, formatMemberName)++newtype Marquee = Marquee { unMarquee :: String }+    deriving (Show, Read, Ord, Eq)++toPangoMarkup :: Marquee -> String+toPangoMarkup = unMarquee++instance Monoid Marquee where+    mempty = Marquee ""+    mappend x y = Marquee (unMarquee x `mappend` unMarquee y)+    mconcat = Marquee . mconcat . map unMarquee++tag :: String -> Marquee -> Marquee+tag name contents =+    Marquee $ concat [ "<", name, ">"+                    , unMarquee contents+                    , "</", name, ">"+                    ]++b, i :: Marquee -> Marquee+b = tag "b"+i = tag "i"++a :: String+  -> String+  -> Marquee+a href contents =+  Marquee $ concat [ "<a href=\"", escapeMarkup href, "\">"+                  , escapeMarkup contents+                  , "</a>"+                  ]++span_ :: [SpanAttribute] -> Marquee -> Marquee+span_ attrs = Marquee . markSpan attrs . unMarquee++light :: Marquee -> Marquee+light = span_ [FontWeight WeightLight]++red :: Marquee -> Marquee+red = span_ [FontForeground "#ff0000"]++-- Kind of a transitional measure because some strings are Strings, and some are Text.+class Unescaped s where+    toString :: s -> String++instance Unescaped String where+    toString = id++instance Unescaped Text where+    toString = T.unpack++instance Unescaped InterfaceName where+    toString = formatInterfaceName++instance Unescaped ObjectPath where+    toString = formatObjectPath++instance Unescaped MemberName where+    toString = formatMemberName++escape :: Unescaped s => s -> Marquee+escape = Marquee . escapeMarkup . toString++formatMember :: Maybe InterfaceName -> MemberName -> Marquee+formatMember iface member = iface' `mappend` b (escape member)+  where+    iface' = case iface of+        Just ifaceName -> escape ifaceName `mappend` Marquee "."+        Nothing        -> light (escape "(no interface) ")
Bustle/StatisticsPane.hs view
@@ -26,12 +26,12 @@ import Control.Applicative ((<$>)) import Control.Monad (forM_) import Text.Printf-import Graphics.UI.Gtk hiding (Markup)+import Graphics.UI.Gtk import Bustle.Stats import Bustle.Translation (__) import Bustle.Types (Log)-import qualified Bustle.Markup as Markup-import Bustle.Markup (Markup)+import qualified Bustle.Marquee as Marquee+import Bustle.Marquee (Marquee) import Data.Monoid  data StatsPane =@@ -83,20 +83,20 @@ addTextRenderer :: TreeViewColumn                 -> ListStore a                 -> Bool-                -> (a -> Markup)+                -> (a -> Marquee)                 -> IO CellRendererText addTextRenderer col store expand f = do     renderer <- cellRendererTextNew     cellLayoutPackStart col renderer expand     set renderer [ cellTextSizePoints := 7 ]     cellLayoutSetAttributes col renderer store $ \x ->-        [ cellTextMarkup := (Just . Markup.unMarkup) $ f x ]+        [ cellTextMarkup := (Just . Marquee.toPangoMarkup) $ f x ]     return renderer  addMemberRenderer :: TreeViewColumn                   -> ListStore a                   -> Bool-                  -> (a -> Markup)+                  -> (a -> Marquee)                   -> IO CellRendererText addMemberRenderer col store expand f = do     renderer <- addTextRenderer col store expand f@@ -110,7 +110,7 @@ addStatColumn :: TreeView               -> ListStore a               -> String-              -> (a -> Markup)+              -> (a -> Marquee)               -> IO () addStatColumn view store title f = do     col <- treeViewColumnNew@@ -126,7 +126,7 @@                   -> (a -> String)                   -> IO () addTextStatColumn view store title f =-    addStatColumn view store title (Markup.escape . f)+    addStatColumn view store title (Marquee.escape . f)  -- If we managed to load the method and signal icons... maybeAddTypeIconColumn :: CellLayoutClass layout@@ -164,7 +164,7 @@           TallySignal -> False    addMemberRenderer nameColumn countStore True $ \fi ->-      Markup.formatMember (fiInterface fi) (fiMember fi)+      Marquee.formatMember (fiInterface fi) (fiMember fi)   treeViewAppendColumn countView nameColumn    countColumn <- treeViewColumnNew@@ -203,7 +203,7 @@                  ]    addMemberRenderer nameColumn timeStore True $ \ti ->-      Markup.formatMember (tiInterface ti) (tiMethodName ti)+      Marquee.formatMember (tiInterface ti) (tiMethodName ti)   treeViewAppendColumn timeView nameColumn    addTextStatColumn timeView timeStore (__ "Total")@@ -214,16 +214,16 @@    return (timeStore, timeView) -formatSizeInfoMember :: SizeInfo -> Markup+formatSizeInfoMember :: SizeInfo -> Marquee formatSizeInfoMember si =-    f (Markup.formatMember (siInterface si) (siName si))+    f (Marquee.formatMember (siInterface si) (siName si))   where     f = case siType si of-            SizeReturn -> Markup.i-            SizeError  -> Markup.red+            SizeReturn -> Marquee.i+            SizeError  -> Marquee.red             _          -> id -formatSize :: Int -> Markup+formatSize :: Int -> Marquee formatSize s     | s < maxB = value 1 `mappend` units (__ "B")     | s < maxKB = value 1024 `mappend` units (__ "KB")@@ -232,9 +232,9 @@     maxB = 10000     maxKB = 10000 * 1024 -    units = Markup.escape . (' ':)+    units = Marquee.escape . (' ':) -    value factor = Markup.escape (show (s `div` factor))+    value factor = Marquee.escape (show (s `div` factor))  newSizeView :: Maybe Pixbuf             -> Maybe Pixbuf
Bustle/UI.hs view
@@ -38,6 +38,7 @@ import Bustle.Renderer import Bustle.Types import Bustle.Diagram+import Bustle.Marquee (toString) import Bustle.Util import Bustle.UI.AboutDialog import Bustle.UI.Canvas@@ -281,7 +282,7 @@     case mdetails of         Just (RecordedLog tempFilePath) -> do             let tempFileName = takeFileName tempFilePath-                title = printf (__ "Save log '%s' before closing?") tempFileName+                title = printf (__ "Save log '%s' before closing?") tempFileName :: String             prompt <- messageDialogNew (Just (wiWindow wi))                                        [DialogModal]                                        MessageWarning@@ -459,7 +460,8 @@                 -> IO () wiSetLogDetails wi logDetails = do     writeIORef (wiLogDetails wi) (Just logDetails)-    windowSetTitle (wiWindow wi) (printf (__ "%s - Bustle") (logWindowTitle logDetails))+    windowSetTitle (wiWindow wi)+        (printf (__ "%s - Bustle") (logWindowTitle logDetails) :: String)  setPage :: MonadIO io         => WindowInfo@@ -525,7 +527,7 @@ loadPixbuf filename = do   iconName <- getDataFileName $ "data/" ++ filename   C.catch (fmap Just (pixbufNewFromFile iconName))-          (\(GError _ _ msg) -> warn msg >> return Nothing)+          (\(GError _ _ msg) -> warn (toString msg) >> return Nothing)  openDialogue :: Window -> B () openDialogue window = embedIO $ \r -> do
Bustle/UI/Canvas.hs view
@@ -16,6 +16,7 @@ License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -}+{-# LANGUAGE OverloadedStrings #-} module Bustle.UI.Canvas   (     Canvas@@ -58,7 +59,7 @@           -> (Maybe a -> IO ())           -> IO (Canvas a) canvasNew builder showBounds selectionChangedCb = do-    layout <- builderGetObject builder castToLayout "diagramLayout"+    layout <- builderGetObject builder castToLayout ("diagramLayout" :: String)     idRef <- newIORef Nothing     shapesRef <- newIORef []     widthRef <- newIORef 0
Bustle/UI/DetailsView.hs view
@@ -25,13 +25,13 @@ where  import Data.List (intercalate)-import Graphics.UI.Gtk hiding (Signal, Markup)+import Graphics.UI.Gtk hiding (Signal)  import qualified DBus as D  import Bustle.Translation (__) import Bustle.Types-import Bustle.Markup+import Bustle.Marquee import Bustle.VariantFormatter  data DetailsView =@@ -55,7 +55,7 @@          -> Int          -> IO Label addValue table row = do-    label <- labelNew Nothing+    label <- labelNew (Nothing :: Maybe String)     miscSetAlignment label 0 0     labelSetEllipsize label EllipsizeStart     labelSetSelectable label True@@ -77,7 +77,7 @@                 , tableColumnSpacing := 6                 ] -    title <- labelNew Nothing+    title <- labelNew (Nothing :: Maybe String)     miscSetAlignment title 0 0     tableAttach table title 0 2 0 1 [Fill] [Fill] 0 0 @@ -99,7 +99,7 @@     widgetShowAll table     return $ DetailsView table title pathLabel memberLabel view -pickTitle :: Detailed Message -> Markup+pickTitle :: Detailed Message -> Marquee pickTitle (Detailed _ m _) = case m of     MethodCall {} -> b (escape (__ "Method call"))     MethodReturn {} -> b (escape (__ "Method return"))@@ -111,7 +111,7 @@  getMemberMarkup :: Member -> String getMemberMarkup m =-    unMarkup $ formatMember (iface m) (membername m)+    toPangoMarkup $ formatMember (iface m) (membername m)  getMember :: Detailed Message -> Maybe Member getMember (Detailed _ m _) = case m of@@ -140,7 +140,7 @@ detailsViewUpdate d m = do     buf <- textViewGetBuffer $ detailsBodyView d     let member_ = getMember m-    labelSetMarkup (detailsTitle d) (unMarkup $ pickTitle m)+    labelSetMarkup (detailsTitle d) (toPangoMarkup $ pickTitle m)     labelSetText (detailsPath d) (maybe unknown (D.formatObjectPath . path) member_)     labelSetMarkup (detailsMember d) (maybe unknown getMemberMarkup member_)     textBufferSetText buf $ formatMessage m
Bustle/UI/FilterDialog.hs view
@@ -99,7 +99,7 @@     nameStore <- makeStore names currentlyHidden     sw <- makeView nameStore -    instructions <- labelNew Nothing+    instructions <- labelNew (Nothing :: Maybe String)     widgetSetSizeRequest instructions 600 (-1)     labelSetMarkup instructions         (__ "Unticking a service hides its column in the diagram, \
Bustle/UI/Recorder.hs view
@@ -36,6 +36,7 @@  import Bustle.Loader.Pcap (convert) import Bustle.Loader (isRelevant)+import Bustle.Marquee (toString) import Bustle.Monitor import Bustle.Renderer import Bustle.Translation (__)@@ -78,7 +79,7 @@                 i <- takeMVar n                 let j = i + (length pending)                 labelSetMarkup label $-                    printf (__ "Logged <b>%u</b> messages…") j+                    (printf (__ "Logged <b>%u</b> messages…") j :: String)                 putMVar n j                  incoming rr'@@ -97,8 +98,9 @@     maybe (return ()) (windowSetTransientFor dialog) mwindow     dialog `set` [ windowModal := True ] -    label <- labelNew Nothing-    labelSetMarkup label $ printf (__ "Logged <b>%u</b> messages…") (0 :: Int)+    label <- labelNew (Nothing :: Maybe String)+    labelSetMarkup label $+        (printf (__ "Logged <b>%u</b> messages…") (0 :: Int) :: String)     loaderStateRef <- newMVar Map.empty     pendingRef <- newMVar []     let updateLabel µs body = do@@ -142,7 +144,7 @@     widgetShowAll dialog   where     newFailed (GError _ _ message) = do-        displayError mwindow message Nothing+        displayError mwindow (toString message) Nothing  recorderChooseFile :: FilePath                    -> Maybe Window
− HACKING
@@ -1,14 +0,0 @@-Want to get involved? Great!-============================--Grab the latest code from git:--    git clone git://anongit.freedesktop.org/bustle--and get stuck in! Please submit patches, or links to git branches, as-bugs on <https://bugs.freedesktop.org/enter_bug.cgi?product=Bustle>.--In new code, try to follow-<https://github.com/tibbe/haskell-style-guide/blob/master/haskell-style.md>.-Certain authors did not follow it in the past but it seems like a good kind of-thing to aim for.
+ HACKING.md view
@@ -0,0 +1,14 @@+Want to get involved? Great!+============================++Grab the latest code from git:++    git clone git://anongit.freedesktop.org/bustle++and get stuck in! Please submit patches, or links to git branches, as+bugs on <https://bugs.freedesktop.org/enter_bug.cgi?product=Bustle>.++In new code, try to follow+<https://github.com/tibbe/haskell-style-guide/blob/master/haskell-style.md>.+Certain authors did not follow it in the past but it seems like a good kind of+thing to aim for.
− INSTALL
@@ -1,48 +0,0 @@-Building from source-====================--First, make sure the Haskell Platform is installed, preferably along with the-Gtk+ bindings for Haskell, and some other dependencies. On Debian-flavoured-systems, well, actually just `apt-get build-dep bustle`, but:--    sudo apt-get install \-        pkg-config \-        libdbus-1-dev \-        libglib2.0-dev \-        libpcap0.8-dev \-        haskell-platform \-        libghc-mtl-dev \-        libghc-cairo-dev \-        libghc-gtk-dev \-        libghc-parsec3-dev \-        libghc-glade-dev \-        libghc-dbus-dev \-        libghc-pcap-dev \-        help2man--(If you can't get the Haskell Platform via your package manager, see-<http://hackage.haskell.org/platform/>. If you can't get the Gtk+ binding for-Haskell via your package manager, you'll need to run:--    cabal install gtk2hs-buildtools--and ensure that ~/.cabal/bin is in your PATH before continuing.)--Got that? Great!--    export PREFIX=/opt/bustle--    # Build and install Bustle itself.-    cabal install --prefix=$PREFIX--    # Build and install the stand-alone logger binary, plus the icons, desktop-    # file, etc. etc.-    make install PREFIX=$PREFIX--If the Haskell Platform is not available on the platform you want to do-some D-Bus profiling on, that's fine: the logger is written in C, and-you can view logs generated on your fancy embedded hardware on your more-pedestrian Linux laptop. The logger only depends on a few widely-available-libraries:--    sudo apt-get install libglib2.0-dev libpcap-dev
+ INSTALL.md view
@@ -0,0 +1,48 @@+Building from source+====================++First, make sure the Haskell Platform is installed, preferably along with the+Gtk+ bindings for Haskell, and some other dependencies. On Debian-flavoured+systems, well, actually just `apt-get build-dep bustle`, but:++    sudo apt-get install \+        pkg-config \+        libdbus-1-dev \+        libglib2.0-dev \+        libpcap0.8-dev \+        haskell-platform \+        libghc-mtl-dev \+        libghc-cairo-dev \+        libghc-gtk-dev \+        libghc-parsec3-dev \+        libghc-glade-dev \+        libghc-dbus-dev \+        libghc-pcap-dev \+        help2man++(If you can't get the Haskell Platform via your package manager, see+<http://hackage.haskell.org/platform/>. If you can't get the Gtk+ binding for+Haskell via your package manager, you'll need to run:++    cabal install gtk2hs-buildtools++and ensure that ~/.cabal/bin is in your PATH before continuing.)++Got that? Great!++    export PREFIX=/opt/bustle++    # Build and install Bustle itself.+    cabal install --prefix=$PREFIX++    # Build and install the stand-alone logger binary, plus the icons, desktop+    # file, etc. etc.+    make install PREFIX=$PREFIX++If the Haskell Platform is not available on the platform you want to do+some D-Bus profiling on, that's fine: the logger is written in C, and+you can view logs generated on your fancy embedded hardware on your more+pedestrian Linux laptop. The logger only depends on a few widely-available+libraries:++    sudo apt-get install libglib2.0-dev libpcap-dev
Makefile view
@@ -18,6 +18,7 @@ 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) \ 	$(NULL) @@ -58,6 +59,8 @@ 	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; )+	mkdir -p $(DATADIR)/icons/hicolor/scalable/apps+	cp data/icons/scalable/bustle-symbolic.svg $(DATADIR)/icons/hicolor/scalable/apps 	$(MAKE) update-icon-cache  uninstall:@@ -66,6 +69,7 @@ 	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 	$(MAKE) update-icon-cache  clean:@@ -95,10 +99,10 @@ 	mkdir -p $(TARBALL_FULL_DIR) 	cabal-dev install --prefix=$(TOP)/$(TARBALL_FULL_DIR) \ 		--datadir=$(TOP)/$(TARBALL_FULL_DIR) --datasubdir=.-	cp bustle.sh README $(TARBALL_FULL_DIR)+	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+		$(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@@ -108,3 +112,10 @@  maintainer-update-messages-pot: 	find Bustle -name '*.hs' -print0 | xargs -0 hgettext -k __ -o po/messages.pot++maintainer-make-release: bustle.cabal+	cabal test+	cabal sdist+	git tag -s -m 'Bustle '`perl -nle 'm/^Version:\s+(.*)$$/ and print qq($$1)' bustle.cabal` \+		bustle-`perl -nle 'm/^Version:\s+(.*)$$/ and print qq($$1)' bustle.cabal`+	make maintainer-binary-tarball
− NEWS
@@ -1,301 +0,0 @@-Bustle 0.4.7 (2014-07-19)----------------------------* Ship the icons in the tarball! Thanks again, Sergei Trofimovich.---Bustle 0.4.6 (2014-07-17)----------------------------* Icons! Thanks to Αποστολίδου Χρυσαφή for redrawing the icon as an SVG, and to-  Philip Withnall for the build system goop.-* More appdata! Thanks again, Philip.--Bustle 0.4.5 (2014-02-26)----------------------------* Fix build failure with tests enabled due to translation files.-* Distribute appdata and desktop files in source tarballs.--Thanks to Sergei Trofimovich for catching and fixing these!---Bustle 0.4.4 (2014-01-30)----------------------------Wow, I can't believe the first release was in 2008!--* Bustle's now translatable. It only ships with an English translation,-  but others are more than welcome! Thanks to Philip Withnall for-  getting this started.-* Add an AppData and .desktop file. (Philip Withnall)---Bustle 0.4.3 (2013-12-05)----------------------------I think you mean ‘fewer crashy’.--* Don't crash on i386 when opening the stats pane. Thanks to Sujith-  Sudhi for reporting this issue.-* [#54237][]: Don't crash if we can't connect to the bus.-* Don't crash the second time you try to record a log. I swear this-  didn't happen before.--[#54237]: https://bugs.freedesktop.org/show_bug.cgi?id=54237--Bustle 0.4.2 (2012-11-14)----------------------------This release is all about build fixes; nothing user-visible has changed.--* The Makefile now respects the `DESTDIR` variable.-* No more deprecation warnings about `g_thread_create()`!-* We explicitly check for GLib ≥ 2.26.--Also, there's now a `threaded` Cabal flag you can turn off if you're-building for some platform where the threaded GHC runtime isn't-available (such as S/390, MIPS or Sparc). This is the same approach used-to make several other packages build for those architectures in Debian,-as per [bug 541848][]. You can do something like this in your packaging:--    DEB_SETUP_GHC_CONFIGURE_ARGS := $(shell test -e /usr/lib/ghc-$(GHC_VERSION)/libHSrts_thr.a || echo --flags=-threaded)--Bustle doesn't directly use Haskell-land threads, but I don't trust it-not to break in this configuration, so it's not the default.--[bug 541848]: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=541848#33--Bustle 0.4.1 (2012-08-29)----------------------------Some dependency changes:--* Gtk2HS ≥ 0.12 is now required.-* Bustle now uses the [dbus][] Haskell library (≥ 0.10), which-  supersedes the [dbus-core][] package.-* `binary` is no longer required.--Some user-visible changes:--* The front page now has two big buttons rather than some [lame-  instructions][fdo44889].-* Memory usage should be a bit better, particularly for wide logs-  showing lots of applications.--Some plumbing changes:--* You can now make a symlink to the launcher script and have it work-  properly.-* Bustle [builds with GHC 7.4.1][fdo47013] (courtesy of Sergei-  Trofimovich).-* `make clean` [works][fdo47908] in source tarballs.-* `bustle-pcap` now has a man page (courtesy of Alex Merry).--[dbus]: http://hackage.haskell.org/package/dbus-0.10-[fdo44889]: https://bugs.freedesktop.org/show_bug.cgi?id=44889-[fdo47013]: https://bugs.freedesktop.org/show_bug.cgi?id=47013-[fdo47908]: https://bugs.freedesktop.org/show_bug.cgi?id=47908---Bustle 0.4.0 (2012-01-18)----------------------------The “let's hope my attention span lasts long enough” release.--You can now record D-Bus logs from within Bustle itself. No more faffing-around with command-line tools: just click **File → New**, and watch-the diagram being drawn as the messages trickle (or fly) in.--(If you want to capture logs from your embedded platform *du-jour*, don't fear: `bustle-pcap` is still provided as a standalone-program for your enjoyment.)--Bustle no longer [crashes when it encounters messages containing file-handles][crash-on-h]. (Those messages are now dropped; which is not-perfect, but is at least an improvement.)--Directed signals—signals with a specified destination, which are unusual-but do appear—are now shown differently to normal, undirected signals,-with an arrow pointing to the signal's recipient. Relatedly, the-monitors now [explicitly eavesdrop on messages][eavesdrop] when using-D-Bus 1.5.x, courtesy of Cosimo Alfarano.--[crash-on-h]: https://bugs.freedesktop.org/show_bug.cgi?id=44714-[eavesdrop]: https://bugs.freedesktop.org/show_bug.cgi?id=39140---Bustle 0.3.1 (2012-01-09)----------------------------The “How do I dress up as shared global mutable state?” release.--This release finally allows you to record complete D-Bus sessions,-including message bodies, and browse them in the user interface!--As a result, there is a new logger, `bustle-pcap`, which logs D-Bus-traffic to Pcap files; and Bustle itself now depends on the [pcap][] and-[dbus-core][] packages. Your old logs should still be loaded just fine,-but since they don't contain message body data, you won't be able to see-it in the UI.--Also, as of this release binary tarballs will be provided for those not-interested in compiling Bustle themselves.--[pcap]: http://hackage.haskell.org/package/pcap-[dbus-core]: http://hackage.haskell.org/package/dbus-core---Bustle 0.3.0---------------You can't prove anything.---Bustle 0.2.5 (2011-06-25)----------------------------The “Why go all the way to Glastonbury to not watch U2 when you can just-not turn on the BBC at any point this weekend to not watch them?”-release.--This adds a sidebar with statistics about the log: namely, method call-and signal emission frequency, and total/mean times spent in method-calls. This code has mostly been sitting around unreleased since-November. Sorry, dear users!---Bustle 0.2.4 (2011-06-06)----------------------------The “I think I'm a panda” release. There's just a few bits and pieces of-clean-up along with a couple of bug fixes in this release. Hopefully-there will be more interesting stuff in the next release.--While we're here, Bustle's git repository has moved to freedesktop.org,-and it now has a bug tracker there too. Browse the source at-<http://cgit.freedesktop.org/bustle/>; see open bugs at-<http://wjt.me.uk/bustle/bugs>; file new ones at-<http://wjt.me.uk/bustle/new-bug>. Astonishing!--* The viewer is now much more tolerant of inconsistencies in log files.-  (Thanks to Marco Barisione for the [bug report][fdo35297].)-* The linking order for bustle-dbus-monitor is fixed. (Thanks to Sergei-  Trofimovich.)-* Miscellaneous clean-up.--[fdo35297]: https://bugs.freedesktop.org/show_bug.cgi?id=35297---Bustle 0.2.3 (2010-10-29)----------------------------The “Will it be a scone? Or will it be a lecture in category theory?”-release.--<div>[[!img bustle-0.2.3.png size="200x143" alt="screenshot of side-by-side session and system bus logs" class="floated screenshot"]]</div>--You can now show a session bus log and a system bus log side-by-side, with the-same time scale and with events interleaved as they happened. This might come-in useful for full-system profiling, or for frameworks where actions on one bus-lead to reactions on another.--Record the two logs as normal, by running something like:--> <kbd>% bustle-dbus-monitor --session \> session.bustle &<br/>-> % bustle-dbus-monitor --system \> system.bustle &</kbd>--Then go do whatever you want to profile. When you're done, kill the two-loggers. In Bustle, choose **File → Open a pair of logs…** to show them-side-by-side. You can save the diagram to a PDF as normal.---Bustle 0.2.2 (2010-06-29)----------------------------The “Shepherded” release.--Fixes:--*  Suppress messages sent to the bus by bus name, rather than object-   path. This prevents Bustle blowing up when (buggy) clients call-   methods on / rather than on /org/freedesktop/DBus. (Thanks to-   Guillaume Desmottes for reporting the issue.)--*  Build against the re-namespaced Pango in Gtk2HS 0.11, and clean up a-   tonne of warnings. I think I've kept backwards compatibility with old-   enough Gtk2HSes and GHCs for this to work with the versions in Ubuntu-   10.04 and other recent-but-not-futuristic distros, but haven't-   actually tried it. Drop me a mail in the event of landing on water.-   (Thanks to Chris Lamb for upstreaming this from Debian bug #587132.)---Bustle 0.2.1 (2009-12-02)----------------------------The “Going down where the Firefly goes” release.--Enhancements:--*  The handling of services with multiple well-known names has improved.-   Whereas previously one name was (essentially) randomly-chosen, now-   all names owned by a service are shown in the diagram.--*  When a service falls off the bus, its column goes away to indicate-   that.--*  Strings are now ellipsized if necessary.--*  Method returns now include the object path and method name so you-   don't have to look it up yourself.--*  The UI is less spartan: you can open files, and launch it without-   passing at least one filename as a command-line argument.--Fixes:--*  The UI handles parse errors gracefully rather than, uhm, throwing an-   exception and dying.--*  bustle-dbus-monitor now has rudimentary cross-compilation support, by-   respecting $CC and friends. (Marc Kleine-Budde)--*  You can now kill the monitor immediately with ^C, rather than waiting-   for another message to arrive. (Lennart Poettering, from a patch for-   dbus-monitor)--Notes:--*  While your old logs should continue to work with the new viewer, the-   reverse is not true: the changes to name handling required modifying-   the log format.---Bustle 0.2.0 (2009-04-03)----------------------------The "new monkey makes me sad :-(" release.--Enhancements:--*  Add a menu item to save a PDF of the diagram.--*  Show the elapsed time between a method call and its return.--*  Add new tools to count method calls and signals, sum the total time-   spent per method call, and generate .dot graphs (Dafydd Harries).--Fixes:--*  Don't crash on empty logs, or logs containing calls on interface-   "<none>".--*  Compile with new Gtk2HS and GHC 6.10 (Chris Lamb).---Bustle 0.1 (2008-11-13)--------------------------Initial release.--vim: tw=72
+ NEWS.md view
@@ -0,0 +1,312 @@+Bustle 0.4.8 (2015-03-22)+-------------------------++* Be compatible with recent versions of Gtk2HS which use Text rather+  than Strings in many places. Should still build against older+  releases. Let me know if not.+* [#89712][]: Add symbolic icon. (Arnaud Bonatti)++[#89712]: https://bugs.freedesktop.org/show_bug.cgi?id=89712+++Bustle 0.4.7 (2014-07-19)+-------------------------++* Ship the icons in the tarball! Thanks again, Sergei Trofimovich.+++Bustle 0.4.6 (2014-07-17)+-------------------------++* Icons! Thanks to Αποστολίδου Χρυσαφή for redrawing the icon as an SVG, and to+  Philip Withnall for the build system goop.+* More appdata! Thanks again, Philip.++Bustle 0.4.5 (2014-02-26)+-------------------------++* Fix build failure with tests enabled due to translation files.+* Distribute appdata and desktop files in source tarballs.++Thanks to Sergei Trofimovich for catching and fixing these!+++Bustle 0.4.4 (2014-01-30)+-------------------------++Wow, I can't believe the first release was in 2008!++* Bustle's now translatable. It only ships with an English translation,+  but others are more than welcome! Thanks to Philip Withnall for+  getting this started.+* Add an AppData and .desktop file. (Philip Withnall)+++Bustle 0.4.3 (2013-12-05)+-------------------------++I think you mean ‘fewer crashy’.++* Don't crash on i386 when opening the stats pane. Thanks to Sujith+  Sudhi for reporting this issue.+* [#54237][]: Don't crash if we can't connect to the bus.+* Don't crash the second time you try to record a log. I swear this+  didn't happen before.++[#54237]: https://bugs.freedesktop.org/show_bug.cgi?id=54237++Bustle 0.4.2 (2012-11-14)+-------------------------++This release is all about build fixes; nothing user-visible has changed.++* The Makefile now respects the `DESTDIR` variable.+* No more deprecation warnings about `g_thread_create()`!+* We explicitly check for GLib ≥ 2.26.++Also, there's now a `threaded` Cabal flag you can turn off if you're+building for some platform where the threaded GHC runtime isn't+available (such as S/390, MIPS or Sparc). This is the same approach used+to make several other packages build for those architectures in Debian,+as per [bug 541848][]. You can do something like this in your packaging:++    DEB_SETUP_GHC_CONFIGURE_ARGS := $(shell test -e /usr/lib/ghc-$(GHC_VERSION)/libHSrts_thr.a || echo --flags=-threaded)++Bustle doesn't directly use Haskell-land threads, but I don't trust it+not to break in this configuration, so it's not the default.++[bug 541848]: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=541848#33++Bustle 0.4.1 (2012-08-29)+-------------------------++Some dependency changes:++* Gtk2HS ≥ 0.12 is now required.+* Bustle now uses the [dbus][] Haskell library (≥ 0.10), which+  supersedes the [dbus-core][] package.+* `binary` is no longer required.++Some user-visible changes:++* The front page now has two big buttons rather than some [lame+  instructions][fdo44889].+* Memory usage should be a bit better, particularly for wide logs+  showing lots of applications.++Some plumbing changes:++* You can now make a symlink to the launcher script and have it work+  properly.+* Bustle [builds with GHC 7.4.1][fdo47013] (courtesy of Sergei+  Trofimovich).+* `make clean` [works][fdo47908] in source tarballs.+* `bustle-pcap` now has a man page (courtesy of Alex Merry).++[dbus]: http://hackage.haskell.org/package/dbus-0.10+[fdo44889]: https://bugs.freedesktop.org/show_bug.cgi?id=44889+[fdo47013]: https://bugs.freedesktop.org/show_bug.cgi?id=47013+[fdo47908]: https://bugs.freedesktop.org/show_bug.cgi?id=47908+++Bustle 0.4.0 (2012-01-18)+-------------------------++The “let's hope my attention span lasts long enough” release.++You can now record D-Bus logs from within Bustle itself. No more faffing+around with command-line tools: just click **File → New**, and watch+the diagram being drawn as the messages trickle (or fly) in.++(If you want to capture logs from your embedded platform *du+jour*, don't fear: `bustle-pcap` is still provided as a standalone+program for your enjoyment.)++Bustle no longer [crashes when it encounters messages containing file+handles][crash-on-h]. (Those messages are now dropped; which is not+perfect, but is at least an improvement.)++Directed signals—signals with a specified destination, which are unusual+but do appear—are now shown differently to normal, undirected signals,+with an arrow pointing to the signal's recipient. Relatedly, the+monitors now [explicitly eavesdrop on messages][eavesdrop] when using+D-Bus 1.5.x, courtesy of Cosimo Alfarano.++[crash-on-h]: https://bugs.freedesktop.org/show_bug.cgi?id=44714+[eavesdrop]: https://bugs.freedesktop.org/show_bug.cgi?id=39140+++Bustle 0.3.1 (2012-01-09)+-------------------------++The “How do I dress up as shared global mutable state?” release.++This release finally allows you to record complete D-Bus sessions,+including message bodies, and browse them in the user interface!++As a result, there is a new logger, `bustle-pcap`, which logs D-Bus+traffic to Pcap files; and Bustle itself now depends on the [pcap][] and+[dbus-core][] packages. Your old logs should still be loaded just fine,+but since they don't contain message body data, you won't be able to see+it in the UI.++Also, as of this release binary tarballs will be provided for those not+interested in compiling Bustle themselves.++[pcap]: http://hackage.haskell.org/package/pcap+[dbus-core]: http://hackage.haskell.org/package/dbus-core+++Bustle 0.3.0+------------++You can't prove anything.+++Bustle 0.2.5 (2011-06-25)+-------------------------++The “Why go all the way to Glastonbury to not watch U2 when you can just+not turn on the BBC at any point this weekend to not watch them?”+release.++This adds a sidebar with statistics about the log: namely, method call+and signal emission frequency, and total/mean times spent in method+calls. This code has mostly been sitting around unreleased since+November. Sorry, dear users!+++Bustle 0.2.4 (2011-06-06)+-------------------------++The “I think I'm a panda” release. There's just a few bits and pieces of+clean-up along with a couple of bug fixes in this release. Hopefully+there will be more interesting stuff in the next release.++While we're here, Bustle's git repository has moved to freedesktop.org,+and it now has a bug tracker there too. Browse the source at+<http://cgit.freedesktop.org/bustle/>; see open bugs at+<http://wjt.me.uk/bustle/bugs>; file new ones at+<http://wjt.me.uk/bustle/new-bug>. Astonishing!++* The viewer is now much more tolerant of inconsistencies in log files.+  (Thanks to Marco Barisione for the [bug report][fdo35297].)+* The linking order for bustle-dbus-monitor is fixed. (Thanks to Sergei+  Trofimovich.)+* Miscellaneous clean-up.++[fdo35297]: https://bugs.freedesktop.org/show_bug.cgi?id=35297+++Bustle 0.2.3 (2010-10-29)+-------------------------++The “Will it be a scone? Or will it be a lecture in category theory?”+release.++<div>[[!img bustle-0.2.3.png size="200x143" alt="screenshot of side-by-side session and system bus logs" class="floated screenshot"]]</div>++You can now show a session bus log and a system bus log side-by-side, with the+same time scale and with events interleaved as they happened. This might come+in useful for full-system profiling, or for frameworks where actions on one bus+lead to reactions on another.++Record the two logs as normal, by running something like:++> <kbd>% bustle-dbus-monitor --session \> session.bustle &<br/>+> % bustle-dbus-monitor --system \> system.bustle &</kbd>++Then go do whatever you want to profile. When you're done, kill the two+loggers. In Bustle, choose **File → Open a pair of logs…** to show them+side-by-side. You can save the diagram to a PDF as normal.+++Bustle 0.2.2 (2010-06-29)+-------------------------++The “Shepherded” release.++Fixes:++*  Suppress messages sent to the bus by bus name, rather than object+   path. This prevents Bustle blowing up when (buggy) clients call+   methods on / rather than on /org/freedesktop/DBus. (Thanks to+   Guillaume Desmottes for reporting the issue.)++*  Build against the re-namespaced Pango in Gtk2HS 0.11, and clean up a+   tonne of warnings. I think I've kept backwards compatibility with old+   enough Gtk2HSes and GHCs for this to work with the versions in Ubuntu+   10.04 and other recent-but-not-futuristic distros, but haven't+   actually tried it. Drop me a mail in the event of landing on water.+   (Thanks to Chris Lamb for upstreaming this from Debian bug #587132.)+++Bustle 0.2.1 (2009-12-02)+-------------------------++The “Going down where the Firefly goes” release.++Enhancements:++*  The handling of services with multiple well-known names has improved.+   Whereas previously one name was (essentially) randomly-chosen, now+   all names owned by a service are shown in the diagram.++*  When a service falls off the bus, its column goes away to indicate+   that.++*  Strings are now ellipsized if necessary.++*  Method returns now include the object path and method name so you+   don't have to look it up yourself.++*  The UI is less spartan: you can open files, and launch it without+   passing at least one filename as a command-line argument.++Fixes:++*  The UI handles parse errors gracefully rather than, uhm, throwing an+   exception and dying.++*  bustle-dbus-monitor now has rudimentary cross-compilation support, by+   respecting $CC and friends. (Marc Kleine-Budde)++*  You can now kill the monitor immediately with ^C, rather than waiting+   for another message to arrive. (Lennart Poettering, from a patch for+   dbus-monitor)++Notes:++*  While your old logs should continue to work with the new viewer, the+   reverse is not true: the changes to name handling required modifying+   the log format.+++Bustle 0.2.0 (2009-04-03)+-------------------------++The "new monkey makes me sad :-(" release.++Enhancements:++*  Add a menu item to save a PDF of the diagram.++*  Show the elapsed time between a method call and its return.++*  Add new tools to count method calls and signals, sum the total time+   spent per method call, and generate .dot graphs (Dafydd Harries).++Fixes:++*  Don't crash on empty logs, or logs containing calls on interface+   "<none>".++*  Compile with new Gtk2HS and GHC 6.10 (Chris Lamb).+++Bustle 0.1 (2008-11-13)+-----------------------++Initial release.++vim: tw=72
− README
@@ -1,47 +0,0 @@-Bustle draws sequence diagrams of D-Bus activity, showing signal-emissions, method calls and their corresponding returns, with timestamps-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.---Using Bustle-============--Run it:--    bustle--Now click **File → New…** to start recording session bus traffic. When you're-done, click **Stop**, and explore the log.--If you want to record traffic without running the UI (maybe on an embedded-platform which doesn't have Gtk+ and/or a Haskell compiler), you can use the-stand-alone logger:--    bustle-pcap logfile.bustle--You can then open `logfile.bustle` in Bustle.--You can also get some ASCII-art-version of the statistics shown in the UI:--    bustle --count logfile.bustle-    bustle --time logfile.bustle--If you want to log all system bus traffic, you need to edit-`/etc/dbus/system.conf` to enable eavesdropping, and then remove the include of-`/etc/dbus-1/system.conf.d` which seems to re-enable strictness. Then you can run-the stand-alone logger against the system bus:--    bustle-pcap --system system-log.bustle--Please remember to **undo these changes** when you're done.---More information-================--See <http://wjt.me.uk/bustle/>.
+ README.md view
@@ -0,0 +1,47 @@+Bustle draws sequence diagrams of D-Bus activity, showing signal+emissions, method calls and their corresponding returns, with timestamps+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.+++Using Bustle+============++Run it:++    bustle++Now click **File → New…** to start recording session bus traffic. When you're+done, click **Stop**, and explore the log.++If you want to record traffic without running the UI (maybe on an embedded+platform which doesn't have Gtk+ and/or a Haskell compiler), you can use the+stand-alone logger:++    bustle-pcap logfile.bustle++You can then open `logfile.bustle` in Bustle.++You can also get some ASCII-art+version of the statistics shown in the UI:++    bustle --count logfile.bustle+    bustle --time logfile.bustle++If you want to log all system bus traffic, you need to edit+`/etc/dbus/system.conf` to enable eavesdropping, and then remove the include of+`/etc/dbus-1/system.conf.d` which seems to re-enable strictness. Then you can run+the stand-alone logger against the system bus:++    bustle-pcap --system system-log.bustle++Please remember to **undo these changes** when you're done.+++More information+================++See <http://wjt.me.uk/bustle/>.
Test/Regions.hs view
@@ -4,23 +4,27 @@  import Data.List (sort, group) import Data.Maybe (isNothing, isJust)+import Control.Applicative ((<$>), (<*>))  import Bustle.Regions -instance Arbitrary Stripe where-    arbitrary = do-        top <- fmap abs arbitrary-        bottom <- arbitrary `suchThat` (>= top)-        return $ Stripe top bottom- newtype NonOverlappingStripes = NonOverlappingStripes [Stripe]   deriving     (Show, Eq, Ord)  instance Arbitrary NonOverlappingStripes where     arbitrary = do-        -- there is no orderedList1 sadly-        stripes <- fmap sort (listOf1 arbitrary) `suchThat` nonOverlapping+        -- listOf2+        tops <- sort <$> ((:) <$> arbitrary <*> (listOf1 arbitrary))++        -- Generate dense stripes sometimes+        let g :: Gen Double+            g = frequency [(1, return 1.0), (7, choose (0.0, 1.0))]++        rs <- vectorOf (length tops) (choose (0.0, 1.0))++        let stripes = zipWith3 (\t1 t2 r -> Stripe t1 (t1 + ((t2 - t1) * r)))+                               tops (tail tops) rs         return $ NonOverlappingStripes stripes  newtype ValidRegions a = ValidRegions (Regions a)@@ -39,6 +43,8 @@     arbitrary = do         ValidRegions rs <- arbitrary         return $ regionSelectionNew rs++prop_NonOverlapping_generator_works (NonOverlappingStripes ss) = nonOverlapping ss  prop_InitiallyUnselected = \rs -> isNothing $ rsCurrent rs prop_UpDoesNothing = \rs -> isNothing $ rsCurrent $ regionSelectionUp rs
bustle.cabal view
@@ -1,9 +1,9 @@ Name:           bustle Category:       Network, Desktop-Version:        0.4.7+Version:        0.4.8 Cabal-Version:  >= 1.8-Synopsis:       Draw pretty sequence diagrams of D-Bus traffic-Description:    Draw pretty sequence diagrams of D-Bus traffic+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>@@ -21,10 +21,10 @@                     Makefile,                    -- Stuff for nerds-                    README,-                    NEWS,-                    HACKING,-                    INSTALL,+                    README.md,+                    NEWS.md,+                    HACKING.md,+                    INSTALL.md,                     run-uninstalled.sh                   , Test/data/log-with-h.bustle @@ -48,6 +48,7 @@                   , data/icons/48x48/bustle.png                   , data/icons/256x256/bustle.png                   , data/icons/scalable/bustle.svg+                  , data/icons/scalable/bustle-symbolic.svg  x-gettext-po-files:     po/*.po x-gettext-domain-name:  bustle@@ -71,7 +72,7 @@                , Bustle.Loader                , Bustle.Loader.OldSkool                , Bustle.Loader.Pcap-               , Bustle.Markup+               , Bustle.Marquee                , Bustle.Monitor                , Bustle.Noninteractive                , Bustle.Regions
+ data/icons/scalable/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/bustle.svg view
@@ -203,10 +203,7 @@        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"-       inkscape:export-filename="/home/ziz-2/Desktop/kkkkkkkk.png"-       inkscape:export-xdpi="8.2586517"-       inkscape:export-ydpi="8.2586517" />+       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"@@ -217,9 +214,7 @@        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)"-       inkscape:export-filename="/home/ziz-2/Desktop/kkkkkkkk.png"-       inkscape:export-xdpi="8.2586517"-       inkscape:export-ydpi="8.2586517" />+       />     <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"@@ -227,9 +222,7 @@        inkscape:path-effect="#path-effect3759-7"        inkscape:original-d="m 417.41556,287.80173 211.44171,0"        inkscape:connector-curvature="0"-       inkscape:export-filename="/home/ziz-2/Desktop/kkkkkkkk.png"-       inkscape:export-xdpi="8.2586517"-       inkscape:export-ydpi="8.2586517" />+       />     <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"@@ -237,9 +230,7 @@        inkscape:path-effect="#path-effect3763-2"        inkscape:original-d="m 294.08479,287.66116 -211.718251,0.2812"        inkscape:connector-curvature="0"-       inkscape:export-filename="/home/ziz-2/Desktop/kkkkkkkk.png"-       inkscape:export-xdpi="8.2586517"-       inkscape:export-ydpi="8.2586517" />+       />     <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"@@ -248,9 +239,7 @@        inkscape:original-d="M 200.97285,226.67532 77.897224,289.6408 200.97285,348.92819"        inkscape:connector-curvature="0"        sodipodi:nodetypes="ccc"-       inkscape:export-filename="/home/ziz-2/Desktop/kkkkkkkk.png"-       inkscape:export-xdpi="8.2586517"-       inkscape:export-ydpi="8.2586517" />+       />     <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"@@ -259,8 +248,6 @@        inkscape:original-d="M 520.66838,225.39683 643.74401,288.36232 520.66838,347.6497"        inkscape:connector-curvature="0"        sodipodi:nodetypes="ccc"-       inkscape:export-filename="/home/ziz-2/Desktop/kkkkkkkk.png"-       inkscape:export-xdpi="8.2586517"-       inkscape:export-ydpi="8.2586517" />+       />   </g> </svg>