Finding .desktop file and application info

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Finding .desktop file and application info

Gtk+ - Apps Dev mailing list
Hello,
I have an application that uses g_desktop_app_info_new() function to
find GDesktopAppInfo.

I just wonder why the g_desktop_app_info_new() FAILS to find the
GDesktopAppInfo if the .desktop file is in a sub directory
under usr/share/applications/.

So this fails:
GDesktopAppInfo *app_info = g_desktop_app_info_new("org.kde.amarok.desktop")
If the "org.kde.amarok.desktop" file is located in:
/usr/share/applications/kde4/org.kde.amarok.desktop
This is the default location of Amarok player.
---
Then I move the file "org.kde.amarok.desktop"  to /usr/share/applications/.

$ sudo mv /usr/share/applications/kde4/org.kde.amarok.desktop
/usr/share/applications/org.kde.amarok.desktop

$ sudo updatedb
$ locate org.kde.amarok.desktop
/usr/share/applications/org.kde.amarok.desktop

Now the call succeeds. It returns GDesktopAppInfo structure.
GDesktopAppInfo *app_info = g_desktop_app_info_new("org.kde.amarok.desktop")

Something is wrong, because the manual says that the desktop file can stay
in a sub directory:

""""
g_desktop_app_info_new ()
GDesktopAppInfo * g_desktop_app_info_new (const char *desktop_id);

Creates a new GDesktopAppInfo based on a desktop file id.

A desktop file id is the basename of the desktop file, including the
.desktop extension. GIO is looking for a desktop file with this name in the
applications subdirectories of the XDG data directories (i.e. the
directories specified in the XDG_DATA_HOME and XDG_DATA_DIRS environment
variables). GIO also supports the prefix-to-subdirectory mapping that is
described in the Menu Spec (i.e. a desktop id of kde-foo.desktop will
match/usr/share/applications/kde/foo.desktop).
""""

Just for info:
My application gets the "org.kde.amarok.desktop" name from Amarok via the
MPRIS2 DBus-interface.  Please see "DesktopEntry" of
https://specifications.freedesktop.org/mpris-spec/latest/Media_Player.html#Property:DesktopEntry

Please educate me.

Kindly
  Osmo Moma Antero
  Portugal

--
Sent from my PC, laptop or phone with Ubuntu-Linux.
_______________________________________________
gtk-app-devel-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
Reply | Threaded
Open this post in threaded view
|

Re: Finding .desktop file and application info

Gtk+ - Apps Dev mailing list


On 3/3/19 6:36 PM, Osmo Antero via gtk-app-devel-list wrote:

> Hello,
> I have an application that uses g_desktop_app_info_new() function to
> find GDesktopAppInfo.
>
> I just wonder why the g_desktop_app_info_new() FAILS to find the
> GDesktopAppInfo if the .desktop file is in a sub directory
> under usr/share/applications/.
>
> So this fails:
> GDesktopAppInfo *app_info = g_desktop_app_info_new("org.kde.amarok.desktop")

hi,
try:

GDesktopAppInfo *app_info = g_desktop_app_info_new("kde4-org.kde.amarok.desktop")

ciao,
Tito

> If the "org.kde.amarok.desktop" file is located in:
> /usr/share/applications/kde4/org.kde.amarok.desktop
> This is the default location of Amarok player.
> ---
> Then I move the file "org.kde.amarok.desktop"  to /usr/share/applications/.
>
> $ sudo mv /usr/share/applications/kde4/org.kde.amarok.desktop
> /usr/share/applications/org.kde.amarok.desktop
>
> $ sudo updatedb
> $ locate org.kde.amarok.desktop
> /usr/share/applications/org.kde.amarok.desktop
>
> Now the call succeeds. It returns GDesktopAppInfo structure.
> GDesktopAppInfo *app_info = g_desktop_app_info_new("org.kde.amarok.desktop")
>
> Something is wrong, because the manual says that the desktop file can stay
> in a sub directory:
>
> """"
> g_desktop_app_info_new ()
> GDesktopAppInfo * g_desktop_app_info_new (const char *desktop_id);
>
> Creates a new GDesktopAppInfo based on a desktop file id.
>
> A desktop file id is the basename of the desktop file, including the
> .desktop extension. GIO is looking for a desktop file with this name in the
> applications subdirectories of the XDG data directories (i.e. the
> directories specified in the XDG_DATA_HOME and XDG_DATA_DIRS environment
> variables). GIO also supports the prefix-to-subdirectory mapping that is
> described in the Menu Spec (i.e. a desktop id of kde-foo.desktop will
> match/usr/share/applications/kde/foo.desktop).
> """"
>
> Just for info:
> My application gets the "org.kde.amarok.desktop" name from Amarok via the
> MPRIS2 DBus-interface.  Please see "DesktopEntry" of
> https://specifications.freedesktop.org/mpris-spec/latest/Media_Player.html#Property:DesktopEntry
>
> Please educate me.
>
> Kindly
>    Osmo Moma Antero
>    Portugal
>
_______________________________________________
gtk-app-devel-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
Reply | Threaded
Open this post in threaded view
|

