--- acinclude.m4.old +++ acinclude.m4 @@ -164,7 +164,7 @@ AC_ARG_ENABLE(gtk, USE_GTK=$enableval, USE_GTK=yes) if test $USE_GTK = yes ; then - PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.24) + PKG_CHECK_MODULES(GTK, gtk+-3.0 >= 3.4) AC_DEFINE(USE_GTK, 1, [Define if GTK+ support enabled]) fi --- configure.ac.old +++ configure.ac @@ -450,7 +450,7 @@ ENABLE_PLUGIN_WITH_DEP(hotkey, auto, GENERAL, GDKX11, - gdk-x11-2.0) + gdk-x11-3.0) ENABLE_PLUGIN_WITH_DEP(aosd, X11 OSD, --- src/alarm/interface.cc.old +++ src/alarm/interface.cc @@ -24,6 +24,10 @@ #include "callbacks.h" +#if GTK_CHECK_VERSION (3, 12, 0) +#define gtk_widget_set_margin_right gtk_widget_set_margin_end +#endif + static const char help_text[] = N_("Time\n" " Alarm at:\n" @@ -158,62 +162,71 @@ GtkWidget *create_config_notebook () /* Page 1 */ frame = gtk_frame_new (_("Time")); - gtk_container_set_border_width (GTK_CONTAINER (frame), 6); - grid = gtk_table_new (0, 0, false); - gtk_table_set_col_spacings (GTK_TABLE (grid), 6); - gtk_table_set_row_spacings (GTK_TABLE (grid), 6); - gtk_container_set_border_width (GTK_CONTAINER (grid), 6); + gtk_container_set_border_width (GTK_CONTAINER (frame), 10); + grid = gtk_grid_new (); + gtk_grid_set_column_spacing (GTK_GRID (grid), 3); + gtk_grid_set_row_homogeneous (GTK_GRID (grid), true); + gtk_container_set_border_width (GTK_CONTAINER (grid), 5); label = gtk_label_new (_("Alarm at (default):")); - gtk_table_attach (GTK_TABLE (grid), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + gtk_widget_set_margin_right (label, 10); + gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); - adjustment = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0); + adjustment = gtk_adjustment_new (6, 0, 23, 1, 10, 0); alarm_h_spin = gtk_spin_button_new (adjustment, 1, 0); + gtk_widget_set_valign (alarm_h_spin, GTK_ALIGN_CENTER); g_object_set_data (G_OBJECT (notebook), "alarm_h_spin", alarm_h_spin); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (alarm_h_spin), GTK_UPDATE_IF_VALID); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (alarm_h_spin), true); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (alarm_h_spin), true); - gtk_table_attach (GTK_TABLE (grid), alarm_h_spin, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), alarm_h_spin, 1, 0, 1, 1); label = gtk_label_new (":"); - gtk_table_attach (GTK_TABLE (grid), label, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), label, 2, 0, 1, 1); - adjustment = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0); + adjustment = gtk_adjustment_new (30, 0, 59, 1, 10, 0); alarm_m_spin = gtk_spin_button_new (adjustment, 1, 0); + gtk_widget_set_valign (alarm_m_spin, GTK_ALIGN_CENTER); g_object_set_data (G_OBJECT (notebook), "alarm_m_spin", alarm_m_spin); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (alarm_m_spin), GTK_UPDATE_IF_VALID); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (alarm_m_spin), true); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (alarm_m_spin), true); - gtk_table_attach (GTK_TABLE (grid), alarm_m_spin, 3, 4, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), alarm_m_spin, 3, 0, 1, 1); label = gtk_label_new (_("h")); - gtk_table_attach (GTK_TABLE (grid), label, 4, 5, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_grid_attach (GTK_GRID (grid), label, 4, 0, 1, 1); stop_checkb = gtk_check_button_new_with_label (_("Quiet after:")); g_object_set_data (G_OBJECT (notebook), "stop_checkb", stop_checkb); - gtk_table_attach (GTK_TABLE (grid), stop_checkb, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); + gtk_widget_set_margin_right (stop_checkb, 10); + gtk_widget_set_valign (stop_checkb, GTK_ALIGN_CENTER); + gtk_grid_attach (GTK_GRID (grid), stop_checkb, 0, 1, 1, 1); - adjustment = (GtkAdjustment *) gtk_adjustment_new (0, 0, 100, 1, 10, 0); + adjustment = gtk_adjustment_new (0, 0, 100, 1, 10, 0); stop_h_spin = gtk_spin_button_new (adjustment, 1, 0); + gtk_widget_set_valign (stop_h_spin, GTK_ALIGN_CENTER); g_object_set_data (G_OBJECT (notebook), "stop_h_spin", stop_h_spin); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (stop_h_spin), GTK_UPDATE_IF_VALID); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (stop_h_spin), true); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (stop_h_spin), true); - gtk_table_attach (GTK_TABLE (grid), stop_h_spin, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), stop_h_spin, 1, 1, 1, 1); label = gtk_label_new (_("hours")); - gtk_table_attach (GTK_TABLE (grid), label, 2, 3, 1, 2, GTK_FILL, GTK_FILL, 0, 0); + gtk_widget_set_margin_right (label, 10); + gtk_grid_attach (GTK_GRID (grid), label, 2, 1, 1, 1); - adjustment = (GtkAdjustment *) gtk_adjustment_new (0, 0, 59, 1, 10, 0); + adjustment = gtk_adjustment_new (0, 0, 59, 1, 10, 0); stop_m_spin = gtk_spin_button_new (adjustment, 1, 0); + gtk_widget_set_valign (stop_m_spin, GTK_ALIGN_CENTER); g_object_set_data (G_OBJECT (notebook), "stop_m_spin", stop_m_spin); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (stop_m_spin), GTK_UPDATE_IF_VALID); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (stop_m_spin), true); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (stop_m_spin), true); - gtk_table_attach (GTK_TABLE (grid), stop_m_spin, 3, 4, 1, 2, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), stop_m_spin, 3, 1, 1, 1); label = gtk_label_new (_("minutes")); - gtk_table_attach (GTK_TABLE (grid), label, 4, 5, 1, 2, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), label, 4, 1, 1, 1); gtk_container_add (GTK_CONTAINER (frame), grid); label = gtk_label_new (_("Time")); @@ -222,24 +235,25 @@ GtkWidget *create_config_notebook () /* Page 2 */ frame = gtk_frame_new (_("Choose the days for the alarm to come on")); - gtk_container_set_border_width (GTK_CONTAINER (frame), 6); - grid = gtk_table_new (0, 0, false); - gtk_table_set_col_spacings (GTK_TABLE (grid), 6); - gtk_table_set_row_spacings (GTK_TABLE (grid), 6); - gtk_container_set_border_width (GTK_CONTAINER (grid), 6); + gtk_container_set_border_width (GTK_CONTAINER (frame), 10); + grid = gtk_grid_new (); + gtk_grid_set_column_spacing (GTK_GRID (grid), 15); + gtk_grid_set_row_homogeneous (GTK_GRID (grid), true); + gtk_container_set_border_width (GTK_CONTAINER (grid), 5); label = gtk_label_new (_("Day")); - gtk_table_attach (GTK_TABLE (grid), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); label = gtk_label_new (_("Time")); - gtk_table_attach (GTK_TABLE (grid), label, 2, 5, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), label, 2, 0, 3, 1); for (i = 0; i < 7; i ++) { widget[i] = gtk_check_button_new_with_label (_(weekdays[i])); g_object_set_data (G_OBJECT (notebook), day_cb[i], widget[i]); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget[i]), true); - gtk_table_attach (GTK_TABLE (grid), widget[i], 0, 1, i + 1, i + 2, GTK_FILL, GTK_FILL, 0, 0); + gtk_widget_set_valign (widget[i], GTK_ALIGN_CENTER); + gtk_grid_attach (GTK_GRID (grid), widget[i], 0, i + 1, 1, 1); } gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget[6]), false); @@ -248,30 +262,31 @@ GtkWidget *create_config_notebook () checkbutton = gtk_check_button_new_with_label (_("Default")); g_object_set_data (G_OBJECT (notebook), day_def[i], checkbutton); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton), true); + gtk_widget_set_valign (checkbutton, GTK_ALIGN_CENTER); g_signal_connect (checkbutton, "toggled", G_CALLBACK (cb_def[i]), nullptr); - gtk_table_attach (GTK_TABLE (grid), checkbutton, 1, 2, i + 1, i + 2, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), checkbutton, 1, i + 1, 1, 1); } for (i = 7, j = 0; i < 14; i ++, j ++) { - adjustment = (GtkAdjustment *) gtk_adjustment_new (6, 0, 23, 1, 10, 0); + adjustment = gtk_adjustment_new (6, 0, 23, 1, 10, 0); widget[i] = gtk_spin_button_new (adjustment, 1, 0); g_object_set_data (G_OBJECT (notebook), day_h[j], widget[i]); - gtk_table_attach (GTK_TABLE (grid), widget[i], 2, 3, j + 1, j + 2, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), widget[i], 2, j + 1, 1, 1); } for (i = 0; i < 7; i ++) { label = gtk_label_new (":"); - gtk_table_attach (GTK_TABLE (grid), label, 3, 4, i + 1, i + 2, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), label, 3, i + 1, 1, 1); } for (i = 14, j = 0; i < 21; i ++, j ++) { - adjustment = (GtkAdjustment *) gtk_adjustment_new (30, 0, 59, 1, 10, 0); + adjustment = gtk_adjustment_new (30, 0, 59, 1, 10, 0); widget[i] = gtk_spin_button_new (adjustment, 1, 0); g_object_set_data (G_OBJECT (notebook), day_m[j], widget[i]); - gtk_table_attach (GTK_TABLE (grid), widget[i], 4, 5, j + 1, j + 2, GTK_FILL, GTK_FILL, 0, 0); + gtk_grid_attach (GTK_GRID (grid), widget[i], 4, j + 1, 1, 1); } label = gtk_label_new (_("Days")); @@ -280,107 +295,113 @@ GtkWidget *create_config_notebook () /* Page 3 */ - vbox = gtk_vbox_new (false, 6); - hbox = gtk_hbox_new (false, 6); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); frame = gtk_frame_new (_("Fading")); - gtk_container_set_border_width (GTK_CONTAINER (frame), 6); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); - adjustment = (GtkAdjustment *) gtk_adjustment_new (120, 0, 3600, 1, 10, 0); + gtk_container_set_border_width (GTK_CONTAINER (frame), 10); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 8); + adjustment = gtk_adjustment_new (120, 0, 3600, 1, 10, 0); fading_spin = gtk_spin_button_new (adjustment, 1, 0); g_object_set_data (G_OBJECT (notebook), "fading_spin", fading_spin); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fading_spin), true); gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (fading_spin), GTK_UPDATE_IF_VALID); label = gtk_label_new (_("seconds")); - gtk_box_pack_start (GTK_BOX (hbox), fading_spin, true, true, 0); - gtk_box_pack_start (GTK_BOX (hbox), label, false, false, 0); + gtk_container_add (GTK_CONTAINER (hbox), fading_spin); + gtk_box_pack_start (GTK_BOX (hbox), label, false, false, 3); gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_box_pack_start (GTK_BOX (vbox), frame, false, false, 0); + gtk_container_add (GTK_CONTAINER (vbox), frame); frame = gtk_frame_new (_("Volume")); - vbox2 = gtk_vbox_new (false, 6); - gtk_container_set_border_width (GTK_CONTAINER (frame), 6); - gtk_container_set_border_width (GTK_CONTAINER (vbox2), 6); + vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_container_set_border_width (GTK_CONTAINER (frame), 10); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8); label = gtk_label_new (_("Start at")); - gtk_box_pack_start (GTK_BOX (vbox2), label, false, false, 0); + gtk_widget_set_margin_bottom (label, 2); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_container_add (GTK_CONTAINER (vbox2), label); - quiet_vol_scale = gtk_hscale_new ((GtkAdjustment *) gtk_adjustment_new (20, 0, 100, 1, 5, 0)); + quiet_vol_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, gtk_adjustment_new (20, 0, 100, 1, 5, 0)); g_object_set_data (G_OBJECT (notebook), "quiet_vol_scale", quiet_vol_scale); gtk_scale_set_value_pos (GTK_SCALE (quiet_vol_scale), GTK_POS_RIGHT); gtk_scale_set_digits (GTK_SCALE (quiet_vol_scale), 0); label = gtk_label_new ("%"); - hbox2 = gtk_hbox_new (false, 6); + hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (GTK_BOX (hbox2), quiet_vol_scale, true, true, 0); - gtk_box_pack_start (GTK_BOX (hbox2), label, false, false, 0); - gtk_box_pack_start (GTK_BOX (vbox2), hbox2, false, false, 0); + gtk_container_add (GTK_CONTAINER (hbox2), label); + gtk_container_add (GTK_CONTAINER (vbox2), hbox2); - separator = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (vbox2), separator, false, false, 0); + separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); + gtk_box_pack_start (GTK_BOX (vbox2), separator, false, false, 10); label = gtk_label_new (_("Final")); - gtk_box_pack_start (GTK_BOX (vbox2), label, false, false, 0); + gtk_widget_set_margin_bottom (label, 2); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_container_add (GTK_CONTAINER (vbox2), label); - vol_scale = gtk_hscale_new ((GtkAdjustment *) gtk_adjustment_new (80, 0, 100, 1, 5, 0)); + vol_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, gtk_adjustment_new (80, 0, 100, 1, 5, 0)); g_object_set_data (G_OBJECT (notebook), "vol_scale", vol_scale); gtk_scale_set_value_pos (GTK_SCALE (vol_scale), GTK_POS_RIGHT); gtk_scale_set_digits (GTK_SCALE (vol_scale), 0); label = gtk_label_new ("%"); - hbox2 = gtk_hbox_new (false, 6); + hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (GTK_BOX (hbox2), vol_scale, true, true, 0); - gtk_box_pack_start (GTK_BOX (hbox2), label, false, false, 0); - gtk_box_pack_start (GTK_BOX (vbox2), hbox2, false, false, 0); + gtk_container_add (GTK_CONTAINER (hbox2), label); + gtk_container_add (GTK_CONTAINER (vbox2), hbox2); current_button = gtk_button_new_with_label (_("Current")); + gtk_widget_set_margin_top (current_button, 10); + gtk_widget_set_halign (current_button, GTK_ALIGN_END); g_signal_connect (current_button, "clicked", G_CALLBACK (alarm_current_volume), nullptr); - gtk_box_pack_start (GTK_BOX (vbox2), current_button, false, false, 0); + gtk_container_add (GTK_CONTAINER (vbox2), current_button); gtk_container_add (GTK_CONTAINER (frame), vbox2); - gtk_box_pack_start (GTK_BOX (vbox), frame, false, false, 0); + gtk_container_add (GTK_CONTAINER (vbox), frame); label = gtk_label_new (_("Volume")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label); /* Page 4 */ - vbox = gtk_vbox_new (false, 6); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); frame = gtk_frame_new (_("Additional Command")); - hbox = gtk_hbox_new (false, 6); - gtk_container_set_border_width (GTK_CONTAINER (frame), 6); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); + gtk_container_set_border_width (GTK_CONTAINER (frame), 10); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 8); cmd_entry = gtk_entry_new (); g_object_set_data (G_OBJECT (notebook), "cmd_entry", cmd_entry); cmd_checkb = gtk_check_button_new_with_label (_("enable")); g_object_set_data (G_OBJECT (notebook), "cmd_checkb", cmd_checkb); gtk_box_pack_start (GTK_BOX (hbox), cmd_entry, true, true, 0); - gtk_box_pack_start (GTK_BOX (hbox), cmd_checkb, false, false, 0); + gtk_container_add (GTK_CONTAINER (hbox), cmd_checkb); gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_box_pack_start (GTK_BOX (vbox), frame, false, false, 0); + gtk_container_add (GTK_CONTAINER (vbox), frame); frame = gtk_frame_new (_("Playlist (optional)")); - hbox = gtk_hbox_new (false, 6); - gtk_container_set_border_width (GTK_CONTAINER (frame), 6); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); + gtk_container_set_border_width (GTK_CONTAINER (frame), 10); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 8); playlist_entry = audgui_file_entry_new (GTK_FILE_CHOOSER_ACTION_OPEN, _("Select a playlist")); g_object_set_data (G_OBJECT (notebook), "playlist", playlist_entry); gtk_box_pack_start (GTK_BOX (hbox), playlist_entry, true, true, 0); gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_box_pack_start (GTK_BOX (vbox), frame, false, false, 0); + gtk_container_add (GTK_CONTAINER (vbox), frame); frame = gtk_frame_new (_("Reminder")); - hbox = gtk_hbox_new (false, 6); - gtk_container_set_border_width (GTK_CONTAINER (frame), 6); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); + gtk_container_set_border_width (GTK_CONTAINER (frame), 10); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 8); reminder_text = gtk_entry_new (); reminder_checkb = gtk_check_button_new_with_label (_("enable")); g_object_set_data (G_OBJECT (notebook), "reminder_text", reminder_text); g_object_set_data (G_OBJECT (notebook), "reminder_cb", reminder_checkb); gtk_box_pack_start (GTK_BOX (hbox), reminder_text, true, true, 0); - gtk_box_pack_start (GTK_BOX (hbox), reminder_checkb, false, false, 0); + gtk_container_add (GTK_CONTAINER (hbox), reminder_checkb); gtk_container_add (GTK_CONTAINER (frame), hbox); - gtk_box_pack_start (GTK_BOX (vbox), frame, false, false, 0); + gtk_container_add (GTK_CONTAINER (vbox), frame); label = gtk_label_new (_("Options")); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label); @@ -388,7 +409,7 @@ GtkWidget *create_config_notebook () /* Page 5 */ frame = gtk_frame_new (_("What do these options mean?")); - gtk_container_set_border_width (GTK_CONTAINER (frame), 6); + gtk_container_set_border_width (GTK_CONTAINER (frame), 10); view = gtk_text_view_new (); gtk_text_view_set_editable (GTK_TEXT_VIEW (view), false); gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), false); --- src/amidiplug/i_configure-fluidsynth.cc.old +++ src/amidiplug/i_configure-fluidsynth.cc @@ -218,9 +218,8 @@ void * create_soundfont_list () g_strfreev (sffiles); } - soundfont_file_hbox = gtk_hbox_new (false, 2); + soundfont_file_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); soundfont_file_lv = gtk_tree_view_new_with_model (GTK_TREE_MODEL (soundfont_file_store)); - gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (soundfont_file_lv), true); g_object_unref (soundfont_file_store); soundfont_file_lv_text_rndr = gtk_cell_renderer_text_new(); soundfont_file_lv_fname_col = gtk_tree_view_column_new_with_attributes ( @@ -243,7 +242,7 @@ void * create_soundfont_list () gtk_container_add (GTK_CONTAINER (soundfont_file_lv_sw), soundfont_file_lv); /* soundfont settings - soundfont files - buttonbox */ - soundfont_file_bbox_vbox = gtk_vbox_new (false, 0); + soundfont_file_bbox_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); soundfont_file_bbox_addbt = gtk_button_new(); gtk_button_set_image (GTK_BUTTON (soundfont_file_bbox_addbt), gtk_image_new_from_icon_name ("list-add", GTK_ICON_SIZE_MENU)); --- src/amidiplug/i_fileinfo.cc.old +++ src/amidiplug/i_fileinfo.cc @@ -49,11 +49,14 @@ void i_fileinfo_grid_add_entry (char * field_text, char * value_text, GtkWidget * field, *value; field = gtk_label_new (field_text); gtk_label_set_attributes (GTK_LABEL (field), attrlist); - gtk_misc_set_alignment (GTK_MISC (field), 0, 0); - gtk_table_attach (GTK_TABLE (grid), field, 0, 1, line, line + 1, GTK_FILL, GTK_FILL, 0, 0); + gtk_widget_set_halign (field, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (field), GTK_JUSTIFY_LEFT); + gtk_grid_attach (GTK_GRID (grid), field, 0, line, 1, 1); value = gtk_label_new (value_text); - gtk_misc_set_alignment (GTK_MISC (value), 0, 0); - gtk_table_attach (GTK_TABLE (grid), value, 1, 2, line, line + 1, GTK_FILL, GTK_FILL, 0, 0); + gtk_widget_set_halign (value, GTK_ALIGN_START); + gtk_label_set_justify (GTK_LABEL (value), GTK_JUSTIFY_LEFT); + gtk_grid_attach (GTK_GRID (grid), value, 1, line, 1, 1); + return; } @@ -141,7 +144,7 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file) g_signal_connect (G_OBJECT (fileinfowin), "destroy", G_CALLBACK (gtk_widget_destroyed), &fileinfowin); gtk_container_set_border_width (GTK_CONTAINER (fileinfowin), 10); - fileinfowin_vbox = gtk_vbox_new (false, 10); + fileinfowin_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10); gtk_container_add (GTK_CONTAINER (fileinfowin), fileinfowin_vbox); /* pango attributes */ @@ -153,13 +156,12 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file) /****************** *** TITLE LINE ***/ - title_hbox = gtk_hbox_new (false, 5); + title_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); gtk_box_pack_start (GTK_BOX (fileinfowin_vbox), title_hbox, false, false, 0); title_icon_pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) amidiplug_xpm_midiicon); title_icon_image = gtk_image_new_from_pixbuf (title_icon_pixbuf); g_object_unref (title_icon_pixbuf); - gtk_misc_set_alignment (GTK_MISC (title_icon_image), 0, 0); gtk_box_pack_start (GTK_BOX (title_hbox), title_icon_image, false, false, 0); title_name_f_label = gtk_label_new (_("Name:")); @@ -171,12 +173,12 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file) gtk_widget_set_size_request (GTK_WIDGET (title_name_v_entry), 200, -1); gtk_box_pack_start (GTK_BOX (title_hbox), title_name_v_entry, true, true, 0); - fileinfowin_columns_hbox = gtk_hbox_new (false, 2); + fileinfowin_columns_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_pack_start (GTK_BOX (fileinfowin_vbox), fileinfowin_columns_hbox, true, true, 0); /********************* *** MIDI INFO BOX ***/ - midiinfoboxes_vbox = gtk_vbox_new (false, 2); + midiinfoboxes_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_box_pack_start (GTK_BOX (fileinfowin_columns_hbox), midiinfoboxes_vbox, false, false, 0); info_frame_tl = gtk_label_new (""); @@ -185,10 +187,10 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file) info_frame = gtk_frame_new (nullptr); gtk_box_pack_start (GTK_BOX (midiinfoboxes_vbox), info_frame, true, true, 0); - info_grid = gtk_table_new (0, 0, false); - gtk_table_set_row_spacings (GTK_TABLE (info_grid), 2); - gtk_table_set_col_spacings (GTK_TABLE (info_grid), 6); - gtk_container_set_border_width (GTK_CONTAINER (info_grid), 6); + info_grid = gtk_grid_new(); + gtk_grid_set_row_spacing (GTK_GRID (info_grid), 4); + gtk_grid_set_column_spacing (GTK_GRID (info_grid), 10); + gtk_container_set_border_width (GTK_CONTAINER (info_grid), 3); gtk_container_add (GTK_CONTAINER (info_frame), info_grid); value_gstring = g_string_new (""); @@ -225,7 +227,7 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file) /********************************** *** MIDI COMMENTS/LYRICS BOXES ***/ - miditextboxes_vbox = gtk_vbox_new (false, 2); + miditextboxes_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_box_pack_start (GTK_BOX (fileinfowin_columns_hbox), miditextboxes_vbox, true, true, 0); text_frame_tl = gtk_label_new (""); @@ -233,7 +235,7 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file) _("<span size=\"smaller\"> MIDI Comments and Lyrics </span>")); gtk_box_pack_start (GTK_BOX (miditextboxes_vbox), text_frame_tl, false, false, 0); - miditextboxes_paned = gtk_vpaned_new (); + miditextboxes_paned = gtk_paned_new (GTK_ORIENTATION_VERTICAL); gtk_box_pack_start (GTK_BOX (miditextboxes_vbox), miditextboxes_paned, true, true, 0); text_frame = gtk_frame_new (nullptr); @@ -297,7 +299,7 @@ void i_fileinfo_gui (const char * filename_uri, VFSFile & file) /************** *** FOOTER ***/ - footer_hbbox = gtk_hbutton_box_new (); + footer_hbbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_button_box_set_layout (GTK_BUTTON_BOX (footer_hbbox), GTK_BUTTONBOX_END); footer_bclose = gtk_button_new_with_mnemonic (_("_Close")); g_signal_connect (G_OBJECT (footer_bclose), "clicked", G_CALLBACK (i_fileinfo_ev_close), fileinfowin); --- src/aosd/aosd_ui.cc.old +++ src/aosd/aosd_ui.cc @@ -33,25 +33,29 @@ #include "aosd_osd.h" -static void chooser_get_aosd_color (GtkColorButton * chooser, aosd_color_t * color) +static void chooser_get_aosd_color (GtkColorChooser * chooser, aosd_color_t * color) { - GdkColor gdk_color; - gtk_color_button_get_color (chooser, & gdk_color); + GdkRGBA rgba; + gtk_color_chooser_get_rgba (chooser, & rgba); - color->red = gdk_color.red; - color->green = gdk_color.green; - color->blue = gdk_color.blue; - color->alpha = gtk_color_button_get_alpha (chooser); + color->red = rint (rgba.red * 65535.0); + color->green = rint (rgba.green * 65535.0); + color->blue = rint (rgba.blue * 65535.0); + color->alpha = rint (rgba.alpha * 65535.0); } -static void chooser_set_aosd_color (GtkColorButton * chooser, const aosd_color_t * color) +static void chooser_set_aosd_color (GtkColorChooser * chooser, const aosd_color_t * color) { - GdkColor gdk_color = {0, (uint16_t) color->red, (uint16_t) color->green, (uint16_t) color->blue}; - - gtk_color_button_set_color (chooser, & gdk_color); - gtk_color_button_set_use_alpha (chooser, true); - gtk_color_button_set_alpha (chooser, color->alpha); + GdkRGBA rgba = { + color->red / 65535.0, + color->green / 65535.0, + color->blue / 65535.0, + color->alpha / 65535.0 + }; + + gtk_color_chooser_set_use_alpha (chooser, true); + gtk_color_chooser_set_rgba (chooser, & rgba); } @@ -80,16 +84,14 @@ aosd_callback_list_run ( aosd_cfg_t * cfg ) static gboolean aosd_cb_configure_position_expose ( GtkWidget * darea , - GdkEventExpose * event , + cairo_t * cr , void * coord_gp ) { int coord = GPOINTER_TO_INT(coord_gp); - cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (darea)); cairo_set_source_rgb ( cr , 0 , 0 , 0 ); cairo_rectangle ( cr , (coord % 3) * 10 , (coord / 3) * 16 , 20 , 8 ); cairo_fill ( cr ); - cairo_destroy (cr); return false; } @@ -156,16 +158,16 @@ aosd_ui_configure_position ( aosd_cfg_t * cfg ) int monitors_num = gdk_screen_get_n_monitors( gdk_screen_get_default() ); int i = 0; - pos_vbox = gtk_vbox_new( false , 4 ); + pos_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 4 ); gtk_container_set_border_width( GTK_CONTAINER(pos_vbox) , 6 ); pos_placement_frame = gtk_frame_new( _("Placement") ); - pos_placement_hbox = gtk_hbox_new( false , 0 ); + pos_placement_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 0 ); gtk_container_set_border_width( GTK_CONTAINER(pos_placement_hbox) , 6 ); gtk_container_add( GTK_CONTAINER(pos_placement_frame) , pos_placement_hbox ); gtk_box_pack_start( GTK_BOX(pos_vbox) , pos_placement_frame , false , false , 0 ); - pos_placement_grid = gtk_table_new (0, 0, false); + pos_placement_grid = gtk_grid_new(); for ( i = 0 ; i < 9 ; i++ ) { if ( i == 0 ) @@ -176,10 +178,9 @@ aosd_ui_configure_position ( aosd_cfg_t * cfg ) pos_placement_bt_darea[i] = gtk_drawing_area_new(); gtk_widget_set_size_request( pos_placement_bt_darea[i] , 40 , 40 ); gtk_container_add( GTK_CONTAINER(pos_placement_bt[i]) , pos_placement_bt_darea[i] ); - g_signal_connect( G_OBJECT(pos_placement_bt_darea[i]) , "expose-event" , + g_signal_connect( G_OBJECT(pos_placement_bt_darea[i]) , "draw" , G_CALLBACK(aosd_cb_configure_position_expose) , GINT_TO_POINTER(i) ); - gtk_table_attach_defaults( GTK_TABLE(pos_placement_grid) , pos_placement_bt[i] , - (i % 3) , (i % 3) + 1 , (i / 3) , (i / 3) + 1 ); + gtk_grid_attach( GTK_GRID(pos_placement_grid) , pos_placement_bt[i] , (i % 3) , (i / 3) , 1 , 1 ); g_object_set_data( G_OBJECT(pos_placement_bt[i]) , "value" , GINT_TO_POINTER(i+1) ); if ( cfg->position.placement == (i+1) ) gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(pos_placement_bt[i]) , true ); @@ -187,38 +188,38 @@ aosd_ui_configure_position ( aosd_cfg_t * cfg ) gtk_box_pack_start( GTK_BOX(pos_placement_hbox) , pos_placement_grid , false , false , 0 ); aosd_cb_list.append( pos_placement_grid , aosd_cb_configure_position_placement_commit ); - gtk_box_pack_start( GTK_BOX(pos_placement_hbox) , gtk_vseparator_new() , false , false , 6 ); + gtk_box_pack_start( GTK_BOX(pos_placement_hbox) , gtk_separator_new(GTK_ORIENTATION_VERTICAL) , false , false , 6 ); - pos_offset_grid = gtk_table_new (0, 0, false); - gtk_table_set_row_spacings( GTK_TABLE(pos_offset_grid) , 4 ); - gtk_table_set_col_spacings( GTK_TABLE(pos_offset_grid) , 4 ); + pos_offset_grid = gtk_grid_new(); + gtk_grid_set_row_spacing( GTK_GRID(pos_offset_grid) , 4 ); + gtk_grid_set_column_spacing( GTK_GRID(pos_offset_grid) , 4 ); pos_offset_x_label = gtk_label_new( _( "Relative X offset:" ) ); - gtk_misc_set_alignment( GTK_MISC(pos_offset_x_label) , 0 , 0.5 ); - gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_offset_x_label , 0 , 1 , 0 , 1 ); + gtk_widget_set_halign( pos_offset_x_label , GTK_ALIGN_START ); + gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_offset_x_label , 0 , 0 , 1 , 1 ); pos_offset_x_spinbt = gtk_spin_button_new_with_range( -9999 , 9999 , 1 ); gtk_spin_button_set_value( GTK_SPIN_BUTTON(pos_offset_x_spinbt) , cfg->position.offset_x ); - gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_offset_x_spinbt , 1 , 2 , 0 , 1 ); + gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_offset_x_spinbt , 1 , 0 , 1 , 1 ); g_object_set_data( G_OBJECT(pos_offset_grid) , "offx" , pos_offset_x_spinbt ); pos_offset_y_label = gtk_label_new( _( "Relative Y offset:" ) ); - gtk_misc_set_alignment( GTK_MISC(pos_offset_y_label) , 0 , 0.5 ); - gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_offset_y_label , 0 , 1 , 1 , 2 ); + gtk_widget_set_halign( pos_offset_y_label , GTK_ALIGN_START ); + gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_offset_y_label , 0 , 1 , 1 , 1 ); pos_offset_y_spinbt = gtk_spin_button_new_with_range( -9999 , 9999 , 1 ); gtk_spin_button_set_value( GTK_SPIN_BUTTON(pos_offset_y_spinbt) , cfg->position.offset_y ); - gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_offset_y_spinbt , 1 , 2 , 1 , 2 ); + gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_offset_y_spinbt , 1 , 1 , 1 , 1 ); g_object_set_data( G_OBJECT(pos_offset_grid) , "offy" , pos_offset_y_spinbt ); pos_maxsize_width_label = gtk_label_new( _("Max OSD width:") ); - gtk_misc_set_alignment( GTK_MISC(pos_maxsize_width_label) , 0 , 0.5 ); - gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_maxsize_width_label , 0 , 1 , 2 , 3 ); + gtk_widget_set_halign( pos_maxsize_width_label , GTK_ALIGN_START ); + gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_maxsize_width_label , 0 , 2 , 1 , 1 ); pos_maxsize_width_spinbt = gtk_spin_button_new_with_range( 0 , 99999 , 1 ); g_object_set_data( G_OBJECT(pos_offset_grid) , "maxsize_width" , pos_maxsize_width_spinbt ); gtk_spin_button_set_value( GTK_SPIN_BUTTON(pos_maxsize_width_spinbt) , cfg->position.maxsize_width ); - gtk_table_attach_defaults( GTK_TABLE(pos_offset_grid) , pos_maxsize_width_spinbt , 1 , 2 , 2 , 3 ); + gtk_grid_attach( GTK_GRID(pos_offset_grid) , pos_maxsize_width_spinbt , 1 , 2 , 1 , 1 ); gtk_box_pack_start( GTK_BOX(pos_placement_hbox) , pos_offset_grid , false , false , 0 ); aosd_cb_list.append( pos_offset_grid , aosd_cb_configure_position_offset_commit ); aosd_cb_list.append( pos_offset_grid , aosd_cb_configure_position_maxsize_commit ); pos_multimon_frame = gtk_frame_new( _("Multi-Monitor options") ); - pos_multimon_hbox = gtk_hbox_new( false , 4 ); + pos_multimon_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 ); gtk_container_set_border_width( GTK_CONTAINER(pos_multimon_hbox) , 6 ); gtk_container_add( GTK_CONTAINER(pos_multimon_frame), pos_multimon_hbox ); pos_multimon_label = gtk_label_new( _("Display OSD using:") ); @@ -244,7 +245,7 @@ static GtkWidget * aosd_ui_configure_animation_timing ( char * label_string ) { GtkWidget *hbox, *desc_label, *spinbt; - hbox = gtk_hbox_new( false , 4 ); + hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 ); desc_label = gtk_label_new( label_string ); spinbt = gtk_spin_button_new_with_range( 0 , 99999 , 1 ); gtk_box_pack_start( GTK_BOX(hbox) , desc_label , false , false , 0 ); @@ -274,10 +275,10 @@ aosd_ui_configure_animation ( aosd_cfg_t * cfg ) GtkWidget *ani_timing_fadein_widget, *ani_timing_fadeout_widget, *ani_timing_stay_widget; GtkSizeGroup *sizegroup; - ani_vbox = gtk_vbox_new( false , 0 ); + ani_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 0 ); gtk_container_set_border_width( GTK_CONTAINER(ani_vbox) , 6 ); - ani_timing_hbox = gtk_hbox_new( false , 0 ); + ani_timing_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 0 ); ani_timing_frame = gtk_frame_new( _("Timing (ms)") ); gtk_container_set_border_width( GTK_CONTAINER(ani_timing_hbox) , 6 ); gtk_container_add( GTK_CONTAINER(ani_timing_frame) , ani_timing_hbox ); @@ -287,12 +288,12 @@ aosd_ui_configure_animation ( aosd_cfg_t * cfg ) gtk_spin_button_set_value( GTK_SPIN_BUTTON(g_object_get_data( G_OBJECT(ani_timing_stay_widget),"spinbt")) , cfg->animation.timing_display ); gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , ani_timing_stay_widget , true , true , 0 ); - gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , gtk_vseparator_new() , false , false , 4 ); + gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , gtk_separator_new(GTK_ORIENTATION_VERTICAL) , false , false , 4 ); ani_timing_fadein_widget = aosd_ui_configure_animation_timing( _("Fade in:") ); gtk_spin_button_set_value( GTK_SPIN_BUTTON(g_object_get_data( G_OBJECT(ani_timing_fadein_widget),"spinbt")) , cfg->animation.timing_fadein ); gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , ani_timing_fadein_widget , true , true , 0 ); - gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , gtk_vseparator_new() , false , false , 4 ); + gtk_box_pack_start( GTK_BOX(ani_timing_hbox) , gtk_separator_new(GTK_ORIENTATION_VERTICAL) , false , false , 4 ); ani_timing_fadeout_widget = aosd_ui_configure_animation_timing( _("Fade out:") ); gtk_spin_button_set_value( GTK_SPIN_BUTTON(g_object_get_data( G_OBJECT(ani_timing_fadeout_widget),"spinbt")) , cfg->animation.timing_fadeout ); @@ -328,7 +329,7 @@ static void aosd_cb_configure_text_font_commit ( GtkWidget * fontbt , aosd_cfg_t * cfg ) { int fontnum = GPOINTER_TO_INT(g_object_get_data( G_OBJECT(fontbt) , "fontnum" )); - GtkColorButton * chooser; + GtkColorChooser * chooser; cfg->text.fonts_name[fontnum] = String (gtk_font_button_get_font_name (GTK_FONT_BUTTON (fontbt))); @@ -336,10 +337,10 @@ aosd_cb_configure_text_font_commit ( GtkWidget * fontbt , aosd_cfg_t * cfg ) cfg->text.fonts_draw_shadow[fontnum] = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(g_object_get_data(G_OBJECT(fontbt),"use_shadow")) ); - chooser = (GtkColorButton *) g_object_get_data ((GObject *) fontbt, "color"); + chooser = (GtkColorChooser *) g_object_get_data ((GObject *) fontbt, "color"); chooser_get_aosd_color (chooser, & cfg->text.fonts_color[fontnum]); - chooser = (GtkColorButton *) g_object_get_data ((GObject *) fontbt, "shadow_color"); + chooser = (GtkColorChooser *) g_object_get_data ((GObject *) fontbt, "shadow_color"); chooser_get_aosd_color (chooser, & cfg->text.fonts_shadow_color[fontnum]); } @@ -354,14 +355,14 @@ aosd_ui_configure_text ( aosd_cfg_t * cfg ) GtkWidget *tex_font_shadow_colorbt[3]; int i = 0; - tex_vbox = gtk_vbox_new( false , 4 ); + tex_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 4 ); gtk_container_set_border_width( GTK_CONTAINER(tex_vbox) , 6 ); tex_font_frame = gtk_frame_new( _("Fonts") ); - tex_font_grid = gtk_table_new (0, 0, false); + tex_font_grid = gtk_grid_new(); gtk_container_set_border_width( GTK_CONTAINER(tex_font_grid) , 6 ); - gtk_table_set_row_spacings( GTK_TABLE(tex_font_grid) , 4 ); - gtk_table_set_col_spacings( GTK_TABLE(tex_font_grid) , 4 ); + gtk_grid_set_row_spacing ( GTK_GRID(tex_font_grid) , 4 ); + gtk_grid_set_column_spacing ( GTK_GRID(tex_font_grid) , 4 ); for ( i = 0 ; i < AOSD_TEXT_FONTS_NUM ; i++ ) { char *label_str = g_strdup_printf( _("Font %i:") , i+1 ); @@ -373,16 +374,17 @@ aosd_ui_configure_text ( aosd_cfg_t * cfg ) gtk_font_button_set_use_font( GTK_FONT_BUTTON(tex_font_fontbt[i]) , false ); gtk_font_button_set_use_size( GTK_FONT_BUTTON(tex_font_fontbt[i]) , false ); gtk_font_button_set_font_name( GTK_FONT_BUTTON(tex_font_fontbt[i]) , cfg->text.fonts_name[i] ); + gtk_widget_set_hexpand( tex_font_fontbt[i] , true ); tex_font_colorbt[i] = gtk_color_button_new (); - chooser_set_aosd_color ((GtkColorButton *) tex_font_colorbt[i], + chooser_set_aosd_color ((GtkColorChooser *) tex_font_colorbt[i], & cfg->text.fonts_color[i]); tex_font_shadow_togglebt[i] = gtk_toggle_button_new_with_label( _("Shadow") ); gtk_toggle_button_set_mode( GTK_TOGGLE_BUTTON(tex_font_shadow_togglebt[i]) , false ); tex_font_shadow_colorbt[i] = gtk_color_button_new (); - chooser_set_aosd_color ((GtkColorButton *) tex_font_shadow_colorbt[i], + chooser_set_aosd_color ((GtkColorChooser *) tex_font_shadow_colorbt[i], & cfg->text.fonts_shadow_color[i]); gtk_widget_set_sensitive( tex_font_shadow_colorbt[i] , false ); @@ -391,11 +393,11 @@ aosd_ui_configure_text ( aosd_cfg_t * cfg ) tex_font_shadow_colorbt[i] ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(tex_font_shadow_togglebt[i]) , cfg->text.fonts_draw_shadow[i] ); - gtk_table_attach_defaults( GTK_TABLE(tex_font_grid) , tex_font_label[i] , 0 , 1 , i , i + 1 ); - gtk_table_attach_defaults( GTK_TABLE(tex_font_grid) , tex_font_fontbt[i] , 1 , 2 , i , i + 1 ); - gtk_table_attach_defaults( GTK_TABLE(tex_font_grid) , tex_font_colorbt[i] , 2 , 3 , i , i + 1 ); - gtk_table_attach_defaults( GTK_TABLE(tex_font_grid) , tex_font_shadow_togglebt[i] , 3 , 4 , i , i + 1 ); - gtk_table_attach_defaults( GTK_TABLE(tex_font_grid) , tex_font_shadow_colorbt[i] , 4 , 5 , i , i + 1 ); + gtk_grid_attach( GTK_GRID(tex_font_grid) , tex_font_label[i] , 0 , 0 , 1 , 1 ); + gtk_grid_attach( GTK_GRID(tex_font_grid) , tex_font_fontbt[i] , 1 , 0 , 1 , 1 ); + gtk_grid_attach( GTK_GRID(tex_font_grid) , tex_font_colorbt[i] , 2 , 0 , 1 , 1 ); + gtk_grid_attach( GTK_GRID(tex_font_grid) , tex_font_shadow_togglebt[i] , 3 , 0 , 1 , 1 ); + gtk_grid_attach( GTK_GRID(tex_font_grid) , tex_font_shadow_colorbt[i] , 4 , 0 , 1 , 1 ); g_object_set_data( G_OBJECT(tex_font_fontbt[i]) , "fontnum" , GINT_TO_POINTER(i) ); g_object_set_data( G_OBJECT(tex_font_fontbt[i]) , "color" , tex_font_colorbt[i] ); g_object_set_data( G_OBJECT(tex_font_fontbt[i]) , "use_shadow" , tex_font_shadow_togglebt[i] ); @@ -429,7 +431,7 @@ static void aosd_cb_configure_decoration_color_commit ( GtkWidget * colorbt , aosd_cfg_t * cfg ) { aosd_color_t color; - chooser_get_aosd_color ((GtkColorButton *) colorbt, & color); + chooser_get_aosd_color ((GtkColorChooser *) colorbt, & color); int colnum = GPOINTER_TO_INT( g_object_get_data( G_OBJECT(colorbt) , "colnum" ) ); cfg->decoration.colors[colnum] = color; @@ -450,7 +452,7 @@ aosd_ui_configure_decoration ( aosd_cfg_t * cfg ) GtkWidget *dec_rstyleopts_frame, *dec_rstyleopts_grid; int colors_max_num = 0, i = 0; - dec_hbox = gtk_hbox_new( false , 4 ); + dec_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 ); gtk_container_set_border_width( GTK_CONTAINER(dec_hbox) , 6 ); /* decoration style model @@ -494,31 +496,31 @@ aosd_ui_configure_decoration ( aosd_cfg_t * cfg ) gtk_box_pack_start( GTK_BOX(dec_hbox) , dec_rstyle_lv_frame , false , false , 0 ); aosd_cb_list.append( dec_rstyle_lv , aosd_cb_configure_decoration_style_commit ); - dec_rstyle_hbox = gtk_vbox_new( false , 4 ); + dec_rstyle_hbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 4 ); gtk_box_pack_start( GTK_BOX(dec_hbox) , dec_rstyle_hbox , true , true , 0 ); /* in colors_max_num now there's the maximum number of colors used by decoration styles */ dec_rstyleopts_frame = gtk_frame_new( _("Colors") ); - dec_rstyleopts_grid = gtk_table_new (0, 0, false); + dec_rstyleopts_grid = gtk_grid_new(); gtk_container_set_border_width( GTK_CONTAINER(dec_rstyleopts_grid) , 6 ); - gtk_table_set_row_spacings( GTK_TABLE(dec_rstyleopts_grid) , 4 ); - gtk_table_set_col_spacings( GTK_TABLE(dec_rstyleopts_grid) , 8 ); + gtk_grid_set_row_spacing( GTK_GRID(dec_rstyleopts_grid) , 4 ); + gtk_grid_set_column_spacing( GTK_GRID(dec_rstyleopts_grid) , 8 ); gtk_container_add( GTK_CONTAINER(dec_rstyleopts_frame) , dec_rstyleopts_grid ); for ( i = 0 ; i < colors_max_num ; i++ ) { GtkWidget *hbox, *label; char *label_str = nullptr; - hbox = gtk_hbox_new( false , 4 ); + hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 ); label_str = g_strdup_printf( _("Color %i:") , i+1 ); label = gtk_label_new( label_str ); g_free( label_str ); GtkWidget * colorbt = gtk_color_button_new (); - chooser_set_aosd_color ((GtkColorButton *) colorbt, & cfg->decoration.colors[i]); + chooser_set_aosd_color ((GtkColorChooser *) colorbt, & cfg->decoration.colors[i]); gtk_box_pack_start( GTK_BOX(hbox) , label , false , false , 0 ); gtk_box_pack_start( GTK_BOX(hbox) , colorbt , false , false , 0 ); - gtk_table_attach_defaults( GTK_TABLE(dec_rstyleopts_grid) , hbox , (i % 3) , (i % 3) + 1, (i / 3) , (i / 3) + 1); + gtk_grid_attach( GTK_GRID(dec_rstyleopts_grid) , hbox , (i % 3) , (i / 3) , 1 , 1 ); g_object_set_data( G_OBJECT(colorbt) , "colnum" , GINT_TO_POINTER(i) ); aosd_cb_list.append( colorbt , aosd_cb_configure_decoration_color_commit ); } @@ -572,7 +574,7 @@ aosd_ui_configure_trigger ( aosd_cfg_t * cfg ) gtk_notebook_set_show_tabs( GTK_NOTEBOOK(tri_event_nb) , false ); gtk_notebook_set_show_border( GTK_NOTEBOOK(tri_event_nb) , false ); - tri_hbox = gtk_hbox_new( false , 4 ); + tri_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 ); gtk_container_set_border_width( GTK_CONTAINER(tri_hbox) , 6 ); /* trigger model @@ -590,19 +592,19 @@ aosd_ui_configure_trigger ( aosd_cfg_t * cfg ) gtk_list_store_set( tri_event_store , &iter , 0 , _(aosd_trigger_get_name( i )) , 1 , i , 2 , i , -1 ); - vbox = gtk_vbox_new( false , 0 ); + vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 0 ); gtk_container_set_border_width( GTK_CONTAINER(vbox) , 6 ); label = gtk_label_new( _(aosd_trigger_get_desc( i )) ); gtk_label_set_line_wrap( GTK_LABEL(label) , true ); gtk_label_set_max_width_chars( GTK_LABEL(label), 40 ); - gtk_misc_set_alignment( GTK_MISC(label) , 0.0 , 0.0 ); + gtk_widget_set_halign( label , GTK_ALIGN_START ); checkbt = gtk_check_button_new_with_label( _("Enable trigger") ); if ( cfg->trigger.enabled[i] ) gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(checkbt) , true ); else gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(checkbt) , false ); gtk_box_pack_start( GTK_BOX(vbox) , checkbt , false , false , 0 ); - gtk_box_pack_start( GTK_BOX(vbox) , gtk_hseparator_new() , false , false , 4 ); + gtk_box_pack_start( GTK_BOX(vbox) , gtk_separator_new(GTK_ORIENTATION_HORIZONTAL) , false , false , 4 ); gtk_box_pack_start( GTK_BOX(vbox) , label , false , false , 0 ); frame = gtk_frame_new( nullptr ); gtk_container_add( GTK_CONTAINER(frame) , vbox ); @@ -698,10 +700,10 @@ aosd_ui_configure_misc ( aosd_cfg_t * cfg ) GtkWidget *mis_transp_status_frame, *mis_transp_status_hbox; GtkWidget *mis_transp_status_img, *mis_transp_status_label; - mis_vbox = gtk_vbox_new( false , 0 ); + mis_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 0 ); gtk_container_set_border_width( GTK_CONTAINER(mis_vbox) , 6 ); - mis_transp_vbox = gtk_vbox_new( false , 0 ); + mis_transp_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL , 0 ); mis_transp_frame = gtk_frame_new( _("Transparency") ); gtk_container_set_border_width( GTK_CONTAINER(mis_transp_vbox) , 6 ); gtk_container_add( GTK_CONTAINER(mis_transp_frame) , mis_transp_vbox ); @@ -718,16 +720,15 @@ aosd_ui_configure_misc ( aosd_cfg_t * cfg ) gtk_box_pack_start( GTK_BOX(mis_transp_vbox) , mis_transp_fake_rbt , true , true , 0 ); gtk_box_pack_start( GTK_BOX(mis_transp_vbox) , mis_transp_real_rbt , true , true , 0 ); - mis_transp_status_hbox = gtk_hbox_new( false , 4 ); + mis_transp_status_hbox = gtk_box_new( GTK_ORIENTATION_HORIZONTAL , 4 ); mis_transp_status_frame = gtk_frame_new( nullptr ); gtk_container_set_border_width( GTK_CONTAINER(mis_transp_status_hbox) , 3 ); gtk_container_add( GTK_CONTAINER(mis_transp_status_frame) , mis_transp_status_hbox ); gtk_box_pack_start( GTK_BOX(mis_transp_vbox) , mis_transp_status_frame , true , true , 0 ); mis_transp_status_img = gtk_image_new(); - gtk_misc_set_alignment( GTK_MISC(mis_transp_status_img) , 0.5 , 0 ); mis_transp_status_label = gtk_label_new( "" ); - gtk_misc_set_alignment( GTK_MISC(mis_transp_status_label) , 0 , 0.5 ); + gtk_widget_set_halign( mis_transp_status_label , GTK_ALIGN_START ); gtk_label_set_line_wrap( GTK_LABEL(mis_transp_status_label) , true ); gtk_box_pack_start( GTK_BOX(mis_transp_status_hbox) , mis_transp_status_img , false , false , 0 ); gtk_box_pack_start( GTK_BOX(mis_transp_status_hbox) , mis_transp_status_label , true , true , 0 ); --- src/blur_scope/blur_scope.cc.old +++ src/blur_scope/blur_scope.cc @@ -71,13 +71,14 @@ public: private: void resize (int w, int h); + void draw_to_cairo (cairo_t * cr); void draw (); void blur (); void draw_vert_line (int x, int y1, int y2); static gboolean configure_event (GtkWidget * widget, GdkEventConfigure * event, void * user); - static gboolean expose_event (GtkWidget * widget, GdkEventExpose * event, void * user); + static gboolean draw_cb (GtkWidget * widget, cairo_t * cr, void * user); GtkWidget * area = nullptr; int width = 0, height = 0, stride = 0, image_size = 0; @@ -113,17 +114,22 @@ void BlurScope::resize (int w, int h) corner = image + stride + 1; } -void BlurScope::draw () +void BlurScope::draw_to_cairo (cairo_t * cr) { - if (! area || ! gtk_widget_get_window (area)) - return; - - cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (area)); cairo_surface_t * surf = cairo_image_surface_create_for_data ((unsigned char *) image, CAIRO_FORMAT_RGB24, width, height, stride << 2); cairo_set_source_surface (cr, surf, 0, 0); cairo_paint (cr); cairo_surface_destroy (surf); +} + +void BlurScope::draw () +{ + if (! area || ! gtk_widget_get_window (area)) + return; + + cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (area)); + draw_to_cairo (cr); cairo_destroy (cr); } @@ -133,9 +139,9 @@ gboolean BlurScope::configure_event (GtkWidget * widget, GdkEventConfigure * eve return true; } -gboolean BlurScope::expose_event (GtkWidget * widget, GdkEventExpose * event, void * user) +gboolean BlurScope::draw_cb (GtkWidget * widget, cairo_t * cr, void * user) { - ((BlurScope *) user)->draw (); + ((BlurScope *) user)->draw_to_cairo (cr); return true; } @@ -143,7 +149,7 @@ void * BlurScope::get_gtk_widget () { area = gtk_drawing_area_new (); - g_signal_connect (area, "expose-event", (GCallback) expose_event, this); + g_signal_connect (area, "draw_cb", (GCallback) draw_cb, this); g_signal_connect (area, "configure-event", (GCallback) configure_event, this); g_signal_connect (area, "destroy", (GCallback) gtk_widget_destroyed, & area); @@ -212,17 +218,25 @@ void BlurScope::render_mono_pcm (const float * pcm) static void color_set_cb (GtkWidget * chooser) { - GdkColor gdk_color; - gtk_color_button_get_color ((GtkColorButton *) chooser, & gdk_color); - bscope_color = ((gdk_color.red & 0xff00) << 8) | (gdk_color.green & 0xff00) | (gdk_color.blue >> 8); + GdkRGBA rgba; + gtk_color_chooser_get_rgba ((GtkColorChooser *) chooser, & rgba); + + int red = round (rgba.red * 255); + int green = round (rgba.green * 255); + int blue = round (rgba.blue * 255); + bscope_color = (red << 16) | (green << 8) | blue; } static void /* GtkWidget */ * bscope_get_color_chooser () { - GdkColor gdk_color = {0, (uint16_t) ((bscope_color & 0xff0000) >> 8), - (uint16_t) (bscope_color & 0xff00), (uint16_t) ((bscope_color & 0xff) << 8)}; - GtkWidget * chooser = gtk_color_button_new_with_color (& gdk_color); - gtk_color_button_set_use_alpha ((GtkColorButton *) chooser, false); + GdkRGBA rgba = { + ((bscope_color & 0xff0000) >> 16) / 255.0, + ((bscope_color & 0xff00) >> 8) / 255.0, + (bscope_color & 0xff) / 255.0 + }; + + GtkWidget * chooser = gtk_color_button_new_with_rgba (& rgba); + gtk_color_chooser_set_use_alpha ((GtkColorChooser *) chooser, false); g_signal_connect (chooser, "color-set", (GCallback) color_set_cb, nullptr); --- src/cairo-spectrum/cairo-spectrum.cc.old +++ src/cairo-spectrum/cairo-spectrum.cc @@ -123,41 +123,6 @@ void CairoSpectrum::clear () gtk_widget_queue_draw (spect_widget); } -static void rgb_to_hsv (float r, float g, float b, float * h, float * s, float * v) -{ - float max, min; - - max = r; - if (g > max) - max = g; - if (b > max) - max = b; - - min = r; - if (g < min) - min = g; - if (b < min) - min = b; - - * v = max; - - if (max == min) - { - * h = 0; - * s = 0; - return; - } - - if (r == max) - * h = 1 + (g - b) / (max - min); - else if (g == max) - * h = 3 + (b - r) / (max - min); - else - * h = 5 + (r - g) / (max - min); - - * s = (max - min) / max; -} - static void hsv_to_rgb (float h, float s, float v, float * r, float * g, float * b) { for (; h >= 2; h -= 2) @@ -186,18 +151,15 @@ static void hsv_to_rgb (float h, float s, float v, float * r, float * g, float * * b = v * (1 - s * (1 - * b)); } -static void get_color (GtkWidget * widget, int i, float * r, float * g, float * b) +static void get_color (gint i, gfloat * r, gfloat * g, gfloat * b) { - GdkColor * c = (gtk_widget_get_style (widget))->base + GTK_STATE_SELECTED; - float h, s, v; - - rgb_to_hsv (c->red / 65535.0, c->green / 65535.0, c->blue / 65535.0, & h, & s, & v); + gfloat h, s, v, n; - if (s < 0.1) /* monochrome theme? use blue instead */ - h = 4.6; + h = 4.6; /* hard-coded to blue due to repeatedly broken theming in GTK3 */ - s = 1 - 0.9 * i / (bands - 1); - v = 0.75 + 0.25 * i / (bands - 1); + n = i / (gfloat) (bands - 1); + s = 1 - 0.9 * n; + v = 0.75 + 0.25 * n; hsv_to_rgb (h, s, v, r, g, b); } @@ -218,7 +180,7 @@ static void draw_visualizer (GtkWidget *widget, cairo_t *cr) int x = ((width / bands) * i) + 2; float r, g, b; - get_color (widget, i, & r, & g, & b); + get_color (i, & r, & g, & b); cairo_set_source_rgb (cr, r, g, b); cairo_rectangle (cr, x + 1, height - (bars[i] * height / 40), (width / bands) - 1, (bars[i] * height / 40)); @@ -239,14 +201,11 @@ static gboolean configure_event (GtkWidget * widget, GdkEventConfigure * event) return true; } -static gboolean draw_event (GtkWidget * widget) +static gboolean draw_event (GtkWidget * widget, cairo_t * cr, GtkWidget * area) { - cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (widget)); - draw_background (widget, cr); draw_visualizer (widget, cr); - cairo_destroy (cr); return true; } @@ -255,7 +214,7 @@ void * CairoSpectrum::get_gtk_widget () GtkWidget *area = gtk_drawing_area_new(); spect_widget = area; - g_signal_connect(area, "expose-event", (GCallback) draw_event, nullptr); + g_signal_connect(area, "draw", (GCallback) draw_event, nullptr); g_signal_connect(area, "configure-event", (GCallback) configure_event, nullptr); g_signal_connect(area, "destroy", (GCallback) gtk_widget_destroyed, & spect_widget); --- src/glspectrum/gl-spectrum.cc.old +++ src/glspectrum/gl-spectrum.cc @@ -246,7 +246,7 @@ static void draw_bars () glPopMatrix (); } -static gboolean draw_cb (GtkWidget * widget) +static gboolean draw_cb (GtkWidget * widget, cairo_t * cr) { #ifdef GDK_WINDOWING_X11 if (! s_context) @@ -417,13 +417,17 @@ void * GLSpectrum::get_gtk_widget () s_widget = gtk_drawing_area_new (); - g_signal_connect (s_widget, "expose-event", (GCallback) draw_cb, nullptr); + g_signal_connect (s_widget, "draw", (GCallback) draw_cb, nullptr); g_signal_connect (s_widget, "realize", (GCallback) widget_realized, nullptr); g_signal_connect (s_widget, "destroy", (GCallback) widget_destroyed, nullptr); g_signal_connect (s_widget, "configure-event", (GCallback) widget_resize, nullptr); - /* Disable GTK double buffering */ + /* Disable GTK double buffering -- this still works and is still necessary + * in GTK3, regardless of the deprecation */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" gtk_widget_set_double_buffered (s_widget, false); +#pragma GCC diagnostic pop return s_widget; } --- src/gtkui/columns.cc.old +++ src/gtkui/columns.cc @@ -299,7 +299,7 @@ void * pw_col_create_chooser () avail.append (i, false); } - GtkWidget * hbox = gtk_hbox_new (false, 6); + GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_set_size_request (hbox, -1, audgui_get_dpi () * 5 / 4); GtkWidget * scroll = gtk_scrolled_window_new (nullptr, nullptr); @@ -313,7 +313,7 @@ void * pw_col_create_chooser () audgui_list_add_column (avail_list, _("Available columns"), 0, G_TYPE_STRING, -1); gtk_container_add ((GtkContainer *) scroll, avail_list); - GtkWidget * vbox = gtk_vbox_new (false, 6); + GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_box_pack_start ((GtkBox *) hbox, vbox, false, false, 0); GtkWidget * button = gtk_button_new (); --- src/gtkui/layout.cc.old +++ src/gtkui/layout.cc @@ -97,8 +97,9 @@ static int item_by_name (Item * item, const char * name) GtkWidget * layout_new () { g_return_val_if_fail (! layout, nullptr); - layout = gtk_alignment_new (0, 0, 1, 1); - gtk_alignment_set_padding ((GtkAlignment *) layout, 3, 3, 3, 3); + layout = gtk_frame_new (nullptr); + gtk_frame_set_shadow_type ((GtkFrame *) layout, GTK_SHADOW_NONE); + gtk_container_set_border_width ((GtkContainer *) layout, 3); NULL_ON_DESTROY (layout); return layout; } @@ -187,7 +188,7 @@ static GtkWidget * vbox_new (GtkWidget * widget, const char * name) { g_return_val_if_fail (widget && name, nullptr); - GtkWidget * vbox = gtk_vbox_new (false, 2); + GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); GtkWidget * ebox = gtk_event_box_new (); gtk_box_pack_start ((GtkBox *) vbox, ebox, false, false, 0); @@ -198,7 +199,7 @@ static GtkWidget * vbox_new (GtkWidget * widget, const char * name) char * markup = g_markup_printf_escaped ("<small><b>%s</b></small>", name); gtk_label_set_markup ((GtkLabel *) label, markup); g_free (markup); - gtk_misc_set_alignment ((GtkMisc *) label, 0, 0); + gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_container_add ((GtkContainer *) ebox, label); gtk_box_pack_start ((GtkBox *) vbox, widget, true, true, 0); @@ -228,10 +229,13 @@ static void restore_size_cb (GtkPaned * paned, GdkRectangle *, RestoreSizeData * static GtkWidget * paned_new (bool vertical, bool after, int w, int h) { - GtkWidget * paned = vertical ? gtk_vpaned_new () : gtk_hpaned_new (); + GtkWidget * paned = gtk_paned_new (vertical ? GTK_ORIENTATION_VERTICAL : + GTK_ORIENTATION_HORIZONTAL); - GtkWidget * mine = gtk_alignment_new (0, 0, 1, 1); - GtkWidget * next = gtk_alignment_new (0, 0, 1, 1); + GtkWidget * mine = gtk_frame_new (nullptr); + GtkWidget * next = gtk_frame_new (nullptr); + gtk_frame_set_shadow_type ((GtkFrame *) mine, GTK_SHADOW_NONE); + gtk_frame_set_shadow_type ((GtkFrame *) next, GTK_SHADOW_NONE); gtk_paned_pack1 ((GtkPaned *) paned, after ? next : mine, after, false); gtk_paned_pack2 ((GtkPaned *) paned, after ? mine : next, ! after, false); --- src/gtkui/ui_gtk.cc.old +++ src/gtkui/ui_gtk.cc @@ -793,15 +793,17 @@ bool GtkUI::init () accel = gtk_accel_group_new (); gtk_window_add_accel_group ((GtkWindow *) window, accel); - vbox_outer = gtk_vbox_new (false, 0); + vbox_outer = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add ((GtkContainer *) window, vbox_outer); - menu_box = gtk_hbox_new (false, 0); + menu_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start ((GtkBox *) vbox_outer, menu_box, false, false, 0); toolbar = gtk_toolbar_new (); gtk_toolbar_set_style ((GtkToolbar *) toolbar, GTK_TOOLBAR_ICONS); gtk_toolbar_set_show_arrow ((GtkToolbar *) toolbar, false); + GtkStyleContext * context = gtk_widget_get_style_context (toolbar); + gtk_style_context_add_class (context, GTK_STYLE_CLASS_PRIMARY_TOOLBAR); gtk_box_pack_start ((GtkBox *) vbox_outer, toolbar, false, false, 0); /* search button */ @@ -829,12 +831,13 @@ bool GtkUI::init () gtk_tool_item_set_expand (boxitem1, true); gtk_toolbar_insert ((GtkToolbar *) toolbar, boxitem1, -1); - GtkWidget * box1 = gtk_hbox_new (false, 0); + GtkWidget * box1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add ((GtkContainer *) boxitem1, box1); - slider = gtk_hscale_new (nullptr); + slider = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, nullptr); gtk_scale_set_draw_value ((GtkScale *) slider, false); gtk_widget_set_size_request (slider, audgui_get_dpi () * 5 / 4, -1); + gtk_widget_set_valign (slider, GTK_ALIGN_CENTER); gtk_widget_set_can_focus (slider, false); gtk_box_pack_start ((GtkBox *) box1, slider, true, true, 6); @@ -856,7 +859,7 @@ bool GtkUI::init () GtkToolItem * boxitem2 = gtk_tool_item_new (); gtk_toolbar_insert ((GtkToolbar *) toolbar, boxitem2, -1); - GtkWidget * box2 = gtk_hbox_new (false, 0); + GtkWidget * box2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_add ((GtkContainer *) boxitem2, box2); volume = gtk_volume_button_new (); @@ -876,7 +879,7 @@ bool GtkUI::init () GtkWidget * layout = layout_new (); gtk_box_pack_start ((GtkBox *) vbox_outer, layout, true, true, 0); - vbox = gtk_vbox_new (false, 6); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); layout_add_center (vbox); ui_playlist_notebook_new (); @@ -959,15 +962,13 @@ void GtkUI::cleanup () static void menu_position_cb (GtkMenu * menu, int * x, int * y, int * push, void * button) { - GtkAllocation alloc; int xorig, yorig, xwin, ywin; - gtk_widget_get_allocation ((GtkWidget *) button, & alloc); gdk_window_get_origin (gtk_widget_get_window (window), & xorig, & yorig); gtk_widget_translate_coordinates ((GtkWidget *) button, window, 0, 0, & xwin, & ywin); * x = xorig + xwin; - * y = yorig + ywin + alloc.height; + * y = yorig + ywin + gtk_widget_get_allocated_height ((GtkWidget *) button); * push = true; } --- src/gtkui/ui_infoarea.cc.old +++ src/gtkui/ui_infoarea.cc @@ -175,42 +175,6 @@ static void draw_text (GtkWidget * widget, cairo_t * cr, int x, int y, int /****************************************************************************/ -static void rgb_to_hsv (float r, float g, float b, float * h, float * s, - float * v) -{ - float max, min; - - max = r; - if (g > max) - max = g; - if (b > max) - max = b; - - min = r; - if (g < min) - min = g; - if (b < min) - min = b; - - * v = max; - - if (max == min) - { - * h = 0; - * s = 0; - return; - } - - if (r == max) - * h = 1 + (g - b) / (max - min); - else if (g == max) - * h = 3 + (b - r) / (max - min); - else - * h = 5 + (r - g) / (max - min); - - * s = (max - min) / max; -} - static void hsv_to_rgb (float h, float s, float v, float * r, float * g, float * b) { @@ -240,15 +204,11 @@ static void hsv_to_rgb (float h, float s, float v, float * r, float * g, * b = v * (1 - s * (1 - * b)); } -static void get_color (GtkWidget * widget, int i, float * r, float * g, float * b) +static void get_color (int i, float * r, float * g, float * b) { - GdkColor * c = (gtk_widget_get_style (widget))->base + GTK_STATE_SELECTED; float h, s, v; - rgb_to_hsv (c->red / 65535.0, c->green / 65535.0, c->blue / 65535.0, & h, & s, & v); - - if (s < 0.1) /* monochrome theme? use blue instead */ - h = 4.6; + h = 4.6; /* hard-coded to blue due to repeatedly broken theming in GTK3 */ s = 1 - 0.9 * i / (VIS_BANDS - 1); v = 0.75 + 0.25 * i / (VIS_BANDS - 1); @@ -256,10 +216,8 @@ static void get_color (GtkWidget * widget, int i, float * r, float * g, float * hsv_to_rgb (h, s, v, r, g, b); } -static int expose_vis_cb (GtkWidget * widget, GdkEventExpose * event) +static gboolean draw_vis_cb (GtkWidget * widget, cairo_t * cr) { - cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (widget)); - clear (widget, cr); for (int i = 0; i < VIS_BANDS; i++) @@ -269,7 +227,7 @@ static int expose_vis_cb (GtkWidget * widget, GdkEventExpose * event) int m = aud::min (VIS_CENTER + v, HEIGHT); float r, g, b; - get_color (widget, i, & r, & g, & b); + get_color (i, & r, & g, & b); cairo_set_source_rgb (cr, r, g, b); cairo_rectangle (cr, x, VIS_CENTER - v, BAND_WIDTH, v); @@ -280,7 +238,6 @@ static int expose_vis_cb (GtkWidget * widget, GdkEventExpose * event) cairo_fill (cr); } - cairo_destroy (cr); return true; } @@ -335,16 +292,15 @@ static void draw_title (cairo_t * cr) 0.7, 0.7, area->last_alpha, "9", area->last_album); } -static int expose_cb (GtkWidget * widget, GdkEventExpose * event) +static gboolean draw_cb (GtkWidget * widget, cairo_t * cr) { - cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (widget)); + g_return_val_if_fail (area, false); clear (widget, cr); draw_album_art (cr); draw_title (cr); - cairo_destroy (cr); return true; } @@ -472,7 +428,7 @@ void ui_infoarea_show_vis (bool show) gtk_widget_set_size_request (vis.widget, VIS_WIDTH + 2 * SPACING, HEIGHT); gtk_box_pack_start ((GtkBox *) area->box, vis.widget, false, false, 0); - g_signal_connect (vis.widget, "expose-event", (GCallback) expose_vis_cb, nullptr); + g_signal_connect (vis.widget, "draw", (GCallback) draw_vis_cb, nullptr); gtk_widget_show (vis.widget); aud_visualizer_add (& vis); @@ -519,13 +475,13 @@ GtkWidget * ui_infoarea_new () compute_sizes (); area = new UIInfoArea (); - area->box = gtk_hbox_new (false, 0); + area->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); area->main = gtk_drawing_area_new (); gtk_widget_set_size_request (area->main, HEIGHT, HEIGHT); gtk_box_pack_start ((GtkBox *) area->box, area->main, true, true, 0); - g_signal_connect (area->main, "expose-event", (GCallback) expose_cb, nullptr); + g_signal_connect (area->main, "draw", (GCallback) draw_cb, nullptr); hook_associate ("tuple change", (HookFunction) ui_infoarea_set_title, nullptr); hook_associate ("playback ready", (HookFunction) ui_infoarea_playback_start, nullptr); --- src/gtkui/ui_playlist_notebook.cc.old +++ src/gtkui/ui_playlist_notebook.cc @@ -47,6 +47,7 @@ void apply_column_widths (GtkWidget * treeview) { GtkTreeViewColumn * col = gtk_tree_view_get_column ((GtkTreeView *) treeview, i); gtk_tree_view_column_set_fixed_width (col, pw_col_widths[pw_cols[i]]); + gtk_tree_view_column_set_expand (col, false); } } @@ -103,40 +104,16 @@ static void close_button_cb (GtkWidget * button, void * id) audgui_confirm_playlist_delete (aud_playlist_by_unique_id (GPOINTER_TO_INT (id))); } -static void close_button_style_set (GtkWidget * button) -{ - int w, h; - gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (button), - GTK_ICON_SIZE_MENU, & w, & h); - gtk_widget_set_size_request (button, w + 2, h + 2); -} - static GtkWidget * make_close_button (GtkWidget * ebox, int list) { GtkWidget * button = gtk_button_new (); GtkWidget * image = gtk_image_new_from_icon_name ("window-close", GTK_ICON_SIZE_MENU); gtk_button_set_image ((GtkButton *) button, image); gtk_button_set_relief ((GtkButton *) button, GTK_RELIEF_NONE); - gtk_button_set_focus_on_click ((GtkButton *) button, false); - gtk_widget_set_name (button, "gtkui-tab-close-button"); + gtk_widget_set_can_focus (button, false); g_signal_connect (button, "clicked", (GCallback) close_button_cb, GINT_TO_POINTER (aud_playlist_get_unique_id (list))); - - gtk_rc_parse_string ( - "style \"gtkui-tab-close-button-style\" {" - " GtkButton::default-border = {0, 0, 0, 0}" - " GtkButton::default-outside-border = {0, 0, 0, 0}" - " GtkButton::inner-border = {0, 0, 0, 0}" - " GtkWidget::focus-padding = 0" - " GtkWidget::focus-line-width = 0" - " xthickness = 0" - " ythickness = 0 }" - "widget \"*.gtkui-tab-close-button\" style \"gtkui-tab-close-button-style\"" - ); - - g_signal_connect (button, "style-set", (GCallback) close_button_style_set, nullptr); - gtk_widget_show (button); return button; @@ -295,7 +272,7 @@ void ui_playlist_notebook_create_tab (int playlist) GtkWidget * ebox = gtk_event_box_new (); gtk_event_box_set_visible_window ((GtkEventBox *) ebox, false); - GtkWidget * hbox = gtk_hbox_new (false, 2); + GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); GtkWidget * label = gtk_label_new (""); set_tab_label (playlist, (GtkLabel *) label); --- src/gtkui/ui_statusbar.cc.old +++ src/gtkui/ui_statusbar.cc @@ -135,7 +135,7 @@ static void ui_statusbar_destroy_cb () GtkWidget * ui_statusbar_new () { - GtkWidget * hbox = gtk_hbox_new (false, 3); + GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); GtkWidget * status = gtk_widget_new (GTK_TYPE_LABEL, "xalign", 0.0, nullptr); GtkWidget * length = gtk_widget_new (GTK_TYPE_LABEL, "xalign", 1.0, nullptr); --- src/hotkey/gui.cc.old +++ src/hotkey/gui.cc @@ -324,16 +324,18 @@ KeyControls* add_event_controls(KeyControls* list, } controls->combobox = gtk_combo_box_text_new(); + gtk_widget_set_hexpand(controls->combobox, true); for (i=0;i<EVENT_MAX;i++) { gtk_combo_box_text_append_text((GtkComboBoxText *) controls->combobox, _(event_desc[i])); } gtk_combo_box_set_active(GTK_COMBO_BOX(controls->combobox), controls->hotkey.event); - gtk_table_attach_defaults (GTK_TABLE (grid), controls->combobox, 0, 1, row, row + 1); + gtk_grid_attach (GTK_GRID (grid), controls->combobox, 0, row, 1, 1); controls->keytext = gtk_entry_new (); - gtk_table_attach_defaults (GTK_TABLE (grid), controls->keytext, 1, 2, row, row + 1); + gtk_widget_set_hexpand (controls->keytext, true); + gtk_grid_attach (GTK_GRID (grid), controls->keytext, 1, row, 1, 1); gtk_editable_set_editable(GTK_EDITABLE(controls->keytext), false); @@ -351,7 +353,7 @@ KeyControls* add_event_controls(KeyControls* list, controls->button = gtk_button_new(); gtk_button_set_image (GTK_BUTTON (controls->button), gtk_image_new_from_icon_name ("edit-delete", GTK_ICON_SIZE_BUTTON)); - gtk_table_attach_defaults (GTK_TABLE (grid), controls->button, 2, 3, row, row + 1); + gtk_grid_attach (GTK_GRID (grid), controls->button, 2, row, 1, 1); g_signal_connect (G_OBJECT (controls->button), "clicked", G_CALLBACK (clear_keyboard), controls); @@ -363,7 +365,6 @@ void *make_config_widget () { KeyControls *current_controls; GtkWidget *main_vbox, *hbox; - GtkWidget *alignment; GtkWidget *frame; GtkWidget *label; GtkWidget *image; @@ -379,18 +380,15 @@ void *make_config_widget () ungrab_keys(); - main_vbox = gtk_vbox_new (false, 4); + main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4); - alignment = gtk_alignment_new (0.5, 0.5, 1, 1); - gtk_box_pack_start (GTK_BOX (main_vbox), alignment, false, true, 0); - gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 4, 0, 0, 0); - hbox = gtk_hbox_new (false, 2); - gtk_container_add (GTK_CONTAINER (alignment), hbox); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); + gtk_box_pack_start (GTK_BOX (main_vbox), hbox, false, true, 0); image = gtk_image_new_from_icon_name ("dialog-information", GTK_ICON_SIZE_DIALOG); gtk_box_pack_start (GTK_BOX (hbox), image, false, true, 0); label = gtk_label_new (_("Press a key combination inside a text field.\nYou can also bind mouse buttons.")); gtk_box_pack_start (GTK_BOX (hbox), label, true, true, 0); - gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + gtk_widget_set_halign (label, GTK_ALIGN_START); label = gtk_label_new (nullptr); gtk_label_set_markup (GTK_LABEL (label), _("Hotkeys:")); @@ -398,27 +396,23 @@ void *make_config_widget () gtk_frame_set_label_widget (GTK_FRAME (frame), label); gtk_box_pack_start (GTK_BOX (main_vbox), frame, true, true, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - alignment = gtk_alignment_new (0, 0, 1, 0); - gtk_container_add (GTK_CONTAINER (frame), alignment); - gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 3, 3, 3, 3); - grid = gtk_table_new (0, 0, false); - gtk_table_set_col_spacings (GTK_TABLE (grid), 2); - gtk_container_add (GTK_CONTAINER (alignment), grid); + grid = gtk_grid_new (); + gtk_container_set_border_width (GTK_CONTAINER (grid), 3); + gtk_grid_set_column_spacing (GTK_GRID (grid), 2); + gtk_container_add (GTK_CONTAINER (frame), grid); label = gtk_label_new (nullptr); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); gtk_label_set_markup (GTK_LABEL (label), _("<b>Action:</b>")); - gtk_table_attach_defaults (GTK_TABLE (grid), label, 0, 1, 0, 1); + gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); label = gtk_label_new (nullptr); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); gtk_label_set_markup (GTK_LABEL (label), _("<b>Key Binding:</b>")); - gtk_table_attach_defaults (GTK_TABLE (grid), label, 1, 2, 0, 1); + gtk_grid_attach (GTK_GRID (grid), label, 1, 0, 1, 1); hotkey = &(plugin_cfg->first); @@ -457,10 +451,10 @@ void *make_config_widget () add_event_controls(current_controls, grid, i, &temphotkey); - hbox = gtk_hbox_new (false, 0); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (main_vbox), hbox, false, true, 0); - button_box = gtk_hbutton_box_new (); + button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start (GTK_BOX (hbox), button_box, false, true, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (button_box), GTK_BUTTONBOX_START); gtk_box_set_spacing (GTK_BOX (button_box), 4); @@ -520,9 +514,9 @@ static void clear_keyboard (GtkWidget *widget, void * data) gtk_container_remove( GTK_CONTAINER(c->grid) , c->keytext); gtk_container_remove( GTK_CONTAINER(c->grid) , c->button); - gtk_table_attach_defaults (GTK_TABLE (c->grid), c->combobox, 0, 1, row, row + 1); - gtk_table_attach_defaults (GTK_TABLE (c->grid), c->keytext, 1, 2, row, row + 1); - gtk_table_attach_defaults (GTK_TABLE (c->grid), c->button, 2, 3, row, row + 1); + gtk_grid_attach (GTK_GRID (c->grid), c->combobox, 0, row, 1, 1); + gtk_grid_attach (GTK_GRID (c->grid), c->keytext, 1, row, 1, 1); + gtk_grid_attach (GTK_GRID (c->grid), c->button, 2, row, 1, 1); g_object_unref(c->combobox); g_object_unref(c->keytext); --- src/ladspa/plugin.cc.old +++ src/ladspa/plugin.cc @@ -34,6 +34,10 @@ #include "plugin.h" +#if GTK_CHECK_VERSION (3, 12, 0) +#define gtk_widget_set_margin_left gtk_widget_set_margin_start +#endif + const char * const LADSPAHost::defaults[] = { "plugin_count", "0", nullptr}; @@ -424,7 +428,7 @@ static void configure_plugin (LoadedPlugin & loaded) { ControlData & control = plugin.controls[i]; - GtkWidget * hbox = gtk_hbox_new (false, 6); + GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start ((GtkBox *) vbox, hbox, 0, 0, 0); if (control.is_toggle) @@ -472,10 +476,10 @@ static void * make_config_widget () { int dpi = audgui_get_dpi (); - GtkWidget * vbox = gtk_vbox_new (false, 6); + GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_widget_set_size_request (vbox, 5 * dpi, 4 * dpi); - GtkWidget * hbox = gtk_hbox_new (false, 6); + GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start ((GtkBox *) vbox, hbox, 0, 0, 0); GtkWidget * label = gtk_label_new (_("Module paths:")); @@ -486,17 +490,17 @@ static void * make_config_widget () _("<small>Separate multiple paths with a colon.\n" "These paths are searched in addition to LADSPA_PATH.\n" "After adding new paths, press Enter to scan for new plugins.</small>")); - gtk_misc_set_padding ((GtkMisc *) label, 12, 6); - gtk_misc_set_alignment ((GtkMisc *) label, 0, 0); + gtk_widget_set_margin_left (label, 12); + gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_box_pack_start ((GtkBox *) vbox, label, 0, 0, 0); GtkWidget * entry = gtk_entry_new (); gtk_box_pack_start ((GtkBox *) hbox, entry, 1, 1, 0); - hbox = gtk_hbox_new (false, 6); + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start ((GtkBox *) vbox, hbox, 1, 1, 0); - GtkWidget * vbox2 = gtk_vbox_new (false, 6); + GtkWidget * vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_box_pack_start ((GtkBox *) hbox, vbox2, 1, 1, 0); label = gtk_label_new (_("Available plugins:")); @@ -509,13 +513,13 @@ static void * make_config_widget () plugin_list = create_plugin_list (); gtk_container_add ((GtkContainer *) scrolled, plugin_list); - GtkWidget * hbox2 = gtk_hbox_new (false, 6); + GtkWidget * hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start ((GtkBox *) vbox2, hbox2, 0, 0, 0); GtkWidget * enable_button = gtk_button_new_with_label (_("Enable")); gtk_box_pack_end ((GtkBox *) hbox2, enable_button, 0, 0, 0); - vbox2 = gtk_vbox_new (false, 6); + vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_box_pack_start ((GtkBox *) hbox, vbox2, 1, 1, 0); label = gtk_label_new (_("Enabled plugins:")); @@ -528,7 +532,7 @@ static void * make_config_widget () loaded_list = create_loaded_list (); gtk_container_add ((GtkContainer *) scrolled, loaded_list); - hbox2 = gtk_hbox_new (false, 6); + hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start ((GtkBox *) vbox2, hbox2, 0, 0, 0); GtkWidget * disable_button = gtk_button_new_with_label (_("Disable")); --- src/lyricwiki/lyricwiki.cc.old +++ src/lyricwiki/lyricwiki.cc @@ -341,7 +341,7 @@ static GtkWidget * build_widget () GtkWidget * scrollview = gtk_scrolled_window_new (nullptr, nullptr); gtk_scrolled_window_set_shadow_type ((GtkScrolledWindow *) scrollview, GTK_SHADOW_IN); gtk_scrolled_window_set_policy ((GtkScrolledWindow *) scrollview, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - GtkWidget * vbox = gtk_vbox_new (false, 6); + GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_container_add ((GtkContainer *) scrollview, (GtkWidget *) textview); gtk_box_pack_start ((GtkBox *) vbox, scrollview, true, true, 0); @@ -352,7 +352,7 @@ static GtkWidget * build_widget () gtk_text_buffer_create_tag (textbuffer, "size_x_large", "scale", PANGO_SCALE_X_LARGE, nullptr); gtk_text_buffer_create_tag (textbuffer, "style_italic", "style", PANGO_STYLE_ITALIC, nullptr); - GtkWidget * hbox = gtk_hbox_new (false, 6); + GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start ((GtkBox *) vbox, hbox, false, false, 0); edit_button = gtk_button_new_with_mnemonic (_("Edit lyrics ...")); --- src/playlist-manager/playlist-manager.cc.old +++ src/playlist-manager/playlist-manager.cc @@ -215,7 +215,7 @@ static void destroy_cb (GtkWidget * window) void * PlaylistManager::get_gtk_widget () { - GtkWidget * playman_vbox = gtk_vbox_new (false, 6); + GtkWidget * playman_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); /* ListView */ GtkWidget * playman_pl_lv = audgui_list_new (& callbacks, nullptr, aud_playlist_count ()); @@ -237,7 +237,7 @@ void * PlaylistManager::get_gtk_widget () gtk_box_pack_start ((GtkBox *) playman_vbox, playman_pl_lv_sw, true, true, 0); /* ButtonBox */ - GtkWidget * playman_button_hbox = gtk_hbox_new (false, 6); + GtkWidget * playman_button_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); GtkWidget * new_button = audgui_button_new (_("_New"), "document-new", (AudguiCallback) aud_playlist_new, nullptr); GtkWidget * delete_button = audgui_button_new (_("_Remove"), "edit-delete", delete_cb, nullptr); --- src/search-tool/search-tool.cc.old +++ src/search-tool/search-tool.cc @@ -745,11 +745,11 @@ static void refresh_cb (GtkButton * button, GtkWidget * file_entry) void * SearchTool::get_gtk_widget () { - GtkWidget * vbox = gtk_vbox_new (false, 6); + GtkWidget * vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); entry = gtk_entry_new (); gtk_entry_set_icon_from_icon_name ((GtkEntry *) entry, GTK_ENTRY_ICON_PRIMARY, "edit-find"); - (void) _("Search library"); // translated string is used in GTK3 branch + gtk_entry_set_placeholder_text ((GtkEntry *) entry, _("Search library")); g_signal_connect (entry, "destroy", (GCallback) gtk_widget_destroyed, & entry); gtk_box_pack_start ((GtkBox *) vbox, entry, false, false, 0); @@ -786,7 +786,7 @@ void * SearchTool::get_gtk_widget () gtk_widget_set_no_show_all (stats_label, true); gtk_box_pack_start ((GtkBox *) vbox, stats_label, false, false, 0); - GtkWidget * hbox = gtk_hbox_new (false, 6); + GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_end ((GtkBox *) vbox, hbox, false, false, 0); GtkWidget * file_entry = audgui_file_entry_new --- src/skins/menus.cc.old +++ src/skins/menus.cc @@ -323,7 +323,7 @@ static void position_menu (GtkMenu * menu, int * x, int * y, gboolean * push_in, audgui_get_monitor_geometry (gtk_widget_get_screen ((GtkWidget *) menu), pos->x, pos->y, & geom); GtkRequisition request; - gtk_widget_size_request ((GtkWidget *) menu, & request); + gtk_widget_get_preferred_size ((GtkWidget *) menu, nullptr, & request); if (pos->leftward) * x = aud::max (pos->x - request.width, geom.x); --- src/skins/search-select.cc.old +++ src/skins/search-select.cc @@ -76,39 +76,43 @@ void action_playlist_search_and_select () _("Cancel"), GTK_RESPONSE_REJECT, _("Search"), GTK_RESPONSE_ACCEPT, nullptr); /* help text and logo */ - GtkWidget * hbox = gtk_hbox_new (false, 6); + GtkWidget * hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); GtkWidget * logo = gtk_image_new_from_icon_name ("edit-find", GTK_ICON_SIZE_DIALOG); GtkWidget * helptext = gtk_label_new (_("Select entries in playlist by filling one or more " "fields. Fields use regular expressions syntax, case-insensitive. If you don't know how " "regular expressions work, simply insert a literal portion of what you're searching for.")); + gtk_label_set_max_width_chars ((GtkLabel *) helptext, 70); gtk_label_set_line_wrap ((GtkLabel *) helptext, true); gtk_box_pack_start ((GtkBox *) hbox, logo, false, false, 0); gtk_box_pack_start ((GtkBox *) hbox, helptext, false, false, 0); /* title */ GtkWidget * label_title = gtk_label_new (_("Title:")); - gtk_misc_set_alignment ((GtkMisc *) label_title, 1, 0.5); GtkWidget * entry_title = gtk_entry_new (); + gtk_widget_set_hexpand (entry_title, true); + gtk_widget_set_halign (label_title, GTK_ALIGN_START); g_signal_connect (entry_title, "key-press-event", (GCallback) search_kp_cb, dialog); /* album */ GtkWidget * label_album = gtk_label_new (_("Album:")); - gtk_misc_set_alignment ((GtkMisc *) label_album, 1, 0.5); GtkWidget * entry_album = gtk_entry_new (); + gtk_widget_set_hexpand (entry_album, true); + gtk_widget_set_halign (label_album, GTK_ALIGN_START); g_signal_connect (entry_album, "key-press-event", (GCallback) search_kp_cb, dialog); /* artist */ GtkWidget * label_performer = gtk_label_new (_("Artist:")); - gtk_misc_set_alignment ((GtkMisc *) label_performer, 1, 0.5); GtkWidget * entry_performer = gtk_entry_new (); + gtk_widget_set_hexpand (entry_performer, true); + gtk_widget_set_halign (label_performer, GTK_ALIGN_START); g_signal_connect (entry_performer, "key-press-event", (GCallback) search_kp_cb, dialog); /* file name */ GtkWidget * label_file_name = gtk_label_new (_("File Name:")); - gtk_misc_set_alignment ((GtkMisc *) label_file_name, 1, 0.5); GtkWidget * entry_file_name = gtk_entry_new (); - g_signal_connect (entry_file_name, "key-press-event", - (GCallback) search_kp_cb, dialog); + gtk_widget_set_hexpand (entry_file_name, true); + gtk_widget_set_halign (label_file_name, GTK_ALIGN_START); + g_signal_connect (entry_file_name, "key-press-event", (GCallback) search_kp_cb, dialog); /* some options that control behaviour */ GtkWidget * checkbt_clearprevsel = gtk_check_button_new_with_label ( @@ -127,21 +131,22 @@ void action_playlist_search_and_select () (GCallback) search_cbt_cb, checkbt_autoenqueue); /* place fields in grid */ - GtkTable * grid = (GtkTable *) gtk_table_new (0, 0, false); - gtk_table_set_row_spacings (grid, 6); - gtk_table_set_col_spacings (grid, 6); - gtk_table_attach_defaults (grid, hbox, 0, 2, 0, 1); - gtk_table_attach (grid, label_title, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach_defaults (grid, entry_title, 1, 2, 1, 2); - gtk_table_attach (grid, label_album, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach_defaults (grid, entry_album, 1, 2, 2, 3); - gtk_table_attach (grid, label_performer, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach_defaults (grid, entry_performer, 1, 2, 3, 4); - gtk_table_attach (grid, label_file_name, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach_defaults (grid, entry_file_name, 1, 2, 4, 5); - gtk_table_attach_defaults (grid, checkbt_clearprevsel, 0, 2, 5, 6); - gtk_table_attach_defaults (grid, checkbt_autoenqueue, 0, 2, 6, 7); - gtk_table_attach_defaults (grid, checkbt_newplaylist, 0, 2, 7, 8); + GtkGrid * grid = (GtkGrid *) gtk_grid_new (); + gtk_grid_set_row_spacing (grid, 2); + gtk_widget_set_margin_bottom (hbox, 8); + gtk_widget_set_margin_top (checkbt_clearprevsel, 8); + gtk_grid_attach (grid, hbox, 0, 0, 2, 1); + gtk_grid_attach (grid, label_title, 0, 1, 1, 1); + gtk_grid_attach (grid, entry_title, 1, 1, 1, 1); + gtk_grid_attach (grid, label_album, 0, 2, 1, 1); + gtk_grid_attach (grid, entry_album, 1, 2, 1, 1); + gtk_grid_attach (grid, label_performer, 0, 3, 1, 1); + gtk_grid_attach (grid, entry_performer, 1, 3, 1, 1); + gtk_grid_attach (grid, label_file_name, 0, 4, 1, 1); + gtk_grid_attach (grid, entry_file_name, 1, 4, 1, 1); + gtk_grid_attach (grid, checkbt_clearprevsel, 0, 5, 2, 1); + gtk_grid_attach (grid, checkbt_autoenqueue, 0, 6, 2, 1); + gtk_grid_attach (grid, checkbt_newplaylist, 0, 7, 2, 1); gtk_container_set_border_width ((GtkContainer *) grid, 5); gtk_container_add ((GtkContainer *) gtk_dialog_get_content_area --- src/skins/skinselector.cc.old +++ src/skins/skinselector.cc @@ -186,6 +186,11 @@ static void skin_view_on_cursor_changed (GtkTreeView * treeview) GtkTreeIter iter; auto selection = gtk_tree_view_get_selection (treeview); + + /* workaround for Gnome bug #679291 */ + if (! selection) + return; + if (! gtk_tree_selection_get_selected (selection, & model, & iter)) return; @@ -202,7 +207,6 @@ void skin_view_realize (GtkTreeView * treeview) { gtk_widget_show_all ((GtkWidget *) treeview); - gtk_tree_view_set_rules_hint (treeview, true); gtk_tree_view_set_headers_visible (treeview, false); GtkListStore * store = gtk_list_store_new (SKIN_VIEW_N_COLS, GDK_TYPE_PIXBUF, --- src/skins/view.cc.old +++ src/skins/view.cc @@ -245,13 +245,13 @@ void view_apply_show_remaining () mainwin_update_song_info (); } -static GdkRegion * scale_mask (const Index<GdkRectangle> & mask, int scale) +static cairo_region_t * scale_mask (const Index<GdkRectangle> & mask, int scale) { - GdkRegion * region = nullptr; + cairo_region_t * region = nullptr; for (auto & rect : mask) { - GdkRectangle scaled = { + cairo_rectangle_int_t scaled = { rect.x * scale, rect.y * scale, rect.width * scale, @@ -259,9 +259,9 @@ static GdkRegion * scale_mask (const Index<GdkRectangle> & mask, int scale) }; if (region) - gdk_region_union_with_rect (region, & scaled); + cairo_region_union_rectangle (region, & scaled); else - region = gdk_region_rectangle (& scaled); + region = cairo_region_create_rectangle (& scaled); } return region; --- src/skins/widget.cc.old +++ src/skins/widget.cc @@ -55,7 +55,7 @@ void Widget::set_drawable (GtkWidget * widget) { m_drawable = widget; g_signal_connect (widget, "realize", (GCallback) Widget::realize_cb, this); - g_signal_connect (widget, "expose-event", (GCallback) Widget::draw_cb, this); + g_signal_connect (widget, "draw", (GCallback) Widget::draw_cb, this); if (! m_widget) { @@ -98,28 +98,30 @@ void Widget::add_drawable (int width, int height) void Widget::draw_now () { - if (m_drawable && gtk_widget_is_drawable (m_drawable)) - draw_cb (m_drawable, nullptr, this); -} + if (! m_drawable || ! gtk_widget_is_drawable (m_drawable)) + return; -gboolean Widget::draw_cb (GtkWidget * widget, GdkEventExpose * event, Widget * me) -{ - cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (widget)); + cairo_t * cr = gdk_cairo_create (gtk_widget_get_window (m_drawable)); - if (! gtk_widget_get_has_window (widget)) + if (! gtk_widget_get_has_window (m_drawable)) { GtkAllocation alloc; - gtk_widget_get_allocation (widget, & alloc); + gtk_widget_get_allocation (m_drawable, & alloc); cairo_translate (cr, alloc.x, alloc.y); cairo_rectangle (cr, 0, 0, alloc.width, alloc.height); cairo_clip (cr); } + draw_cb (m_drawable, cr, this); + + cairo_destroy (cr); +} + +gboolean Widget::draw_cb (GtkWidget * widget, cairo_t * cr, Widget * me) +{ if (me->m_scale != 1) cairo_scale (cr, me->m_scale, me->m_scale); me->draw (cr); - - cairo_destroy (cr); return false; } --- src/skins/widget.h.old +++ src/skins/widget.h @@ -68,7 +68,7 @@ private: static void realize_cb (GtkWidget * widget, Widget * me) { me->realize (); } - static gboolean draw_cb (GtkWidget * widget, GdkEventExpose * event, Widget * me); + static gboolean draw_cb (GtkWidget * widget, cairo_t * cr, Widget * me); static gboolean keypress_cb (GtkWidget * widget, GdkEventKey * event, Widget * me) { return me->keypress (event); } --- src/skins/window.cc.old +++ src/skins/window.cc @@ -33,7 +33,6 @@ void Window::apply_shape () void Window::realize () { - gdk_window_set_back_pixmap (gtk_widget_get_window (gtk ()), nullptr, false); apply_shape (); } @@ -44,11 +43,11 @@ bool Window::button_press (GdkEventButton * event) return false; if (m_is_moving) - return true; + return false; dock_move_start (m_id, event->x_root, event->y_root); m_is_moving = true; - return true; + return false; } bool Window::button_release (GdkEventButton * event) @@ -57,16 +56,16 @@ bool Window::button_release (GdkEventButton * event) return false; m_is_moving = false; - return true; + return false; } bool Window::motion (GdkEventMotion * event) { if (! m_is_moving) - return true; + return false; dock_move (event->x_root, event->y_root); - return true; + return false; } bool Window::close () @@ -108,12 +107,6 @@ Window::Window (int id, int * x, int * y, int w, int h, bool shaded) : GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK); gtk_window_add_accel_group ((GtkWindow *) window, menu_get_accel_group ()); - /* We set None as the background pixmap in order to avoid flickering. - * Setting a blank GtkStyle prevents GTK 2.x from overriding this. */ - GtkStyle * style = gtk_style_new (); - gtk_widget_set_style (window, style); - g_object_unref (style); - set_input (window); set_drawable (window); set_scale (config.scale); @@ -144,7 +137,7 @@ void Window::resize (int w, int h) dock_set_size (m_id, w, h); } -void Window::set_shapes (GdkRegion * shape, GdkRegion * sshape) +void Window::set_shapes (cairo_region_t * shape, cairo_region_t * sshape) { m_shape.capture (shape); m_sshape.capture (sshape); --- src/skins/window.h.old +++ src/skins/window.h @@ -40,7 +40,7 @@ public: ~Window (); void resize (int w, int h); - void set_shapes (GdkRegion * shape, GdkRegion * sshape); + void set_shapes (cairo_region_t * shape, cairo_region_t * sshape); bool is_shaded () { return m_is_shaded; } void set_shaded (bool shaded); void put_widget (bool shaded, Widget * widget, int x, int y); @@ -68,7 +68,7 @@ private: bool m_is_shaded = false; bool m_is_moving = false; GtkWidget * m_normal = nullptr, * m_shaded = nullptr; - SmartPtr<GdkRegion, gdk_region_destroy> m_shape, m_sshape; + SmartPtr<cairo_region_t, cairo_region_destroy> m_shape, m_sshape; }; void dock_add_window (int id, Window * window, int * x, int * y, int w, int h); --- src/statusicon/Makefile.old +++ src/statusicon/Makefile @@ -11,3 +11,6 @@ LD = ${CXX} CFLAGS += ${PLUGIN_CFLAGS} CPPFLAGS += ${PLUGIN_CPPFLAGS} ${GTK_CFLAGS} -I../.. LIBS += ${GTK_LIBS} -laudgui + +# GTK3 branch: ignore GtkStatusIcon deprecation +CPPFLAGS += -Wno-deprecated-declarations