Properly detect changes in .desktop files

This fixes the shell not picking updates to the contents of the underlying
.desktop files for application launchers, or when a .desktop file is
overriden by a user-installed one under ~/.local/share/applications

https://bugzilla.gnome.org/show_bug.cgi?id=773636
This commit is contained in:
Adrian Perez de Castro 2016-11-07 20:59:03 +02:00 committed by Michael Catanzaro
parent 7557207b47
commit 5136369c18

View File

@ -112,19 +112,40 @@ scan_startup_wm_class_to_id (ShellAppSystem *self)
static gboolean static gboolean
app_is_stale (ShellApp *app) app_is_stale (ShellApp *app)
{ {
GDesktopAppInfo *info; GDesktopAppInfo *info, *old;
gboolean is_stale; GAppInfo *old_info, *new_info;
gboolean is_unchanged;
if (shell_app_is_window_backed (app)) if (shell_app_is_window_backed (app))
return FALSE; return FALSE;
info = g_desktop_app_info_new (shell_app_get_id (app)); info = g_desktop_app_info_new (shell_app_get_id (app));
is_stale = (info == NULL); if (!info)
return TRUE;
old = shell_app_get_app_info (app);
old_info = G_APP_INFO (old);
new_info = G_APP_INFO (info);
is_unchanged =
g_app_info_should_show (old_info) == g_app_info_should_show (new_info) &&
strcmp (g_desktop_app_info_get_filename (old),
g_desktop_app_info_get_filename (info)) == 0 &&
g_strcmp0 (g_app_info_get_executable (old_info),
g_app_info_get_executable (new_info)) == 0 &&
g_strcmp0 (g_app_info_get_commandline (old_info),
g_app_info_get_commandline (new_info)) == 0 &&
strcmp (g_app_info_get_name (old_info),
g_app_info_get_name (new_info)) == 0 &&
g_strcmp0 (g_app_info_get_description (old_info),
g_app_info_get_description (new_info)) == 0 &&
strcmp (g_app_info_get_display_name (old_info),
g_app_info_get_display_name (new_info)) == 0 &&
g_icon_equal (g_app_info_get_icon (old_info),
g_app_info_get_icon (new_info));
if (info)
g_object_unref (info); g_object_unref (info);
return !is_unchanged;
return is_stale;
} }
static gboolean static gboolean