From: Matthias Clasen Date: Sun, 12 Feb 2023 14:48:49 +0000 (-0500) Subject: Deprecate GtkVolumeButton X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~7^2~12 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=157ef1d3959947593e914496f02a86e2f062a91c;p=gtk4.git Deprecate GtkVolumeButton Too specialized. --- diff --git a/docs/reference/gtk/migrating-4to5.md b/docs/reference/gtk/migrating-4to5.md index ebec512d4a..b147fc61ca 100644 --- a/docs/reference/gtk/migrating-4to5.md +++ b/docs/reference/gtk/migrating-4to5.md @@ -115,7 +115,7 @@ Instead of gtk_show_uri(), you should use GtkUriLauncher or GtkFileLauncher. This is an oldfashioned widget that does not do all that much anymore, since it no longer has a resize handle for the window. -## GtkLockButton is going away +## GtkLockButton and GtkVolumeButton are going away -This is an very specialized widget that should better live with the application -where it is used. +These are very specialized widgets that should better live with the application +where they are used. diff --git a/gtk/deprecated/gtkvolumebutton.c b/gtk/deprecated/gtkvolumebutton.c new file mode 100644 index 0000000000..ce6e535703 --- /dev/null +++ b/gtk/deprecated/gtkvolumebutton.c @@ -0,0 +1,260 @@ +/* GTK - The GIMP Toolkit + * Copyright (C) 2007 Red Hat, Inc. + * + * Authors: + * - Bastien Nocera + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + */ + +/* + * Modified by the GTK+ Team and others 2007. See the AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + */ + +#include "config.h" + +#include "gtkvolumebutton.h" + +#include "gtkadjustment.h" +#include +#include "gtktooltip.h" +#include "gtkprivate.h" + + +G_GNUC_BEGIN_IGNORE_DEPRECATIONS + +/** + * GtkVolumeButton: + * + * `GtkVolumeButton` is a `GtkScaleButton` subclass tailored for + * volume control. + * + * ![An example GtkVolumeButton](volumebutton.png) + */ + +typedef struct _GtkVolumeButtonClass GtkVolumeButtonClass; + +struct _GtkVolumeButtonClass +{ + GtkScaleButtonClass parent_class; +}; + +#define EPSILON (1e-10) + +static const char * const icons[] = +{ + "audio-volume-muted", + "audio-volume-high", + "audio-volume-low", + "audio-volume-medium", + NULL +}; + +static const char * const icons_symbolic[] = +{ + "audio-volume-muted-symbolic", + "audio-volume-high-symbolic", + "audio-volume-low-symbolic", + "audio-volume-medium-symbolic", + NULL +}; + +enum +{ + PROP_0, + PROP_SYMBOLIC +}; + +static gboolean cb_query_tooltip (GtkWidget *button, + int x, + int y, + gboolean keyboard_mode, + GtkTooltip *tooltip, + gpointer user_data); +static void cb_value_changed (GtkVolumeButton *button, + double value, + gpointer user_data); + +G_DEFINE_TYPE (GtkVolumeButton, gtk_volume_button, GTK_TYPE_SCALE_BUTTON) + +static gboolean +get_symbolic (GtkScaleButton *button) +{ + char **icon_list; + gboolean ret; + + g_object_get (button, "icons", &icon_list, NULL); + if (icon_list != NULL && + icon_list[0] != NULL && + g_str_equal (icon_list[0], icons_symbolic[0])) + ret = TRUE; + else + ret = FALSE; + g_strfreev (icon_list); + + return ret; +} + +static void +gtk_volume_button_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GtkScaleButton *button = GTK_SCALE_BUTTON (object); + + switch (prop_id) + { + case PROP_SYMBOLIC: + if (get_symbolic (button) != g_value_get_boolean (value)) + { + if (g_value_get_boolean (value)) + gtk_scale_button_set_icons (button, (const char **) icons_symbolic); + else + gtk_scale_button_set_icons (button, (const char **) icons); + g_object_notify_by_pspec (object, pspec); + } + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gtk_volume_button_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) + { + case PROP_SYMBOLIC: + g_value_set_boolean (value, get_symbolic (GTK_SCALE_BUTTON (object))); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gtk_volume_button_class_init (GtkVolumeButtonClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + gobject_class->set_property = gtk_volume_button_set_property; + gobject_class->get_property = gtk_volume_button_get_property; + + /** + * GtkVolumeButton:use-symbolic: + * + * Whether to use symbolic icons as the icons. + * + * Note that if the symbolic icons are not available in your installed + * theme, then the normal (potentially colorful) icons will be used. + */ + g_object_class_install_property (gobject_class, + PROP_SYMBOLIC, + g_param_spec_boolean ("use-symbolic", NULL, NULL, + TRUE, + GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY)); + + /* Bind class to template + */ + gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtkvolumebutton.ui"); + gtk_widget_class_bind_template_callback (widget_class, cb_query_tooltip); + gtk_widget_class_bind_template_callback (widget_class, cb_value_changed); +} + +static void +gtk_volume_button_init (GtkVolumeButton *button) +{ + GtkWidget *widget = GTK_WIDGET (button); + + gtk_widget_init_template (widget); +} + +/** + * gtk_volume_button_new: + * + * Creates a `GtkVolumeButton`. + * + * The button has a range between 0.0 and 1.0, with a stepping of 0.02. + * Volume values can be obtained and modified using the functions from + * [class@Gtk.ScaleButton]. + * + * Returns: a new `GtkVolumeButton` + */ +GtkWidget * +gtk_volume_button_new (void) +{ + GObject *button; + button = g_object_new (GTK_TYPE_VOLUME_BUTTON, NULL); + return GTK_WIDGET (button); +} + +static gboolean +cb_query_tooltip (GtkWidget *button, + int x, + int y, + gboolean keyboard_mode, + GtkTooltip *tooltip, + gpointer user_data) +{ + GtkScaleButton *scale_button = GTK_SCALE_BUTTON (button); + GtkAdjustment *adjustment; + double val; + char *str; + + adjustment = gtk_scale_button_get_adjustment (scale_button); + val = gtk_scale_button_get_value (scale_button); + + if (val < (gtk_adjustment_get_lower (adjustment) + EPSILON)) + { + str = g_strdup (_("Muted")); + } + else if (val >= (gtk_adjustment_get_upper (adjustment) - EPSILON)) + { + str = g_strdup (_("Full Volume")); + } + else + { + int percent; + + percent = (int) (100. * val / (gtk_adjustment_get_upper (adjustment) - gtk_adjustment_get_lower (adjustment)) + .5); + + /* Translators: this is the percentage of the current volume, + * as used in the tooltip, eg. "49 %". + * Translate the "%d" to "%Id" if you want to use localised digits, + * or otherwise translate the "%d" to "%d". + */ + str = g_strdup_printf (C_("volume percentage", "%d %%"), percent); + } + + gtk_tooltip_set_text (tooltip, str); + g_free (str); + + return TRUE; +} + +static void +cb_value_changed (GtkVolumeButton *button, double value, gpointer user_data) +{ + gtk_widget_trigger_tooltip_query (GTK_WIDGET (button)); +} diff --git a/gtk/deprecated/gtkvolumebutton.h b/gtk/deprecated/gtkvolumebutton.h new file mode 100644 index 0000000000..6cad9755d6 --- /dev/null +++ b/gtk/deprecated/gtkvolumebutton.h @@ -0,0 +1,59 @@ +/* GTK - The GIMP Toolkit + * Copyright (C) 2007 Red Hat, Inc. + * + * Authors: + * - Bastien Nocera + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + */ + +/* + * Modified by the GTK+ Team and others 2007. See the AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + */ + +#ifndef __GTK_VOLUME_BUTTON_H__ +#define __GTK_VOLUME_BUTTON_H__ + +#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) +#error "Only can be included directly." +#endif + +#include + +G_BEGIN_DECLS + +#define GTK_TYPE_VOLUME_BUTTON (gtk_volume_button_get_type ()) +#define GTK_VOLUME_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_VOLUME_BUTTON, GtkVolumeButton)) +#define GTK_IS_VOLUME_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_VOLUME_BUTTON)) + +typedef struct _GtkVolumeButton GtkVolumeButton; + +struct _GtkVolumeButton +{ + GtkScaleButton parent; +}; + +GDK_AVAILABLE_IN_ALL +GType gtk_volume_button_get_type (void) G_GNUC_CONST; +GDK_DEPRECATED_IN_4_10 +GtkWidget* gtk_volume_button_new (void); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkVolumeButton, g_object_unref) + +G_END_DECLS + +#endif /* __GTK_VOLUME_BUTTON_H__ */ diff --git a/gtk/deprecated/meson.build b/gtk/deprecated/meson.build index 608ee6031c..ba23a53699 100644 --- a/gtk/deprecated/meson.build +++ b/gtk/deprecated/meson.build @@ -49,6 +49,7 @@ gtk_deprecated_sources = [ 'deprecated/gtktreepopover.c', 'deprecated/gtktreeview.c', 'deprecated/gtktreeviewcolumn.c', + 'deprecated/gtkvolumebutton.c', ] gtk_deprecated_headers = [ @@ -106,4 +107,5 @@ gtk_deprecated_headers = [ 'deprecated/gtktreestore.h', 'deprecated/gtktreeview.h', 'deprecated/gtktreeviewcolumn.h', + 'deprecated/gtkvolumebutton.h', ] diff --git a/gtk/gtk.h b/gtk/gtk.h index b46c3d05f4..fb7ee34019 100644 --- a/gtk/gtk.h +++ b/gtk/gtk.h @@ -290,7 +290,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/gtk/gtkvolumebutton.c b/gtk/gtkvolumebutton.c deleted file mode 100644 index fd82d5a4f0..0000000000 --- a/gtk/gtkvolumebutton.c +++ /dev/null @@ -1,258 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 2007 Red Hat, Inc. - * - * Authors: - * - Bastien Nocera - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - */ - -/* - * Modified by the GTK+ Team and others 2007. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#include "config.h" - -#include "gtkvolumebutton.h" - -#include "gtkadjustment.h" -#include -#include "gtktooltip.h" -#include "gtkprivate.h" - - -/** - * GtkVolumeButton: - * - * `GtkVolumeButton` is a `GtkScaleButton` subclass tailored for - * volume control. - * - * ![An example GtkVolumeButton](volumebutton.png) - */ - -typedef struct _GtkVolumeButtonClass GtkVolumeButtonClass; - -struct _GtkVolumeButtonClass -{ - GtkScaleButtonClass parent_class; -}; - -#define EPSILON (1e-10) - -static const char * const icons[] = -{ - "audio-volume-muted", - "audio-volume-high", - "audio-volume-low", - "audio-volume-medium", - NULL -}; - -static const char * const icons_symbolic[] = -{ - "audio-volume-muted-symbolic", - "audio-volume-high-symbolic", - "audio-volume-low-symbolic", - "audio-volume-medium-symbolic", - NULL -}; - -enum -{ - PROP_0, - PROP_SYMBOLIC -}; - -static gboolean cb_query_tooltip (GtkWidget *button, - int x, - int y, - gboolean keyboard_mode, - GtkTooltip *tooltip, - gpointer user_data); -static void cb_value_changed (GtkVolumeButton *button, - double value, - gpointer user_data); - -G_DEFINE_TYPE (GtkVolumeButton, gtk_volume_button, GTK_TYPE_SCALE_BUTTON) - -static gboolean -get_symbolic (GtkScaleButton *button) -{ - char **icon_list; - gboolean ret; - - g_object_get (button, "icons", &icon_list, NULL); - if (icon_list != NULL && - icon_list[0] != NULL && - g_str_equal (icon_list[0], icons_symbolic[0])) - ret = TRUE; - else - ret = FALSE; - g_strfreev (icon_list); - - return ret; -} - -static void -gtk_volume_button_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GtkScaleButton *button = GTK_SCALE_BUTTON (object); - - switch (prop_id) - { - case PROP_SYMBOLIC: - if (get_symbolic (button) != g_value_get_boolean (value)) - { - if (g_value_get_boolean (value)) - gtk_scale_button_set_icons (button, (const char **) icons_symbolic); - else - gtk_scale_button_set_icons (button, (const char **) icons); - g_object_notify_by_pspec (object, pspec); - } - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gtk_volume_button_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - switch (prop_id) - { - case PROP_SYMBOLIC: - g_value_set_boolean (value, get_symbolic (GTK_SCALE_BUTTON (object))); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gtk_volume_button_class_init (GtkVolumeButtonClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - gobject_class->set_property = gtk_volume_button_set_property; - gobject_class->get_property = gtk_volume_button_get_property; - - /** - * GtkVolumeButton:use-symbolic: - * - * Whether to use symbolic icons as the icons. - * - * Note that if the symbolic icons are not available in your installed - * theme, then the normal (potentially colorful) icons will be used. - */ - g_object_class_install_property (gobject_class, - PROP_SYMBOLIC, - g_param_spec_boolean ("use-symbolic", NULL, NULL, - TRUE, - GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY)); - - /* Bind class to template - */ - gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtkvolumebutton.ui"); - gtk_widget_class_bind_template_callback (widget_class, cb_query_tooltip); - gtk_widget_class_bind_template_callback (widget_class, cb_value_changed); -} - -static void -gtk_volume_button_init (GtkVolumeButton *button) -{ - GtkWidget *widget = GTK_WIDGET (button); - - gtk_widget_init_template (widget); -} - -/** - * gtk_volume_button_new: - * - * Creates a `GtkVolumeButton`. - * - * The button has a range between 0.0 and 1.0, with a stepping of 0.02. - * Volume values can be obtained and modified using the functions from - * [class@Gtk.ScaleButton]. - * - * Returns: a new `GtkVolumeButton` - */ -GtkWidget * -gtk_volume_button_new (void) -{ - GObject *button; - button = g_object_new (GTK_TYPE_VOLUME_BUTTON, NULL); - return GTK_WIDGET (button); -} - -static gboolean -cb_query_tooltip (GtkWidget *button, - int x, - int y, - gboolean keyboard_mode, - GtkTooltip *tooltip, - gpointer user_data) -{ - GtkScaleButton *scale_button = GTK_SCALE_BUTTON (button); - GtkAdjustment *adjustment; - double val; - char *str; - - adjustment = gtk_scale_button_get_adjustment (scale_button); - val = gtk_scale_button_get_value (scale_button); - - if (val < (gtk_adjustment_get_lower (adjustment) + EPSILON)) - { - str = g_strdup (_("Muted")); - } - else if (val >= (gtk_adjustment_get_upper (adjustment) - EPSILON)) - { - str = g_strdup (_("Full Volume")); - } - else - { - int percent; - - percent = (int) (100. * val / (gtk_adjustment_get_upper (adjustment) - gtk_adjustment_get_lower (adjustment)) + .5); - - /* Translators: this is the percentage of the current volume, - * as used in the tooltip, eg. "49 %". - * Translate the "%d" to "%Id" if you want to use localised digits, - * or otherwise translate the "%d" to "%d". - */ - str = g_strdup_printf (C_("volume percentage", "%d %%"), percent); - } - - gtk_tooltip_set_text (tooltip, str); - g_free (str); - - return TRUE; -} - -static void -cb_value_changed (GtkVolumeButton *button, double value, gpointer user_data) -{ - gtk_widget_trigger_tooltip_query (GTK_WIDGET (button)); -} diff --git a/gtk/gtkvolumebutton.h b/gtk/gtkvolumebutton.h deleted file mode 100644 index 7b5cbe550d..0000000000 --- a/gtk/gtkvolumebutton.h +++ /dev/null @@ -1,59 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 2007 Red Hat, Inc. - * - * Authors: - * - Bastien Nocera - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - */ - -/* - * Modified by the GTK+ Team and others 2007. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __GTK_VOLUME_BUTTON_H__ -#define __GTK_VOLUME_BUTTON_H__ - -#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) -#error "Only can be included directly." -#endif - -#include - -G_BEGIN_DECLS - -#define GTK_TYPE_VOLUME_BUTTON (gtk_volume_button_get_type ()) -#define GTK_VOLUME_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_VOLUME_BUTTON, GtkVolumeButton)) -#define GTK_IS_VOLUME_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_VOLUME_BUTTON)) - -typedef struct _GtkVolumeButton GtkVolumeButton; - -struct _GtkVolumeButton -{ - GtkScaleButton parent; -}; - -GDK_AVAILABLE_IN_ALL -GType gtk_volume_button_get_type (void) G_GNUC_CONST; -GDK_AVAILABLE_IN_ALL -GtkWidget* gtk_volume_button_new (void); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkVolumeButton, g_object_unref) - -G_END_DECLS - -#endif /* __GTK_VOLUME_BUTTON_H__ */ diff --git a/gtk/meson.build b/gtk/meson.build index 82ad8eff7a..b4e9c9fe3e 100644 --- a/gtk/meson.build +++ b/gtk/meson.build @@ -391,7 +391,6 @@ gtk_public_sources = files([ 'gtkversion.c', 'gtkvideo.c', 'gtkviewport.c', - 'gtkvolumebutton.c', 'gtkwidget.c', 'gtkwidgetfocus.c', 'gtkwidgetpaintable.c', @@ -613,7 +612,6 @@ gtk_public_headers = files([ 'gtkurilauncher.h', 'gtkvideo.h', 'gtkviewport.h', - 'gtkvolumebutton.h', 'gtkwidget.h', 'gtkwidgetpaintable.h', 'gtkwindow.h',