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
7557207b47
commit
5136369c18
@ -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;
|
||||||
|
|
||||||
if (info)
|
old = shell_app_get_app_info (app);
|
||||||
g_object_unref (info);
|
old_info = G_APP_INFO (old);
|
||||||
|
new_info = G_APP_INFO (info);
|
||||||
|
|
||||||
return is_stale;
|
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));
|
||||||
|
|
||||||
|
g_object_unref (info);
|
||||||
|
return !is_unchanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
Loading…
Reference in New Issue
Block a user