summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Hruby <michal.mhr@gmail.com>2011-02-08 11:58:07 +0100
committerMichal Hruby <michal.mhr@gmail.com>2011-02-08 11:58:07 +0100
commit49c106e4a1b3ce7acf3b49a16baa07c2912038da (patch)
tree710042d48826e246edb9ec5e09a90f96626afcba
parent51ab756e2c7d1fc5adcf77bd57f094709b41a39f (diff)
Update desktop file launch listener for latest GLib
-rw-r--r--src/desktop-launch-listener.vala75
-rw-r--r--src/zeitgeist-datahub.vala2
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));
}