← Back to team overview

ayatana-commits team mailing list archive

Re: [Merge] lp:~bratsche/appmenu-gtk/icons into lp:appmenu-gtk

 

Review: Approve
The only thing that I'd say is that for the bug, I think we need to
handle bitmap items as well.  That can be done with using
dbusmenu_menuitem_property_set_image().  I'm not sure if we want all
that in one merge request or not, I'll let you choose :)

  review approve

On Sat, 2010-07-03 at 13:31 +0000, Cody Russell wrote:
> Cody Russell has proposed merging lp:~bratsche/appmenu-gtk/icons into lp:appmenu-gtk.
> 
> Requested reviews:
>   Canonical Desktop Experience Team (canonical-dx-team)
> Related bugs:
>   #598528 doesn't display icons
>   https://bugs.launchpad.net/bugs/598528
> 
> differences between files attachment (review-diff.txt)
> === modified file 'src/bridge.c'
> --- src/bridge.c	2010-07-02 18:03:46 +0000
> +++ src/bridge.c	2010-07-03 13:31:27 +0000
> @@ -372,6 +372,93 @@
>      }
>  }
>  
> +static gboolean
> +should_show_image (GtkImage *image)
> +{
> +  GtkWidget *item;
> +
> +  item = gtk_widget_get_ancestor (GTK_WIDGET (image),
> +                                  GTK_TYPE_IMAGE_MENU_ITEM);
> +
> +  if (item)
> +    {
> +      GtkSettings *settings;
> +      gboolean gtk_menu_images;
> +
> +      settings = gtk_widget_get_settings (item);
> +
> +      g_object_get (settings, "gtk-menu-images", &gtk_menu_images, NULL);
> +
> +      if (gtk_menu_images)
> +        return TRUE;
> +
> +      return gtk_image_menu_item_get_always_show_image (GTK_IMAGE_MENU_ITEM (item));
> +    }
> +
> +  return FALSE;
> +}
> +
> +static gboolean
> +update_stock_item (DbusmenuMenuitem *menuitem,
> +                   GtkWidget        *widget)
> +{
> +  GtkStockItem stock;
> +  GtkImage *image;
> +
> +  g_return_val_if_fail (GTK_IS_IMAGE (widget), FALSE);
> +
> +  image = GTK_IMAGE (widget);
> +
> +  if (gtk_image_get_storage_type (image) != GTK_IMAGE_STOCK)
> +    return FALSE;
> +
> +  gtk_stock_lookup (image->data.stock.stock_id, &stock);
> +
> +  if (should_show_image (image))
> +    dbusmenu_menuitem_property_set (menuitem,
> +                                    DBUSMENU_MENUITEM_PROP_ICON_NAME,
> +                                    image->data.stock.stock_id);
> +  else
> +    dbusmenu_menuitem_property_remove (menuitem,
> +                                       DBUSMENU_MENUITEM_PROP_ICON_NAME);
> +
> +  const gchar * label = dbusmenu_menuitem_property_get (menuitem,
> +                                                        DBUSMENU_MENUITEM_PROP_LABEL);
> +
> +  if (stock.label != NULL && label != NULL)
> +    {
> +      dbusmenu_menuitem_property_set (menuitem,
> +                                      DBUSMENU_MENUITEM_PROP_LABEL,
> +                                      stock.label);
> +
> +      return TRUE;
> +    }
> +
> +  return FALSE;
> +}
> +
> +static void
> +update_icon_name (DbusmenuMenuitem *menuitem,
> +                  GtkWidget        *widget)
> +{
> +  GtkImage *image;
> +
> +  g_return_if_fail (GTK_IS_IMAGE (widget));
> +
> +  image = GTK_IMAGE (widget);
> +
> +  if (gtk_image_get_storage_type (image) != GTK_IMAGE_ICON_NAME)
> +    return;
> +
> +  if (should_show_image (image))
> +    dbusmenu_menuitem_property_set (menuitem,
> +                                    DBUSMENU_MENUITEM_PROP_ICON_NAME,
> +                                    image->data.name.icon_name);
> +  else
> +    dbusmenu_menuitem_property_remove (menuitem,
> +                                       DBUSMENU_MENUITEM_PROP_ICON_NAME);
> +}
> +
>  static void
>  widget_notify_cb (GtkWidget  *widget,
>                    GParamSpec *pspec,
> @@ -397,6 +484,14 @@
>                                             DBUSMENU_MENUITEM_PROP_VISIBLE,
>                                             gtk_widget_get_visible (widget));
>      }
> +  else if (pspec->name == g_intern_static_string ("stock"))
> +    {
> +      update_stock_item (child, widget);
> +    }
> +  else if (pspec->name == g_intern_static_string ("icon-name"))
> +    {
> +      update_icon_name (child, widget);
> +    }
>  }
>  
>  static void
> @@ -484,6 +579,7 @@
>        else
>          {
>            gboolean visible = FALSE;
> +          gboolean label_set = FALSE;
>  
>            g_signal_connect (widget,
>                              "accel-closures-changed",
> @@ -506,6 +602,24 @@
>                                  mi);
>              }
>  
> +          if (GTK_IS_IMAGE_MENU_ITEM (widget))
> +            {
> +              GtkWidget *image;
> +              GtkImageType image_type;
> +
> +              image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (widget));
> +              image_type = gtk_image_get_storage_type (GTK_IMAGE (image));
> +
> +              if (image_type == GTK_IMAGE_STOCK)
> +                {
> +                  label_set = update_stock_item (mi, image);
> +                }
> +              else if (image_type == GTK_IMAGE_ICON_NAME)
> +                {
> +                  update_icon_name (mi, image);
> +                }
> +            }
> +
>            dbusmenu_menuitem_property_set (mi,
>                                            "label",
>                                            get_menu_label_text (widget));
> 



-- 
https://code.launchpad.net/~bratsche/appmenu-gtk/icons/+merge/29147
Your team ayatana-commits is subscribed to branch lp:appmenu-gtk.



References