Skip to content

Commit

Permalink
audgui: Restore GTK3 support
Browse files Browse the repository at this point in the history
- Add a slim compatibility layer (gtk-compat.h)
  which makes it pretty straightforward to support
  both GTK versions in one code base.

- GTK2 is still the default (requested by @jlindgren90).
  GTK3 can be enabled with "--enable-gtk3",
  or when using Meson with "-D gtk3=true".

- Require at least GTK 3.22 (released in 2016) to avoid
  specific GTK version checks and make use of recent APIs
  if possible.

- Since GTK2 is end of life upstream, modern distributions
  may have stopped to ship Audacious with GTK support.
  Now they can do that again with GTK3 and Qt combined
  or as separate packages.

Pull Request: #54
  • Loading branch information
radioactiveman committed Dec 23, 2022
1 parent fe96640 commit 09ce8a4
Show file tree
Hide file tree
Showing 25 changed files with 598 additions and 122 deletions.
12 changes: 12 additions & 0 deletions acinclude.m4
Expand Up @@ -184,6 +184,18 @@ AC_DEFINE([GLIB_VERSION_MIN_REQUIRED], [GLIB_VERSION_2_32], [target GLib 2.32])
dnl GTK+ support
dnl =============
AC_ARG_ENABLE(gtk3,
AS_HELP_STRING(--enable-gtk3, [Use GTK3 instead of GTK2 (default=disabled)]),
USE_GTK3=$enableval, USE_GTK3=no)
if test $USE_GTK3 = yes ; then
PKG_CHECK_MODULES(GTK, gtk+-3.0 >= 3.22)
AC_DEFINE(USE_GTK, 1, [Define if GTK+ support enabled])
AC_DEFINE(USE_GTK3, 1, [Define if GTK3+ support enabled])
fi
AC_SUBST(USE_GTK3)
AC_ARG_ENABLE(gtk,
AS_HELP_STRING(--disable-gtk, [Disable GTK+ support (default=enabled)]),
USE_GTK=$enableval, USE_GTK=yes)
Expand Down
15 changes: 12 additions & 3 deletions meson.build
Expand Up @@ -39,8 +39,13 @@ endif


if get_option('gtk')
gtk_req = '>= 2.24'
gtk_dep = dependency('gtk+-2.0', version: gtk_req, required: true)
if get_option('gtk3')
gtk_req = '>= 3.22'
gtk_dep = dependency('gtk+-3.0', version: gtk_req, required: true)
else
gtk_req = '>= 2.24'
gtk_dep = dependency('gtk+-2.0', version: gtk_req, required: true)
endif
endif


Expand Down Expand Up @@ -155,6 +160,9 @@ endif

if get_option('gtk')
conf.set10('USE_GTK', true)
if (get_option('gtk3'))
conf.set10('USE_GTK3', true)
endif
endif


Expand Down Expand Up @@ -211,7 +219,8 @@ if meson.version().version_compare('>= 0.53')
'D-Bus support': get_option('dbus'),
'Qt 5 support': get_option('qt') and not get_option('qt6'),
'Qt 6 support': get_option('qt6'),
'GTK support': get_option('gtk'),
'GTK2 support': get_option('gtk') and not get_option('gtk3'),
'GTK3 support': get_option('gtk3'),
'Libarchive support': get_option('libarchive'),
'Valgrind analysis support': get_option('valgrind'),
'Build stamp': get_option('buildstamp'),
Expand Down
2 changes: 2 additions & 0 deletions meson_options.txt
Expand Up @@ -6,6 +6,8 @@ option('qt6', type: 'boolean', value: false,
description: 'Whether Qt 6 support is enabled')
option('gtk', type: 'boolean', value: true,
description: 'Whether GTK support is enabled')
option('gtk3', type: 'boolean', value: false,
description: 'Whether GTK3 support is enabled')
option('libarchive', type: 'boolean', value: false,
description: 'Whether libarchive support is enabled')
option('buildstamp', type: 'string', value: 'unknown build',
Expand Down
1 change: 1 addition & 0 deletions src/config.h.meson
Expand Up @@ -19,6 +19,7 @@
#mesondefine USE_DBUS
#mesondefine USE_QT
#mesondefine USE_GTK
#mesondefine USE_GTK3
#mesondefine USE_LIBARCHIVE

#define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_32
4 changes: 3 additions & 1 deletion src/libaudgui/Makefile
Expand Up @@ -7,6 +7,7 @@ SRCS = about.cc \
eq-preset.cc \
equalizer.cc \
file-opener.cc \
gtk-compat.cc \
images.c \
infopopup.cc \
infowin.cc \
Expand All @@ -31,7 +32,8 @@ SRCS = about.cc \
url-opener.cc \
util.cc

INCLUDES = libaudgui.h \
INCLUDES = gtk-compat.h \
libaudgui.h \
libaudgui-gtk.h \
list.h \
menu.h
Expand Down
14 changes: 10 additions & 4 deletions src/libaudgui/about.cc
Expand Up @@ -24,6 +24,7 @@
#include <libaudcore/runtime.h>
#include <libaudcore/vfs.h>

#include "gtk-compat.h"
#include "internal.h"
#include "libaudgui.h"
#include "libaudgui-gtk.h"
Expand Down Expand Up @@ -75,7 +76,7 @@ static GtkWidget * create_about_window ()

audgui_destroy_on_escape (about_window);

GtkWidget * vbox = gtk_vbox_new (false, 6);
GtkWidget * vbox = audgui_vbox_new (6);
gtk_container_add ((GtkContainer *) about_window, vbox);

AudguiPixbuf logo (gdk_pixbuf_new_from_resource_at_scale
Expand All @@ -88,11 +89,16 @@ static GtkWidget * create_about_window ()
gtk_label_set_justify ((GtkLabel *) label, GTK_JUSTIFY_CENTER);
gtk_box_pack_start ((GtkBox *) vbox, label, false, false, 0);

GtkWidget * align = gtk_alignment_new (0.5, 0.5, 0, 0);
gtk_box_pack_start ((GtkBox *) vbox, align, false, false, 0);

GtkWidget * button = gtk_link_button_new (website);

#ifdef USE_GTK3
gtk_widget_set_halign (button, GTK_ALIGN_CENTER);
gtk_box_pack_start ((GtkBox *) vbox, button, false, false, 0);
#else
GtkWidget * align = gtk_alignment_new (0.5, 0.5, 0, 0);
gtk_container_add ((GtkContainer *) align, button);
gtk_box_pack_start ((GtkBox *) vbox, align, false, false, 0);
#endif

auto credits = VFSFile::read_file (filename_build ({data_dir, "AUTHORS"}), VFS_APPEND_NULL);
auto license = VFSFile::read_file (filename_build ({data_dir, "COPYING"}), VFS_APPEND_NULL);
Expand Down
9 changes: 5 additions & 4 deletions src/libaudgui/eq-preset.cc
Expand Up @@ -26,6 +26,7 @@
#include <libaudcore/interface.h>
#include <libaudcore/runtime.h>

#include "gtk-compat.h"
#include "internal.h"
#include "libaudgui.h"
#include "libaudgui-gtk.h"
Expand Down Expand Up @@ -286,16 +287,16 @@ static GtkWidget * create_eq_preset_window ()

g_signal_connect (window, "destroy", (GCallback) cleanup_eq_preset_window, nullptr);

GtkWidget * outer = gtk_vbox_new (false, 0);
GtkWidget * outer = audgui_vbox_new (0);
gtk_container_add ((GtkContainer *) window, outer);

gtk_box_pack_start ((GtkBox *) outer, create_menu_bar (), false, false, 0);

GtkWidget * vbox = gtk_vbox_new (false, 6);
GtkWidget * vbox = audgui_vbox_new (6);
gtk_container_set_border_width ((GtkContainer *) vbox, 6);
gtk_box_pack_start ((GtkBox *) outer, vbox, true, true, 0);

GtkWidget * hbox = gtk_hbox_new (false, 6);
GtkWidget * hbox = audgui_hbox_new (6);
gtk_box_pack_start ((GtkBox *) vbox, hbox, false, false, 0);

entry = gtk_entry_new ();
Expand All @@ -320,7 +321,7 @@ static GtkWidget * create_eq_preset_window ()
audgui_list_add_column (list, nullptr, 0, G_TYPE_STRING, -1);
gtk_container_add ((GtkContainer *) scrolled, list);

GtkWidget * hbox2 = gtk_hbox_new (false, 6);
GtkWidget * hbox2 = audgui_hbox_new (6);
gtk_box_pack_start ((GtkBox *) vbox, hbox2, false, false, 0);

GtkWidget * remove = audgui_button_new (_("Delete Selected"), "edit-delete",
Expand Down
17 changes: 11 additions & 6 deletions src/libaudgui/equalizer.cc
Expand Up @@ -25,6 +25,7 @@
#include <libaudcore/i18n.h>
#include <libaudcore/runtime.h>

#include "gtk-compat.h"
#include "internal.h"
#include "libaudgui.h"
#include "libaudgui-gtk.h"
Expand Down Expand Up @@ -68,13 +69,16 @@ static void slider_moved (GtkRange * slider)

static GtkWidget * create_slider (const char * name, int band, GtkWidget * hbox)
{
GtkWidget * vbox = gtk_vbox_new (false, 6);
GtkWidget * vbox = audgui_vbox_new (6);

GtkWidget * label = gtk_label_new (name);
gtk_label_set_angle ((GtkLabel *) label, 90);
gtk_box_pack_start ((GtkBox *) vbox, label, true, false, 0);

GtkWidget * slider = gtk_vscale_new_with_range (-AUD_EQ_MAX_GAIN, AUD_EQ_MAX_GAIN, 1);
GtkAdjustment * adjustment = (GtkAdjustment *) gtk_adjustment_new (
0, -AUD_EQ_MAX_GAIN, AUD_EQ_MAX_GAIN, 1, 2, 0);
GtkWidget * slider = audgui_scale_new (GTK_ORIENTATION_VERTICAL, adjustment);
gtk_scale_set_digits ((GtkScale *) slider, 0);
gtk_scale_set_draw_value ((GtkScale *) slider, true);
gtk_scale_set_value_pos ((GtkScale *) slider, GTK_POS_BOTTOM);
gtk_range_set_inverted ((GtkRange *) slider, true);
Expand Down Expand Up @@ -132,10 +136,10 @@ static GtkWidget * create_window ()
gtk_container_set_border_width ((GtkContainer *) window, 6);
audgui_destroy_on_escape (window);

GtkWidget * vbox = gtk_vbox_new (false, 6);
GtkWidget * vbox = audgui_vbox_new (6);
gtk_container_add ((GtkContainer *) window, vbox);

GtkWidget * top_row = gtk_hbox_new (false, 6);
GtkWidget * top_row = audgui_hbox_new (6);
gtk_box_pack_start ((GtkBox *) vbox, top_row, false, false, 0);

gtk_box_pack_start ((GtkBox *) top_row, create_on_off (), false, false, 0);
Expand All @@ -148,13 +152,14 @@ static GtkWidget * create_window ()
(AudguiCallback) reset_to_zero, nullptr);
gtk_box_pack_end ((GtkBox *) top_row, zero, false, false, 0);

GtkWidget * hbox = gtk_hbox_new (false, 6);
GtkWidget * hbox = audgui_hbox_new (6);
gtk_box_pack_start ((GtkBox *) vbox, hbox, false, false, 0);

GtkWidget * preamp = create_slider (_("Preamp"), -1, hbox);
g_object_set_data ((GObject *) window, "preamp", preamp);

gtk_box_pack_start ((GtkBox *) hbox, gtk_vseparator_new (), false, false, 0);
gtk_box_pack_start ((GtkBox *) hbox,
audgui_separator_new (GTK_ORIENTATION_VERTICAL), false, false, 0);

for (int i = 0; i < AUD_EQ_NBANDS; i ++)
{
Expand Down
20 changes: 15 additions & 5 deletions src/libaudgui/file-opener.cc
Expand Up @@ -25,6 +25,7 @@
#include <libaudcore/runtime.h>
#include <libaudcore/tuple.h>

#include "gtk-compat.h"
#include "internal.h"
#include "libaudgui.h"
#include "libaudgui-gtk.h"
Expand Down Expand Up @@ -90,15 +91,20 @@ static GtkWidget * create_filebrowser (gboolean open)
option = "close_dialog_add";
}

int vbox_padding = 0;
int dpi = audgui_get_dpi ();

GtkWidget * window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_type_hint ((GtkWindow *) window, GDK_WINDOW_TYPE_HINT_DIALOG);
gtk_window_set_title ((GtkWindow *) window, window_title);
gtk_window_set_default_size ((GtkWindow *) window, 7 * dpi, 5 * dpi);

#ifndef USE_GTK3
vbox_padding = 3;
gtk_container_set_border_width ((GtkContainer *) window, 10);
#endif

GtkWidget * vbox = gtk_vbox_new (false, 0);
GtkWidget * vbox = audgui_vbox_new (0);
gtk_container_add ((GtkContainer *) window, vbox);

GtkWidget * chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN);
Expand All @@ -109,17 +115,21 @@ static GtkWidget * create_filebrowser (gboolean open)
if (path[0])
gtk_file_chooser_set_current_folder ((GtkFileChooser *) chooser, path);

gtk_box_pack_start ((GtkBox *) vbox, chooser, true, true, 3);
gtk_box_pack_start ((GtkBox *) vbox, chooser, true, true, vbox_padding);

GtkWidget * hbox = audgui_hbox_new (0);
gtk_box_pack_end ((GtkBox *) vbox, hbox, false, false, vbox_padding);

GtkWidget * hbox = gtk_hbox_new (false, 0);
gtk_box_pack_end ((GtkBox *) vbox, hbox, false, false, 3);
#ifdef USE_GTK3
gtk_container_set_border_width ((GtkContainer *) hbox, 6);
#endif

GtkWidget * toggle = gtk_check_button_new_with_mnemonic (toggle_text);
gtk_toggle_button_set_active ((GtkToggleButton *) toggle, aud_get_bool ("audgui", option));
g_signal_connect (toggle, "toggled", (GCallback) toggled_cb, (void *) option);
gtk_box_pack_start ((GtkBox *) hbox, toggle, true, true, 0);

GtkWidget * bbox = gtk_hbutton_box_new ();
GtkWidget * bbox = audgui_button_box_new (GTK_ORIENTATION_HORIZONTAL);
gtk_button_box_set_layout ((GtkButtonBox *) bbox, GTK_BUTTONBOX_END);
gtk_box_set_spacing ((GtkBox *) bbox, 6);
gtk_box_pack_end ((GtkBox *) hbox, bbox, true, true, 0);
Expand Down

0 comments on commit 09ce8a4

Please sign in to comment.