diff options
author | Michal Hruby <michal.mhr@gmail.com> | 2011-02-08 11:58:07 +0100 |
---|---|---|
committer | Michal Hruby <michal.mhr@gmail.com> | 2011-02-08 11:58:07 +0100 |
commit | 49c106e4a1b3ce7acf3b49a16baa07c2912038da (patch) | |
tree | 710042d48826e246edb9ec5e09a90f96626afcba | |
parent | 51ab756e2c7d1fc5adcf77bd57f094709b41a39f (diff) |
Update desktop file launch listener for latest GLib
-rw-r--r-- | src/desktop-launch-listener.vala | 75 | ||||
-rw-r--r-- | src/zeitgeist-datahub.vala | 2 |
2 files changed, 52 insertions, 25 deletions
diff --git a/src/desktop-launch-listener.vala b/src/desktop-launch-listener.vala index dea8abb..30a1efa 100644 --- a/src/desktop-launch-listener.vala +++ b/src/desktop-launch-listener.vala @@ -77,15 +77,14 @@ public class DesktopLaunchListener : DataProvider string signal_name, Variant parameters) { - debug ("received launched signal"); // unpack the variant Variant desktop_variant; VariantIter uris; - VariantIter map_iter; + Variant dict; int64 pid; - parameters.get ("(@aysxasa{sv})", out desktop_variant, null, - out pid, out uris, out map_iter); + parameters.get ("(@aysxas@a{sv})", out desktop_variant, null, + out pid, out uris, out dict); string desktop_file = desktop_variant.get_bytestring (); if (desktop_file == "") return; @@ -97,54 +96,82 @@ public class DesktopLaunchListener : DataProvider debug ("ran with uri: %s", uri); } - // here we should be able to get info about the origin - string key_name; - Variant val; - while (map_iter.next ("{sv}", out key_name, out val)) + // here we should be able to get info about the origin of the launch + HashTable<string, Variant> extra_params = (HashTable<string, Variant>) dict; + + string? launched_display_name; + string launched_uri = get_uri_for_desktop_file (desktop_file, + out launched_display_name); + if (launched_uri == null) { - debug ("%s: %s", key_name, val.print (true)); + warning ("Unable to open desktop file '%s'", desktop_file); + return; } - DesktopAppInfo? dai; - if (Path.is_absolute (desktop_file)) + string? launcher_uri = null; + unowned Variant origin_df = extra_params.lookup ("origin-desktop-file"); + if (origin_df != null) { - dai = new DesktopAppInfo.from_filename (desktop_file); + launcher_uri = get_uri_for_desktop_file (origin_df.get_bytestring ()); } else { - dai = new DesktopAppInfo (desktop_file); - } - - if (dai == null) - { - warning ("Unable to open desktop file '%s'", desktop_file); - return; + unowned Variant origin_prgname = extra_params.lookup ("origin-prgname"); + if (origin_prgname != null) + { + unowned string? prgname = origin_prgname.get_bytestring (); + string origin_desktop_id = prgname + ".desktop"; + DesktopAppInfo id_check = new DesktopAppInfo (origin_desktop_id); + if (id_check != null) launcher_uri = "application://%s".printf (origin_desktop_id); + } } // FIXME: check if the app should be shown, and return? / // set manifestation to WORLD?_EVENT - string desktop_id = dai.get_id () ?? Path.get_basename (dai.get_filename ()); - var event = new Zeitgeist.Event (); var subject = new Zeitgeist.Subject (); - //event.set_actor ("application://"); + event.set_actor (launcher_uri); event.set_interpretation (Zeitgeist.ZG_ACCESS_EVENT); event.set_manifestation (Zeitgeist.ZG_USER_ACTIVITY); event.add_subject (subject); - subject.set_uri ("application://" + desktop_id); + subject.set_uri (launched_uri); subject.set_interpretation (Zeitgeist.NFO_SOFTWARE); subject.set_manifestation (Zeitgeist.NFO_SOFTWARE_ITEM); subject.set_mimetype ("application/x-desktop"); - subject.set_text (dai.get_display_name ()); + subject.set_text (launched_display_name); var arr = new GenericArray<Event> (); arr.add (event); items_available (arr); } + + private string? get_uri_for_desktop_file (string desktop_file, + out string? display_name = null) + { + DesktopAppInfo? dai; + if (Path.is_absolute (desktop_file)) + { + dai = new DesktopAppInfo.from_filename (desktop_file); + } + else + { + dai = new DesktopAppInfo (desktop_file); + } + + if (dai == null) + { + display_name = null; + return null; + } + + string desktop_id = dai.get_id () ?? Path.get_basename (dai.get_filename ()); + display_name = dai.get_display_name (); + return "application://%s".printf (desktop_id); + } public override void stop () { diff --git a/src/zeitgeist-datahub.vala b/src/zeitgeist-datahub.vala index 9135fc4..05b8b97 100644 --- a/src/zeitgeist-datahub.vala +++ b/src/zeitgeist-datahub.vala @@ -109,7 +109,7 @@ public class DataHub : Object, DataHubService */ providers.prepend (new RecentManagerGtk (this)); - if (GLibExtra.check_version (2, 27, 93)) + if (GLibExtra.check_version (2, 28, 0)) { providers.prepend (new DesktopLaunchListener (this)); } |