diff options
author | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2010-10-27 14:12:41 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2010-10-30 17:35:18 +0900 |
commit | 0f9c04769ba82389f5851503910f81fc2a121e98 (patch) | |
tree | 05d67e25527ff241095a3a420b2c26a28b024324 /gtk/gtkimagemenuitem.c | |
parent | 8565b86223cfbf08c7eb23f4272f152c752add7d (diff) | |
download | gtk+-0f9c04769ba82389f5851503910f81fc2a121e98.tar.gz |
Removed size_request from GtkImageMenuItem
Diffstat (limited to 'gtk/gtkimagemenuitem.c')
-rw-r--r-- | gtk/gtkimagemenuitem.c | 114 |
1 files changed, 95 insertions, 19 deletions
diff --git a/gtk/gtkimagemenuitem.c b/gtk/gtkimagemenuitem.c index be43532ffb..520972570c 100644 --- a/gtk/gtkimagemenuitem.c +++ b/gtk/gtkimagemenuitem.c @@ -62,8 +62,16 @@ enum { static GtkActivatableIface *parent_activatable_iface; static void gtk_image_menu_item_destroy (GtkWidget *widget); -static void gtk_image_menu_item_size_request (GtkWidget *widget, - GtkRequisition *requisition); +static void gtk_image_menu_item_get_preferred_width (GtkWidget *widget, + gint *minimum, + gint *natural); +static void gtk_image_menu_item_get_preferred_height (GtkWidget *widget, + gint *minimum, + gint *natural); +static void gtk_image_menu_item_get_preferred_height_for_width (GtkWidget *widget, + gint width, + gint *minimum, + gint *natural); static void gtk_image_menu_item_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static void gtk_image_menu_item_map (GtkWidget *widget); @@ -117,7 +125,9 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass) widget_class->destroy = gtk_image_menu_item_destroy; widget_class->screen_changed = gtk_image_menu_item_screen_changed; - widget_class->size_request = gtk_image_menu_item_size_request; + widget_class->get_preferred_width = gtk_image_menu_item_get_preferred_width; + widget_class->get_preferred_height = gtk_image_menu_item_get_preferred_height; + widget_class->get_preferred_height_for_width = gtk_image_menu_item_get_preferred_height_for_width; widget_class->size_allocate = gtk_image_menu_item_size_allocate; widget_class->map = gtk_image_menu_item_map; @@ -411,13 +421,13 @@ gtk_image_menu_item_get_label (GtkMenuItem *menu_item) } static void -gtk_image_menu_item_size_request (GtkWidget *widget, - GtkRequisition *requisition) +gtk_image_menu_item_get_preferred_width (GtkWidget *widget, + gint *minimum, + gint *natural) { GtkImageMenuItem *image_menu_item = GTK_IMAGE_MENU_ITEM (widget); GtkImageMenuItemPrivate *priv = image_menu_item->priv; gint child_width = 0; - gint child_height = 0; GtkPackDirection pack_dir; GtkWidget *parent; @@ -435,26 +445,92 @@ gtk_image_menu_item_size_request (GtkWidget *widget, gtk_widget_get_preferred_size (priv->image, &child_requisition, NULL); child_width = child_requisition.width; + } + + GTK_WIDGET_CLASS (gtk_image_menu_item_parent_class)->get_preferred_width (widget, minimum, natural); + + if (pack_dir == GTK_PACK_DIRECTION_TTB || pack_dir == GTK_PACK_DIRECTION_BTT) + { + *minimum = MAX (*minimum, child_width); + *natural = MAX (*natural, child_width); + } +} + +static void +gtk_image_menu_item_get_preferred_height (GtkWidget *widget, + gint *minimum, + gint *natural) +{ + GtkImageMenuItem *image_menu_item = GTK_IMAGE_MENU_ITEM (widget); + GtkImageMenuItemPrivate *priv = image_menu_item->priv; + gint child_height = 0; + GtkPackDirection pack_dir; + GtkWidget *parent; + + parent = gtk_widget_get_parent (widget); + + if (GTK_IS_MENU_BAR (parent)) + pack_dir = gtk_menu_bar_get_child_pack_direction (GTK_MENU_BAR (parent)); + else + pack_dir = GTK_PACK_DIRECTION_LTR; + + if (priv->image && gtk_widget_get_visible (priv->image)) + { + GtkRequisition child_requisition; + + gtk_widget_get_preferred_size (priv->image, &child_requisition, NULL); + child_height = child_requisition.height; } - GTK_WIDGET_CLASS (gtk_image_menu_item_parent_class)->size_request (widget, requisition); + GTK_WIDGET_CLASS (gtk_image_menu_item_parent_class)->get_preferred_height (widget, minimum, natural); - /* not done with height since that happens via the - * toggle_size_request - */ - if (pack_dir == GTK_PACK_DIRECTION_LTR || pack_dir == GTK_PACK_DIRECTION_RTL) - requisition->height = MAX (requisition->height, child_height); + if (pack_dir == GTK_PACK_DIRECTION_RTL || pack_dir == GTK_PACK_DIRECTION_LTR) + { + *minimum = MAX (*minimum, child_height); + *natural = MAX (*natural, child_height); + } +} + +static void +gtk_image_menu_item_get_preferred_height_for_width (GtkWidget *widget, + gint width, + gint *minimum, + gint *natural) +{ + GtkImageMenuItem *image_menu_item = GTK_IMAGE_MENU_ITEM (widget); + GtkImageMenuItemPrivate *priv = image_menu_item->priv; + gint child_height = 0; + GtkPackDirection pack_dir; + GtkWidget *parent; + + parent = gtk_widget_get_parent (widget); + + if (GTK_IS_MENU_BAR (parent)) + pack_dir = gtk_menu_bar_get_child_pack_direction (GTK_MENU_BAR (parent)); else - requisition->width = MAX (requisition->width, child_width); - - - /* Note that GtkMenuShell always size requests before - * toggle_size_request, so toggle_size_request will be able to use - * priv->image->requisition - */ + pack_dir = GTK_PACK_DIRECTION_LTR; + + if (priv->image && gtk_widget_get_visible (priv->image)) + { + GtkRequisition child_requisition; + + gtk_widget_get_preferred_size (priv->image, &child_requisition, NULL); + + child_height = child_requisition.height; + } + + GTK_WIDGET_CLASS + (gtk_image_menu_item_parent_class)->get_preferred_height_for_width (widget, width, minimum, natural); + + if (pack_dir == GTK_PACK_DIRECTION_RTL || pack_dir == GTK_PACK_DIRECTION_LTR) + { + *minimum = MAX (*minimum, child_height); + *natural = MAX (*natural, child_height); + } } + static void gtk_image_menu_item_size_allocate (GtkWidget *widget, GtkAllocation *allocation) |