[gtk+/combo-refactor: 5/46] Added gtk_menu_item_set/get_reserve_indicator.
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/combo-refactor: 5/46] Added gtk_menu_item_set/get_reserve_indicator.
- Date: Mon, 6 Dec 2010 08:36:02 +0000 (UTC)
commit d3ac57a848cad065996c208b9c389c0e6991aebc
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Thu Nov 18 17:31:31 2010 +0900
Added gtk_menu_item_set/get_reserve_indicator.
This is needed by GtkTreeMenu to ensure that child menu items
reserve space for the submenu indicator even if they dont have
submenus... in this way we ensure the same size of all cell
areas in the menu items at allocation/request time.
gtk/gtkmenuitem.c | 44 +++++++++++++++++++++++++++++++++++++++-----
gtk/gtkmenuitem.h | 4 ++++
2 files changed, 43 insertions(+), 5 deletions(-)
---
diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c
index beef0fb..ee1bec1 100644
--- a/gtk/gtkmenuitem.c
+++ b/gtk/gtkmenuitem.c
@@ -42,7 +42,8 @@
typedef struct {
GtkAction *action;
- gboolean use_action_appearance;
+ guint32 use_action_appearance : 1;
+ guint32 reserve_indicator : 1;
} GtkMenuItemPrivate;
enum {
@@ -704,11 +705,12 @@ gtk_menu_item_get_preferred_width (GtkWidget *request,
if (child != NULL && gtk_widget_get_visible (child))
{
+ GtkMenuItemPrivate *priv = GET_PRIVATE (menu_item);
gint child_min, child_nat;
gtk_widget_get_preferred_width (child, &child_min, &child_nat);
- if (menu_item->submenu && !GTK_IS_MENU_BAR (parent))
+ if ((menu_item->submenu && !GTK_IS_MENU_BAR (parent)) || priv->reserve_indicator);
{
guint arrow_spacing;
gint arrow_size;
@@ -800,6 +802,7 @@ gtk_menu_item_get_preferred_height (GtkWidget *request,
if (child != NULL && gtk_widget_get_visible (child))
{
+ GtkMenuItemPrivate *priv = GET_PRIVATE (menu_item);
gint child_min, child_nat;
gtk_widget_get_preferred_height (child, &child_min, &child_nat);
@@ -807,7 +810,7 @@ gtk_menu_item_get_preferred_height (GtkWidget *request,
min_height += child_min;
nat_height += child_nat;
- if (menu_item->submenu && !GTK_IS_MENU_BAR (parent))
+ if ((menu_item->submenu && !GTK_IS_MENU_BAR (parent)) || priv->reserve_indicator)
{
gint arrow_size;
@@ -909,10 +912,11 @@ gtk_menu_item_get_preferred_height_for_width (GtkWidget *request,
if (child != NULL && gtk_widget_get_visible (child))
{
+ GtkMenuItemPrivate *priv = GET_PRIVATE (menu_item);
gint child_min, child_nat;
gint arrow_size = 0;
- if (menu_item->submenu && !GTK_IS_MENU_BAR (parent))
+ if ((menu_item->submenu && !GTK_IS_MENU_BAR (parent)) || priv->reserve_indicator)
{
guint arrow_spacing;
@@ -1343,6 +1347,7 @@ gtk_menu_item_size_allocate (GtkWidget *widget,
child = gtk_bin_get_child (bin);
if (child)
{
+ GtkMenuItemPrivate *priv = GET_PRIVATE (menu_item);
GtkRequisition child_requisition;
GtkStyle *style;
guint horizontal_padding;
@@ -1385,7 +1390,7 @@ gtk_menu_item_size_allocate (GtkWidget *widget,
child_allocation.y += allocation->y;
gtk_widget_get_preferred_size (child, &child_requisition, NULL);
- if (menu_item->submenu && !GTK_IS_MENU_BAR (parent))
+ if ((menu_item->submenu && !GTK_IS_MENU_BAR (parent)) || priv->reserve_indicator)
{
if (direction == GTK_TEXT_DIR_RTL)
child_allocation.x += child_requisition.height;
@@ -2506,3 +2511,32 @@ gtk_menu_item_get_use_underline (GtkMenuItem *menu_item)
return FALSE;
}
+
+void
+gtk_menu_item_set_reserve_indicator (GtkMenuItem *menu_item,
+ gboolean reserve)
+{
+ GtkMenuItemPrivate *priv;
+
+ g_return_if_fail (GTK_IS_MENU_ITEM (menu_item));
+
+ priv = GET_PRIVATE (menu_item);
+
+ if (priv->reserve_indicator != reserve)
+ {
+ priv->reserve_indicator = reserve;
+ gtk_widget_queue_resize (GTK_WIDGET (menu_item));
+ }
+}
+
+gboolean
+gtk_menu_item_get_reserve_indicator (GtkMenuItem *menu_item)
+{
+ GtkMenuItemPrivate *priv;
+
+ g_return_val_if_fail (GTK_IS_MENU_ITEM (menu_item), FALSE);
+
+ priv = GET_PRIVATE (menu_item);
+
+ return priv->reserve_indicator;
+}
diff --git a/gtk/gtkmenuitem.h b/gtk/gtkmenuitem.h
index ef62c77..4aa85c2 100644
--- a/gtk/gtkmenuitem.h
+++ b/gtk/gtkmenuitem.h
@@ -128,6 +128,10 @@ void gtk_menu_item_set_use_underline (GtkMenuItem *menu_item,
gboolean setting);
gboolean gtk_menu_item_get_use_underline (GtkMenuItem *menu_item);
+void gtk_menu_item_set_reserve_indicator(GtkMenuItem *menu_item,
+ gboolean reserve);
+gboolean gtk_menu_item_get_reserve_indicator(GtkMenuItem *menu_item);
+
/* private */
void _gtk_menu_item_refresh_accel_path (GtkMenuItem *menu_item,
const gchar *prefix,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]