Re: Finding .desktop file and application info

Gtk+ - Apps Dev mailing list
Osmo Antero
20:53 (há 11 minutos)
para tito-wolit

Hello Tito,
Muito obrigado.
Thank you, the call with "kde4-" worked fine.

However,  the "DesktopEntry" value from Amarok/DBus does not contain the
"kde4" part.
Please see the MRIS2-spec:
https://specifications.freedesktop.org/mpris-spec/latest/Media_Player.html#Property:DesktopEntry

My application cannot guess that it must include the "kde4" to get a valid
.desktop file.
I think g_desktop_app_info_new() should also browse all sub-directories,
but is does not.

One possible solutions is this:
The application should find the real location and path of
"org.kde.amarok.desktop".
The "locate" command does the same thing.
My app cannot call "locate" directly because it depends on "sudo updatedb".
I will write my own routine that dives to usr/share/applications/ and its
sub folders.
This is my best shot !

Then the app can call:
GDesktopAppInfo *g_desktop_app_info_new_from_filename(const char *filename);

My very old app is this: (the latest is v3.0.2)
https://launchpad.net/~audio-recorder

Thanks,
Obrigado e boa noite.
// Moma
Portugal

tito-wolit via gtk-app-devel-list <[hidden email]> escreveu
no dia domingo, 3/03/2019 à(s) 19:42:

>
>
> On 3/3/19 6:36 PM, Osmo Antero via gtk-app-devel-list wrote:
> > Hello,
> > I have an application that uses g_desktop_app_info_new() function to
> > find GDesktopAppInfo.
> >
> > I just wonder why the g_desktop_app_info_new() FAILS to find the
> > GDesktopAppInfo if the .desktop file is in a sub directory
> > under usr/share/applications/.
> >
> > So this fails:
> > GDesktopAppInfo *app_info =
> g_desktop_app_info_new("org.kde.amarok.desktop")
>
> hi,
> try:
>
> GDesktopAppInfo *app_info =
> g_desktop_app_info_new("kde4-org.kde.amarok.desktop")
>
> ciao,
> Tito
>
> > If the "org.kde.amarok.desktop" file is located in:
> > /usr/share/applications/kde4/org.kde.amarok.desktop
> > This is the default location of Amarok player.
> > ---
> > Then I move the file "org.kde.amarok.desktop"  to
> /usr/share/applications/.
> >
> > $ sudo mv /usr/share/applications/kde4/org.kde.amarok.desktop
> > /usr/share/applications/org.kde.amarok.desktop
> >
> > $ sudo updatedb
> > $ locate org.kde.amarok.desktop
> > /usr/share/applications/org.kde.amarok.desktop
> >
> > Now the call succeeds. It returns GDesktopAppInfo structure.
> > GDesktopAppInfo *app_info =
> g_desktop_app_info_new("org.kde.amarok.desktop")
> >
> > Something is wrong, because the manual says that the desktop file can
> stay
> > in a sub directory:
> >
> > """"
> > g_desktop_app_info_new ()
> > GDesktopAppInfo * g_desktop_app_info_new (const char *desktop_id);
> >
> > Creates a new GDesktopAppInfo based on a desktop file id.
> >
> > A desktop file id is the basename of the desktop file, including the
> > .desktop extension. GIO is looking for a desktop file with this name in
> the
> > applications subdirectories of the XDG data directories (i.e. the
> > directories specified in the XDG_DATA_HOME and XDG_DATA_DIRS environment
> > variables). GIO also supports the prefix-to-subdirectory mapping that is
> > described in the Menu Spec (i.e. a desktop id of kde-foo.desktop will
> > match/usr/share/applications/kde/foo.desktop).
> > """"
> >
> > Just for info:
> > My application gets the "org.kde.amarok.desktop" name from Amarok via the
> > MPRIS2 DBus-interface.  Please see "DesktopEntry" of
> >
> https://specifications.freedesktop.org/mpris-spec/latest/Media_Player.html#Property:DesktopEntry
> >
> > Please educate me.
> >
> > Kindly
> >    Osmo Moma Antero
> >    Portugal
> >
> _______________________________________________
> gtk-app-devel-list mailing list
> [hidden email]
> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
>


--
Sent from my PC, laptop or phone with Ubuntu-Linux.
_______________________________________________
gtk-app-devel-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
Reply | Threaded
Open this post in threaded view
|

Re: Finding .desktop file and application info

Gtk+ - Apps Dev mailing list
Btw:
Totem (GNOME `s Video Player) has very similar problem.
It «lies» about its .desktop file name. It says "totem" instead of
"org.gnome.Totem".
My app asks for it via DBus/MPRIS2 and gets wrong data.

$ locate -i totem | grep ".desktop"
/usr/share/applications/org.gnome.Totem.desktop

It is hard to co-operate on the Desktop when apps do stick to the damn
rules.

Boa noite,
  Moma

Osmo Antero <[hidden email]> escreveu no dia domingo, 3/03/2019 à(s)
21:05:

>
> Osmo Antero
> 20:53 (há 11 minutos)
> para tito-wolit
>
> Hello Tito,
> Muito obrigado.
> Thank you, the call with "kde4-" worked fine.
>
> However,  the "DesktopEntry" value from Amarok/DBus does not contain the
> "kde4" part.
> Please see the MRIS2-spec:
> https://specifications.freedesktop.org/mpris-spec/latest/Media_Player.html#Property:DesktopEntry
>
> My application cannot guess that it must include the "kde4" to get a valid
> .desktop file.
> I think g_desktop_app_info_new() should also browse all sub-directories,
> but is does not.
>
> One possible solutions is this:
> The application should find the real location and path of
> "org.kde.amarok.desktop".
> The "locate" command does the same thing.
> My app cannot call "locate" directly because it depends on "sudo
> updatedb".
> I will write my own routine that dives to usr/share/applications/ and its
> sub folders.
> This is my best shot !
>
> Then the app can call:
> GDesktopAppInfo *g_desktop_app_info_new_from_filename(const char
> *filename);
>
> My very old app is this: (the latest is v3.0.2)
> https://launchpad.net/~audio-recorder
>
> Thanks,
> Obrigado e boa noite.
> // Moma
> Portugal
>
> tito-wolit via gtk-app-devel-list <[hidden email]> escreveu
> no dia domingo, 3/03/2019 à(s) 19:42:
>
>>
>>
>> On 3/3/19 6:36 PM, Osmo Antero via gtk-app-devel-list wrote:
>> > Hello,
>> > I have an application that uses g_desktop_app_info_new() function to
>> > find GDesktopAppInfo.
>> >
>> > I just wonder why the g_desktop_app_info_new() FAILS to find the
>> > GDesktopAppInfo if the .desktop file is in a sub directory
>> > under usr/share/applications/.
>> >
>> > So this fails:
>> > GDesktopAppInfo *app_info =
>> g_desktop_app_info_new("org.kde.amarok.desktop")
>>
>> hi,
>> try:
>>
>> GDesktopAppInfo *app_info =
>> g_desktop_app_info_new("kde4-org.kde.amarok.desktop")
>>
>> ciao,
>> Tito
>>
>> > If the "org.kde.amarok.desktop" file is located in:
>> > /usr/share/applications/kde4/org.kde.amarok.desktop
>> > This is the default location of Amarok player.
>> > ---
>> > Then I move the file "org.kde.amarok.desktop"  to
>> /usr/share/applications/.
>> >
>> > $ sudo mv /usr/share/applications/kde4/org.kde.amarok.desktop
>> > /usr/share/applications/org.kde.amarok.desktop
>> >
>> > $ sudo updatedb
>> > $ locate org.kde.amarok.desktop
>> > /usr/share/applications/org.kde.amarok.desktop
>> >
>> > Now the call succeeds. It returns GDesktopAppInfo structure.
>> > GDesktopAppInfo *app_info =
>> g_desktop_app_info_new("org.kde.amarok.desktop")
>> >
>> > Something is wrong, because the manual says that the desktop file can
>> stay
>> > in a sub directory:
>> >
>> > """"
>> > g_desktop_app_info_new ()
>> > GDesktopAppInfo * g_desktop_app_info_new (const char *desktop_id);
>> >
>> > Creates a new GDesktopAppInfo based on a desktop file id.
>> >
>> > A desktop file id is the basename of the desktop file, including the
>> > .desktop extension. GIO is looking for a desktop file with this name in
>> the
>> > applications subdirectories of the XDG data directories (i.e. the
>> > directories specified in the XDG_DATA_HOME and XDG_DATA_DIRS environment
>> > variables). GIO also supports the prefix-to-subdirectory mapping that is
>> > described in the Menu Spec (i.e. a desktop id of kde-foo.desktop will
>> > match/usr/share/applications/kde/foo.desktop).
>> > """"
>> >
>> > Just for info:
>> > My application gets the "org.kde.amarok.desktop" name from Amarok via
>> the
>> > MPRIS2 DBus-interface.  Please see "DesktopEntry" of
>> >
>> https://specifications.freedesktop.org/mpris-spec/latest/Media_Player.html#Property:DesktopEntry
>> >
>> > Please educate me.
>> >
>> > Kindly
>> >    Osmo Moma Antero
>> >    Portugal
>> >
>> _______________________________________________
>> gtk-app-devel-list mailing list
>> [hidden email]
>> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
>>
>
>
> --
> Sent from my PC, laptop or phone with Ubuntu-Linux.
>


--
Sent from my PC, laptop or phone with Ubuntu-Linux.
_______________________________________________
gtk-app-devel-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
Reply | Threaded
Open this post in threaded view
|

Re: Finding .desktop file and application info

Gtk+ - Apps Dev mailing list
In reply to this post by Gtk+ - Apps Dev mailing list
Hello,
Yes,  g_desktop_app_info_search() is exactly what I need.
I will test it later.

Thanks a lot for your help.
// Moma

tito-wolit <[hidden email]> escreveu no dia segunda, 4/03/2019 à(s)
06:59:

>
>
> On 3/3/19 9:53 PM, Osmo Antero wrote:
> > Hello Tito,
> > Muito obrigado.
> > Thank you, the call with "kde4-" worked fine.
> >
> > However,  the "DesktopEntry" value from Amarok/DBus does not contain the
> "kde4" part.
> > Please see the MRIS2-spec:
> https://specifications.freedesktop.org/mpris-spec/latest/Media_Player.html#Property:DesktopEntry
> > My application cannot guess that it must include the "kde4" to get a
> valid .desktop file.
> > I think g_desktop_app_info_new() should also browse all sub-directories,
> but is does not.
>
> Hi,
>
> GDesktopAppInfo *app_info =
> g_desktop_app_info_new("org.kde.amarok.desktop");
> if (app_info == NULL )
>         app_info = g_desktop_app_info_new("kde-org.kde.amarok.desktop");
> if (app_info == NULL )
>         app_info = g_desktop_app_info_new("kde2-org.kde.amarok.desktop");
> if (app_info == NULL )
>         app_info = g_desktop_app_info_new("kde3-org.kde.amarok.desktop");
> if (app_info == NULL )
>         app_info = g_desktop_app_info_new("kde4-org.kde.amarok.desktop");
> if (app_info == NULL )
>         app_info = g_desktop_app_info_new("kde5-org.kde.amarok.desktop");
> else
>         puts("can't find org.kde.amarok.desktop")
>
> BTW: debian does set only:
>
> XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share/:/usr/share/:/usr/share
>
> maybe g_desktop_app_info_search ("amarok");
> and then app_info = g_desktop_app_info_new(**strv);
>
> g_desktop_app_info_search ()
>
> gchar ***
> g_desktop_app_info_search (const gchar *search_string);
>
> Searches desktop files for ones that match search_string .
>
> The return value is an array of strvs. Each strv contains a list of
> applications that matched search_string with an equal score.
> The outer list is sorted by score so that the first strv contains the
> best-matching applications, and so on.
> The algorithm for determining matches is undefined and may change at any
> time.
>
> Ciao,
> Tito
>
> > One possible solutions is this:
> > The application should find the real location and path of
> "org.kde.amarok.desktop".
> > The "locate" command does the same thing.
> > My app cannot call "locate" directly because it depends on "sudo
> updatedb".
> > I will write my own routine that dives to usr/share/applications/ and
> its sub folders.
> > This is my best shot !
> >
> > Then the app can call:
> > GDesktopAppInfo *g_desktop_app_info_new_from_filename(const char
> *filename);
> >
> > My very old app is this: (the latest is v3.0.2)
> > https://launchpad.net/~audio-recorder
> >
> > Thanks,
> > Obrigado e boa noite.
> > // Moma
> > Portugal
> >
> >
> >
> >
> > tito-wolit via gtk-app-devel-list <[hidden email] <mailto:
> [hidden email]>> escreveu no dia domingo, 3/03/2019 à(s)
> 19:42:
> >
> >
> >
> >     On 3/3/19 6:36 PM, Osmo Antero via gtk-app-devel-list wrote:
> >      > Hello,
> >      > I have an application that uses g_desktop_app_info_new() function
> to
> >      > find GDesktopAppInfo.
> >      >
> >      > I just wonder why the g_desktop_app_info_new() FAILS to find the
> >      > GDesktopAppInfo if the .desktop file is in a sub directory
> >      > under usr/share/applications/.
> >      >
> >      > So this fails:
> >      > GDesktopAppInfo *app_info =
> g_desktop_app_info_new("org.kde.amarok.desktop")
> >
> >     hi,
> >     try:
> >
> >     GDesktopAppInfo *app_info =
> g_desktop_app_info_new("kde4-org.kde.amarok.desktop")
> >
> >     ciao,
> >     Tito
> >
> >      > If the "org.kde.amarok.desktop" file is located in:
> >      > /usr/share/applications/kde4/org.kde.amarok.desktop
> >      > This is the default location of Amarok player.
> >      > ---
> >      > Then I move the file "org.kde.amarok.desktop"  to
> /usr/share/applications/.
> >      >
> >      > $ sudo mv /usr/share/applications/kde4/org.kde.amarok.desktop
> >      > /usr/share/applications/org.kde.amarok.desktop
> >      >
> >      > $ sudo updatedb
> >      > $ locate org.kde.amarok.desktop
> >      > /usr/share/applications/org.kde.amarok.desktop
> >      >
> >      > Now the call succeeds. It returns GDesktopAppInfo structure.
> >      > GDesktopAppInfo *app_info =
> g_desktop_app_info_new("org.kde.amarok.desktop")
> >      >
> >      > Something is wrong, because the manual says that the desktop file
> can stay
> >      > in a sub directory:
> >      >
> >      > """"
> >      > g_desktop_app_info_new ()
> >      > GDesktopAppInfo * g_desktop_app_info_new (const char *desktop_id);
> >      >
> >      > Creates a new GDesktopAppInfo based on a desktop file id.
> >      >
> >      > A desktop file id is the basename of the desktop file, including
> the
> >      > .desktop extension. GIO is looking for a desktop file with this
> name in the
> >      > applications subdirectories of the XDG data directories (i.e. the
> >      > directories specified in the XDG_DATA_HOME and XDG_DATA_DIRS
> environment
> >      > variables). GIO also supports the prefix-to-subdirectory mapping
> that is
> >      > described in the Menu Spec (i.e. a desktop id of kde-foo.desktop
> will
> >      > match/usr/share/applications/kde/foo.desktop).
> >      > """"
> >      >
> >      > Just for info:
> >      > My application gets the "org.kde.amarok.desktop" name from Amarok
> via the
> >      > MPRIS2 DBus-interface.  Please see "DesktopEntry" of
> >      >
> https://specifications.freedesktop.org/mpris-spec/latest/Media_Player.html#Property:DesktopEntry
> >      >
> >      > Please educate me.
> >      >
> >      > Kindly
> >      >    Osmo Moma Antero
> >      >    Portugal
> >      >
> >     _______________________________________________
> >     gtk-app-devel-list mailing list
> >     [hidden email] <mailto:[hidden email]>
> >     https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
> >
> >
> >
> > --
> > Sent from my PC, laptop or phone with Ubuntu-Linux.
>


--
Sent from my PC, laptop or phone with Ubuntu-Linux.
_______________________________________________
gtk-app-devel-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list