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:
parent
3c6c51125c
commit
722bef3d0c
@ -112,19 +112,40 @@ scan_startup_wm_class_to_id (ShellAppSystem *self)
|
||||
static gboolean
|
||||
app_is_stale (ShellApp *app)
|
||||
{
|
||||
GDesktopAppInfo *info;
|
||||
gboolean is_stale;
|
||||
GDesktopAppInfo *info, *old;
|
||||
GAppInfo *old_info, *new_info;
|
||||
gboolean is_unchanged;
|
||||
|
||||
if (shell_app_is_window_backed (app))
|
||||
return FALSE;
|
||||
|
||||
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);
|
||||
|
||||
return is_stale;
|
||||
return !is_unchanged;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
Loading…
Reference in New Issue
Block a user