From 0cff111249ae60f7b9b6662fc7beaed1b5ec8dde Mon Sep 17 00:00:00 2001 From: MarcoPolo-PasTonMolo Date: Thu, 26 May 2022 21:06:27 +0300 Subject: [PATCH] Add checks for whether gdk-pixbuf exists before using avatar set --- configure.ac | 11 +++++++++++ src/command/cmd_funcs.c | 4 ++++ src/main.c | 6 ++++++ src/xmpp/avatar.c | 6 ++++-- src/xmpp/avatar.h | 2 ++ tests/unittests/xmpp/stub_avatar.c | 5 ++++- 6 files changed, 31 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 158878b0..5124f2ed 100644 --- a/configure.ac +++ b/configure.ac @@ -65,6 +65,8 @@ AC_ARG_WITH([themes], [AS_HELP_STRING([--with-themes[[=PATH]]], [install themes (default yes)])]) AC_ARG_ENABLE([icons-and-clipboard], [AS_HELP_STRING([--enable-icons-and-clipboard], [enable GTK tray icons and clipboard paste support])]) +AC_ARG_ENABLE([gdk-pixbuf], + [AS_HELP_STRING([--enable-gdk-pixbuf], [enable GDK Pixbuf support])]) # Required dependencies @@ -306,6 +308,15 @@ if test "x$enable_otr" != xno; then AM_COND_IF([BUILD_OTR], [AC_DEFINE([HAVE_LIBOTR], [1], [Have libotr])]) fi +dnl feature: pixbuf +AS_IF([test "x$enable_pixbuf" != xno], + [PKG_CHECK_MODULES([gdk_pixbuf], [gdk-pixbuf-2.0 >= 2.4], + [AC_DEFINE([HAVE_PIXBUF], [1], [gdk-pixbuf module])], + [AS_IF([test "x$enable_pixbuf" = xyes], + [AC_MSG_ERROR([gdk-pixbuf-2.0 >= 2.4 is required for GDK Pixbuf support])], + [AC_MSG_NOTICE([gdk-pixbuf-2.0 >= 2.4 not found, GDK Pixbuf support not enabled])])])]) + + dnl feature: omemo AM_CONDITIONAL([BUILD_OMEMO], [false]) if test "x$enable_omemo" != xno; then diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index 26eb9c3e..dfe96971 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -9196,9 +9196,13 @@ cmd_avatar(ProfWin* window, const char* const command, gchar** args) } if (g_strcmp0(args[0], "set") == 0) { +#ifdef HAVE_PIXBUF if (avatar_set(args[1])) { cons_show("Avatar updated successfully"); } +#else + cons_show("This version of Profanity has not been built with GDK Pixbuf support enabled"); +#endif } else if (g_strcmp0(args[0], "get") == 0) { avatar_get_by_nick(args[1], false); } else if (g_strcmp0(args[0], "open") == 0) { diff --git a/src/main.c b/src/main.c index 15e4948a..42629370 100644 --- a/src/main.c +++ b/src/main.c @@ -173,6 +173,12 @@ main(int argc, char** argv) g_print("GTK icons/clipboard: Disabled\n"); #endif +#ifdef HAVE_PIXBUF + g_print("GDK Pixbuf: Enabled\n"); +#else + g_print("GDK Pixbuf: Disabled\n"); +#endif + return 0; } diff --git a/src/xmpp/avatar.c b/src/xmpp/avatar.c index d826dd90..15ec7f1a 100644 --- a/src/xmpp/avatar.c +++ b/src/xmpp/avatar.c @@ -95,6 +95,7 @@ avatar_pep_subscribe(void) shall_open = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); } +#ifdef HAVE_PIXBUF gboolean avatar_set(const char* path) { @@ -104,7 +105,7 @@ avatar_set(const char* path) GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file(expanded_path, &err); if (pixbuf == NULL) { - cons_show("An error occurred while opening %s: %s.", expanded_path, err ? err->message : "No error message given"); + cons_show_error("An error occurred while opening %s: %s.", expanded_path, err ? err->message : "No error message given"); return FALSE; } free(expanded_path); @@ -129,7 +130,7 @@ avatar_set(const char* path) gsize len = -1; if (!gdk_pixbuf_save_to_buffer(pixbuf, &img_data, &len, "png", &err, NULL)) { - cons_show("Unable to scale and convert avatar."); + cons_show_error("Unable to scale and convert avatar."); return FALSE; } @@ -146,6 +147,7 @@ avatar_set(const char* path) return TRUE; } +#endif gboolean avatar_get_by_nick(const char* nick, gboolean open) diff --git a/src/xmpp/avatar.h b/src/xmpp/avatar.h index 1767a2b2..c65328ad 100644 --- a/src/xmpp/avatar.h +++ b/src/xmpp/avatar.h @@ -40,6 +40,8 @@ void avatar_pep_subscribe(void); gboolean avatar_get_by_nick(const char* nick, gboolean open); +#ifdef HAVE_PIXBUF gboolean avatar_set(const char* path); +#endif #endif diff --git a/tests/unittests/xmpp/stub_avatar.c b/tests/unittests/xmpp/stub_avatar.c index 453d1863..9f07c334 100644 --- a/tests/unittests/xmpp/stub_avatar.c +++ b/tests/unittests/xmpp/stub_avatar.c @@ -8,8 +8,11 @@ avatar_get_by_nick(const char* nick) { return TRUE; } + +#ifdef HAVE_PIXBUF gboolean avatar_set(const char* path) { - return FALSE; + return TRUE; } +#endif