~ubuntu-branches/ubuntu/quantal/indicator-sound/quantal

« back to all changes in this revision

Viewing changes to src/volume-widget.c

  • Committer: Ken VanDine
  • Date: 2012-03-16 17:59:34 UTC
  • mfrom: (28.174.10)
  • mto: This revision was merged to the branch mainline in revision 110.
  • Revision ID: ken.vandine@canonical.com-20120316175934-90d5u1pg365513an
* New upstream release.
  - indicator-sound "Choose Playlist" menu item does nothing when using 
    Rhythmbox (LP: #952550)
  - crashed with SIGSEGV in g_strdup() (LP: #946607)
  - crashed with SIGABRT in pa_operation_unref() (LP: #944148)
  - crashed with signal 5 in g_type_create_instance() (LP: #921755)
  - slider on unmute resets volume (LP: #921065)
  - play controls not exposed in HUD (LP: #949032)
  - unity-panel-service at 100% cpu when opened /w rb without album 
    cover (LP: #806848)

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
                                              GtkScrollType scroll,
57
57
                                              gdouble       value,
58
58
                                              gpointer      user_data);
59
 
static gboolean volume_widget_value_changed_cb(GtkRange *range, gpointer user_data);
 
59
static void volume_widget_primary_clicked(GtkWidget *widget, gpointer user_data);
 
60
static void volume_widget_secondary_clicked(GtkWidget *widget, gpointer user_data);
60
61
static void volume_widget_slider_grabbed(GtkWidget *widget, gpointer user_data);
61
62
static void volume_widget_slider_released(GtkWidget *widget, gpointer user_data);
62
63
static void volume_widget_parent_changed (GtkWidget *widget, gpointer user_data);
93
94
  GtkWidget* volume_widget = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_volume_slider); 
94
95
  
95
96
  g_signal_connect(volume_widget, "change-value", G_CALLBACK(volume_widget_change_value_cb), self); 
96
 
  g_signal_connect(volume_widget, "value-changed", G_CALLBACK(volume_widget_value_changed_cb), self); 
 
97
  g_signal_connect(priv->ido_volume_slider, "primary-clicked", G_CALLBACK(volume_widget_primary_clicked), self);
 
98
  g_signal_connect(priv->ido_volume_slider, "secondary-clicked", G_CALLBACK(volume_widget_secondary_clicked), self);
97
99
  g_signal_connect(priv->ido_volume_slider, "slider-grabbed", G_CALLBACK(volume_widget_slider_grabbed), self);
98
100
  g_signal_connect(priv->ido_volume_slider, "slider-released", G_CALLBACK(volume_widget_slider_released), self);
99
101
 
213
215
  return FALSE;
214
216
}
215
217
 
216
 
/*
217
 
 We only want this callback to catch mouse icon press events
218
 
 which set the slider to 0 or 100. Ignore all other events.
219
 
*/ 
220
 
static gboolean
221
 
volume_widget_value_changed_cb (GtkRange *range, gpointer user_data)
222
 
{
223
 
 
224
 
  g_return_val_if_fail (IS_VOLUME_WIDGET (user_data), FALSE);
225
 
  VolumeWidget* mitem = VOLUME_WIDGET (user_data);
226
 
  VolumeWidgetPrivate * priv = VOLUME_WIDGET_GET_PRIVATE(mitem);
227
 
  GtkWidget *slider = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_volume_slider);
228
 
  gdouble current_value =  CLAMP(gtk_range_get_value(GTK_RANGE(slider)), 0, 100);
229
 
 
230
 
  gboolean mute = g_variant_get_boolean (dbusmenu_menuitem_property_get_variant (priv->twin_item,
231
 
                                                                                 DBUSMENU_VOLUME_MENUITEM_MUTE));
232
 
  if((current_value == 0 && mute == FALSE) || current_value == 100){
233
 
/*
234
 
    g_debug ("value changed - actual set %f", current_value);
235
 
*/
236
 
    volume_widget_update (mitem, current_value, "value-changed");
237
 
  }
238
 
 
239
 
  return FALSE;
240
 
}
241
 
 
242
218
void 
243
219
volume_widget_update(VolumeWidget* self, gdouble update, gchar* label)
244
220
{
253
229
  dbusmenu_menuitem_handle_event (priv->twin_item, source, new_volume, 0);
254
230
}
255
231
 
 
232
static void
 
233
volume_widget_update_from_scale (VolumeWidget *self)
 
234
{
 
235
  g_return_if_fail (IS_VOLUME_WIDGET (self));
 
236
 
 
237
  VolumeWidgetPrivate * priv = VOLUME_WIDGET_GET_PRIVATE(self);
 
238
  GtkWidget *slider = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_volume_slider);
 
239
  const gdouble current_value = CLAMP(gtk_range_get_value(GTK_RANGE(slider)), 0, 100);
 
240
  g_debug ("%s - setting value to %.0f", G_STRFUNC, current_value);
 
241
  volume_widget_update (self, current_value, "value-changed");
 
242
}
 
243
 
 
244
static void
 
245
volume_widget_primary_clicked (GtkWidget *widget G_GNUC_UNUSED, gpointer user_data)
 
246
{
 
247
  volume_widget_update_from_scale (VOLUME_WIDGET(user_data));
 
248
}
 
249
 
 
250
static void
 
251
volume_widget_secondary_clicked(GtkWidget *widget, gpointer user_data)
 
252
{
 
253
  volume_widget_update_from_scale (VOLUME_WIDGET(user_data));
 
254
}
 
255
 
256
256
GtkWidget*
257
257
volume_widget_get_ido_slider(VolumeWidget* self)
258
258
{