From 03fcd4083ebc6452a1c51efbe8c44fcf6903827a Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Tue, 18 Aug 2026 12:46:42 +0200 Subject: [PATCH] rmedigicontrol: Port to GTK+ 3 Port the application to use GTK+ 3: - Use own legacy APIs for hbox and vbox creations - Modernize deprecated signal connections and radio buttons - Access adjustment values using gtk_adjustment_get_value Also dropped the obsoleted configure.in.gtk-1, too. Signed-off-by: Takashi Iwai --- rmedigicontrol/README | 2 -- rmedigicontrol/configure.ac | 2 +- rmedigicontrol/configure.in-gtk1 | 13 ------------- rmedigicontrol/level.c | 16 ++++++++-------- rmedigicontrol/loopback.c | 2 +- rmedigicontrol/rmedigicontrol.c | 8 ++++---- rmedigicontrol/rmedigicontrol.h | 18 ++++++++++++++++++ 7 files changed, 32 insertions(+), 29 deletions(-) delete mode 100644 rmedigicontrol/configure.in-gtk1 diff --git a/rmedigicontrol/README b/rmedigicontrol/README index df35d8a..798f71b 100644 --- a/rmedigicontrol/README +++ b/rmedigicontrol/README @@ -42,8 +42,6 @@ INSTALL: or ./configure -If you use GTK+-1.2, pass --with-gtk2=no. - make install diff --git a/rmedigicontrol/configure.ac b/rmedigicontrol/configure.ac index 9c38754..ab9bbb3 100644 --- a/rmedigicontrol/configure.ac +++ b/rmedigicontrol/configure.ac @@ -4,6 +4,6 @@ AM_MAINTAINER_MODE([enable]) AC_PROG_CC AC_PROG_INSTALL AC_HEADER_STDC -PKG_CHECK_MODULES(RMEDIGICONTROL, gtk+-2.0 alsa >= 1.0.0) +PKG_CHECK_MODULES(RMEDIGICONTROL, gtk+-3.0 alsa >= 1.0.0) AC_OUTPUT(Makefile) diff --git a/rmedigicontrol/configure.in-gtk1 b/rmedigicontrol/configure.in-gtk1 deleted file mode 100644 index e7a49cb..0000000 --- a/rmedigicontrol/configure.in-gtk1 +++ /dev/null @@ -1,13 +0,0 @@ -AC_INIT(rmedigicontrol.c) -AM_INIT_AUTOMAKE(rmedigicontrol, 0.3.5a) -AC_PROG_CC -AC_PROG_INSTALL -AC_HEADER_STDC -AM_PATH_GTK(1.0.1) -AM_PATH_ALSA(1.0.0) -RMEDIGICONTROL_CFLAGS="$CFLAGS $ALSA_CFLAGS $GTK_CFLAGS" -RMEDIGICONTROL_LIBS="$LIBS $ALSA_LIBS $GTK_LIBS" -AC_SUBST(RMEDIGICONTROL_CFLAGS) -AC_SUBST(RMEDIGICONTROL_LIBS) - -AC_OUTPUT(Makefile) diff --git a/rmedigicontrol/level.c b/rmedigicontrol/level.c index bce2e95..0252475 100644 --- a/rmedigicontrol/level.c +++ b/rmedigicontrol/level.c @@ -26,15 +26,15 @@ static char *val2char(gdouble val) } static void changed(GtkAdjustment *a,gpointer p) { - snd_ctl_elem_value_set_integer(val,0,((100-a->value)*snd_ctl_elem_info_get_max(info))/100); - snd_ctl_elem_value_set_integer(val,1,((100-a->value)*snd_ctl_elem_info_get_max(info))/100); + snd_ctl_elem_value_set_integer(val,0,((100-gtk_adjustment_get_value(a))*snd_ctl_elem_info_get_max(info))/100); + snd_ctl_elem_value_set_integer(val,1,((100-gtk_adjustment_get_value(a))*snd_ctl_elem_info_get_max(info))/100); snd_ctl_elem_write(ctl,val); - gtk_label_set_text(p,val2char(a->value)); + gtk_label_set_text(p,val2char(gtk_adjustment_get_value(a))); } GtkWidget *create_level_box() { - GtkObject *adjust; + GtkAdjustment *adjust; GtkWidget *box,*slider1,*label1,*vlabel; char *elem_name="DAC Playback Volume"; @@ -52,11 +52,11 @@ GtkWidget *create_level_box() snd_ctl_elem_value_set_name(val,elem_name); snd_ctl_elem_read(ctl,val); - adjust=GTK_OBJECT(gtk_adjustment_new(100-(snd_ctl_elem_value_get_integer(val,0)*100)/snd_ctl_elem_info_get_max(info),0,100,1,5,0)); + adjust=GTK_ADJUSTMENT(gtk_adjustment_new(100-(snd_ctl_elem_value_get_integer(val,0)*100)/snd_ctl_elem_info_get_max(info),0,100,1,5,0)); - vlabel=gtk_label_new(val2char((GTK_ADJUSTMENT(adjust))->value)); - gtk_signal_connect(adjust,"value_changed",GTK_SIGNAL_FUNC(changed),vlabel); - slider1=gtk_vscale_new(GTK_ADJUSTMENT(adjust)); + vlabel=gtk_label_new(val2char(gtk_adjustment_get_value(GTK_ADJUSTMENT(adjust)))); + g_signal_connect(adjust,"value_changed",G_CALLBACK(changed),vlabel); + slider1=gtk_scale_new(GTK_ORIENTATION_VERTICAL, GTK_ADJUSTMENT(adjust)); gtk_scale_set_draw_value(GTK_SCALE(slider1),FALSE); gtk_scale_set_digits(GTK_SCALE(slider1),0); diff --git a/rmedigicontrol/loopback.c b/rmedigicontrol/loopback.c index b47eb20..740d21a 100644 --- a/rmedigicontrol/loopback.c +++ b/rmedigicontrol/loopback.c @@ -39,7 +39,7 @@ GtkWidget *create_loopback_toggle() t=gtk_check_button_new_with_label(elem_name); - gtk_signal_connect(GTK_OBJECT(t),"toggled",GTK_SIGNAL_FUNC(loopback_toggled),NULL); + g_signal_connect(G_OBJECT(t),"toggled",G_CALLBACK(loopback_toggled),NULL); if(snd_ctl_elem_value_get_integer(val,0)) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(t),TRUE); diff --git a/rmedigicontrol/rmedigicontrol.c b/rmedigicontrol/rmedigicontrol.c index 1119637..1636d55 100644 --- a/rmedigicontrol/rmedigicontrol.c +++ b/rmedigicontrol/rmedigicontrol.c @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) err="No RME Digi Soundcard found..."; gtk_init(&argc, &argv); window=gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(destroy),NULL); + g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(destroy),NULL); if(err) { err_lbl=gtk_label_new(err); @@ -130,7 +130,7 @@ void elem_radio_toggled(GtkRadioButton *r,gpointer p) ctl_elem_info_val_t *iv; iv=(ctl_elem_info_val_t *)p; - l=gtk_radio_button_group(r); + l=gtk_radio_button_get_group(r); i=snd_ctl_elem_info_get_items(iv->info); while(l) { @@ -170,8 +170,8 @@ GtkWidget *create_enum_elem_radio(char *elem_name,ctl_elem_info_val_t *iv) snd_ctl_elem_info_set_item(iv->info, i); snd_ctl_elem_info(ctl,iv->info); r=gtk_radio_button_new_with_label(group,snd_ctl_elem_info_get_item_name(iv->info)); - group=gtk_radio_button_group(GTK_RADIO_BUTTON(r)); - gtk_signal_connect(GTK_OBJECT(r),"toggled",GTK_SIGNAL_FUNC(elem_radio_toggled),(gpointer)iv); + group=gtk_radio_button_get_group(GTK_RADIO_BUTTON(r)); + g_signal_connect(G_OBJECT(r),"toggled",G_CALLBACK(elem_radio_toggled),(gpointer)iv); if(i==snd_ctl_elem_value_get_integer(iv->val,0)) active=r; gtk_box_pack_start(GTK_BOX(box),r,TRUE,FALSE,0); diff --git a/rmedigicontrol/rmedigicontrol.h b/rmedigicontrol/rmedigicontrol.h index 6dc3511..c49ac0e 100644 --- a/rmedigicontrol/rmedigicontrol.h +++ b/rmedigicontrol/rmedigicontrol.h @@ -23,3 +23,21 @@ GtkWidget *create_enum_elem_radio(char *elem_name,ctl_elem_info_val_t *iv); GtkWidget *create_loopback_toggle(); GtkWidget *create_level_box(); + +static inline GtkWidget *__gtk_hbox_new(gboolean homogeneous, gint spacing) +{ + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, spacing); + gtk_box_set_homogeneous(GTK_BOX(box), homogeneous); + return box; +} +/* override for deprecation */ +#define gtk_hbox_new __gtk_hbox_new + +static inline GtkWidget*__gtk_vbox_new(gboolean homogeneous, gint spacing) +{ + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, spacing); + gtk_box_set_homogeneous(GTK_BOX(box), homogeneous); + return box; +} +/* override for deprecation */ +#define gtk_vbox_new __gtk_vbox_new -- 2.52.0