forked from AuroraMiddleware/gtk
menubutton: Drop the Private struct
This commit is contained in:
parent
d01e664c79
commit
7e8d61b92c
@ -136,15 +136,7 @@ typedef struct _GtkMenuButtonPrivate GtkMenuButtonPrivate;
|
||||
struct _GtkMenuButton
|
||||
{
|
||||
GtkWidget parent_instance;
|
||||
};
|
||||
|
||||
struct _GtkMenuButtonClass
|
||||
{
|
||||
GtkWidgetClass parent_class;
|
||||
};
|
||||
|
||||
struct _GtkMenuButtonPrivate
|
||||
{
|
||||
GtkWidget *button;
|
||||
GtkWidget *popover; /* Only one at a time can be set */
|
||||
GMenuModel *model;
|
||||
@ -159,6 +151,11 @@ struct _GtkMenuButtonPrivate
|
||||
GtkArrowType arrow_type;
|
||||
};
|
||||
|
||||
struct _GtkMenuButtonClass
|
||||
{
|
||||
GtkWidgetClass parent_class;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
@ -175,7 +172,7 @@ enum
|
||||
|
||||
static GParamSpec *menu_button_props[LAST_PROP];
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (GtkMenuButton, gtk_menu_button, GTK_TYPE_WIDGET)
|
||||
G_DEFINE_TYPE (GtkMenuButton, gtk_menu_button, GTK_TYPE_WIDGET)
|
||||
|
||||
static void gtk_menu_button_dispose (GObject *object);
|
||||
|
||||
@ -224,21 +221,21 @@ gtk_menu_button_get_property (GObject *object,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (GTK_MENU_BUTTON (object));
|
||||
GtkMenuButton *self = GTK_MENU_BUTTON (object);
|
||||
|
||||
switch (property_id)
|
||||
{
|
||||
case PROP_MENU_MODEL:
|
||||
g_value_set_object (value, priv->model);
|
||||
g_value_set_object (value, self->model);
|
||||
break;
|
||||
case PROP_ALIGN_WIDGET:
|
||||
g_value_set_object (value, priv->align_widget);
|
||||
g_value_set_object (value, self->align_widget);
|
||||
break;
|
||||
case PROP_DIRECTION:
|
||||
g_value_set_enum (value, priv->arrow_type);
|
||||
g_value_set_enum (value, self->arrow_type);
|
||||
break;
|
||||
case PROP_POPOVER:
|
||||
g_value_set_object (value, priv->popover);
|
||||
g_value_set_object (value, self->popover);
|
||||
break;
|
||||
case PROP_ICON_NAME:
|
||||
g_value_set_string (value, gtk_menu_button_get_icon_name (GTK_MENU_BUTTON (object)));
|
||||
@ -261,34 +258,32 @@ static void
|
||||
gtk_menu_button_state_flags_changed (GtkWidget *widget,
|
||||
GtkStateFlags previous_state_flags)
|
||||
{
|
||||
GtkMenuButton *button = GTK_MENU_BUTTON (widget);
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (button);
|
||||
GtkMenuButton *self = GTK_MENU_BUTTON (widget);
|
||||
|
||||
if (!gtk_widget_is_sensitive (widget))
|
||||
{
|
||||
if (priv->popover)
|
||||
gtk_widget_hide (priv->popover);
|
||||
if (self->popover)
|
||||
gtk_widget_hide (self->popover);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_menu_button_toggled (GtkMenuButton *menu_button)
|
||||
gtk_menu_button_toggled (GtkMenuButton *self)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
const gboolean active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->button));
|
||||
const gboolean active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->button));
|
||||
|
||||
/* Might set a new menu/popover */
|
||||
if (active && priv->create_popup_func)
|
||||
if (active && self->create_popup_func)
|
||||
{
|
||||
priv->create_popup_func (menu_button, priv->create_popup_user_data);
|
||||
self->create_popup_func (self, self->create_popup_user_data);
|
||||
}
|
||||
|
||||
if (priv->popover)
|
||||
if (self->popover)
|
||||
{
|
||||
if (active)
|
||||
gtk_popover_popup (GTK_POPOVER (priv->popover));
|
||||
gtk_popover_popup (GTK_POPOVER (self->popover));
|
||||
else
|
||||
gtk_popover_popdown (GTK_POPOVER (priv->popover));
|
||||
gtk_popover_popdown (GTK_POPOVER (self->popover));
|
||||
}
|
||||
}
|
||||
|
||||
@ -301,10 +296,9 @@ gtk_menu_button_measure (GtkWidget *widget,
|
||||
int *minimum_baseline,
|
||||
int *natural_baseline)
|
||||
{
|
||||
GtkMenuButton *menu_button = GTK_MENU_BUTTON (widget);
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
GtkMenuButton *self = GTK_MENU_BUTTON (widget);
|
||||
|
||||
gtk_widget_measure (priv->button,
|
||||
gtk_widget_measure (self->button,
|
||||
orientation,
|
||||
for_size,
|
||||
minimum, natural,
|
||||
@ -318,25 +312,23 @@ gtk_menu_button_size_allocate (GtkWidget *widget,
|
||||
int height,
|
||||
int baseline)
|
||||
{
|
||||
GtkMenuButton *button = GTK_MENU_BUTTON (widget);
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (button);
|
||||
GtkMenuButton *self= GTK_MENU_BUTTON (widget);
|
||||
|
||||
gtk_widget_size_allocate (priv->button,
|
||||
gtk_widget_size_allocate (self->button,
|
||||
&(GtkAllocation) { 0, 0, width, height },
|
||||
baseline);
|
||||
if (priv->popover)
|
||||
gtk_native_check_resize (GTK_NATIVE (priv->popover));
|
||||
if (self->popover)
|
||||
gtk_native_check_resize (GTK_NATIVE (self->popover));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_menu_button_focus (GtkWidget *widget,
|
||||
GtkDirectionType direction)
|
||||
{
|
||||
GtkMenuButton *button = GTK_MENU_BUTTON (widget);
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (button);
|
||||
GtkMenuButton *self = GTK_MENU_BUTTON (widget);
|
||||
|
||||
if (priv->popover && gtk_widget_get_visible (priv->popover))
|
||||
return gtk_widget_child_focus (priv->popover, direction);
|
||||
if (self->popover && gtk_widget_get_visible (self->popover))
|
||||
return gtk_widget_child_focus (self->popover, direction);
|
||||
else
|
||||
return GTK_WIDGET_CLASS (gtk_menu_button_parent_class)->focus (widget, direction);
|
||||
}
|
||||
@ -471,32 +463,29 @@ set_arrow_type (GtkImage *image,
|
||||
}
|
||||
|
||||
static void
|
||||
add_arrow (GtkMenuButton *menu_button)
|
||||
add_arrow (GtkMenuButton *self)
|
||||
{
|
||||
GtkWidget *arrow;
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
arrow = gtk_image_new ();
|
||||
set_arrow_type (GTK_IMAGE (arrow), priv->arrow_type);
|
||||
gtk_container_add (GTK_CONTAINER (priv->button), arrow);
|
||||
priv->arrow_widget = arrow;
|
||||
set_arrow_type (GTK_IMAGE (arrow), self->arrow_type);
|
||||
gtk_container_add (GTK_CONTAINER (self->button), arrow);
|
||||
self->arrow_widget = arrow;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_menu_button_init (GtkMenuButton *menu_button)
|
||||
gtk_menu_button_init (GtkMenuButton *self)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
self->arrow_type = GTK_ARROW_DOWN;
|
||||
|
||||
priv->arrow_type = GTK_ARROW_DOWN;
|
||||
self->button = gtk_toggle_button_new ();
|
||||
gtk_widget_set_parent (self->button, GTK_WIDGET (self));
|
||||
g_signal_connect_swapped (self->button, "toggled", G_CALLBACK (gtk_menu_button_toggled), self);
|
||||
add_arrow (self);
|
||||
|
||||
priv->button = gtk_toggle_button_new ();
|
||||
gtk_widget_set_parent (priv->button, GTK_WIDGET (menu_button));
|
||||
g_signal_connect_swapped (priv->button, "toggled", G_CALLBACK (gtk_menu_button_toggled), menu_button);
|
||||
add_arrow (menu_button);
|
||||
gtk_widget_set_sensitive (self->button, FALSE);
|
||||
|
||||
gtk_widget_set_sensitive (priv->button, FALSE);
|
||||
|
||||
gtk_widget_add_css_class (GTK_WIDGET (menu_button), "popup");
|
||||
gtk_widget_add_css_class (GTK_WIDGET (self), "popup");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -515,21 +504,17 @@ gtk_menu_button_new (void)
|
||||
}
|
||||
|
||||
static void
|
||||
update_sensitivity (GtkMenuButton *menu_button)
|
||||
update_sensitivity (GtkMenuButton *self)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
gtk_widget_set_sensitive (priv->button,
|
||||
priv->popover != NULL ||
|
||||
priv->create_popup_func != NULL);
|
||||
gtk_widget_set_sensitive (self->button,
|
||||
self->popover != NULL ||
|
||||
self->create_popup_func != NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
menu_deactivate_cb (GtkMenuButton *menu_button)
|
||||
menu_deactivate_cb (GtkMenuButton *self)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->button), FALSE);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->button), FALSE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -553,8 +538,6 @@ void
|
||||
gtk_menu_button_set_menu_model (GtkMenuButton *menu_button,
|
||||
GMenuModel *menu_model)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
g_return_if_fail (G_IS_MENU_MODEL (menu_model) || menu_model == NULL);
|
||||
|
||||
@ -575,7 +558,7 @@ gtk_menu_button_set_menu_model (GtkMenuButton *menu_button,
|
||||
gtk_menu_button_set_popover (menu_button, NULL);
|
||||
}
|
||||
|
||||
priv->model = menu_model;
|
||||
menu_button->model = menu_model;
|
||||
g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_MENU_MODEL]);
|
||||
|
||||
g_object_thaw_notify (G_OBJECT (menu_button));
|
||||
@ -592,26 +575,22 @@ gtk_menu_button_set_menu_model (GtkMenuButton *menu_button,
|
||||
GMenuModel *
|
||||
gtk_menu_button_get_menu_model (GtkMenuButton *menu_button)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), NULL);
|
||||
|
||||
return priv->model;
|
||||
return menu_button->model;
|
||||
}
|
||||
|
||||
static void
|
||||
set_align_widget_pointer (GtkMenuButton *menu_button,
|
||||
set_align_widget_pointer (GtkMenuButton *self,
|
||||
GtkWidget *align_widget)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
if (self->align_widget)
|
||||
g_object_remove_weak_pointer (G_OBJECT (self->align_widget), (gpointer *) &self->align_widget);
|
||||
|
||||
if (priv->align_widget)
|
||||
g_object_remove_weak_pointer (G_OBJECT (priv->align_widget), (gpointer *) &priv->align_widget);
|
||||
self->align_widget = align_widget;
|
||||
|
||||
priv->align_widget = align_widget;
|
||||
|
||||
if (priv->align_widget)
|
||||
g_object_add_weak_pointer (G_OBJECT (priv->align_widget), (gpointer *) &priv->align_widget);
|
||||
if (self->align_widget)
|
||||
g_object_add_weak_pointer (G_OBJECT (self->align_widget), (gpointer *) &self->align_widget);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -632,12 +611,10 @@ void
|
||||
gtk_menu_button_set_align_widget (GtkMenuButton *menu_button,
|
||||
GtkWidget *align_widget)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
g_return_if_fail (align_widget == NULL || gtk_widget_is_ancestor (GTK_WIDGET (menu_button), align_widget));
|
||||
|
||||
if (priv->align_widget == align_widget)
|
||||
if (menu_button->align_widget == align_widget)
|
||||
return;
|
||||
|
||||
set_align_widget_pointer (menu_button, align_widget);
|
||||
@ -656,35 +633,31 @@ gtk_menu_button_set_align_widget (GtkMenuButton *menu_button,
|
||||
GtkWidget *
|
||||
gtk_menu_button_get_align_widget (GtkMenuButton *menu_button)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), NULL);
|
||||
|
||||
return priv->align_widget;
|
||||
return menu_button->align_widget;
|
||||
}
|
||||
|
||||
static void
|
||||
update_popover_direction (GtkMenuButton *menu_button)
|
||||
update_popover_direction (GtkMenuButton *self)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
if (!priv->popover)
|
||||
if (!self->popover)
|
||||
return;
|
||||
|
||||
switch (priv->arrow_type)
|
||||
switch (self->arrow_type)
|
||||
{
|
||||
case GTK_ARROW_UP:
|
||||
gtk_popover_set_position (GTK_POPOVER (priv->popover), GTK_POS_TOP);
|
||||
gtk_popover_set_position (GTK_POPOVER (self->popover), GTK_POS_TOP);
|
||||
break;
|
||||
case GTK_ARROW_DOWN:
|
||||
case GTK_ARROW_NONE:
|
||||
gtk_popover_set_position (GTK_POPOVER (priv->popover), GTK_POS_BOTTOM);
|
||||
gtk_popover_set_position (GTK_POPOVER (self->popover), GTK_POS_BOTTOM);
|
||||
break;
|
||||
case GTK_ARROW_LEFT:
|
||||
gtk_popover_set_position (GTK_POPOVER (priv->popover), GTK_POS_LEFT);
|
||||
gtk_popover_set_position (GTK_POPOVER (self->popover), GTK_POS_LEFT);
|
||||
break;
|
||||
case GTK_ARROW_RIGHT:
|
||||
gtk_popover_set_position (GTK_POPOVER (priv->popover), GTK_POS_RIGHT);
|
||||
gtk_popover_set_position (GTK_POPOVER (self->popover), GTK_POS_RIGHT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -716,23 +689,22 @@ void
|
||||
gtk_menu_button_set_direction (GtkMenuButton *menu_button,
|
||||
GtkArrowType direction)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
GtkWidget *child;
|
||||
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
|
||||
if (priv->arrow_type == direction)
|
||||
if (menu_button->arrow_type == direction)
|
||||
return;
|
||||
|
||||
priv->arrow_type = direction;
|
||||
menu_button->arrow_type = direction;
|
||||
g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_DIRECTION]);
|
||||
|
||||
/* Is it custom content? We don't change that */
|
||||
child = gtk_bin_get_child (GTK_BIN (priv->button));
|
||||
if (priv->arrow_widget != child)
|
||||
child = gtk_bin_get_child (GTK_BIN (menu_button->button));
|
||||
if (menu_button->arrow_widget != child)
|
||||
return;
|
||||
|
||||
set_arrow_type (GTK_IMAGE (child), priv->arrow_type);
|
||||
set_arrow_type (GTK_IMAGE (child), menu_button->arrow_type);
|
||||
update_popover_direction (menu_button);
|
||||
}
|
||||
|
||||
@ -747,37 +719,35 @@ gtk_menu_button_set_direction (GtkMenuButton *menu_button,
|
||||
GtkArrowType
|
||||
gtk_menu_button_get_direction (GtkMenuButton *menu_button)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), GTK_ARROW_DOWN);
|
||||
|
||||
return priv->arrow_type;
|
||||
return menu_button->arrow_type;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_menu_button_dispose (GObject *object)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (GTK_MENU_BUTTON (object));
|
||||
GtkMenuButton *self = GTK_MENU_BUTTON (object);
|
||||
|
||||
if (priv->popover)
|
||||
if (self->popover)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (priv->popover,
|
||||
g_signal_handlers_disconnect_by_func (self->popover,
|
||||
menu_deactivate_cb,
|
||||
object);
|
||||
g_signal_handlers_disconnect_by_func (priv->popover,
|
||||
g_signal_handlers_disconnect_by_func (self->popover,
|
||||
popover_destroy_cb,
|
||||
object);
|
||||
gtk_widget_unparent (priv->popover);
|
||||
priv->popover = NULL;
|
||||
gtk_widget_unparent (self->popover);
|
||||
self->popover = NULL;
|
||||
}
|
||||
|
||||
set_align_widget_pointer (GTK_MENU_BUTTON (object), NULL);
|
||||
|
||||
g_clear_object (&priv->model);
|
||||
g_clear_pointer (&priv->button, gtk_widget_unparent);
|
||||
g_clear_object (&self->model);
|
||||
g_clear_pointer (&self->button, gtk_widget_unparent);
|
||||
|
||||
if (priv->create_popup_destroy_notify)
|
||||
priv->create_popup_destroy_notify (priv->create_popup_user_data);
|
||||
if (self->create_popup_destroy_notify)
|
||||
self->create_popup_destroy_notify (self->create_popup_user_data);
|
||||
|
||||
G_OBJECT_CLASS (gtk_menu_button_parent_class)->dispose (object);
|
||||
}
|
||||
@ -797,38 +767,36 @@ void
|
||||
gtk_menu_button_set_popover (GtkMenuButton *menu_button,
|
||||
GtkWidget *popover)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
g_return_if_fail (GTK_IS_POPOVER (popover) || popover == NULL);
|
||||
|
||||
g_object_freeze_notify (G_OBJECT (menu_button));
|
||||
|
||||
g_clear_object (&priv->model);
|
||||
g_clear_object (&menu_button->model);
|
||||
|
||||
if (priv->popover)
|
||||
if (menu_button->popover)
|
||||
{
|
||||
if (gtk_widget_get_visible (priv->popover))
|
||||
gtk_widget_hide (priv->popover);
|
||||
if (gtk_widget_get_visible (menu_button->popover))
|
||||
gtk_widget_hide (menu_button->popover);
|
||||
|
||||
g_signal_handlers_disconnect_by_func (priv->popover,
|
||||
g_signal_handlers_disconnect_by_func (menu_button->popover,
|
||||
menu_deactivate_cb,
|
||||
menu_button);
|
||||
g_signal_handlers_disconnect_by_func (priv->popover,
|
||||
g_signal_handlers_disconnect_by_func (menu_button->popover,
|
||||
popover_destroy_cb,
|
||||
menu_button);
|
||||
|
||||
gtk_widget_unparent (priv->popover);
|
||||
gtk_widget_unparent (menu_button->popover);
|
||||
}
|
||||
|
||||
priv->popover = popover;
|
||||
menu_button->popover = popover;
|
||||
|
||||
if (popover)
|
||||
{
|
||||
gtk_widget_set_parent (priv->popover, GTK_WIDGET (menu_button));
|
||||
g_signal_connect_swapped (priv->popover, "closed",
|
||||
gtk_widget_set_parent (menu_button->popover, GTK_WIDGET (menu_button));
|
||||
g_signal_connect_swapped (menu_button->popover, "closed",
|
||||
G_CALLBACK (menu_deactivate_cb), menu_button);
|
||||
g_signal_connect_swapped (priv->popover, "destroy",
|
||||
g_signal_connect_swapped (menu_button->popover, "destroy",
|
||||
G_CALLBACK (popover_destroy_cb), menu_button);
|
||||
update_popover_direction (menu_button);
|
||||
}
|
||||
@ -853,11 +821,9 @@ gtk_menu_button_set_popover (GtkMenuButton *menu_button,
|
||||
GtkPopover *
|
||||
gtk_menu_button_get_popover (GtkMenuButton *menu_button)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), NULL);
|
||||
|
||||
return GTK_POPOVER (priv->popover);
|
||||
return GTK_POPOVER (menu_button->popover);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -871,11 +837,9 @@ void
|
||||
gtk_menu_button_set_icon_name (GtkMenuButton *menu_button,
|
||||
const char *icon_name)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
|
||||
gtk_button_set_icon_name (GTK_BUTTON (priv->button), icon_name);
|
||||
gtk_button_set_icon_name (GTK_BUTTON (menu_button->button), icon_name);
|
||||
g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_ICON_NAME]);
|
||||
}
|
||||
|
||||
@ -890,11 +854,9 @@ gtk_menu_button_set_icon_name (GtkMenuButton *menu_button,
|
||||
const char *
|
||||
gtk_menu_button_get_icon_name (GtkMenuButton *menu_button)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), NULL);
|
||||
|
||||
return gtk_button_get_icon_name (GTK_BUTTON (priv->button));
|
||||
return gtk_button_get_icon_name (GTK_BUTTON (menu_button->button));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -908,7 +870,6 @@ void
|
||||
gtk_menu_button_set_label (GtkMenuButton *menu_button,
|
||||
const char *label)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
GtkWidget *child;
|
||||
GtkWidget *box;
|
||||
GtkWidget *label_widget;
|
||||
@ -916,22 +877,22 @@ gtk_menu_button_set_label (GtkMenuButton *menu_button,
|
||||
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
|
||||
child = gtk_bin_get_child (GTK_BIN (priv->button));
|
||||
child = gtk_bin_get_child (GTK_BIN (menu_button->button));
|
||||
if (child)
|
||||
gtk_container_remove (GTK_CONTAINER (priv->button), child);
|
||||
gtk_container_remove (GTK_CONTAINER (menu_button->button), child);
|
||||
|
||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
||||
label_widget = gtk_label_new (label);
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
gtk_label_set_xalign (GTK_LABEL (label_widget), 0);
|
||||
gtk_label_set_use_underline (GTK_LABEL (label_widget),
|
||||
gtk_button_get_use_underline (GTK_BUTTON (priv->button)));
|
||||
gtk_button_get_use_underline (GTK_BUTTON (menu_button->button)));
|
||||
gtk_widget_set_hexpand (label_widget, TRUE);
|
||||
image = gtk_image_new_from_icon_name ("pan-down-symbolic");
|
||||
gtk_container_add (GTK_CONTAINER (box), label_widget);
|
||||
gtk_container_add (GTK_CONTAINER (box), image);
|
||||
gtk_container_add (GTK_CONTAINER (priv->button), box);
|
||||
priv->label_widget = label_widget;
|
||||
gtk_container_add (GTK_CONTAINER (menu_button->button), box);
|
||||
menu_button->label_widget = label_widget;
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_LABEL]);
|
||||
}
|
||||
@ -947,12 +908,11 @@ gtk_menu_button_set_label (GtkMenuButton *menu_button,
|
||||
const char *
|
||||
gtk_menu_button_get_label (GtkMenuButton *menu_button)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
GtkWidget *child;
|
||||
|
||||
g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), NULL);
|
||||
|
||||
child = gtk_bin_get_child (GTK_BIN (priv->button));
|
||||
child = gtk_bin_get_child (GTK_BIN (menu_button->button));
|
||||
if (GTK_IS_BOX (child))
|
||||
{
|
||||
child = gtk_widget_get_first_child (child);
|
||||
@ -977,14 +937,12 @@ void
|
||||
gtk_menu_button_set_relief (GtkMenuButton *menu_button,
|
||||
GtkReliefStyle relief)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
|
||||
if (relief == gtk_button_get_relief (GTK_BUTTON (priv->button)))
|
||||
if (relief == gtk_button_get_relief (GTK_BUTTON (menu_button->button)))
|
||||
return;
|
||||
|
||||
gtk_button_set_relief (GTK_BUTTON (priv->button), relief);
|
||||
gtk_button_set_relief (GTK_BUTTON (menu_button->button), relief);
|
||||
g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_RELIEF]);
|
||||
}
|
||||
|
||||
@ -999,11 +957,9 @@ gtk_menu_button_set_relief (GtkMenuButton *menu_button,
|
||||
GtkReliefStyle
|
||||
gtk_menu_button_get_relief (GtkMenuButton *menu_button)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), GTK_RELIEF_NORMAL);
|
||||
|
||||
return gtk_button_get_relief (GTK_BUTTON (priv->button));
|
||||
return gtk_button_get_relief (GTK_BUTTON (menu_button->button));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1015,11 +971,9 @@ gtk_menu_button_get_relief (GtkMenuButton *menu_button)
|
||||
void
|
||||
gtk_menu_button_popup (GtkMenuButton *menu_button)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->button), TRUE);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (menu_button->button), TRUE);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1031,25 +985,22 @@ gtk_menu_button_popup (GtkMenuButton *menu_button)
|
||||
void
|
||||
gtk_menu_button_popdown (GtkMenuButton *menu_button)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->button), FALSE);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (menu_button->button), FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
gtk_menu_button_add_child (GtkMenuButton *menu_button,
|
||||
GtkWidget *new_child)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
GtkWidget *child;
|
||||
|
||||
child = gtk_bin_get_child (GTK_BIN (priv->button));
|
||||
child = gtk_bin_get_child (GTK_BIN (menu_button->button));
|
||||
if (child)
|
||||
gtk_container_remove (GTK_CONTAINER (priv->button), child);
|
||||
gtk_container_remove (GTK_CONTAINER (menu_button->button), child);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (priv->button), new_child);
|
||||
gtk_container_add (GTK_CONTAINER (menu_button->button), new_child);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1079,16 +1030,14 @@ gtk_menu_button_set_create_popup_func (GtkMenuButton *menu_button
|
||||
gpointer user_data,
|
||||
GDestroyNotify destroy_notify)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
|
||||
if (priv->create_popup_destroy_notify)
|
||||
priv->create_popup_destroy_notify (priv->create_popup_user_data);
|
||||
if (menu_button->create_popup_destroy_notify)
|
||||
menu_button->create_popup_destroy_notify (menu_button->create_popup_user_data);
|
||||
|
||||
priv->create_popup_func = func;
|
||||
priv->create_popup_user_data = user_data;
|
||||
priv->create_popup_destroy_notify = destroy_notify;
|
||||
menu_button->create_popup_func = func;
|
||||
menu_button->create_popup_user_data = user_data;
|
||||
menu_button->create_popup_destroy_notify = destroy_notify;
|
||||
|
||||
update_sensitivity (menu_button);
|
||||
}
|
||||
@ -1097,16 +1046,14 @@ void
|
||||
gtk_menu_button_set_use_underline (GtkMenuButton *menu_button,
|
||||
gboolean use_underline)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
|
||||
|
||||
if (gtk_button_get_use_underline (GTK_BUTTON (priv->button)) == use_underline)
|
||||
if (gtk_button_get_use_underline (GTK_BUTTON (menu_button->button)) == use_underline)
|
||||
return;
|
||||
|
||||
gtk_button_set_use_underline (GTK_BUTTON (priv->button), use_underline);
|
||||
if (priv->label_widget)
|
||||
gtk_label_set_use_underline (GTK_LABEL (priv->label_widget), use_underline);
|
||||
gtk_button_set_use_underline (GTK_BUTTON (menu_button->button), use_underline);
|
||||
if (menu_button->label_widget)
|
||||
gtk_label_set_use_underline (GTK_LABEL (menu_button->label_widget), use_underline);
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_USE_UNDERLINE]);
|
||||
}
|
||||
@ -1114,9 +1061,7 @@ gtk_menu_button_set_use_underline (GtkMenuButton *menu_button,
|
||||
gboolean
|
||||
gtk_menu_button_get_use_underline (GtkMenuButton *menu_button)
|
||||
{
|
||||
GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
|
||||
|
||||
g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), FALSE);
|
||||
|
||||
return gtk_button_get_use_underline (GTK_BUTTON (priv->button));
|
||||
return gtk_button_get_use_underline (GTK_BUTTON (menu_button->button));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user