aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuke Yelavich <luke.yelavich@canonical.com>2011-02-22 11:32:51 +1100
committerLuke Yelavich <luke.yelavich@canonical.com>2011-02-22 11:32:51 +1100
commit3cf118604d0ed973ac4cad4499ac8bed8d000360 (patch)
tree4e1e31d13c1ac538beff9c0f46059dc8fb2955a1 /src
parentfec38bea8091cc778bdbb236ed4c854b9cdcb34d (diff)
downloadayatana-indicator-sound-3cf118604d0ed973ac4cad4499ac8bed8d000360.tar.gz
ayatana-indicator-sound-3cf118604d0ed973ac4cad4499ac8bed8d000360.tar.bz2
ayatana-indicator-sound-3cf118604d0ed973ac4cad4499ac8bed8d000360.zip
Add accessible description support
Diffstat (limited to 'src')
-rw-r--r--src/indicator-sound.c18
-rw-r--r--src/volume-widget.c23
-rw-r--r--src/volume-widget.h3
3 files changed, 40 insertions, 4 deletions
diff --git a/src/indicator-sound.c b/src/indicator-sound.c
index 2466550..4980ab8 100644
--- a/src/indicator-sound.c
+++ b/src/indicator-sound.c
@@ -20,6 +20,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <math.h>
#include <glib.h>
#include <glib-object.h>
+#include <glib/gi18n.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <libdbusmenu-gtk/menu.h>
@@ -66,6 +67,7 @@ G_DEFINE_TYPE (IndicatorSound, indicator_sound, INDICATOR_OBJECT_TYPE);
static GtkLabel * get_label (IndicatorObject * io);
static GtkImage * get_icon (IndicatorObject * io);
static GtkMenu * get_menu (IndicatorObject * io);
+static const gchar * get_accessible_desc (IndicatorObject * io);
static void indicator_sound_scroll (IndicatorObject* io,
gint delta,
IndicatorScrollDirection direction);
@@ -121,6 +123,7 @@ indicator_sound_class_init (IndicatorSoundClass *klass)
io_class->get_label = get_label;
io_class->get_image = get_icon;
io_class->get_menu = get_menu;
+ io_class->get_accessible_desc = get_accessible_desc;
io_class->scroll = indicator_sound_scroll;
}
@@ -214,6 +217,19 @@ get_menu (IndicatorObject * io)
return GTK_MENU(menu);
}
+static const gchar *
+get_accessible_desc (IndicatorObject * io)
+{
+ IndicatorSoundPrivate* priv = INDICATOR_SOUND_GET_PRIVATE(io);
+
+ if (priv->volume_widget != NULL){
+ return g_strdup_printf(_("Volume (%'.0f%%)"), volume_widget_get_current_volume(priv->volume_widget));
+ }
+
+ return NULL;
+}
+
+
static void
connection_changed (IndicatorServiceManager * sm,
gboolean connected,
@@ -389,8 +405,8 @@ new_volume_slider_widget(DbusmenuMenuitem * newitem,
g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE);
g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE);
- volume_widget = volume_widget_new (newitem);
io = g_object_get_data (G_OBJECT (client), "indicator");
+ volume_widget = volume_widget_new (newitem, io);
IndicatorSoundPrivate* priv = INDICATOR_SOUND_GET_PRIVATE(INDICATOR_SOUND (io));
priv->volume_widget = volume_widget;
diff --git a/src/volume-widget.c b/src/volume-widget.c
index ceebec5..be97994 100644
--- a/src/volume-widget.c
+++ b/src/volume-widget.c
@@ -37,6 +37,7 @@ struct _VolumeWidgetPrivate
DbusmenuMenuitem* twin_item;
GtkWidget* ido_volume_slider;
gboolean grabbed;
+ IndicatorObject* indicator;
};
#define VOLUME_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VOLUME_WIDGET_TYPE, VolumeWidgetPrivate))
@@ -137,6 +138,14 @@ volume_widget_property_update( DbusmenuMenuitem* item, gchar* property,
gdouble update = g_variant_get_double (value);
//g_debug("volume-widget - update level with value %f", update);
gtk_range_set_value(range, update);
+
+ GList *entry = indicator_object_get_entries(priv->indicator);
+ g_signal_emit(G_OBJECT(priv->indicator),
+ INDICATOR_OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE_ID,
+ 0,
+ entry->data,
+ TRUE);
+ g_list_free(entry);
}
}
}
@@ -156,6 +165,14 @@ volume_widget_set_twin_item(VolumeWidget* self,
GtkWidget *slider = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_volume_slider);
GtkRange *range = (GtkRange*)slider;
gtk_range_set_value(range, initial_level);
+
+ GList *entry = indicator_object_get_entries(priv->indicator);
+ g_signal_emit(G_OBJECT(priv->indicator),
+ INDICATOR_OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE_ID,
+ 0,
+ entry->data,
+ TRUE);
+ g_list_free(entry);
}
static gboolean
@@ -251,10 +268,12 @@ volume_widget_get_current_volume ( GtkWidget *widget )
* volume_widget_new:
* @returns: a new #VolumeWidget.
**/
-GtkWidget*
-volume_widget_new(DbusmenuMenuitem *item)
+GtkWidget*
+volume_widget_new(DbusmenuMenuitem *item, IndicatorObject* io)
{
GtkWidget* widget = g_object_new(VOLUME_WIDGET_TYPE, NULL);
+ VolumeWidgetPrivate* priv = VOLUME_WIDGET_GET_PRIVATE(VOLUME_WIDGET(widget));
+ priv->indicator = io;
volume_widget_set_twin_item((VolumeWidget*)widget, item);
return widget;
}
diff --git a/src/volume-widget.h b/src/volume-widget.h
index 072cfde..50ef377 100644
--- a/src/volume-widget.h
+++ b/src/volume-widget.h
@@ -22,6 +22,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <glib.h>
#include <glib-object.h>
#include <libdbusmenu-gtk/menuitem.h>
+#include <libindicator/indicator-object.h>
G_BEGIN_DECLS
@@ -44,7 +45,7 @@ struct _VolumeWidget {
};
GType volume_widget_get_type (void) G_GNUC_CONST;
-GtkWidget* volume_widget_new(DbusmenuMenuitem* twin_item);
+GtkWidget* volume_widget_new(DbusmenuMenuitem *item, IndicatorObject* io);
GtkWidget* volume_widget_get_ido_slider(VolumeWidget* self);
void volume_widget_update(VolumeWidget* self, gdouble update);
void volume_widget_tidy_up (GtkWidget *widget);