commit 55d25101a4892f830e94938c33d6c27801648303
Author: Nicolas Chauvet <kwizart(a)gmail.com>
Date: Fri Oct 30 13:42:05 2020 +0100
Add notify patch
notify-don-t-depend-on-any-GTK-version.patch | 101 +++++++++++++++++++++++++++
1 file changed, 101 insertions(+)
---
diff --git a/notify-don-t-depend-on-any-GTK-version.patch
b/notify-don-t-depend-on-any-GTK-version.patch
new file mode 100644
index 0000000..b01a73c
--- /dev/null
+++ b/notify-don-t-depend-on-any-GTK-version.patch
@@ -0,0 +1,101 @@
+From c25400b146f7a7b3b4a29c0efa4daee9d1c49633 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= <remi(a)remlab.net>
+Date: Tue, 5 May 2020 18:48:06 +0300
+Subject: [PATCH] notify: don't depend on any GTK version
+
+If there's one in the process use it. If there's none fallback to
+default VLC icon with the old code.
+
+This not only avoids VLC builds depending on GTK, but this should
+prevent crashes if GTK 2 is present in the process (e.g. through Qt plugin).
+
+Adapted to vlc-3.x by "Nicolas Chauvet <kwizart(a)gmail.com>"
+---
+ configure.ac | 2 +-
+ modules/notify/notify.c | 38 ++++++++++++++++++++++----------------
+ 2 files changed, 23 insertions(+), 17 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 09ac250ff483..a3ef64318561 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -4206,7 +4206,7 @@ AS_IF([test "${enable_osx_notifications}" !=
"no"], [
+ dnl
+ dnl Libnotify notification plugin
+ dnl
+-PKG_ENABLE_MODULES_VLC([NOTIFY], [], [libnotify gtk+-3.0], [libnotify notification],
[auto])
++PKG_ENABLE_MODULES_VLC([NOTIFY], [], [libnotify], [libnotify notification], [auto])
+
+ dnl
+ dnl libplacebo support
+diff --git a/modules/notify/notify.c b/modules/notify/notify.c
+index bd6bba6c32c8..20b7c4acb761 100644
+--- a/modules/notify/notify.c
++++ b/modules/notify/notify.c
+@@ -36,10 +36,16 @@
+ #include <vlc_playlist.h>
+ #include <vlc_url.h>
+
+-#include <gtk/gtk.h>
+ #include <gdk-pixbuf/gdk-pixbuf.h>
+ #include <libnotify/notify.h>
+
++typedef struct GtkIconTheme GtkIconTheme;
++enum GtkIconLookupFlags { dummy = 0x7fffffff };
++
++__attribute__((weak)) GtkIconTheme *gtk_icon_theme_get_default(void);
++__attribute__((weak)) GdkPixbuf *gtk_icon_theme_load_icon(GtkIconTheme *,
++ const char *icon_name, int size, enum GtkIconLookupFlags, GError **);
++
+ #ifndef NOTIFY_CHECK_VERSION
+ # define NOTIFY_CHECK_VERSION(x,y,z) 0
+ #endif
+@@ -222,30 +228,30 @@ static int ItemChange( vlc_object_t *p_this, const char *psz_var,
+ GError *p_error = NULL;
+ pix = gdk_pixbuf_new_from_file_at_scale( psz_arturl,
+ 72, 72, TRUE, &p_error );
++ free( psz_arturl );
+ }
+- else /* else we show state-of-the art logo */
++ else
++ /* else we show state-of-the art logo */
++ if( gtk_icon_theme_get_default != NULL
++ && gtk_icon_theme_load_icon != NULL )
+ {
+ /* First try to get an icon from the current theme. */
+ GtkIconTheme* p_theme = gtk_icon_theme_get_default();
+ pix = gtk_icon_theme_load_icon( p_theme, "vlc", 72, 0, NULL);
+-
+- if( !pix )
++ }
++ else
++ { /* Load icon from share/ */
++ GError *p_error = NULL;
++ char *psz_pixbuf;
++ char *psz_data = config_GetDataDir();
++ if( asprintf( &psz_pixbuf, "%s/icons/48x48/vlc.png", psz_data )
>= 0 )
+ {
+- /* Load icon from share/ */
+- GError *p_error = NULL;
+- char *psz_pixbuf;
+- char *psz_data = config_GetDataDir();
+- if( asprintf( &psz_pixbuf, "%s/icons/48x48/vlc.png", psz_data
) >= 0 )
+- {
+- pix = gdk_pixbuf_new_from_file( psz_pixbuf, &p_error );
+- free( psz_pixbuf );
+- }
+- free( psz_data );
++ pix = gdk_pixbuf_new_from_file( psz_pixbuf, &p_error );
++ free( psz_pixbuf );
+ }
++ free( psz_data );
+ }
+
+- free( psz_arturl );
+-
+ /* we need to replace '&' with '&' because
'&' is a keyword of
+ * notification-daemon parser */
+ const int i_len = strlen( psz_tmp );
+--
+2.25.4
+