gnome-base/gnome-menus: Upstream patch for handling of multiple desktops in XDG_CURRENT_DESKTOP

Package-Manager: portage-2.2.26
This commit is contained in:
Pacho Ramos
2015-12-26 15:42:49 +01:00
parent 0243efe68f
commit 175e747b92
3 changed files with 251 additions and 0 deletions

View File

@@ -0,0 +1,171 @@
From b4546ab43c2c7ef6fb6cb7e5db83dc3975b56e8e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alberts=20Muktup=C4=81vels?= <alberts.muktupavels@gmail.com>
Date: Mon, 27 Oct 2014 18:41:34 +0200
Subject: desktop-entries: support multiple desktops in XDG_CURRENT_DESKTOP
This is based on glib commit:
5a5e16e93c4f11e635918ecdb41681f63fd05a39
---
libmenu/desktop-entries.c | 110 ++++++++++++++++++++++------------------------
1 file changed, 52 insertions(+), 58 deletions(-)
diff --git a/libmenu/desktop-entries.c b/libmenu/desktop-entries.c
index 326f311..bd4f886 100644
--- a/libmenu/desktop-entries.c
+++ b/libmenu/desktop-entries.c
@@ -85,32 +85,27 @@ unix_basename_from_path (const char *path)
return path;
}
-static const char *
-get_current_desktop (void)
+static const gchar * const *
+get_current_desktops (void)
{
- static char *current_desktop = NULL;
+ static gchar **result;
- /* Support XDG_CURRENT_DESKTOP environment variable; this can be used
- * to abuse gnome-menus in non-GNOME desktops. */
- if (!current_desktop)
+ if (g_once_init_enter (&result))
{
- const char *desktop;
+ const gchar *desktops;
+ gchar **tmp;
- desktop = g_getenv ("XDG_CURRENT_DESKTOP");
+ desktops = g_getenv ("XDG_CURRENT_DESKTOP");
- /* Note: if XDG_CURRENT_DESKTOP is set but empty, do as if it
- * was not set */
- if (!desktop || desktop[0] == '\0')
- current_desktop = g_strdup ("GNOME");
- else
- current_desktop = g_strdup (desktop);
- }
+ if (desktops)
+ desktops = "";
- /* Using "*" means skipping desktop-related checks */
- if (g_strcmp0 (current_desktop, "*") == 0)
- return NULL;
+ tmp = g_strsplit (desktops, ":", 0);
+
+ g_once_init_leave (&result, tmp);
+ }
- return current_desktop;
+ return (const gchar **) result;
}
static GIcon *
@@ -151,52 +146,58 @@ key_file_get_icon (GKeyFile *key_file)
static gboolean
key_file_get_show_in (GKeyFile *key_file)
{
- const gchar *current_desktop;
- gchar **strv;
+ const gchar * const *current_desktops;
+ gchar **only_show_in;
+ gchar **not_show_in;
gboolean show_in = TRUE;
- int i;
-
- current_desktop = get_current_desktop ();
- if (!current_desktop)
- return TRUE;
-
- strv = g_key_file_get_string_list (key_file,
- DESKTOP_ENTRY_GROUP,
- "OnlyShowIn",
- NULL,
- NULL);
- if (strv)
+ gint i;
+
+ current_desktops = get_current_desktops ();
+ only_show_in = g_key_file_get_string_list (key_file,
+ DESKTOP_ENTRY_GROUP,
+ "OnlyShowIn",
+ NULL,
+ NULL);
+ not_show_in = g_key_file_get_string_list (key_file,
+ DESKTOP_ENTRY_GROUP,
+ "NotShowIn",
+ NULL,
+ NULL);
+
+ for (i = 0; current_desktops[i]; i++)
{
- show_in = FALSE;
- for (i = 0; strv[i]; i++)
+ gint j;
+
+ if (only_show_in)
{
- if (!strcmp (strv[i], current_desktop))
+ show_in = FALSE;
+ for (j = 0; only_show_in[j]; j++)
{
- show_in = TRUE;
- break;
+ if (g_str_equal (only_show_in[j], current_desktops[i]))
+ {
+ show_in = TRUE;
+ goto out;
+ }
}
}
- }
- else
- {
- strv = g_key_file_get_string_list (key_file,
- DESKTOP_ENTRY_GROUP,
- "NotShowIn",
- NULL,
- NULL);
- if (strv)
+
+ if (not_show_in)
{
show_in = TRUE;
- for (i = 0; strv[i]; i++)
+ for (j = 0; not_show_in[j]; j++)
{
- if (!strcmp (strv[i], current_desktop))
+ if (g_str_equal (not_show_in[j], current_desktops[i]))
{
show_in = FALSE;
+ goto out;
}
}
}
}
- g_strfreev (strv);
+
+out:
+ g_strfreev (only_show_in);
+ g_strfreev (not_show_in);
return show_in;
}
@@ -579,14 +580,7 @@ gboolean
desktop_entry_get_show_in (DesktopEntry *entry)
{
if (entry->type == DESKTOP_ENTRY_DESKTOP)
- {
- const char *current_desktop = get_current_desktop ();
-
- if (current_desktop == NULL)
- return TRUE;
- else
- return g_desktop_app_info_get_show_in (((DesktopEntryDesktop*)entry)->appinfo, current_desktop);
- }
+ return g_desktop_app_info_get_show_in (((DesktopEntryDesktop*)entry)->appinfo, NULL);
return ((DesktopEntryDirectory*)entry)->showin;
}
--
cgit v0.11.2

View File

@@ -0,0 +1,27 @@
From 4befe76fbdb76aa6a986297ef71d1601b2ced42e Mon Sep 17 00:00:00 2001
From: Josselin Mouette <joss@debian.org>
Date: Sun, 14 Dec 2014 20:36:36 +0100
Subject: desktop-entries: fix trivial bug in handling of multiple desktops in
XDG_CURRENT_DESKTOP.
https://bugzilla.gnome.org/show_bug.cgi?id=741505
---
libmenu/desktop-entries.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libmenu/desktop-entries.c b/libmenu/desktop-entries.c
index bd4f886..a463d79 100644
--- a/libmenu/desktop-entries.c
+++ b/libmenu/desktop-entries.c
@@ -97,7 +97,7 @@ get_current_desktops (void)
desktops = g_getenv ("XDG_CURRENT_DESKTOP");
- if (desktops)
+ if (!desktops)
desktops = "";
tmp = g_strsplit (desktops, ":", 0);
--
cgit v0.11.2

View File

@@ -0,0 +1,53 @@
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
EAPI="5"
GCONF_DEBUG="yes"
inherit eutils gnome2
DESCRIPTION="Library for the Desktop Menu fd.o specification"
HOMEPAGE="https://git.gnome.org/browse/gnome-menus"
LICENSE="GPL-2+ LGPL-2+"
SLOT="3"
KEYWORDS="~alpha ~amd64 ~arm ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd ~x86-freebsd ~x86-interix ~amd64-linux ~x86-linux ~ppc-macos ~x86-macos ~x86-solaris"
IUSE="+introspection test"
COMMON_DEPEND="
>=dev-libs/glib-2.29.15:2
introspection? ( >=dev-libs/gobject-introspection-0.9.5:= )
"
# Older versions of slot 0 install the menu editor and the desktop directories
RDEPEND="${COMMON_DEPEND}
!<gnome-base/gnome-menus-3.0.1-r1:0
"
DEPEND="${COMMON_DEPEND}
>=dev-util/intltool-0.40
sys-devel/gettext
virtual/pkgconfig
test? ( dev-libs/gjs )
"
src_prepare() {
# Don't show KDE standalone settings desktop files in GNOME others menu
epatch "${FILESDIR}/${PN}-3.8.0-ignore_kde_standalone.patch"
# desktop-entries: support multiple desktops in XDG_CURRENT_DESKTOP
# (from 'master')
epatch "${FILESDIR}"/${P}-multiple-desktop{,2}.patch
gnome2_src_prepare
}
src_configure() {
DOCS="AUTHORS ChangeLog HACKING NEWS README"
# Do NOT compile with --disable-debug/--enable-debug=no
# It disables api usage checks
gnome2_src_configure \
$(use_enable introspection) \
--disable-static
}