Merge lp:~cjcurran/indicator-sound/excessive-redraws-fix into lp:indicator-sound/fifth

Proposed by Conor Curran
Status: Merged
Approved by: Charles Kerr
Approved revision: 308
Merged at revision: 309
Proposed branch: lp:~cjcurran/indicator-sound/excessive-redraws-fix
Merge into: lp:indicator-sound/fifth
Diff against target: 151 lines (+30/-19)
1 file modified
src/metadata-widget.c (+30/-19)
To merge this branch: bzr merge lp:~cjcurran/indicator-sound/excessive-redraws-fix
Reviewer Review Type Date Requested Status
Charles Kerr (community) Approve
Review via email: mp+97703@code.launchpad.net

Description of the change

fixes attached bug

To post a comment you must log in.
Revision history for this message
Charles Kerr (charlesk) wrote :

Looks good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/metadata-widget.c'
--- src/metadata-widget.c 2012-03-03 19:12:05 +0000
+++ src/metadata-widget.c 2012-03-15 17:12:24 +0000
@@ -138,8 +138,7 @@
138 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);138 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
139 #else139 #else
140 hbox = gtk_hbox_new(FALSE, 0);140 hbox = gtk_hbox_new(FALSE, 0);
141 #endif141 #endif
142
143 142
144 priv->meta_data_h_box = hbox;143 priv->meta_data_h_box = hbox;
145 priv->current_height = 1;144 priv->current_height = 1;
@@ -270,6 +269,18 @@
270 G_OBJECT_CLASS (metadata_widget_parent_class)->finalize (object);269 G_OBJECT_CLASS (metadata_widget_parent_class)->finalize (object);
271}270}
272271
272/**
273* Make sure to only clear the album art only when it is not empty
274* Otherwise it will continuously call queue_draw after each empty call.
275*/
276static void
277clear_album_art (GtkImage* album_art)
278{
279 if (gtk_image_get_storage_type(album_art) != GTK_IMAGE_EMPTY){
280 gtk_image_clear (album_art);
281 }
282}
283
273284
274#if GTK_CHECK_VERSION(3, 0, 0) 285#if GTK_CHECK_VERSION(3, 0, 0)
275static void286static void
@@ -279,6 +290,7 @@
279{290{
280 *minimum_width = *natural_width = 200;291 *minimum_width = *natural_width = 200;
281}292}
293
282/**294/**
283 * We override the expose method to enable primitive drawing of the 295 * We override the expose method to enable primitive drawing of the
284 * empty album art image.296 * empty album art image.
@@ -298,15 +310,16 @@
298 return FALSE;310 return FALSE;
299 }311 }
300 312
301 if(priv->image_path->len > 0){313 if((guint)priv->image_path->len != 0){
302 if(g_string_equal(priv->image_path, priv->old_image_path) == FALSE ||314
315 if(g_string_equal (priv->image_path, priv->old_image_path) == FALSE ||
303 priv->theme_change_occured == TRUE){316 priv->theme_change_occured == TRUE){
304 priv->theme_change_occured = FALSE;317 priv->theme_change_occured = FALSE;
305 GdkPixbuf* pixbuf;318 GdkPixbuf* pixbuf;
306 pixbuf = gdk_pixbuf_new_from_file_at_size(priv->image_path->str, 60, 60, NULL);319 pixbuf = gdk_pixbuf_new_from_file_at_size(priv->image_path->str, 60, 60, NULL);
307320
308 if(GDK_IS_PIXBUF(pixbuf) == FALSE){321 if(GDK_IS_PIXBUF(pixbuf) == FALSE){
309 gtk_image_clear ( GTK_IMAGE(priv->album_art)); 322 clear_album_art (GTK_IMAGE(priv->album_art));
310 gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60);323 gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60);
311 draw_album_border (metadata, FALSE); 324 draw_album_border (metadata, FALSE);
312 draw_album_art_placeholder(metadata);325 draw_album_art_placeholder(metadata);
@@ -325,9 +338,10 @@
325 }338 }
326 return FALSE; 339 return FALSE;
327 }340 }
328 gtk_image_clear (GTK_IMAGE(priv->album_art)); 341 clear_album_art (GTK_IMAGE(priv->album_art));
342 g_string_erase (priv->old_image_path, 0, -1);
329 gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60);343 gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60);
330 draw_album_border (metadata, FALSE); 344 draw_album_border (metadata, FALSE);
331 draw_album_art_placeholder(metadata);345 draw_album_art_placeholder(metadata);
332 return FALSE;346 return FALSE;
333}347}
@@ -337,8 +351,7 @@
337metadata_widget_icon_triangle_draw_cb_gtk_3 (GtkWidget *widget,351metadata_widget_icon_triangle_draw_cb_gtk_3 (GtkWidget *widget,
338 cairo_t* cr,352 cairo_t* cr,
339 gpointer user_data)353 gpointer user_data)
340{354{
341
342 g_return_val_if_fail(IS_METADATA_WIDGET(user_data), FALSE);355 g_return_val_if_fail(IS_METADATA_WIDGET(user_data), FALSE);
343 MetadataWidget* meta = METADATA_WIDGET(user_data);356 MetadataWidget* meta = METADATA_WIDGET(user_data);
344 MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(meta); 357 MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(meta);
@@ -371,11 +384,8 @@
371 if (dbusmenu_menuitem_property_get_bool (priv->twin_item,384 if (dbusmenu_menuitem_property_get_bool (priv->twin_item,
372 DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){385 DBUSMENU_METADATA_MENUITEM_PLAYER_RUNNING)){
373 y += gdk_pixbuf_get_height (priv->icon_buf) / 3 + 3;386 y += gdk_pixbuf_get_height (priv->icon_buf) / 3 + 3;
374 //allocation.height/2.0 - (double)arrow_height/2.0;
375 cairo_set_line_width (cr, 1.0);387 cairo_set_line_width (cr, 1.0);
376388
377 //g_debug ("triangle drawing");
378
379 cairo_move_to (cr, x, y);389 cairo_move_to (cr, x, y);
380 cairo_line_to (cr, x, y + arrow_height);390 cairo_line_to (cr, x, y + arrow_height);
381 cairo_line_to (cr, x + arrow_width, y + (double)arrow_height/2.0);391 cairo_line_to (cr, x + arrow_width, y + (double)arrow_height/2.0);
@@ -417,7 +427,7 @@
417 pixbuf = gdk_pixbuf_new_from_file_at_size(priv->image_path->str, 60, 60, NULL);427 pixbuf = gdk_pixbuf_new_from_file_at_size(priv->image_path->str, 60, 60, NULL);
418428
419 if(GDK_IS_PIXBUF(pixbuf) == FALSE){429 if(GDK_IS_PIXBUF(pixbuf) == FALSE){
420 gtk_image_clear ( GTK_IMAGE(priv->album_art)); 430 clear_album_art (GTK_IMAGE(priv->album_art));
421 gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60);431 gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60);
422 draw_album_art_placeholder(metadata);432 draw_album_art_placeholder(metadata);
423 return FALSE;433 return FALSE;
@@ -434,7 +444,8 @@
434 }444 }
435 return FALSE; 445 return FALSE;
436 }446 }
437 gtk_image_clear (GTK_IMAGE(priv->album_art)); 447 clear_album_art (GTK_IMAGE(priv->album_art));
448 g_string_erase (priv->old_image_path, 0, -1);
438 gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60);449 gtk_widget_set_size_request(GTK_WIDGET(priv->album_art), 60, 60);
439 draw_album_art_placeholder(metadata);450 draw_album_art_placeholder(metadata);
440 return FALSE;451 return FALSE;
@@ -597,7 +608,7 @@
597608
598static void609static void
599draw_album_art_placeholder(GtkWidget *metadata)610draw_album_art_placeholder(GtkWidget *metadata)
600{ 611{
601 cairo_t *cr; 612 cairo_t *cr;
602 cr = gdk_cairo_create (gtk_widget_get_window (metadata));613 cr = gdk_cairo_create (gtk_widget_get_window (metadata));
603 GtkStyle *style;614 GtkStyle *style;
@@ -726,7 +737,7 @@
726 } 737 }
727 else if(g_ascii_strcasecmp(DBUSMENU_METADATA_MENUITEM_ARTURL, property) == 0){738 else if(g_ascii_strcasecmp(DBUSMENU_METADATA_MENUITEM_ARTURL, property) == 0){
728 g_string_erase(priv->image_path, 0, -1);739 g_string_erase(priv->image_path, 0, -1);
729 g_string_overwrite(priv->image_path, 0, g_variant_get_string (value, NULL));740 g_string_overwrite (priv->image_path, 0, g_variant_get_string (value, NULL));
730 gtk_widget_queue_draw(GTK_WIDGET(mitem));741 gtk_widget_queue_draw(GTK_WIDGET(mitem));
731 }742 }
732 else if (g_ascii_strcasecmp (DBUSMENU_METADATA_MENUITEM_PLAYER_NAME, property) == 0){743 else if (g_ascii_strcasecmp (DBUSMENU_METADATA_MENUITEM_PLAYER_NAME, property) == 0){
@@ -753,7 +764,7 @@
753 else{764 else{
754 gtk_widget_show (priv->meta_data_h_box); 765 gtk_widget_show (priv->meta_data_h_box);
755 }766 }
756 gtk_widget_queue_draw(GTK_WIDGET(self)); 767 gtk_widget_queue_draw(GTK_WIDGET(self));
757}768}
758769
759static void770static void
@@ -773,7 +784,7 @@
773 MetadataWidget* widg = METADATA_WIDGET(metadata);784 MetadataWidget* widg = METADATA_WIDGET(metadata);
774 MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(widg); 785 MetadataWidgetPrivate * priv = METADATA_WIDGET_GET_PRIVATE(widg);
775 priv->theme_change_occured = TRUE; 786 priv->theme_change_occured = TRUE;
776 gtk_widget_queue_draw(GTK_WIDGET(metadata)); 787 gtk_widget_queue_draw (GTK_WIDGET(metadata));
777}788}
778789
779static void 790static void

Subscribers

People subscribed via source and target branches