Author: dannym Date: 2009-01-11 19:33:42 +0000 (Sun, 11 Jan 2009) New Revision: 29170
Modified: xfce4-mixer/branches/xfce_4_4/include/vc.h xfce4-mixer/branches/xfce_4_4/lib/vc_alsa.c xfce4-mixer/branches/xfce_4_4/src/main.c Log: try to add support for detecting the unloading of an ALSA module (bug# 3374 etc). Modified: xfce4-mixer/branches/xfce_4_4/include/vc.h =================================================================== --- xfce4-mixer/branches/xfce_4_4/include/vc.h 2009-01-11 17:59:09 UTC (rev 29169) +++ xfce4-mixer/branches/xfce_4_4/include/vc.h 2009-01-11 19:33:42 UTC (rev 29170) @@ -31,8 +31,13 @@ /* this is the volume changer stuff */ -typedef void (*volchanger_callback_t)(char const *which, void *privdata); +typedef enum { + VE_VALUE_CHANGED, + VE_REMOVED, +} volchanger_callback_event_t; +typedef void (*volchanger_callback_t)(char const *which, volchanger_callback_event_t kind, void *privdata); + typedef enum { CT_SLIDER = 0, CT_ONOFF = 1, @@ -56,6 +61,10 @@ void (*vc_set_switch)(char const *which, gboolean b); char const *(*vc_get_device)(void); void (*vc_handle_events)(void); + void (*__dummy_1)(void); + void (*__dummy_2)(void); + void (*__dummy_3)(void); + void (*__dummy_4)(void); } volchanger_t; typedef struct { @@ -66,11 +75,15 @@ /* only for type == CT_SELECT: */ GList *choices; /* list item = volchoice_t */ + void* __dummy_1; + void* __dummy_2; } volcontrol_t; typedef struct { - gchar* name; - gchar* displayname; + gchar* name; + gchar* displayname; + void* __dummy_1; + int __dummy_2; } volchoice_t; /* choices entry for select */ void register_vc(volchanger_t *vc); @@ -122,7 +135,11 @@ vc_get_switch: vc_get_switch, \ vc_set_switch: vc_set_switch, \ vc_get_device: vc_get_device, \ - vc_handle_events: vc_handle_events \ + vc_handle_events: vc_handle_events, \ + __dummy_1: 0, \ + __dummy_2: 0, \ + __dummy_3: 0, \ + __dummy_4: 0 \ }; \ \ int register_##a(void) \ Modified: xfce4-mixer/branches/xfce_4_4/lib/vc_alsa.c =================================================================== --- xfce4-mixer/branches/xfce_4_4/lib/vc_alsa.c 2009-01-11 17:59:09 UTC (rev 29169) +++ xfce4-mixer/branches/xfce_4_4/lib/vc_alsa.c 2009-01-11 19:33:42 UTC (rev 29170) @@ -499,15 +499,27 @@ static int alsa_cb(snd_mixer_t *ctl, unsigned int mask, snd_mixer_elem_t *elem) { const char *which; + volchanger_callback_event_t event; + g_warning ("alsa_cb\n"); + + if (elem && snd_mixer_elem_get_type (elem) == SND_MIXER_ELEM_SIMPLE) { which = snd_mixer_selem_get_name (elem); } else { which = NULL; } - + + if (mask == SND_CTL_EVENT_MASK_REMOVE) { + event = VE_REMOVED; + } else if (mask & (SND_CTL_EVENT_MASK_VALUE | SND_CTL_EVENT_MASK_INFO)) { + event = VE_VALUE_CHANGED; + } else { + return 0; + } + if (mycb) - (*mycb) (which, mydata); + (*mycb) (which, event, mydata); return 0; } @@ -526,6 +538,7 @@ snd_mixer_set_callback_private (handle, data); snd_mixer_set_callback (handle, alsa_cb); + /* snd_mixer_elem_set_callback(elem, melem_event); */ } static void vc_close_device() Modified: xfce4-mixer/branches/xfce_4_4/src/main.c =================================================================== --- xfce4-mixer/branches/xfce_4_4/src/main.c 2009-01-11 17:59:09 UTC (rev 29169) +++ xfce4-mixer/branches/xfce_4_4/src/main.c 2009-01-11 19:33:42 UTC (rev 29170) @@ -27,7 +27,7 @@ static guint src; -static void vol_changed_cb (char const *vcname, void *privdata) +static void vol_changed_cb (char const *vcname, volchanger_callback_event_t kind, void *privdata) { if (mixer_window) { xfce_mixer_window_refresh_value (XFCE_MIXER_WINDOW (mixer_window), vcname); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits