diff options
author | Conor Curran <conor.curran@canonical.com> | 2010-03-12 12:26:49 +0000 |
---|---|---|
committer | Conor Curran <conor.curran@canonical.com> | 2010-03-12 12:26:49 +0000 |
commit | e469855fa9968453f83dbce92fee3ec381a5d2bd (patch) | |
tree | d2bfb502acb93d5e98d55539e6379d659869c010 /src/indicator-sound.c | |
parent | 2431bde2e07bab60b949e79931d236aeb972bfcf (diff) | |
parent | 60f21441622d5b5c6d504cfc95872f4f12633593 (diff) | |
download | ayatana-indicator-sound-e469855fa9968453f83dbce92fee3ec381a5d2bd.tar.gz ayatana-indicator-sound-e469855fa9968453f83dbce92fee3ec381a5d2bd.tar.bz2 ayatana-indicator-sound-e469855fa9968453f83dbce92fee3ec381a5d2bd.zip |
fix for clear looks seg fault
Diffstat (limited to 'src/indicator-sound.c')
-rw-r--r-- | src/indicator-sound.c | 66 |
1 files changed, 30 insertions, 36 deletions
diff --git a/src/indicator-sound.c b/src/indicator-sound.c index aecbe7a..105f00b 100644 --- a/src/indicator-sound.c +++ b/src/indicator-sound.c @@ -40,7 +40,6 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include "dbus-shared-names.h" #include "sound-service-client.h" #include "common-defs.h" -#include "sound-service-marshal.h" // GObject Boiler plate #define INDICATOR_SOUND_TYPE (indicator_sound_get_type ()) @@ -170,8 +169,12 @@ indicator_sound_dispose (GObject *object) self->service = NULL; } g_hash_table_destroy(volume_states); - g_list_foreach (blocked_animation_list, (GFunc)g_object_unref, NULL); - g_list_free(blocked_animation_list); + + if(blocked_animation_list != NULL){ + g_list_foreach (blocked_animation_list, (GFunc)g_object_unref, NULL); + g_list_free(blocked_animation_list); + } + G_OBJECT_CLASS (indicator_sound_parent_class)->dispose (object); return; } @@ -323,32 +326,22 @@ Only called at startup. */ static void prepare_blocked_animation() { - GError* error= NULL; - int i; - gchar* blocked_name = g_hash_table_lookup(volume_states, GINT_TO_POINTER(STATE_MUTED_WHILE_INPUT)); gchar* muted_name = g_hash_table_lookup(volume_states, GINT_TO_POINTER(STATE_MUTED)); - GtkIconTheme* theme = gtk_icon_theme_get_default(); - GdkPixbuf* mute_buf = gtk_icon_theme_load_icon(theme, - muted_name, - 22, - GTK_ICON_LOOKUP_GENERIC_FALLBACK, - &error); - if(error != NULL){ - g_error("indicator-sound : prepare_blocked_animation - %s", error->message); - g_error_free(error); - return; - } - - GdkPixbuf* blocked_buf = gtk_icon_theme_load_icon(theme, blocked_name, - 22, - GTK_ICON_LOOKUP_GENERIC_FALLBACK, - &error); - if(error != NULL){ - g_error("indicator-sound : prepare_blocked_animation - %s", error->message); - g_error_free(error); - return; - } + + GtkImage* temp_image = indicator_image_helper(muted_name); + GdkPixbuf* mute_buf = gtk_image_get_pixbuf(temp_image); + + temp_image = indicator_image_helper(blocked_name); + GdkPixbuf* blocked_buf = gtk_image_get_pixbuf(temp_image); + + int i; + + if(mute_buf == NULL || blocked_buf == NULL){ + g_debug("Don bother with the animation, the theme aint got the goods"); + return; + } + // sample 22 snapshots - range : 0-256 for(i = 0; i < 23; i++) { @@ -356,7 +349,6 @@ static void prepare_blocked_animation() gdk_pixbuf_get_width(mute_buf), gdk_pixbuf_get_height(mute_buf), 0, 0, 1, 1, GDK_INTERP_BILINEAR, MIN(255, i * 11)); - g_debug("creating blocking animation - alpha value = %i", MIN(255, i * 11)); blocked_animation_list = g_list_append(blocked_animation_list, gdk_pixbuf_copy(blocked_buf)); } } @@ -482,14 +474,16 @@ static void catch_signal_sink_input_while_muted(DBusGProxy * proxy, gboolean blo { g_debug("signal caught - sink input while muted with value %i", block_value); if (block_value == 1 && animation_id == 0 ) { - // We can assume we are in the muted state ! - gchar* image_name = g_hash_table_lookup(volume_states, GINT_TO_POINTER(STATE_MUTED_WHILE_INPUT)); - GtkImage * tempimage = indicator_image_helper(image_name); - gtk_image_set_from_pixbuf(speaker_image, gtk_image_get_pixbuf(tempimage)); - g_object_ref_sink(tempimage); - - blocked_iter = blocked_animation_list; - animation_id = g_timeout_add_seconds(1, fade_back_to_mute_image, NULL); + if(blocked_animation_list != NULL) + { + gchar* image_name = g_hash_table_lookup(volume_states, GINT_TO_POINTER(STATE_MUTED_WHILE_INPUT)); + GtkImage * tempimage = indicator_image_helper(image_name); + gtk_image_set_from_pixbuf(speaker_image, gtk_image_get_pixbuf(tempimage)); + g_object_ref_sink(tempimage); + + blocked_iter = blocked_animation_list; + animation_id = g_timeout_add_seconds(1, fade_back_to_mute_image, NULL); + } } } |