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?= +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 " +--- + 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 + #include + +-#include + #include + #include + ++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 +