Skip to content
Snippets Groups Projects
Commit f3eec092 authored by Bart Ribbers's avatar Bart Ribbers Committed by Rasmus Thomsen
Browse files

community/phosh: backport patch to fix a phantom launcher

parent 18373353
3 merge requests!11958community/rclone: upgrade to 1.52.3,!9763[3.12] community/znc: upgrade to 1.8.1,!9496community/phosh: backport patch to fix a phantom launcher
Taken from upstream, fixes an issue where an application launcher would
in some cases disappear making it impossible to launch that application
via the GUI.
From 1b642cd8ba63fd10ad40030e1e9c16e04c090e6e Mon Sep 17 00:00:00 2001
From: Zander Brown <zbrown@gnome.org>
Date: Fri, 19 Jun 2020 19:49:14 +0100
Subject: [PATCH] app-list-model: phantom launcher
At last a fix for the missing item problem
tl;dr: we skipped the first entry
The reason it was weirdly deterministic is that we _always_ skipped
the first item and as long as the entries didn't change the item would
_always_ be the same
Why was the item seemingly random? Because the list doesn't have any
sorting at the point we lost an item
So why didn't this effect more people? A system has many, many entries -
a lot of which aren't actually app launchers. For example my laptop
currently has 301 entries of which 172 should actually be shown. By pure
fluke we got lucky most of the time and skipped an unintersting one.
The fix is painfully simple: iterate the GList properly
---
src/app-list-model.c | 18 +++++++++--------
tools/dump-app-list.c | 47 +++++++++++++++++++++++++++++++++++++++++++
tools/meson.build | 3 +++
3 files changed, 60 insertions(+), 8 deletions(-)
create mode 100644 tools/dump-app-list.c
diff --git a/src/app-list-model.c b/src/app-list-model.c
index 648ee00..5281985 100644
--- a/src/app-list-model.c
+++ b/src/app-list-model.c
@@ -1,12 +1,14 @@
/*
- * Copyright © 2019 Zander Brown <zbrown@gnome.org>
+ * Copyright © 2019-2020 Zander Brown <zbrown@gnome.org>
*
* Inspired by gliststore.c:
* Copyright 2015 Lars Uebernickel
* Copyright 2015 Ryan Lortie
* https://gitlab.gnome.org/GNOME/glib/blob/713fec9dcb1ee49c4f64bbb6f483a5cd1db9966a/gio/gliststore.c
*
- * SPDX-License-Identifier: GPL-3.0+
+ * SPDX-License-Identifier: GPL-3-or-later
+ *
+ * Author: Zander Brown <zbrown@gnome.org>
*/
#include "app-list-model.h"
@@ -116,27 +118,27 @@ items_changed (gpointer data)
{
PhoshAppListModel *self = PHOSH_APP_LIST_MODEL (data);
PhoshAppListModelPrivate *priv = phosh_app_list_model_get_instance_private (self);
- GList *new_apps;
+ g_autolist(GAppInfo) new_apps = NULL;
int removed;
int added = 0;
new_apps = g_app_info_get_all ();
+ g_return_val_if_fail (new_apps != NULL, G_SOURCE_REMOVE);
+
removed = g_sequence_get_length (priv->items);
g_sequence_remove_range (g_sequence_get_begin_iter (priv->items),
g_sequence_get_end_iter (priv->items));
- while ((new_apps = g_list_next (new_apps))) {
- if (!g_app_info_should_show (G_APP_INFO (new_apps->data))) {
+ for (GList *l = new_apps; l; l = g_list_next (l)) {
+ if (!g_app_info_should_show (G_APP_INFO (l->data))) {
continue;
}
- g_sequence_append (priv->items, g_object_ref (new_apps->data));
+ g_sequence_append (priv->items, g_object_ref (l->data));
added++;
}
- g_list_free_full (new_apps, g_object_unref);
-
priv->last.is_valid = FALSE;
priv->last.iter = NULL;
priv->last.position = 0;
diff --git a/tools/dump-app-list.c b/tools/dump-app-list.c
new file mode 100644
index 0000000..2f7919d
--- /dev/null
+++ b/tools/dump-app-list.c
@@ -0,0 +1,47 @@
+/*
+ * Copyright © 2020 Zander Brown <zbrown@gnome.org>
+ *
+ * SPDX-License-Identifier: GPL-3-or-later
+ *
+ * Author: Zander Brown <zbrown@gnome.org>
+ *
+ * Print the contents of PhoshAppListModel
+ */
+
+#include <app-list-model.h>
+
+int
+main (int argc, char **argv)
+{
+ PhoshAppListModel *list = phosh_app_list_model_get_default ();
+ int i = 0;
+ GAppInfo *info;
+ GMainLoop *loop;
+
+ g_print ("Populating...\n");
+
+ /* Let the main loop run a bit for the timeouts/idle callbacks to run */
+ loop = g_main_loop_new (NULL, FALSE);
+ g_timeout_add_seconds (2, G_SOURCE_FUNC (g_main_loop_quit), loop);
+ g_main_loop_run (loop);
+
+ while ((info = g_list_model_get_item (G_LIST_MODEL (list), i))) {
+ if (G_IS_DESKTOP_APP_INFO (info)) {
+ g_print ("%s\n - %s\n",
+ g_app_info_get_id (info),
+ g_desktop_app_info_get_filename (G_DESKTOP_APP_INFO (info)));
+ } else {
+ /* Unlikely but handle it just in case */
+ g_print ("%s\n - %s\n",
+ g_app_info_get_id (info),
+ G_OBJECT_TYPE_NAME (info));
+ }
+
+ i++;
+ g_clear_object (&info);
+ }
+
+ g_print ("=== %i items\n", i);
+
+ return 0;
+}
diff --git a/tools/meson.build b/tools/meson.build
index 65a6a6d..d3fdd13 100644
--- a/tools/meson.build
+++ b/tools/meson.build
@@ -34,3 +34,6 @@ executable('notify-blocks', ['notify-blocks.c'],
executable('notify-server-standalone', ['notify-server-standalone.c'] + stubs,
dependencies: phosh_dep)
+
+executable('dump-app-list', ['dump-app-list.c'],
+ dependencies: phosh_dep)
--
2.27.0
......@@ -2,7 +2,7 @@
# Maintainer: Rasmus Thomsen <oss@cogitri.dev>
pkgname=phosh
pkgver=0.3.0
pkgrel=0
pkgrel=1
pkgdesc="Shell PoC for the Librem5"
# Blocked on mips and s390x by gnome-session, gnome-settings-daemon, squeekboard and libhandy
# Blocked on ppc64le by gnome-session
......@@ -18,6 +18,7 @@ subpackages="$pkgname-lang"
source="$pkgname-$pkgver.tar.xz::https://repo.pureos.net/pureos/pool/main/p/phosh/phosh_$pkgver.tar.xz
phosh.desktop
sm.puri.OSK0.desktop
0001-app-list-model-phantom-launcher.patch
"
options="!check" # Needs a running Wayland compositor
......@@ -55,4 +56,5 @@ package() {
}
sha512sums="13561a413ab56c678c0550e0fdb7d5cbf739c2b6bab5aec84037903e15a3352539d82fb2a9f5fd7b447378507530e5473e6f1add00c6e5c37f88c26f95caa602 phosh-0.3.0.tar.xz
6644870edbbbc6b88d6e19f7771d81dba1a11066c2b34e4c22736db73a2dfd0d4909b4967503059c35385c5139a834a5c06a3c56b148ba1275d7f089c0c5f33c phosh.desktop
f97019598323276cf97ae62f04b6245983198e04b228ddc605835ee46845d9b88c6890fb86e97e4bb6f1ad73361437d9ed18c91e81fe1284a88cdcb92d3fdc69 sm.puri.OSK0.desktop"
f97019598323276cf97ae62f04b6245983198e04b228ddc605835ee46845d9b88c6890fb86e97e4bb6f1ad73361437d9ed18c91e81fe1284a88cdcb92d3fdc69 sm.puri.OSK0.desktop
028ae14f8991b66ee3d9384f3b69a57c7e6a32379d2101bc4c0798de7d247f96af20b7993b4854e717fa5e711ef6ca780b38a4bca06f2d5f465bf677bc57fbd4 0001-app-list-model-phantom-launcher.patch"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment