Merge lp:~equinox-i/xfce4-volumed-pulse/add-support-for-mic-mute into lp:~mrpouit/xfce4-volumed-pulse/master
- add-support-for-mic-mute
- Merge into master
Proposed by
Christian Pointner
Status: | Needs review | ||||
---|---|---|---|---|---|
Proposed branch: | lp:~equinox-i/xfce4-volumed-pulse/add-support-for-mic-mute | ||||
Merge into: | lp:~mrpouit/xfce4-volumed-pulse/master | ||||
Diff against target: |
562 lines (+352/-6) 7 files modified
src/main.c (+2/-0) src/xvd_data_types.h (+3/-0) src/xvd_keys.c (+47/-2) src/xvd_notify.c (+36/-0) src/xvd_notify.h (+5/-0) src/xvd_pulse.c (+254/-4) src/xvd_pulse.h (+5/-0) |
||||
To merge this branch: | bzr merge lp:~equinox-i/xfce4-volumed-pulse/add-support-for-mic-mute | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Simon Steinbeiß (community) | Approve | ||
Lionel Le Folgoc | Pending | ||
Review via email: mp+270876@code.launchpad.net |
Commit message
Addes support for MicMute Key
Description of the change
This adds support for the MicMute Key on modern Laptops..
To post a comment you must log in.
- 64. By Christian Pointner
-
use icon for microphone mute status
Unmerged revisions
- 64. By Christian Pointner
-
use icon for microphone mute status
- 63. By Christian Pointner
-
Addes support for MicMute Key
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'src/main.c' |
2 | --- src/main.c 2013-03-10 18:28:11 +0000 |
3 | +++ src/main.c 2016-02-02 19:54:56 +0000 |
4 | @@ -101,11 +101,13 @@ |
5 | i->pa_main_loop = NULL; |
6 | i->pulse_context = NULL; |
7 | i->sink_index = -1; |
8 | + i->source_index = -1; |
9 | i->chan = NULL; |
10 | i->loop = NULL; |
11 | #ifdef HAVE_LIBNOTIFY |
12 | i->gauge_notifications = FALSE; |
13 | i->notification = NULL; |
14 | + i->notification_mic = NULL; |
15 | #endif |
16 | } |
17 | |
18 | |
19 | === modified file 'src/xvd_data_types.h' |
20 | --- src/xvd_data_types.h 2013-03-10 18:28:11 +0000 |
21 | +++ src/xvd_data_types.h 2016-02-02 19:54:56 +0000 |
22 | @@ -55,8 +55,10 @@ |
23 | pa_glib_mainloop *pa_main_loop; |
24 | pa_context *pulse_context; |
25 | guint32 sink_index; |
26 | + guint32 source_index; |
27 | pa_cvolume volume; |
28 | int mute; |
29 | + int mic_mute; |
30 | |
31 | /* Xfconf vars */ |
32 | XfconfChannel *chan; |
33 | @@ -66,6 +68,7 @@ |
34 | /* Libnotify vars */ |
35 | gboolean gauge_notifications; |
36 | NotifyNotification* notification; |
37 | + NotifyNotification* notification_mic; |
38 | #endif |
39 | |
40 | /* Other Xvd vars */ |
41 | |
42 | === modified file 'src/xvd_keys.c' |
43 | --- src/xvd_keys.c 2013-03-10 18:28:11 +0000 |
44 | +++ src/xvd_keys.c 2016-02-02 19:54:56 +0000 |
45 | @@ -55,11 +55,21 @@ |
46 | { |
47 | XvdInstance *xvd_inst = (XvdInstance *) Inst; |
48 | |
49 | - g_debug ("The LowerVolume key was pressed."); |
50 | + g_debug ("The Mute key was pressed."); |
51 | |
52 | xvd_toggle_mute (xvd_inst); |
53 | } |
54 | |
55 | +static |
56 | +void xvd_mic_mute_handler (const char *keystring, void *Inst) |
57 | +{ |
58 | + XvdInstance *xvd_inst = (XvdInstance *) Inst; |
59 | + |
60 | + g_debug ("The MicMute key was pressed."); |
61 | + |
62 | + xvd_toggle_mic_mute (xvd_inst); |
63 | +} |
64 | + |
65 | void |
66 | xvd_keys_init(XvdInstance *Inst) |
67 | { |
68 | @@ -117,6 +127,24 @@ |
69 | keybinder_bind ("<Ctrl><Alt><Super>XF86AudioMute", xvd_mute_handler, Inst); |
70 | keybinder_bind ("<Shift><Alt><Super>XF86AudioMute", xvd_mute_handler, Inst); |
71 | keybinder_bind ("<Ctrl><Shift><Alt><Super>XF86AudioMute", xvd_mute_handler, Inst); |
72 | + |
73 | + |
74 | + keybinder_bind ("XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
75 | + keybinder_bind ("<Ctrl>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
76 | + keybinder_bind ("<Alt>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
77 | + keybinder_bind ("<Super>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
78 | + keybinder_bind ("<Shift>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
79 | + keybinder_bind ("<Ctrl><Shift>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
80 | + keybinder_bind ("<Ctrl><Alt>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
81 | + keybinder_bind ("<Ctrl><Super>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
82 | + keybinder_bind ("<Alt><Shift>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
83 | + keybinder_bind ("<Alt><Super>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
84 | + keybinder_bind ("<Shift><Super>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
85 | + keybinder_bind ("<Ctrl><Shift><Super>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
86 | + keybinder_bind ("<Ctrl><Shift><Alt>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
87 | + keybinder_bind ("<Ctrl><Alt><Super>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
88 | + keybinder_bind ("<Shift><Alt><Super>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
89 | + keybinder_bind ("<Ctrl><Shift><Alt><Super>XF86AudioMicMute", xvd_mic_mute_handler, Inst); |
90 | } |
91 | |
92 | void |
93 | @@ -175,5 +203,22 @@ |
94 | keybinder_unbind ("<Ctrl><Alt><Super>XF86AudioMute", xvd_mute_handler); |
95 | keybinder_unbind ("<Shift><Alt><Super>XF86AudioMute", xvd_mute_handler); |
96 | keybinder_unbind ("<Ctrl><Shift><Alt><Super>XF86AudioMute", xvd_mute_handler); |
97 | - |
98 | + |
99 | + |
100 | + keybinder_unbind ("XF86AudioMicMute", xvd_mic_mute_handler); |
101 | + keybinder_unbind ("<Ctrl>XF86AudioMicMute", xvd_mic_mute_handler); |
102 | + keybinder_unbind ("<Alt>XF86AudioMicMute", xvd_mic_mute_handler); |
103 | + keybinder_unbind ("<Super>XF86AudioMicMute", xvd_mic_mute_handler); |
104 | + keybinder_unbind ("<Shift>XF86AudioMicMute", xvd_mic_mute_handler); |
105 | + keybinder_unbind ("<Ctrl><Shift>XF86AudioMicMute", xvd_mic_mute_handler); |
106 | + keybinder_unbind ("<Ctrl><Alt>XF86AudioMicMute", xvd_mic_mute_handler); |
107 | + keybinder_unbind ("<Ctrl><Super>XF86AudioMicMute", xvd_mic_mute_handler); |
108 | + keybinder_unbind ("<Alt><Shift>XF86AudioMicMute", xvd_mic_mute_handler); |
109 | + keybinder_unbind ("<Alt><Super>XF86AudioMicMute", xvd_mic_mute_handler); |
110 | + keybinder_unbind ("<Shift><Super>XF86AudioMicMute", xvd_mic_mute_handler); |
111 | + keybinder_unbind ("<Ctrl><Shift><Super>XF86AudioMicMute", xvd_mic_mute_handler); |
112 | + keybinder_unbind ("<Ctrl><Shift><Alt>XF86AudioMicMute", xvd_mic_mute_handler); |
113 | + keybinder_unbind ("<Ctrl><Alt><Super>XF86AudioMicMute", xvd_mic_mute_handler); |
114 | + keybinder_unbind ("<Shift><Alt><Super>XF86AudioMicMute", xvd_mic_mute_handler); |
115 | + keybinder_unbind ("<Ctrl><Shift><Alt><Super>XF86AudioMicMute", xvd_mic_mute_handler); |
116 | } |
117 | |
118 | === modified file 'src/xvd_notify.c' |
119 | --- src/xvd_notify.c 2013-03-10 18:28:11 +0000 |
120 | +++ src/xvd_notify.c 2016-02-02 19:54:56 +0000 |
121 | @@ -99,6 +99,37 @@ |
122 | (Inst->gauge_notifications) ? -1 : 0); |
123 | } |
124 | |
125 | +void |
126 | +xvd_notify_mic_notification(XvdInstance *Inst) |
127 | +{ |
128 | + GError* error = NULL; |
129 | + gchar* title = NULL; |
130 | + gchar* icon = NULL; |
131 | + |
132 | + title = g_strdup_printf ("Microphone is %s", (Inst->mic_mute) ? "muted" : "active"); |
133 | + icon = (Inst->mic_mute) ? "microphone-sensitivity-muted" : "microphone-sensitivity-high"; |
134 | + |
135 | + notify_notification_update (Inst->notification_mic, |
136 | + title, |
137 | + NULL, |
138 | + icon); |
139 | + |
140 | + g_free (title); |
141 | + |
142 | + if (Inst->gauge_notifications) { |
143 | + notify_notification_set_hint_int32 (Inst->notification_mic, |
144 | + LAYOUT_ICON_ONLY, |
145 | + 1); |
146 | + } |
147 | + |
148 | + if (!notify_notification_show (Inst->notification_mic, &error)) |
149 | + { |
150 | + g_warning ("Error while sending mic notification : %s\n", error->message); |
151 | + g_error_free (error); |
152 | + } |
153 | + |
154 | +} |
155 | + |
156 | void |
157 | xvd_notify_init(XvdInstance *Inst, |
158 | const gchar *appname) |
159 | @@ -128,11 +159,14 @@ |
160 | #ifdef NOTIFY_CHECK_VERSION |
161 | #if NOTIFY_CHECK_VERSION (0, 7, 0) |
162 | Inst->notification = notify_notification_new ("Xfce4-Volumed", NULL, NULL); |
163 | + Inst->notification_mic = notify_notification_new ("Xfce4-Volumed", NULL, NULL); |
164 | #else |
165 | Inst->notification = notify_notification_new ("Xfce4-Volumed", NULL, NULL, NULL); |
166 | + Inst->notification_mic = notify_notification_new ("Xfce4-Volumed", NULL, NULL, NULL); |
167 | #endif |
168 | #else |
169 | Inst->notification = notify_notification_new ("Xfce4-Volumed", NULL, NULL, NULL); |
170 | + Inst->notification_mic = notify_notification_new ("Xfce4-Volumed", NULL, NULL, NULL); |
171 | #endif |
172 | } |
173 | |
174 | @@ -141,5 +175,7 @@ |
175 | { |
176 | g_object_unref (G_OBJECT (Inst->notification)); |
177 | Inst->notification = NULL; |
178 | + g_object_unref (G_OBJECT (Inst->notification_mic)); |
179 | + Inst->notification_mic = NULL; |
180 | notify_uninit (); |
181 | } |
182 | |
183 | === modified file 'src/xvd_notify.h' |
184 | --- src/xvd_notify.h 2013-03-10 18:28:11 +0000 |
185 | +++ src/xvd_notify.h 2016-02-02 19:54:56 +0000 |
186 | @@ -46,6 +46,11 @@ |
187 | void |
188 | xvd_notify_undershoot_notification(XvdInstance *Inst); |
189 | |
190 | + |
191 | +void |
192 | +xvd_notify_mic_notification(XvdInstance *Inst); |
193 | + |
194 | + |
195 | void |
196 | xvd_notify_init(XvdInstance *Inst, |
197 | const gchar *appname); |
198 | |
199 | === modified file 'src/xvd_pulse.c' |
200 | --- src/xvd_pulse.c 2012-05-26 13:41:02 +0000 |
201 | +++ src/xvd_pulse.c 2016-02-02 19:54:56 +0000 |
202 | @@ -39,14 +39,20 @@ |
203 | |
204 | static pa_cvolume old_volume; |
205 | static int old_mute; |
206 | +static int old_mic_mute; |
207 | |
208 | |
209 | #ifdef HAVE_LIBNOTIFY |
210 | static void xvd_notify_volume_callback (pa_context *c, |
211 | int success, |
212 | void *userdata); |
213 | + |
214 | +static void xvd_notify_mic_callback (pa_context *c, |
215 | + int success, |
216 | + void *userdata); |
217 | #else |
218 | #define xvd_notify_volume_callback NULL |
219 | +#define xvd_notify_mic_callback NULL |
220 | #endif |
221 | |
222 | static void xvd_context_state_callback (pa_context *c, |
223 | @@ -76,6 +82,21 @@ |
224 | int eol, |
225 | void *userdata); |
226 | |
227 | +static void xvd_default_source_info_callback (pa_context *c, |
228 | + const pa_source_info *info, |
229 | + int eol, |
230 | + void *userdata); |
231 | + |
232 | +static void xvd_source_info_callback (pa_context *c, |
233 | + const pa_source_info *source, |
234 | + int eol, |
235 | + void *userdata); |
236 | + |
237 | +static void xvd_update_source_callback (pa_context *c, |
238 | + const pa_source_info *info, |
239 | + int eol, |
240 | + void *userdata); |
241 | + |
242 | static gboolean xvd_connect_to_pulse (XvdInstance *i); |
243 | |
244 | |
245 | @@ -201,6 +222,47 @@ |
246 | } |
247 | |
248 | |
249 | +void |
250 | +xvd_toggle_mic_mute (XvdInstance *i) |
251 | +{ |
252 | + pa_operation *op = NULL; |
253 | + |
254 | + if (!i || !i->pulse_context) |
255 | + { |
256 | + g_warning ("xvd_toggle_mic_mute: pulseaudio context is null"); |
257 | + return; |
258 | + } |
259 | + |
260 | + if (pa_context_get_state (i->pulse_context) != PA_CONTEXT_READY) |
261 | + { |
262 | + g_warning ("xvd_toggle_mic_mute: pulseaudio context isn't ready"); |
263 | + return; |
264 | + } |
265 | + |
266 | + if (i->source_index == PA_INVALID_INDEX) |
267 | + { |
268 | + g_warning ("xvd_toggle_mic_mute: undefined source"); |
269 | + return; |
270 | + } |
271 | + |
272 | + /* backup existing mute and update */ |
273 | + i->mic_mute = !(old_mic_mute = i->mic_mute); |
274 | + |
275 | + op = pa_context_set_source_mute_by_index (i->pulse_context, |
276 | + i->source_index, |
277 | + i->mic_mute, |
278 | + xvd_notify_mic_callback, |
279 | + i); |
280 | + |
281 | + if (!op) |
282 | + { |
283 | + g_warning ("xvd_toggle_mic_mute: failed"); |
284 | + return; |
285 | + } |
286 | + pa_operation_unref (op); |
287 | +} |
288 | + |
289 | + |
290 | gint |
291 | xvd_get_readable_volume (const pa_cvolume *vol) |
292 | { |
293 | @@ -259,13 +321,13 @@ |
294 | |
295 | if (!c || !userdata) |
296 | { |
297 | - g_warning ("xvd_notify_volume_update: invalid argument"); |
298 | + g_warning ("xvd_notify_volume_callback: invalid argument"); |
299 | return; |
300 | } |
301 | |
302 | if (!success) |
303 | { |
304 | - g_warning ("xvd_notify_volume_update: operation failed, %s", |
305 | + g_warning ("xvd_notify_volume_callback: operation failed, %s", |
306 | pa_strerror (pa_context_errno (c))); |
307 | return; |
308 | } |
309 | @@ -290,6 +352,39 @@ |
310 | else |
311 | xvd_notify_volume_notification (i); |
312 | } |
313 | + |
314 | + |
315 | +/** |
316 | + * Shows Mic mute status notification |
317 | + */ |
318 | +static void |
319 | +xvd_notify_mic_callback (pa_context *c, |
320 | + int success, |
321 | + void *userdata) |
322 | +{ |
323 | + XvdInstance *i = (XvdInstance *) userdata; |
324 | + guint32 r_oldv, r_curv; |
325 | + |
326 | + if (!c || !userdata) |
327 | + { |
328 | + g_warning ("xvd_notify_mic_callback: invalid argument"); |
329 | + return; |
330 | + } |
331 | + |
332 | + if (!success) |
333 | + { |
334 | + g_warning ("xvd_notify_mic_callback: operation failed, %s", |
335 | + pa_strerror (pa_context_errno (c))); |
336 | + return; |
337 | + } |
338 | + |
339 | + /* the sink was (un)muted */ |
340 | + if (old_mic_mute != i->mic_mute) |
341 | + { |
342 | + xvd_notify_mic_notification (i); |
343 | + return; |
344 | + } |
345 | +} |
346 | #endif |
347 | |
348 | |
349 | @@ -335,6 +430,28 @@ |
350 | pa_operation_unref (op); |
351 | } |
352 | break; |
353 | + /* change on a source, re-fetch it */ |
354 | + case PA_SUBSCRIPTION_EVENT_SOURCE: |
355 | + if (i->source_index != index) |
356 | + return; |
357 | + |
358 | + if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) |
359 | + i->source_index = PA_INVALID_INDEX; |
360 | + else |
361 | + { |
362 | + op = pa_context_get_source_info_by_index (c, |
363 | + index, |
364 | + xvd_update_source_callback, |
365 | + userdata); |
366 | + |
367 | + if (!op) |
368 | + { |
369 | + g_warning ("xvd_subscribed_events_callback: failed to get source info"); |
370 | + return; |
371 | + } |
372 | + pa_operation_unref (op); |
373 | + } |
374 | + break; |
375 | /* change on the server, re-fetch everything */ |
376 | case PA_SUBSCRIPTION_EVENT_SERVER: |
377 | op = pa_context_get_server_info (c, |
378 | @@ -360,7 +477,7 @@ |
379 | void *userdata) |
380 | { |
381 | XvdInstance *i = (XvdInstance *) userdata; |
382 | - pa_subscription_mask_t mask = PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SERVER; |
383 | + pa_subscription_mask_t mask = PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE | PA_SUBSCRIPTION_MASK_SERVER; |
384 | pa_operation *op = NULL; |
385 | |
386 | if (!c || !userdata) |
387 | @@ -390,6 +507,7 @@ |
388 | case PA_CONTEXT_FAILED: |
389 | g_critical("xvd_context_state_callback: The connection failed or was disconnected, is PulseAudio Daemon running?"); |
390 | i->sink_index = PA_INVALID_INDEX; |
391 | + i->source_index = PA_INVALID_INDEX; |
392 | break; |
393 | case PA_CONTEXT_READY: |
394 | g_debug ("xvd_context_state_callback: The connection is established, the context is ready to execute operations"); |
395 | @@ -397,7 +515,7 @@ |
396 | xvd_subscribed_events_callback, |
397 | userdata); |
398 | |
399 | - /* subscribe to sink and server changes, we don't need more */ |
400 | + /* subscribe to sink/source and server changes, we don't need more */ |
401 | op = pa_context_subscribe (c, |
402 | mask, |
403 | NULL, |
404 | @@ -476,6 +594,36 @@ |
405 | } |
406 | pa_operation_unref (op); |
407 | } |
408 | + |
409 | + if (info->default_source_name) |
410 | + { |
411 | + op = pa_context_get_source_info_by_name (c, |
412 | + info->default_source_name, |
413 | + xvd_default_source_info_callback, |
414 | + userdata); |
415 | + |
416 | + if (!op) |
417 | + { |
418 | + g_warning("xvd_server_info_callback: pa_context_get_source_info_by_name() failed"); |
419 | + return; |
420 | + } |
421 | + pa_operation_unref (op); |
422 | + } |
423 | + else |
424 | + { |
425 | + /* when PulseAudio doesn't set a default source, look at all of them |
426 | + and hope to find a usable one */ |
427 | + op = pa_context_get_source_info_list(c, |
428 | + xvd_source_info_callback, |
429 | + userdata); |
430 | + |
431 | + if (!op) |
432 | + { |
433 | + g_warning("xvd_server_info_callback: pa_context_get_source_info_list() failed"); |
434 | + return; |
435 | + } |
436 | + pa_operation_unref (op); |
437 | + } |
438 | } |
439 | |
440 | |
441 | @@ -584,3 +732,105 @@ |
442 | #endif |
443 | } |
444 | } |
445 | + |
446 | + |
447 | +/** |
448 | + * Callback to retrieve the infos of a given source. |
449 | + */ |
450 | +static void |
451 | +xvd_source_info_callback (pa_context *c, |
452 | + const pa_source_info *source, |
453 | + int eol, |
454 | + void *userdata) |
455 | +{ |
456 | + XvdInstance *i = (XvdInstance *) userdata; |
457 | + |
458 | + /* detect the end of the list */ |
459 | + if (eol > 0) |
460 | + return; |
461 | + else |
462 | + { |
463 | + if (!userdata || !source) |
464 | + { |
465 | + g_warning ("xvd_source_info_callback: invalid argument"); |
466 | + return; |
467 | + } |
468 | + |
469 | + /* If there's no default source, try to use this one */ |
470 | + if (i->source_index == PA_INVALID_INDEX |
471 | + /* indicator-sound does that check */ |
472 | + && g_ascii_strncasecmp ("auto_null", source->name, 9) != 0) |
473 | + { |
474 | + i->source_index = source->index; |
475 | + old_mic_mute = i->mic_mute = source->mute; |
476 | + } |
477 | + } |
478 | +} |
479 | + |
480 | + |
481 | +/** |
482 | + * Callback to retrieve the infos of the default source. |
483 | + */ |
484 | +static void |
485 | +xvd_default_source_info_callback (pa_context *c, |
486 | + const pa_source_info *info, |
487 | + int eol, |
488 | + void *userdata) |
489 | +{ |
490 | + XvdInstance *i = (XvdInstance *) userdata; |
491 | + |
492 | + /* detect the end of the list */ |
493 | + if (eol > 0) |
494 | + return; |
495 | + else |
496 | + { |
497 | + if (!userdata || !info) |
498 | + { |
499 | + g_warning ("xvd_default_source_info_callback: invalid argument"); |
500 | + return; |
501 | + } |
502 | + |
503 | + /* is this a new default source? */ |
504 | + if (i->source_index != info->index) |
505 | + { |
506 | + i->source_index = info->index; |
507 | + old_mic_mute = i->mic_mute = info->mute; |
508 | + } |
509 | + } |
510 | +} |
511 | + |
512 | + |
513 | +/** |
514 | + * Callback for source changes reported by PulseAudio. |
515 | + */ |
516 | +static void |
517 | +xvd_update_source_callback (pa_context *c, |
518 | + const pa_source_info *info, |
519 | + int eol, |
520 | + void *userdata) |
521 | +{ |
522 | + XvdInstance *i = (XvdInstance *) userdata; |
523 | + |
524 | + /* detect the end of the list */ |
525 | + if (eol > 0) |
526 | + return; |
527 | + else |
528 | + { |
529 | + if (!c || !userdata || !info) |
530 | + { |
531 | + g_warning ("xvd_update_source_callback: invalid argument"); |
532 | + return; |
533 | + } |
534 | + |
535 | + /* re-fetch infos from PulseAudio */ |
536 | + i->source_index = info->index; |
537 | + old_mic_mute = i->mic_mute; |
538 | + i->mic_mute = info->mute; |
539 | + |
540 | +#ifdef HAVE_LIBNOTIFY |
541 | + /* notify user of the possible changes */ |
542 | + if (old_mic_mute != i->mic_mute) |
543 | + xvd_notify_mic_callback (c, 1, i); |
544 | +#endif |
545 | + } |
546 | +} |
547 | |
548 | === modified file 'src/xvd_pulse.h' |
549 | --- src/xvd_pulse.h 2012-05-24 21:24:41 +0000 |
550 | +++ src/xvd_pulse.h 2016-02-02 19:54:56 +0000 |
551 | @@ -47,6 +47,11 @@ |
552 | void xvd_toggle_mute (XvdInstance *i); |
553 | |
554 | /** |
555 | + * Toggle mic mute. |
556 | + */ |
557 | +void xvd_toggle_mic_mute (XvdInstance *i); |
558 | + |
559 | +/** |
560 | * Returns a percentage volume (i.e. between 0 and 100, usable on notifications) |
561 | */ |
562 | gint xvd_get_readable_volume (const pa_cvolume *vol); |
Thanks for your work! Please note that xfce4-volumed-pulse is now maintained at https:/ /git.xfce. org/apps/ xfce4-volumed- pulse.
Your patch has been reviewed and merged there.