sound: Port to GTK4
This commit is contained in:
parent
eff96c4cb1
commit
a719008403
17 changed files with 217 additions and 210 deletions
|
@ -24,7 +24,7 @@ panels = [
|
|||
# 'removable-media',
|
||||
# 'search',
|
||||
# 'sharing',
|
||||
# 'sound',
|
||||
'sound',
|
||||
# 'universal-access',
|
||||
# 'usage',
|
||||
# 'user-accounts',
|
||||
|
|
|
@ -103,37 +103,42 @@ suspended_cb (pa_stream *stream,
|
|||
}
|
||||
|
||||
static void
|
||||
cc_level_bar_get_preferred_height (GtkWidget *widget,
|
||||
gint *minimum,
|
||||
gint *natural)
|
||||
cc_level_bar_measure (GtkWidget *widget,
|
||||
GtkOrientation orientation,
|
||||
int for_size,
|
||||
int *minimum,
|
||||
int *natural,
|
||||
int *minimum_baseline,
|
||||
int *natural_baseline)
|
||||
{
|
||||
*minimum = *natural = LED_HEIGHT;
|
||||
if (orientation == GTK_ORIENTATION_VERTICAL)
|
||||
{
|
||||
*minimum = *natural = LED_HEIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
GTK_WIDGET_CLASS (cc_level_bar_parent_class)->measure (widget,
|
||||
orientation,
|
||||
for_size,
|
||||
minimum,
|
||||
natural,
|
||||
minimum_baseline,
|
||||
natural_baseline);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
set_source_blend (cairo_t *cr, GdkRGBA *a, GdkRGBA *b, gdouble f)
|
||||
{
|
||||
cairo_set_source_rgb (cr,
|
||||
(1.0 - f) * a->red + f * b->red,
|
||||
(1.0 - f) * a->green + f * b->green,
|
||||
(1.0 - f) * a->blue + f * b->blue);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
cc_level_bar_draw (GtkWidget *widget,
|
||||
cairo_t *cr)
|
||||
cc_level_bar_snapshot (GtkWidget *widget,
|
||||
GtkSnapshot *snapshot)
|
||||
{
|
||||
CcLevelBar *self = CC_LEVEL_BAR (widget);
|
||||
GtkAllocation allocation;
|
||||
GdkRGBA inactive_color, active_color;
|
||||
int i, n_leds;
|
||||
double level;
|
||||
double spacing, x_offset = 0.0;
|
||||
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
n_leds = allocation.width / (LED_WIDTH + LED_SPACING);
|
||||
spacing = (double) (allocation.width - (n_leds * LED_WIDTH)) / (n_leds - 1);
|
||||
n_leds = gtk_widget_get_width (widget) / (LED_WIDTH + LED_SPACING);
|
||||
spacing = (double) (gtk_widget_get_width (widget) - (n_leds * LED_WIDTH)) / (n_leds - 1);
|
||||
level = self->value * n_leds;
|
||||
|
||||
gdk_rgba_parse (&inactive_color, "#C0C0C0");
|
||||
|
@ -150,6 +155,7 @@ cc_level_bar_draw (GtkWidget *widget,
|
|||
|
||||
for (i = 0; i < n_leds; i++)
|
||||
{
|
||||
GdkRGBA blended_color;
|
||||
double led_level;
|
||||
|
||||
led_level = level - i;
|
||||
|
@ -158,15 +164,20 @@ cc_level_bar_draw (GtkWidget *widget,
|
|||
else if (led_level > 1.0)
|
||||
led_level = 1.0;
|
||||
|
||||
cairo_rectangle (cr,
|
||||
x_offset, 0,
|
||||
LED_WIDTH, allocation.height);
|
||||
set_source_blend (cr, &inactive_color, &active_color, led_level);
|
||||
cairo_fill (cr);
|
||||
blended_color = (GdkRGBA) {
|
||||
.red = (1.0 - led_level) * inactive_color.red + led_level * active_color.red,
|
||||
.green = (1.0 - led_level) * inactive_color.green + led_level * active_color.green,
|
||||
.blue = (1.0 - led_level) * inactive_color.blue + led_level * active_color.blue,
|
||||
.alpha = 1.0,
|
||||
};
|
||||
|
||||
gtk_snapshot_append_color (snapshot,
|
||||
&blended_color,
|
||||
&GRAPHENE_RECT_INIT (x_offset, 0,
|
||||
LED_WIDTH,
|
||||
gtk_widget_get_height (widget)));
|
||||
x_offset += LED_WIDTH + spacing;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -202,14 +213,13 @@ cc_level_bar_class_init (CcLevelBarClass *klass)
|
|||
|
||||
object_class->dispose = cc_level_bar_dispose;
|
||||
|
||||
widget_class->get_preferred_height = cc_level_bar_get_preferred_height;
|
||||
widget_class->draw = cc_level_bar_draw;
|
||||
widget_class->measure = cc_level_bar_measure;
|
||||
widget_class->snapshot = cc_level_bar_snapshot;
|
||||
}
|
||||
|
||||
void
|
||||
cc_level_bar_init (CcLevelBar *self)
|
||||
{
|
||||
gtk_widget_set_has_window (GTK_WIDGET (self), FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -96,7 +96,7 @@ cc_output_test_dialog_init (CcOutputTestDialog *self)
|
|||
gsound_context_set_attributes (self->context, NULL,
|
||||
GSOUND_ATTR_APPLICATION_ID, "org.gnome.VolumeControl",
|
||||
NULL);
|
||||
settings = gtk_settings_get_for_screen (gdk_screen_get_default ());
|
||||
settings = gtk_settings_get_for_display (gdk_display_get_default ());
|
||||
g_object_get (G_OBJECT (settings),
|
||||
"gtk-sound-theme-name", &theme_name,
|
||||
NULL);
|
||||
|
@ -132,7 +132,7 @@ cc_output_test_dialog_new (GvcMixerUIDevice *device,
|
|||
self->device = g_object_ref (device);
|
||||
|
||||
title = g_strdup_printf (_("Testing %s"), gvc_mixer_ui_device_get_description (device));
|
||||
gtk_header_bar_set_title (GTK_HEADER_BAR (gtk_dialog_get_header_bar (GTK_DIALOG (self))), title);
|
||||
gtk_window_set_title (GTK_WINDOW (self), title);
|
||||
|
||||
map = gvc_mixer_stream_get_channel_map (stream);
|
||||
gtk_widget_set_visible (GTK_WIDGET (self->front_left_speaker_button), gvc_channel_map_has_position (map, PA_CHANNEL_POSITION_FRONT_LEFT));
|
||||
|
|
|
@ -2,124 +2,128 @@
|
|||
<interface>
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<template class="CcOutputTestDialog" parent="GtkDialog">
|
||||
<property name="modal">True</property>
|
||||
<property name="resizable">False</property>
|
||||
<child internal-child="vbox">
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkGrid">
|
||||
<property name="visible">True</property>
|
||||
<property name="row_spacing">30</property>
|
||||
<property name="column_spacing">30</property>
|
||||
<property name="margin">30</property>
|
||||
<property name="margin-top">30</property>
|
||||
<property name="margin-bottom">30</property>
|
||||
<property name="margin-start">30</property>
|
||||
<property name="margin-end">30</property>
|
||||
<child>
|
||||
<object class="CcSpeakerTestButton" id="front_left_speaker_button">
|
||||
<property name="visible">True</property>
|
||||
<layout>
|
||||
<property name="column">0</property>
|
||||
<property name="row">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcSpeakerTestButton" id="front_left_of_center_speaker_button">
|
||||
<property name="visible">True</property>
|
||||
<layout>
|
||||
<property name="column">1</property>
|
||||
<property name="row">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcSpeakerTestButton" id="front_center_speaker_button">
|
||||
<property name="visible">True</property>
|
||||
<layout>
|
||||
<property name="column">2</property>
|
||||
<property name="row">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcSpeakerTestButton" id="front_right_of_center_speaker_button">
|
||||
<property name="visible">True</property>
|
||||
<layout>
|
||||
<property name="column">3</property>
|
||||
<property name="row">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcSpeakerTestButton" id="front_right_speaker_button">
|
||||
<property name="visible">True</property>
|
||||
<layout>
|
||||
<property name="column">4</property>
|
||||
<property name="row">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">4</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcSpeakerTestButton" id="side_left_speaker_button">
|
||||
<property name="visible">True</property>
|
||||
<layout>
|
||||
<property name="column">0</property>
|
||||
<property name="row">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="icon_name">avatar-default-symbolic</property>
|
||||
<property name="pixel_size">64</property>
|
||||
<layout>
|
||||
<property name="column">2</property>
|
||||
<property name="row">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcSpeakerTestButton" id="side_right_speaker_button">
|
||||
<property name="visible">True</property>
|
||||
<layout>
|
||||
<property name="column">4</property>
|
||||
<property name="row">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">4</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcSpeakerTestButton" id="rear_left_speaker_button">
|
||||
<property name="visible">True</property>
|
||||
<layout>
|
||||
<property name="column">0</property>
|
||||
<property name="row">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcSpeakerTestButton" id="rear_center_speaker_button">
|
||||
<property name="visible">True</property>
|
||||
<layout>
|
||||
<property name="column">2</property>
|
||||
<property name="row">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcSpeakerTestButton" id="lfe_speaker_button">
|
||||
<property name="visible">True</property>
|
||||
<layout>
|
||||
<property name="column">3</property>
|
||||
<property name="row">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">3</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcSpeakerTestButton" id="rear_right_speaker_button">
|
||||
<property name="visible">True</property>
|
||||
<layout>
|
||||
<property name="column">4</property>
|
||||
<property name="row">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">4</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
|
@ -128,12 +132,12 @@
|
|||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="column">0</property>
|
||||
<property name="row">3</property>
|
||||
<property name="column-span">5</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="width">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
#include <pulse/pulseaudio.h>
|
||||
#include <gvc-mixer-control.h>
|
||||
|
||||
#include "list-box-helper.h"
|
||||
#include "cc-alert-chooser.h"
|
||||
#include "cc-balance-slider.h"
|
||||
#include "cc-device-combo-box.h"
|
||||
|
@ -202,15 +201,19 @@ test_output_configuration_button_clicked_cb (CcSoundPanel *self)
|
|||
GvcMixerUIDevice *device;
|
||||
GvcMixerStream *stream = NULL;
|
||||
CcOutputTestDialog *dialog;
|
||||
GtkWidget *toplevel;
|
||||
CcShell *shell;
|
||||
|
||||
device = cc_device_combo_box_get_device (self->output_device_combo_box);
|
||||
if (device != NULL)
|
||||
stream = gvc_mixer_control_get_stream_from_device (self->mixer_control, device);
|
||||
|
||||
shell = cc_panel_get_shell (CC_PANEL (self));
|
||||
toplevel = cc_shell_get_toplevel (shell);
|
||||
|
||||
dialog = cc_output_test_dialog_new (device, stream);
|
||||
gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))));
|
||||
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
gtk_widget_destroy (GTK_WIDGET (dialog));
|
||||
gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (toplevel));
|
||||
gtk_window_present (GTK_WINDOW (dialog));
|
||||
}
|
||||
|
||||
static const char *
|
||||
|
|
|
@ -2,27 +2,22 @@
|
|||
<interface>
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<template class="CcSoundPanel" parent="CcPanel">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="visible">True</property>
|
||||
<property name="hscrollbar_policy">never</property>
|
||||
<child>
|
||||
<object class="HdyClamp">
|
||||
<property name="visible">True</property>
|
||||
<object class="AdwClamp">
|
||||
<property name="margin_top">32</property>
|
||||
<property name="margin_bottom">32</property>
|
||||
<property name="margin_start">12</property>
|
||||
<property name="margin_end">12</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">12</property>
|
||||
<property name="hexpand">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">System Volume</property>
|
||||
<attributes>
|
||||
|
@ -31,13 +26,10 @@
|
|||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcVolumeSlider" id="output_volume_slider">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<object class="CcVolumeSlider" id="output_volume_slider" />
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="margin-top">18</property>
|
||||
<property name="label" translatable="yes">Volume Levels</property>
|
||||
|
@ -48,16 +40,11 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="CcStreamListBox" id="stream_list_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="label-size-group">label_size_group</property>
|
||||
<style>
|
||||
<class name="content"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="margin-top">18</property>
|
||||
<property name="label" translatable="yes">Output</property>
|
||||
|
@ -68,23 +55,22 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkListBox" id="output_list_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="selection_mode">none</property>
|
||||
<style>
|
||||
<class name="content"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="visible">True</property>
|
||||
<property name="activatable">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="margin">12</property>
|
||||
<property name="margin-top">12</property>
|
||||
<property name="margin-bottom">12</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="output_device_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Output Device</property>
|
||||
|
@ -92,24 +78,20 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="spacing">9</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="CcDeviceComboBox" id="output_device_combo_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<signal name="changed" handler="output_device_changed_cb" object="CcSoundPanel" swapped="yes"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Test</property>
|
||||
<signal name="clicked" handler="test_output_configuration_button_clicked_cb" object="CcSoundPanel" swapped="yes"/>
|
||||
</object>
|
||||
|
@ -117,9 +99,7 @@
|
|||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcLevelBar" id="output_level_bar">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<object class="CcLevelBar" id="output_level_bar" />
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
@ -129,16 +109,16 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkListBoxRow" id="output_profile_row">
|
||||
<property name="visible">True</property>
|
||||
<property name="activatable">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="margin">12</property>
|
||||
<property name="margin-top">12</property>
|
||||
<property name="margin-bottom">12</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="output_configuration_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Configuration</property>
|
||||
|
@ -146,11 +126,9 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="CcProfileComboBox" id="output_profile_combo_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
</child>
|
||||
|
@ -162,16 +140,16 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="visible">True</property>
|
||||
<property name="activatable">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="margin">12</property>
|
||||
<property name="margin-top">12</property>
|
||||
<property name="margin-bottom">12</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="output_balance_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Balance</property>
|
||||
|
@ -179,7 +157,6 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="CcBalanceSlider" id="balance_slider">
|
||||
<property name="visible">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
</child>
|
||||
|
@ -189,16 +166,16 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkListBoxRow" id="fade_row">
|
||||
<property name="visible">True</property>
|
||||
<property name="activatable">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="margin">12</property>
|
||||
<property name="margin-top">12</property>
|
||||
<property name="margin-bottom">12</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="output_fade_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Fade</property>
|
||||
|
@ -206,7 +183,6 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="CcFadeSlider" id="fade_slider">
|
||||
<property name="visible">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
</child>
|
||||
|
@ -216,16 +192,16 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkListBoxRow" id="subwoofer_row">
|
||||
<property name="visible">True</property>
|
||||
<property name="activatable">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="margin">12</property>
|
||||
<property name="margin-top">12</property>
|
||||
<property name="margin-bottom">12</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="output_subwoofer_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Subwoofer</property>
|
||||
|
@ -233,7 +209,6 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="CcSubwooferSlider" id="subwoofer_slider">
|
||||
<property name="visible">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
</child>
|
||||
|
@ -245,7 +220,6 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="margin-top">18</property>
|
||||
<property name="label" translatable="yes">Input</property>
|
||||
|
@ -256,23 +230,22 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkListBox" id="input_list_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="selection_mode">none</property>
|
||||
<style>
|
||||
<class name="content"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="visible">True</property>
|
||||
<property name="activatable">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="margin">12</property>
|
||||
<property name="margin-top">12</property>
|
||||
<property name="margin-bottom">12</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="input_device_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Input Device</property>
|
||||
|
@ -280,21 +253,17 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="spacing">9</property>
|
||||
<child>
|
||||
<object class="CcDeviceComboBox" id="input_device_combo_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<signal name="changed" handler="input_device_changed_cb" object="CcSoundPanel" swapped="yes"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="CcLevelBar" id="input_level_bar">
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<object class="CcLevelBar" id="input_level_bar" />
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
@ -304,16 +273,16 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkListBoxRow" id="input_profile_row">
|
||||
<property name="visible">True</property>
|
||||
<property name="activatable">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="margin">12</property>
|
||||
<property name="margin-top">12</property>
|
||||
<property name="margin-bottom">12</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="input_configuration_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Configuration</property>
|
||||
|
@ -321,11 +290,9 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="CcProfileComboBox" id="input_profile_combo_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
</child>
|
||||
|
@ -337,16 +304,16 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="visible">True</property>
|
||||
<property name="activatable">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="margin">12</property>
|
||||
<property name="margin-top">12</property>
|
||||
<property name="margin-bottom">12</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="input_volume_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Volume</property>
|
||||
|
@ -354,7 +321,6 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="CcVolumeSlider" id="input_volume_slider">
|
||||
<property name="visible">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
</child>
|
||||
|
@ -366,7 +332,6 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="margin-top">18</property>
|
||||
<property name="label" translatable="yes">Alert Sound</property>
|
||||
|
@ -377,7 +342,6 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="CcAlertChooser">
|
||||
<property name="visible">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
</child>
|
||||
|
|
|
@ -80,9 +80,7 @@ get_icon_name (CcSpeakerTestButton *self)
|
|||
static void
|
||||
update_icon (CcSpeakerTestButton *self)
|
||||
{
|
||||
gtk_image_set_from_icon_name (self->image,
|
||||
get_icon_name (self),
|
||||
GTK_ICON_SIZE_DIALOG);
|
||||
gtk_image_set_from_icon_name (self->image, get_icon_name (self));
|
||||
}
|
||||
|
||||
static GStrv
|
||||
|
|
|
@ -8,10 +8,14 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<property name="margin">12</property>
|
||||
<property name="margin-top">12</property>
|
||||
<property name="margin-bottom">12</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image">
|
||||
<property name="visible">True</property>
|
||||
<property name="icon-size">large</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
|
|
|
@ -23,11 +23,13 @@
|
|||
#include "cc-stream-list-box.h"
|
||||
#include "cc-stream-row.h"
|
||||
#include "cc-sound-enums.h"
|
||||
#include "cc-sound-resources.h"
|
||||
|
||||
struct _CcStreamListBox
|
||||
{
|
||||
GtkListBox parent_instance;
|
||||
GtkBox parent_instance;
|
||||
|
||||
GtkListBox *listbox;
|
||||
GtkSizeGroup *label_size_group;
|
||||
GvcMixerControl *mixer_control;
|
||||
CcStreamType stream_type;
|
||||
|
@ -35,7 +37,7 @@ struct _CcStreamListBox
|
|||
guint stream_removed_handler_id;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (CcStreamListBox, cc_stream_list_box, GTK_TYPE_LIST_BOX)
|
||||
G_DEFINE_TYPE (CcStreamListBox, cc_stream_list_box, GTK_TYPE_BOX)
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -100,28 +102,24 @@ stream_added_cb (CcStreamListBox *self,
|
|||
}
|
||||
|
||||
row = cc_stream_row_new (self->label_size_group, stream, id, self->stream_type, self->mixer_control);
|
||||
gtk_widget_show (GTK_WIDGET (row));
|
||||
gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (row));
|
||||
gtk_list_box_append (self->listbox, GTK_WIDGET (row));
|
||||
}
|
||||
|
||||
static CcStreamRow *
|
||||
static GtkWidget *
|
||||
find_row (CcStreamListBox *self,
|
||||
guint id)
|
||||
{
|
||||
g_autoptr(GList) children = NULL;
|
||||
GList *link;
|
||||
GtkWidget *child;
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (self));
|
||||
for (link = children; link; link = link->next)
|
||||
for (child = gtk_widget_get_first_child (GTK_WIDGET (self->listbox));
|
||||
child;
|
||||
child = gtk_widget_get_next_sibling (child))
|
||||
{
|
||||
CcStreamRow *row = link->data;
|
||||
|
||||
if (!CC_IS_STREAM_ROW (row))
|
||||
if (!CC_IS_STREAM_ROW (child))
|
||||
continue;
|
||||
|
||||
if (id == cc_stream_row_get_id (row))
|
||||
return row;
|
||||
if (id == cc_stream_row_get_id (CC_STREAM_ROW (child)))
|
||||
return child;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
@ -131,11 +129,11 @@ static void
|
|||
stream_removed_cb (CcStreamListBox *self,
|
||||
guint id)
|
||||
{
|
||||
CcStreamRow *row;
|
||||
GtkWidget *row;
|
||||
|
||||
row = find_row (self, id);
|
||||
if (row != NULL)
|
||||
gtk_container_remove (GTK_CONTAINER (self), GTK_WIDGET (row));
|
||||
gtk_list_box_remove (self->listbox, row);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -186,6 +184,7 @@ void
|
|||
cc_stream_list_box_class_init (CcStreamListBoxClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
|
||||
object_class->set_property = cc_stream_list_box_set_property;
|
||||
object_class->get_property = cc_stream_list_box_get_property;
|
||||
|
@ -197,13 +196,20 @@ cc_stream_list_box_class_init (CcStreamListBoxClass *klass)
|
|||
NULL,
|
||||
GTK_TYPE_SIZE_GROUP,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
|
||||
|
||||
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/sound/cc-stream-list-box.ui");
|
||||
|
||||
gtk_widget_class_bind_template_child (widget_class, CcStreamListBox, listbox);
|
||||
}
|
||||
|
||||
void
|
||||
cc_stream_list_box_init (CcStreamListBox *self)
|
||||
{
|
||||
gtk_list_box_set_selection_mode (GTK_LIST_BOX (self), GTK_SELECTION_NONE);
|
||||
gtk_list_box_set_sort_func (GTK_LIST_BOX (self), sort_cb, self, NULL);
|
||||
g_resources_register (cc_sound_get_resource ());
|
||||
|
||||
gtk_widget_init_template (GTK_WIDGET (self));
|
||||
|
||||
gtk_list_box_set_sort_func (self->listbox, sort_cb, self, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
G_BEGIN_DECLS
|
||||
|
||||
#define CC_TYPE_STREAM_LIST_BOX (cc_stream_list_box_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (CcStreamListBox, cc_stream_list_box, CC, STREAM_LIST_BOX, GtkListBox)
|
||||
G_DECLARE_FINAL_TYPE (CcStreamListBox, cc_stream_list_box, CC, STREAM_LIST_BOX, GtkBox)
|
||||
|
||||
void cc_stream_list_box_set_mixer_control (CcStreamListBox *combo_box,
|
||||
GvcMixerControl *mixer_control);
|
||||
|
|
15
panels/sound/cc-stream-list-box.ui
Normal file
15
panels/sound/cc-stream-list-box.ui
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<template class="CcStreamListBox" parent="GtkBox">
|
||||
<child>
|
||||
<object class="GtkListBox" id="listbox">
|
||||
<property name="hexpand">True</property>
|
||||
<property name="selection-mode">none</property>
|
||||
<style>
|
||||
<class name="content" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</template>
|
||||
</interface>
|
|
@ -80,7 +80,7 @@ cc_stream_row_new (GtkSizeGroup *size_group,
|
|||
GvcMixerControl *mixer_control)
|
||||
{
|
||||
CcStreamRow *self;
|
||||
g_autoptr(GtkIconInfo) icon_info = NULL;
|
||||
g_autoptr(GtkIconPaintable) icon_paintable = NULL;
|
||||
g_autoptr(GIcon) gicon = NULL;
|
||||
const gchar *stream_name;
|
||||
const gchar *icon_name;
|
||||
|
@ -101,19 +101,22 @@ cc_stream_row_new (GtkSizeGroup *size_group,
|
|||
/* Explicitly lookup for the icon, since some streams may give us an
|
||||
* icon name (e.g. "audio") that doesn't really exist in the theme.
|
||||
*/
|
||||
icon_info = gtk_icon_theme_lookup_icon (gtk_icon_theme_get_default (),
|
||||
icon_name,
|
||||
24,
|
||||
GTK_ICON_LOOKUP_GENERIC_FALLBACK);
|
||||
icon_paintable = gtk_icon_theme_lookup_icon (gtk_icon_theme_get_for_display (gdk_display_get_default ()),
|
||||
icon_name,
|
||||
NULL,
|
||||
24,
|
||||
gtk_widget_get_scale_factor (GTK_WIDGET (self)),
|
||||
GTK_TEXT_DIR_RTL,
|
||||
0);
|
||||
|
||||
if (icon_info)
|
||||
if (icon_paintable)
|
||||
gicon = g_themed_icon_new_with_default_fallbacks (symbolic_icon_name);
|
||||
else if (g_str_has_prefix (stream_name, SPEECH_DISPATCHER_PREFIX))
|
||||
gicon = g_themed_icon_new_with_default_fallbacks ("preferences-desktop-accessibility-symbolic");
|
||||
else
|
||||
gicon = g_themed_icon_new_with_default_fallbacks ("application-x-executable-symbolic");
|
||||
|
||||
gtk_image_set_from_gicon (self->icon_image, gicon, GTK_ICON_SIZE_LARGE_TOOLBAR);
|
||||
gtk_image_set_from_gicon (self->icon_image, gicon);
|
||||
|
||||
gtk_label_set_label (self->name_label, gvc_mixer_stream_get_name (stream));
|
||||
cc_volume_slider_set_stream (self->volume_slider, stream, stream_type);
|
||||
|
|
|
@ -2,26 +2,26 @@
|
|||
<interface>
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<template class="CcStreamRow" parent="GtkListBoxRow">
|
||||
<property name="activatable">False</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="margin">12</property>
|
||||
<property name="margin-top">12</property>
|
||||
<property name="margin-bottom">12</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="label_box">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="icon_image">
|
||||
<property name="visible">True</property>
|
||||
<style>
|
||||
<class name="lowres-icon"/>
|
||||
</style>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="name_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
|
@ -30,7 +30,6 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="CcVolumeSlider" id="volume_slider">
|
||||
<property name="visible">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
</object>
|
||||
</child>
|
||||
|
|
|
@ -60,7 +60,7 @@ update_volume_icon (CcVolumeSlider *self)
|
|||
else
|
||||
icon_name = "audio-volume-high-symbolic";
|
||||
|
||||
gtk_image_set_from_icon_name (self->stream_type_icon, icon_name, GTK_ICON_SIZE_BUTTON);
|
||||
gtk_image_set_from_icon_name (self->stream_type_icon, icon_name);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -215,14 +215,12 @@ cc_volume_slider_set_stream (CcVolumeSlider *self,
|
|||
{
|
||||
case CC_STREAM_TYPE_INPUT:
|
||||
gtk_image_set_from_icon_name (self->stream_type_icon,
|
||||
"microphone-sensitivity-muted-symbolic",
|
||||
GTK_ICON_SIZE_BUTTON);
|
||||
"microphone-sensitivity-muted-symbolic");
|
||||
break;
|
||||
|
||||
case CC_STREAM_TYPE_OUTPUT:
|
||||
gtk_image_set_from_icon_name (self->stream_type_icon,
|
||||
"audio-volume-muted-symbolic",
|
||||
GTK_ICON_SIZE_BUTTON);
|
||||
"audio-volume-muted-symbolic");
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -14,8 +14,10 @@
|
|||
<child>
|
||||
<object class="GtkToggleButton" id="mute_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="relief">none</property>
|
||||
<signal name="toggled" handler="mute_button_toggled_cb" object="CcVolumeSlider" swapped="yes"/>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkImage" id="stream_type_icon">
|
||||
<property name="visible">True</property>
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
<file preprocess="xml-stripblanks">cc-sound-button.ui</file>
|
||||
<file preprocess="xml-stripblanks">cc-sound-panel.ui</file>
|
||||
<file preprocess="xml-stripblanks">cc-speaker-test-button.ui</file>
|
||||
<file preprocess="xml-stripblanks">cc-stream-list-box.ui</file>
|
||||
<file preprocess="xml-stripblanks">cc-stream-row.ui</file>
|
||||
<file preprocess="xml-stripblanks">cc-subwoofer-slider.ui</file>
|
||||
<file preprocess="xml-stripblanks">cc-volume-slider.ui</file>
|
||||
|
|
|
@ -56,7 +56,7 @@ extern GType cc_notifications_panel_get_type (void);
|
|||
//extern GType cc_removable_media_panel_get_type (void);
|
||||
//extern GType cc_search_panel_get_type (void);
|
||||
//extern GType cc_sharing_panel_get_type (void);
|
||||
//extern GType cc_sound_panel_get_type (void);
|
||||
extern GType cc_sound_panel_get_type (void);
|
||||
#ifdef BUILD_THUNDERBOLT
|
||||
//extern GType cc_bolt_panel_get_type (void);
|
||||
#endif /* BUILD_THUNDERBOLT */
|
||||
|
@ -127,7 +127,7 @@ static CcPanelLoaderVtable default_panels[] =
|
|||
//PANEL_TYPE("removable-media", cc_removable_media_panel_get_type, NULL),
|
||||
//PANEL_TYPE("search", cc_search_panel_get_type, NULL),
|
||||
//PANEL_TYPE("sharing", cc_sharing_panel_get_type, NULL),
|
||||
//PANEL_TYPE("sound", cc_sound_panel_get_type, NULL),
|
||||
PANEL_TYPE("sound", cc_sound_panel_get_type, NULL),
|
||||
#ifdef BUILD_THUNDERBOLT
|
||||
//PANEL_TYPE("thunderbolt", cc_bolt_panel_get_type, NULL),
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue