From 5c62be2fe7ca75019c64805e19a76b0e29ec0546 Mon Sep 17 00:00:00 2001 From: Aaditya Bagga Date: Fri, 26 Dec 2014 00:14:40 +0700 Subject: audio/volumeicon: Add option to built against GTK+2. Signed-off-by: Willy Sudiarto Raharjo --- audio/volumeicon/README | 3 + audio/volumeicon/gtk2.patch | 193 +++++++++++++++++++++++++++++++++ audio/volumeicon/volumeicon.SlackBuild | 9 +- 3 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 audio/volumeicon/gtk2.patch (limited to 'audio') diff --git a/audio/volumeicon/README b/audio/volumeicon/README index ccd30857ba..573032f22f 100644 --- a/audio/volumeicon/README +++ b/audio/volumeicon/README @@ -18,3 +18,6 @@ at the moment, so using this flag will disable ALSA support. To enable notifications, you will need to run the script like this: NOTIFY=yes ./volumeicon.SlackBuild + +To build the GTK2 version (GTK3 is upstream default), the script can be run as: +GTK2=yes ./volumeicon.SlackBuild diff --git a/audio/volumeicon/gtk2.patch b/audio/volumeicon/gtk2.patch new file mode 100644 index 0000000000..4a8d6cbac2 --- /dev/null +++ b/audio/volumeicon/gtk2.patch @@ -0,0 +1,193 @@ +diff -up src/volumeicon-0.5.0/configure.ac.orig src/volumeicon-0.5.0/configure.ac +--- src/volumeicon-0.5.0/configure.ac.orig 2013-02-25 09:06:49.000000000 -0700 ++++ src/volumeicon-0.5.0/configure.ac 2014-05-17 08:58:51.000000000 -0600 +@@ -35,7 +35,7 @@ AC_ARG_ENABLE([notify], + [notify=no]) + + # Check for gtk +-PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.0]) ++PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.16]) + AC_SUBST(GTK_CFLAGS) + AC_SUBST(GTK_LIBS) + +@@ -64,8 +64,8 @@ AC_ARG_WITH([oss-include-path], + OSS_CPPFLAGS="-I${OSSLIBDIR}/include/sys" + OSS_HEADER="${OSSLIBDIR}/include/sys/soundcard.h" + else +- OSS_CPPFLAGS="-I/usr/lib/oss/include/sys" +- OSS_HEADER="/usr/lib/oss/include/sys/soundcard.h" ++ OSS_CPPFLAGS="" ++ OSS_HEADER="sys/soundcard.h" + fi + ] + ) +@@ -75,7 +75,7 @@ AC_ARG_WITH([oss-include-path], + # to fail. + OLD_CPPFLAGS=${CPPFLAGS} + CPPFLAGS="${OSS_CPPFLAGS}" +-AC_CHECK_HEADER([soundcard.h], [], [AC_MSG_ERROR([could not find soundcard.h])], []) ++AC_CHECK_HEADER([sys/soundcard.h], [], [AC_MSG_ERROR([could not find soundcard.h])], []) + CPPFLAGS=${OLD_CPPFLAGS} + + # Pass the absolute path to the OSS header file +diff -up src/volumeicon-0.5.0/src/bind.c.orig src/volumeicon-0.5.0/src/bind.c +--- src/volumeicon-0.5.0/src/bind.c.orig 2012-10-25 09:59:10.000000000 -0600 ++++ src/volumeicon-0.5.0/src/bind.c 2014-05-17 08:57:35.000000000 -0600 +@@ -151,7 +151,11 @@ grab_ungrab_with_ignorable_modifiers (Gd + XGrabKey (GDK_WINDOW_XDISPLAY (rootwin), + keycode, + modifiers | mod_masks [i], ++#if GTK_CHECK_VERSION(3,0,0) + gdk_x11_window_get_xid (rootwin), ++#elif GTK_CHECK_VERSION(2,16,0) ++ GDK_WINDOW_XID (rootwin), ++#endif + False, + GrabModeAsync, + GrabModeAsync); +@@ -159,7 +163,12 @@ grab_ungrab_with_ignorable_modifiers (Gd + XUngrabKey (GDK_WINDOW_XDISPLAY (rootwin), + keycode, + modifiers | mod_masks [i], +- gdk_x11_window_get_xid (rootwin)); ++#if GTK_CHECK_VERSION(3,0,0) ++ gdk_x11_window_get_xid (rootwin) ++#elif GTK_CHECK_VERSION(2,16,0) ++ GDK_WINDOW_XID (rootwin) ++#endif ++ ); + } + } + gdk_flush(); +diff -up src/volumeicon-0.5.0/src/volumeicon.c.orig src/volumeicon-0.5.0/src/volumeicon.c +--- src/volumeicon-0.5.0/src/volumeicon.c.orig 2013-02-25 08:52:49.000000000 -0700 ++++ src/volumeicon-0.5.0/src/volumeicon.c 2014-05-17 08:57:35.000000000 -0600 +@@ -527,6 +527,7 @@ static gboolean scale_timeout(gpointer d + gtk_window_get_size(GTK_WINDOW(m_scale_window), &window.width, &window.height); + gtk_status_icon_get_geometry(m_status_icon, NULL, &icon, NULL); + ++#if GTK_CHECK_VERSION(3,0,0) + GdkWindow *root_window; + GdkDeviceManager *device_manager; + GdkDevice *pointer; +@@ -536,6 +537,15 @@ static gboolean scale_timeout(gpointer d + device_manager = gdk_display_get_device_manager(gdk_window_get_display(root_window)); + pointer = gdk_device_manager_get_client_pointer(device_manager); + gdk_window_get_device_position(root_window, pointer, &x, &y, NULL); ++#elif GTK_CHECK_VERSION(2,16,0) ++ GdkWindow *root_window; ++ gint x, y; ++ ++ root_window = gtk_widget_get_root_window(m_scale_window); ++ gdk_display_get_pointer(gdk_window_get_display(root_window), NULL, &x, &y, NULL); ++#else ++#error No GTK version ++#endif + + if(scale_point_in_rect(&window, x, y) || scale_point_in_rect(&icon, x, y)) + { +@@ -827,6 +837,7 @@ static void render_widget (cairo_t *cair + cairo_paint (cairo_context); + } + ++#if GTK_CHECK_VERSION(3,0,0) + static void update_widget (GtkWidget *widget, gint width, gint height) + { + cairo_surface_t *mask; +@@ -857,6 +868,32 @@ static void update_widget (GtkWidget *wi + cairo_surface_destroy(mask); + } + } ++#elif GTK_CHECK_VERSION(2,0,0) ++static void update_widget (GtkWidget *widget, gint width, gint height) ++{ ++ GdkPixmap *bitmap; ++ ++ bitmap = gdk_pixmap_new(NULL, width, height, 1); ++ if (bitmap != NULL) { ++ cairo_t *cairo_context = gdk_cairo_create(GDK_DRAWABLE(bitmap)); ++ ++ if (cairo_status(cairo_context) == CAIRO_STATUS_SUCCESS) { ++ ++ render_widget(cairo_context, width, height); ++ cairo_destroy(cairo_context); ++ ++ gtk_widget_input_shape_combine_mask(widget, NULL, 0, 0); ++ if (!gtk_widget_is_composited(widget)) ++ gtk_widget_input_shape_combine_mask(widget, bitmap, 0, 0); ++ ++ gtk_widget_shape_combine_mask(widget, NULL, 0, 0); ++ if (!gtk_widget_is_composited(widget)) ++ gtk_widget_shape_combine_mask(widget, bitmap, 0, 0); ++ } ++ g_object_unref(G_OBJECT(bitmap)); ++ } ++} ++#endif + + static gboolean on_configure (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) + { +@@ -871,9 +908,17 @@ static gboolean on_configure (GtkWidget + + static gboolean on_draw (GtkWidget *widget, cairo_t *cairo_context, gpointer user_data) + { ++#if GTK_CHECK_VERSION(3,0,0) + render_widget(cairo_context, + gtk_widget_get_allocated_width(widget), + gtk_widget_get_allocated_height(widget)); ++#elif GTK_CHECK_VERSION(2,16,0) ++ GtkAllocation allocation; ++ gtk_widget_get_allocation(widget,&allocation); ++ render_widget(cairo_context, ++ allocation.width, ++ allocation.height); ++#endif + return FALSE; + } + +@@ -888,10 +933,17 @@ static void scale_setup() + { + GdkScreen *screen; + ++#if GTK_CHECK_VERSION(3,0,0) + if(config_get_use_horizontal_slider()) + m_scale = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0.0, 100.0, 1.0); + else + m_scale = gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL, 0.0, 100.0, 1.0); ++#elif GTK_CHECK_VERSION(2,16,0) ++ if (config_get_use_horizontal_slider()) ++ m_scale = gtk_hscale_new_with_range(0.0, 100.0, 1.0); ++ else ++ m_scale = gtk_vscale_new_with_range(0.0, 100.0, 1.0); ++#endif + gtk_range_set_inverted(GTK_RANGE(m_scale), TRUE); + gtk_scale_set_draw_value(GTK_SCALE(m_scale), config_get_show_sound_level()); + +@@ -904,15 +956,27 @@ static void scale_setup() + gtk_widget_set_visual(GTK_WIDGET(m_scale_window), visual); + gtk_widget_set_app_paintable(GTK_WIDGET(m_scale_window), TRUE); + gtk_widget_realize(GTK_WIDGET(m_scale_window)); ++#if GTK_CHECK_VERSION(3,0,0) + gdk_window_set_background_pattern(gtk_widget_get_window(GTK_WIDGET(m_scale_window)), NULL); ++#elif GTK_CHECK_VERSION(2,16,0) ++ gdk_window_set_back_pixmap(gtk_widget_get_window(GTK_WIDGET(m_scale_window)), NULL, FALSE); ++#endif + gtk_window_set_type_hint(GTK_WINDOW(m_scale_window), GDK_WINDOW_TYPE_HINT_DOCK); + + g_signal_connect(G_OBJECT(m_scale_window), "draw", G_CALLBACK(on_draw), NULL); + g_signal_connect(G_OBJECT(m_scale_window), "configure-event", G_CALLBACK(on_configure), NULL); + ++#if GTK_CHECK_VERSION(3,0,0) + update_widget(GTK_WIDGET(m_scale_window), + gtk_widget_get_allocated_width(GTK_WIDGET(m_scale_window)), + gtk_widget_get_allocated_height(GTK_WIDGET(m_scale_window))); ++#elif GTK_CHECK_VERSION(2,16,0) ++ GtkAllocation allocation; ++ gtk_widget_get_allocation(GTK_WIDGET(m_scale_window), &allocation); ++ update_widget(GTK_WIDGET(m_scale_window), ++ allocation.width, ++ allocation.height); ++#endif + } + } + diff --git a/audio/volumeicon/volumeicon.SlackBuild b/audio/volumeicon/volumeicon.SlackBuild index 667088d7ca..01b1b4ff20 100644 --- a/audio/volumeicon/volumeicon.SlackBuild +++ b/audio/volumeicon/volumeicon.SlackBuild @@ -1,7 +1,6 @@ #!/bin/sh # Slackware build script for volumeicon - # Written by Daniel Cash (Original Author) # Copyright 2014 Aaditya Bagga @@ -26,7 +25,7 @@ PRGNAM=volumeicon VERSION=${VERSION:-0.5.0} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} TAG=${TAG:-_SBo} CWD=$(pwd) @@ -74,6 +73,12 @@ find -L . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; +# Check for GTK2 +if [ "$GTK2" == "yes" ]; then + # Patch courtesy https://aur.archlinux.org/packages/volumeicon-gtk2/ + patch -Np2 -b -z .orig -i $CWD/gtk2.patch + autoreconf -fi +fi CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ -- cgit v1.2.3