~ubuntu-branches/ubuntu/utopic/gnome-control-center/utopic-proposed

« back to all changes in this revision

Viewing changes to panels/sound-nua/gvc-mixer-event-role.c

  • Committer: Package Import Robot
  • Author(s): Sebastien Bacher, Sebastien Bacher, Robert Ancell, Iain Lane, Edward Donovan, Rico Tzschichholz, Jeremy Bicha, David Henningsson
  • Date: 2012-11-21 19:32:45 UTC
  • mfrom: (1.1.63)
  • Revision ID: package-import@ubuntu.com-20121121193245-mj61nzz1z4fk3z25
Tags: 1:3.6.3-0ubuntu1
[ Sebastien Bacher ]
* New upstream version
* debian/control.in: recommends libcanberra-pulse (lp: #1004973)
* debian/patches/58_ubuntu_icon_views_redesign.patch:
  - drop most of the changes, keep the different grid size though
    to fit on screen with our extra icons
* debian/patches/91_dont_show_in_unity.patch:
  - dropped, show the upstream printer panel and the layout tab
* debian/patches/revert_git_keyboard_gsettings.patch,
  debian/patches/revert_git_stop_using_gconf.patch:
  - dropped the gconf->gsettings reverts

[ Robert Ancell ]
* New upstream release (LP: #1010317)
* debian/control:
  - Bump build-depends on libgnome-desktop-3-dev, libwacom-dev
  - Add build-depends on libclutter-1.0-dev, libclutter-gtk-1.0-dev,
    libpwquality-dev
  - Drop build-depends on libgnomekbd-dev
* debian/patches/60_ubuntu_nav_bar.patch:
  - Disabled for now, doesn't apply
* debian/patches/revert_ua_gsettings.patch:
  - We can use GSettings for universal access now
* debian/patches/00git_online_accounts_gtkgrid.patch:
* debian/patches/00git_online_accounts_layout.part:
* debian/patches/git_wacom_translations.patch:
  - Applied upstream

[ Iain Lane ]
* Add Build-Depends on libxkbfile-dev
* New upstream release.
* Refresh all patches to apply cleanly.

[ Edward Donovan ]
* debian/source_gnome-control-center.py: Fix for Python 3. (LP: #1013171)

[ Rico Tzschichholz ]
* debian/control.in:
  - Build-depend on gtk-doc-tools instead of docbook directly
  - Bump minimum glib-2.0, gnome-desktop3, gnome-settings-daemon
     and gsettings-desktop-schemas

[ Jeremy Bicha ]
* Dropped more patches applied in new version:
  - git_unmute_sound_event.patch
  - git_fix_big_editable_labels.patch
  - 96_sound_nua_panel.patch
* debian/patches/04_new_appearance_settings.patch:
  - Dropped, this is now packaged separately as gnome-control-center-unity
* debian/patches/10_keyboard_layout_on_unity.patch:
  - Don't change the keyboard panel name when not running Unity
* debian/patches/52_ubuntu_language_list_mods.patch:
  - Don't disable adding current language to the list. While this
    fix shows the current language twice, at least it avoids the
    "Ubuntu suddenly in Chinese" bug (LP: #1035219)
* debian/patches/53_use_ubuntu_help.patch:
  - Only show Ubuntu help when running Unity
* debian/patches/58_hide_gdm_notifications.patch:
  - Hide "Show notifications when locked" settings when running Unity
    since it's a GNOME Shell-specific feature
* debian/patches/63_normal_scrollbar_in_a11y.patch:
  - Drop, overlay-scrollbars should handle this instead
* debian/patches/91_dont_show_in_unity.patch:
  - Hide Printers & Region panels in Unity until we're ready to switch
    to them.
* debian/patches/fix-crash-on-user-panel.patch:
  - Dropped, GNOME says it's obsolete
* debian/rules:
  - Build with -z,defs again
  - Explicitly disable ibus support since ibus 1.4 isn't supported in
    this version
* debian/control.in:
  - Drop ubuntu-docs and gnome-user-guide from recommends to suggests
  - Don't recommend indicators; let's leave that to Unity

[ David Henningsson ]
* sound_nua_panel.patch: Rebase to gnome 3.6 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
2
 
 *
3
 
 * Copyright (C) 2008 William Jon McCann
4
 
 *
5
 
 * This program is free software; you can redistribute it and/or modify
6
 
 * it under the terms of the GNU General Public License as published by
7
 
 * the Free Software Foundation; either version 2 of the License, or
8
 
 * (at your option) any later version.
9
 
 *
10
 
 * This program is distributed in the hope that it will be useful,
11
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 
 * GNU General Public License for more details.
14
 
 *
15
 
 * You should have received a copy of the GNU General Public License
16
 
 * along with this program; if not, write to the Free Software
17
 
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
 
 *
19
 
 */
20
 
 
21
 
#include "config.h"
22
 
 
23
 
#include <stdlib.h>
24
 
#include <stdio.h>
25
 
#include <unistd.h>
26
 
 
27
 
#include <glib.h>
28
 
#include <glib/gi18n-lib.h>
29
 
 
30
 
#include <pulse/pulseaudio.h>
31
 
#include <pulse/ext-stream-restore.h>
32
 
 
33
 
#include "gvc-mixer-event-role.h"
34
 
#include "gvc-mixer-stream-private.h"
35
 
#include "gvc-channel-map-private.h"
36
 
 
37
 
#define GVC_MIXER_EVENT_ROLE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRolePrivate))
38
 
 
39
 
struct GvcMixerEventRolePrivate
40
 
{
41
 
        char          *device;
42
 
};
43
 
 
44
 
enum
45
 
{
46
 
        PROP_0,
47
 
        PROP_DEVICE
48
 
};
49
 
 
50
 
static void     gvc_mixer_event_role_class_init (GvcMixerEventRoleClass *klass);
51
 
static void     gvc_mixer_event_role_init       (GvcMixerEventRole      *mixer_event_role);
52
 
static void     gvc_mixer_event_role_finalize   (GObject            *object);
53
 
 
54
 
G_DEFINE_TYPE (GvcMixerEventRole, gvc_mixer_event_role, GVC_TYPE_MIXER_STREAM)
55
 
 
56
 
static gboolean
57
 
update_settings (GvcMixerEventRole *role,
58
 
                 gboolean           is_muted,
59
 
                 gpointer          *op)
60
 
{
61
 
        pa_operation              *o;
62
 
        const GvcChannelMap       *map;
63
 
        pa_context                *context;
64
 
        pa_ext_stream_restore_info info;
65
 
 
66
 
        map = gvc_mixer_stream_get_channel_map (GVC_MIXER_STREAM(role));
67
 
 
68
 
        info.volume = *gvc_channel_map_get_cvolume(map);
69
 
        info.name = "sink-input-by-media-role:event";
70
 
        info.channel_map = *gvc_channel_map_get_pa_channel_map(map);
71
 
        info.device = role->priv->device;
72
 
        info.mute = is_muted;
73
 
 
74
 
        context = gvc_mixer_stream_get_pa_context (GVC_MIXER_STREAM (role));
75
 
 
76
 
        o = pa_ext_stream_restore_write (context,
77
 
                                         PA_UPDATE_REPLACE,
78
 
                                         &info,
79
 
                                         1,
80
 
                                         TRUE,
81
 
                                         NULL,
82
 
                                         NULL);
83
 
 
84
 
        if (o == NULL) {
85
 
                g_warning ("pa_ext_stream_restore_write() failed");
86
 
                return FALSE;
87
 
        }
88
 
 
89
 
        if (op != NULL)
90
 
                *op = o;
91
 
 
92
 
        return TRUE;
93
 
}
94
 
 
95
 
static gboolean
96
 
gvc_mixer_event_role_push_volume (GvcMixerStream *stream, gpointer *op)
97
 
{
98
 
        return update_settings (GVC_MIXER_EVENT_ROLE (stream),
99
 
                                gvc_mixer_stream_get_is_muted (stream), op);
100
 
}
101
 
 
102
 
static gboolean
103
 
gvc_mixer_event_role_change_is_muted (GvcMixerStream *stream,
104
 
                                      gboolean        is_muted)
105
 
{
106
 
        return update_settings (GVC_MIXER_EVENT_ROLE (stream),
107
 
                                is_muted, NULL);
108
 
}
109
 
 
110
 
static gboolean
111
 
gvc_mixer_event_role_set_device (GvcMixerEventRole *role,
112
 
                                 const char        *device)
113
 
{
114
 
        g_return_val_if_fail (GVC_IS_MIXER_EVENT_ROLE (role), FALSE);
115
 
 
116
 
        g_free (role->priv->device);
117
 
        role->priv->device = g_strdup (device);
118
 
        g_object_notify (G_OBJECT (role), "device");
119
 
 
120
 
        return TRUE;
121
 
}
122
 
 
123
 
static void
124
 
gvc_mixer_event_role_set_property (GObject       *object,
125
 
                                   guint          prop_id,
126
 
                                   const GValue  *value,
127
 
                                   GParamSpec    *pspec)
128
 
{
129
 
        GvcMixerEventRole *self = GVC_MIXER_EVENT_ROLE (object);
130
 
 
131
 
        switch (prop_id) {
132
 
        case PROP_DEVICE:
133
 
                gvc_mixer_event_role_set_device (self, g_value_get_string (value));
134
 
                break;
135
 
        default:
136
 
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
137
 
                break;
138
 
        }
139
 
}
140
 
 
141
 
static void
142
 
gvc_mixer_event_role_get_property (GObject     *object,
143
 
                                   guint        prop_id,
144
 
                                   GValue      *value,
145
 
                                   GParamSpec  *pspec)
146
 
{
147
 
        GvcMixerEventRole *self = GVC_MIXER_EVENT_ROLE (object);
148
 
 
149
 
        switch (prop_id) {
150
 
        case PROP_DEVICE:
151
 
                g_value_set_string (value, self->priv->device);
152
 
                break;
153
 
        default:
154
 
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
155
 
                break;
156
 
        }
157
 
}
158
 
 
159
 
static void
160
 
gvc_mixer_event_role_class_init (GvcMixerEventRoleClass *klass)
161
 
{
162
 
        GObjectClass        *object_class = G_OBJECT_CLASS (klass);
163
 
        GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
164
 
 
165
 
        object_class->finalize = gvc_mixer_event_role_finalize;
166
 
        object_class->set_property = gvc_mixer_event_role_set_property;
167
 
        object_class->get_property = gvc_mixer_event_role_get_property;
168
 
 
169
 
        stream_class->push_volume = gvc_mixer_event_role_push_volume;
170
 
        stream_class->change_is_muted = gvc_mixer_event_role_change_is_muted;
171
 
 
172
 
        g_object_class_install_property (object_class,
173
 
                                         PROP_DEVICE,
174
 
                                         g_param_spec_string ("device",
175
 
                                                              "Device",
176
 
                                                              "Device",
177
 
                                                              NULL,
178
 
                                                              G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
179
 
 
180
 
        g_type_class_add_private (klass, sizeof (GvcMixerEventRolePrivate));
181
 
}
182
 
 
183
 
static void
184
 
gvc_mixer_event_role_init (GvcMixerEventRole *event_role)
185
 
{
186
 
        event_role->priv = GVC_MIXER_EVENT_ROLE_GET_PRIVATE (event_role);
187
 
 
188
 
}
189
 
 
190
 
static void
191
 
gvc_mixer_event_role_finalize (GObject *object)
192
 
{
193
 
        GvcMixerEventRole *mixer_event_role;
194
 
 
195
 
        g_return_if_fail (object != NULL);
196
 
        g_return_if_fail (GVC_IS_MIXER_EVENT_ROLE (object));
197
 
 
198
 
        mixer_event_role = GVC_MIXER_EVENT_ROLE (object);
199
 
 
200
 
        g_return_if_fail (mixer_event_role->priv != NULL);
201
 
 
202
 
        g_free (mixer_event_role->priv->device);
203
 
 
204
 
        G_OBJECT_CLASS (gvc_mixer_event_role_parent_class)->finalize (object);
205
 
}
206
 
 
207
 
/**
208
 
 * gvc_mixer_event_role_new: (skip)
209
 
 *
210
 
 * @context:
211
 
 * @index:
212
 
 * @channel_map:
213
 
 *
214
 
 * Returns:
215
 
 */
216
 
GvcMixerStream *
217
 
gvc_mixer_event_role_new (pa_context *context,
218
 
                          const char *device,
219
 
                          GvcChannelMap *channel_map)
220
 
{
221
 
        GObject *object;
222
 
 
223
 
        object = g_object_new (GVC_TYPE_MIXER_EVENT_ROLE,
224
 
                               "pa-context", context,
225
 
                               "index", 0,
226
 
                               "device", device,
227
 
                               "channel-map", channel_map,
228
 
                               NULL);
229
 
 
230
 
        return GVC_MIXER_STREAM (object);
231
 
}