~ubuntu-branches/ubuntu/natty/sflphone/natty

« back to all changes in this revision

Viewing changes to sflphone-client-gnome/src/sliders.c

  • Committer: Bazaar Package Importer
  • Author(s): Francois Marier
  • Date: 2010-12-24 16:33:55 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20101224163355-tkvvikqxbrbav6up
Tags: 0.9.11-1
* New upstream release
* Add new build dependencies on libwebkit-dev and libyaml-dev

* Bump Standards-Version up to 3.9.1
* Bump debhelper compatibility to 8
* Patch another typo in the upstream code (lintian notice)

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
// icons
41
41
GtkWidget * images[2][4];
42
42
enum device_t {
43
 
  SPEAKER = 0,
44
 
  MIKE,
45
 
  DEVICE_COUNT
 
43
    SPEAKER = 0,
 
44
    MIKE,
 
45
    DEVICE_COUNT
46
46
} ;
47
47
 
48
48
enum volume_t {
49
 
  MUTED = 0,
50
 
  VOL25,
51
 
  VOL50,
52
 
  VOL75
 
49
    MUTED = 0,
 
50
    VOL25,
 
51
    VOL50,
 
52
    VOL75
53
53
} ;
54
54
 
55
55
guint toggledConnId[2]; // The button toggled signal connection ID
58
58
void
59
59
update_icons (int dev)
60
60
{
61
 
  float val = gtk_range_get_value(GTK_RANGE(slider[dev]));
62
 
  if(button[dev])
63
 
  {
64
 
    int icon = MUTED;
65
 
    if(val == 0)
66
 
      icon = MUTED;
67
 
    else if( val < 0.33)
68
 
      icon = VOL25;
69
 
    else if( val < 0.66)
70
 
      icon = VOL50;
71
 
    else if( val <= 1)
72
 
      icon = VOL75;
73
 
    gtk_button_set_image(GTK_BUTTON(button[dev]), GTK_WIDGET(images[dev][icon]));
74
 
  }
 
61
    float val = gtk_range_get_value (GTK_RANGE (slider[dev]));
 
62
 
 
63
    if (button[dev]) {
 
64
        int icon = MUTED;
 
65
 
 
66
        if (val == 0)
 
67
            icon = MUTED;
 
68
        else if (val < 0.33)
 
69
            icon = VOL25;
 
70
        else if (val < 0.66)
 
71
            icon = VOL50;
 
72
        else if (val <= 1)
 
73
            icon = VOL75;
 
74
 
 
75
        gtk_button_set_image (GTK_BUTTON (button[dev]), GTK_WIDGET (images[dev][icon]));
 
76
    }
75
77
}
76
78
 
77
79
void
78
 
slider_moved(GtkRange* range, gchar* device)
 
80
slider_moved (GtkRange* range, gchar* device)
79
81
{
80
 
  gdouble value = gtk_range_get_value(range);
81
 
  DEBUG("Volume changed for %s: %f ", device, value);
82
 
  dbus_set_volume(device, value);
83
 
  if(strcmp(device, "speaker") == 0)
84
 
    update_icons(SPEAKER);
85
 
  else
86
 
    update_icons(MIKE);
 
82
    gdouble value = gtk_range_get_value (range);
 
83
    DEBUG ("Volume changed for %s: %f ", device, value);
 
84
    dbus_set_volume (device, value);
 
85
 
 
86
    if (strcmp (device, "speaker") == 0)
 
87
        update_icons (SPEAKER);
 
88
    else
 
89
        update_icons (MIKE);
87
90
}
88
91
 
89
92
static void
90
 
mute_cb( GtkWidget *widget, gchar*  device )
 
93
mute_cb (GtkWidget *widget, gchar*  device)
91
94
{
92
 
  int dev;
93
 
  if(strcmp(device, "speaker") == 0)
94
 
    dev = SPEAKER;
95
 
  else
96
 
    dev = MIKE;
97
 
 
98
 
  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
99
 
  { // Save value
100
 
    DEBUG("Save");
101
 
    value[dev] = gtk_range_get_value(GTK_RANGE(slider[dev]));
102
 
    dbus_set_volume(device, 0);
103
 
  }
104
 
  else
105
 
  { //Restore value
106
 
    DEBUG("Restore");
107
 
    dbus_set_volume(device, value[dev]);
108
 
  }
109
 
  update_icons (dev);
 
95
    int dev;
 
96
 
 
97
    if (strcmp (device, "speaker") == 0)
 
98
        dev = SPEAKER;
 
99
    else
 
100
        dev = MIKE;
 
101
 
 
102
    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) { // Save value
 
103
        DEBUG ("Save");
 
104
        value[dev] = gtk_range_get_value (GTK_RANGE (slider[dev]));
 
105
        dbus_set_volume (device, 0);
 
106
    } else { //Restore value
 
107
        DEBUG ("Restore");
 
108
        dbus_set_volume (device, value[dev]);
 
109
    }
 
110
 
 
111
    update_icons (dev);
110
112
}
111
113
 
112
114
void
113
 
set_slider(const gchar * device, gdouble newval)
 
115
set_slider (const gchar * device, gdouble newval)
114
116
{
115
 
  int dev;
116
 
  if(strcmp(device, "speaker") == 0)
117
 
    dev = SPEAKER;
118
 
  else
119
 
    dev = MIKE;
120
 
 
121
 
  gtk_signal_handler_block(GTK_OBJECT(slider[dev]), movedConnId[dev]);
122
 
  gtk_range_set_value(GTK_RANGE(slider[dev]), newval);
123
 
  gtk_signal_handler_unblock(slider[dev], movedConnId[dev]);
124
 
 
125
 
  gtk_signal_handler_block(GTK_OBJECT(button[dev]),toggledConnId[dev]);
126
 
  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button[dev]), (newval == 0 ? TRUE: FALSE));
127
 
  gtk_signal_handler_unblock(button[dev], toggledConnId[dev]);
128
 
 
129
 
  update_icons (dev);
 
117
    int dev;
 
118
 
 
119
    if (strcmp (device, "speaker") == 0)
 
120
        dev = SPEAKER;
 
121
    else
 
122
        dev = MIKE;
 
123
 
 
124
    gtk_signal_handler_block (GTK_OBJECT (slider[dev]), movedConnId[dev]);
 
125
    gtk_range_set_value (GTK_RANGE (slider[dev]), newval);
 
126
    gtk_signal_handler_unblock (slider[dev], movedConnId[dev]);
 
127
 
 
128
    gtk_signal_handler_block (GTK_OBJECT (button[dev]),toggledConnId[dev]);
 
129
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button[dev]), (newval == 0 ? TRUE: FALSE));
 
130
    gtk_signal_handler_unblock (button[dev], toggledConnId[dev]);
 
131
 
 
132
    update_icons (dev);
130
133
}
131
134
 
132
135
/** Generates the speaker slider and mute button */
133
136
GtkWidget *
134
 
create_slider(const gchar * device)
 
137
create_slider (const gchar * device)
135
138
{
136
 
  // Increment the references count for the images
137
 
  // When the image is removed from a button, if the ref count = 0, then it is destroyed
138
 
  // which we don't want ;)
139
 
 
140
 
  GtkWidget * ret;
141
 
  int dev=0;
142
 
 
143
 
  if(strcmp(device, "speaker") == 0)
144
 
  {
145
 
    dev = SPEAKER;
146
 
    images[SPEAKER][MUTED] = gtk_image_new_from_file( ICONS_DIR "/speaker.svg");
147
 
    images[SPEAKER][VOL25] = gtk_image_new_from_file( ICONS_DIR "/speaker_25.svg");
148
 
    images[SPEAKER][VOL50] = gtk_image_new_from_file( ICONS_DIR "/speaker_50.svg");
149
 
    images[SPEAKER][VOL75] = gtk_image_new_from_file( ICONS_DIR "/speaker_75.svg");
150
 
          g_object_ref(images[SPEAKER][MUTED]);
151
 
          g_object_ref(images[SPEAKER][VOL25]);
152
 
          g_object_ref(images[SPEAKER][VOL50]);
153
 
          g_object_ref(images[SPEAKER][VOL75]);
154
 
  }
155
 
  else if (strcmp(device, "mic") == 0)
156
 
  {
157
 
    dev = MIKE;
158
 
    images[MIKE][MUTED] = gtk_image_new_from_file( ICONS_DIR "/mic.svg");
159
 
    images[MIKE][VOL25] = gtk_image_new_from_file( ICONS_DIR "/mic_25.svg");
160
 
    images[MIKE][VOL50] = gtk_image_new_from_file( ICONS_DIR "/mic_50.svg");
161
 
    images[MIKE][VOL75] = gtk_image_new_from_file( ICONS_DIR "/mic_75.svg");
162
 
          g_object_ref(images[MIKE][MUTED]);
163
 
          g_object_ref(images[MIKE][VOL25]);
164
 
          g_object_ref(images[MIKE][VOL50]);
165
 
          g_object_ref(images[MIKE][VOL75]);
166
 
  }
167
 
 
168
 
  ret = gtk_hbox_new ( FALSE /*homogeneous*/, 5 /*spacing*/);
169
 
  gtk_container_set_border_width (GTK_CONTAINER(ret), 5);
170
 
  
 
139
    // Increment the references count for the images
 
140
    // When the image is removed from a button, if the ref count = 0, then it is destroyed
 
141
    // which we don't want ;)
 
142
 
 
143
    GtkWidget * ret;
 
144
    int dev=0;
 
145
 
 
146
    if (strcmp (device, "speaker") == 0) {
 
147
        dev = SPEAKER;
 
148
        images[SPEAKER][MUTED] = gtk_image_new_from_file (ICONS_DIR "/speaker.svg");
 
149
        images[SPEAKER][VOL25] = gtk_image_new_from_file (ICONS_DIR "/speaker_25.svg");
 
150
        images[SPEAKER][VOL50] = gtk_image_new_from_file (ICONS_DIR "/speaker_50.svg");
 
151
        images[SPEAKER][VOL75] = gtk_image_new_from_file (ICONS_DIR "/speaker_75.svg");
 
152
        g_object_ref (images[SPEAKER][MUTED]);
 
153
        g_object_ref (images[SPEAKER][VOL25]);
 
154
        g_object_ref (images[SPEAKER][VOL50]);
 
155
        g_object_ref (images[SPEAKER][VOL75]);
 
156
    } else if (strcmp (device, "mic") == 0) {
 
157
        dev = MIKE;
 
158
        images[MIKE][MUTED] = gtk_image_new_from_file (ICONS_DIR "/mic.svg");
 
159
        images[MIKE][VOL25] = gtk_image_new_from_file (ICONS_DIR "/mic_25.svg");
 
160
        images[MIKE][VOL50] = gtk_image_new_from_file (ICONS_DIR "/mic_50.svg");
 
161
        images[MIKE][VOL75] = gtk_image_new_from_file (ICONS_DIR "/mic_75.svg");
 
162
        g_object_ref (images[MIKE][MUTED]);
 
163
        g_object_ref (images[MIKE][VOL25]);
 
164
        g_object_ref (images[MIKE][VOL50]);
 
165
        g_object_ref (images[MIKE][VOL75]);
 
166
    }
 
167
 
 
168
    ret = gtk_hbox_new (FALSE /*homogeneous*/, 5 /*spacing*/);
 
169
    gtk_container_set_border_width (GTK_CONTAINER (ret), 5);
 
170
 
171
171
#if GTK_CHECK_VERSION(2,12,0)
172
 
  if( strcmp( device , "speaker") == 0 )
173
 
    gtk_widget_set_tooltip_text( GTK_WIDGET( ret ), _("Speakers volume"));
174
 
  else
175
 
    gtk_widget_set_tooltip_text( GTK_WIDGET( ret ), _("Mic volume"));
 
172
 
 
173
    if (strcmp (device , "speaker") == 0)
 
174
        gtk_widget_set_tooltip_text (GTK_WIDGET (ret), _ ("Speakers volume"));
 
175
    else
 
176
        gtk_widget_set_tooltip_text (GTK_WIDGET (ret), _ ("Mic volume"));
 
177
 
176
178
#endif
177
179
 
178
 
  button[dev] = gtk_toggle_button_new();
179
 
  gtk_box_pack_start (GTK_BOX (ret), button[dev], FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
180
 
  toggledConnId[dev] = g_signal_connect (G_OBJECT (button[dev]), "toggled",
181
 
                    G_CALLBACK (mute_cb), (gpointer)device);
182
 
 
183
 
  slider[dev] = gtk_hscale_new_with_range(0, 1, 0.05);
184
 
  gtk_scale_set_draw_value(GTK_SCALE(slider[dev]), FALSE);
185
 
  //gtk_range_set_update_policy(GTK_RANGE(slider), GTK_UPDATE_DELAYED);
186
 
  movedConnId[dev] = g_signal_connect (G_OBJECT (slider[dev]), "value_changed",
187
 
                    G_CALLBACK (slider_moved), (gpointer)device);
188
 
  gtk_box_pack_start (GTK_BOX (ret), slider[dev], TRUE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
189
 
 
190
 
  set_slider(device, dbus_get_volume(device));
191
 
 
192
 
  return ret;
 
180
    button[dev] = gtk_toggle_button_new();
 
181
    gtk_box_pack_start (GTK_BOX (ret), button[dev], FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
 
182
    toggledConnId[dev] = g_signal_connect (G_OBJECT (button[dev]), "toggled",
 
183
                                           G_CALLBACK (mute_cb), (gpointer) device);
 
184
 
 
185
    slider[dev] = gtk_hscale_new_with_range (0, 1, 0.05);
 
186
    gtk_scale_set_draw_value (GTK_SCALE (slider[dev]), FALSE);
 
187
    //gtk_range_set_update_policy(GTK_RANGE(slider), GTK_UPDATE_DELAYED);
 
188
    movedConnId[dev] = g_signal_connect (G_OBJECT (slider[dev]), "value_changed",
 
189
                                         G_CALLBACK (slider_moved), (gpointer) device);
 
190
    gtk_box_pack_start (GTK_BOX (ret), slider[dev], TRUE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
 
191
 
 
192
    set_slider (device, dbus_get_volume (device));
 
193
 
 
194
    return ret;
193
195
}
194
196