Changes to make cross-process merging feasible:
2003-09-21 Matthias Clasen <maclas@gmx.de> Changes to make cross-process merging feasible: * gtk/gtkuimanager.[hc]: Add a readonly "ui" property which holds the merged UI definition. Remove the "changed" signal, since its role is now filled by "notify::ui". Instead add a "actions-changed" signal which gets emitted when the set of actions changes. * gtk/gtktoggleactionprivate.h: * gtk/gtktoggleaction.[hc] (gtk_toggle_action_[sg]et_draw_as_radio): Add a "draw_as_radio" property to toggle actions so that they can be used as proxies for radio actions much like the "draw_as_radio" property on check menu items enables them to operate as proxies for radio actions. Prevent the "show_all" trap for action-based menus (see http://mail.gnome.org/archives/gtk-devel-list/2003-September/ msg00260.html): * gtk/gtkmenu.c (gtk_menu_{hide,show}_all): Remove g_return_if_fail() calls from static functions. * gtk/gtkuimanager.c (update_node): * gtk/gtkaction.c (connect_proxy): Set "no_show_all" on constructed widgets whose visibility is externally controlled. * gtk/gtkwidget.[hc] (gtk_widget_[gs]et_no_show_all): Add a boolean "no_show_all" property with setter and getter. When TRUE, it keeps gtk_widget_{hide,show}_all() from modifying the visibility of the widget and its children.
This commit is contained in:
committed by
Matthias Clasen
parent
8be8d7f61d
commit
d381967d5c
@ -138,7 +138,8 @@ enum {
|
||||
PROP_COMPOSITE_CHILD,
|
||||
PROP_STYLE,
|
||||
PROP_EVENTS,
|
||||
PROP_EXTENSION_EVENTS
|
||||
PROP_EXTENSION_EVENTS,
|
||||
PROP_NO_SHOW_ALL
|
||||
};
|
||||
|
||||
typedef struct _GtkStateData GtkStateData;
|
||||
@ -521,6 +522,13 @@ gtk_widget_class_init (GtkWidgetClass *klass)
|
||||
GDK_TYPE_EXTENSION_MODE,
|
||||
GDK_EXTENSION_EVENTS_NONE,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_NO_SHOW_ALL,
|
||||
g_param_spec_boolean ("no_show_all",
|
||||
_("No show all"),
|
||||
_("Whether gtk_widget_show_all() should not affect this widget"),
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
widget_signals[SHOW] =
|
||||
g_signal_new ("show",
|
||||
G_TYPE_FROM_CLASS (gobject_class),
|
||||
@ -1453,6 +1461,9 @@ gtk_widget_set_property (GObject *object,
|
||||
case PROP_EXTENSION_EVENTS:
|
||||
gtk_widget_set_extension_events (widget, g_value_get_enum (value));
|
||||
break;
|
||||
case PROP_NO_SHOW_ALL:
|
||||
gtk_widget_set_no_show_all (widget, g_value_get_boolean (value));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1544,6 +1555,9 @@ gtk_widget_get_property (GObject *object,
|
||||
else
|
||||
g_value_set_enum (value, (GdkExtensionMode) *modep);
|
||||
break;
|
||||
case PROP_NO_SHOW_ALL:
|
||||
g_value_set_boolean (value, gtk_widget_get_no_show_all (widget));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@ -2052,6 +2066,9 @@ gtk_widget_show_all (GtkWidget *widget)
|
||||
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
if ((GTK_WIDGET_FLAGS (widget) & GTK_NO_SHOW_ALL) != 0)
|
||||
return;
|
||||
|
||||
class = GTK_WIDGET_GET_CLASS (widget);
|
||||
|
||||
if (class->show_all)
|
||||
@ -2071,6 +2088,9 @@ gtk_widget_hide_all (GtkWidget *widget)
|
||||
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
if ((GTK_WIDGET_FLAGS (widget) & GTK_NO_SHOW_ALL) != 0)
|
||||
return;
|
||||
|
||||
class = GTK_WIDGET_GET_CLASS (widget);
|
||||
|
||||
if (class->hide_all)
|
||||
@ -7210,3 +7230,55 @@ gtk_widget_get_clipboard (GtkWidget *widget, GdkAtom selection)
|
||||
return gtk_clipboard_get_for_display (gtk_widget_get_display (widget),
|
||||
selection);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_widget_get_no_show_all:
|
||||
* @widget: a #GtkWidget
|
||||
*
|
||||
* Returns the current value of the "no_show_all" property, which determines
|
||||
* whether calls to gtk_widget_show_all() and gtk_widget_hide_all()
|
||||
* will affect this widget.
|
||||
*
|
||||
* Return value: the current value of the "no_show_all" property.
|
||||
*
|
||||
* Since: 2.4
|
||||
**/
|
||||
gboolean
|
||||
gtk_widget_get_no_show_all (GtkWidget *widget)
|
||||
{
|
||||
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
|
||||
|
||||
return (GTK_WIDGET_FLAGS (widget) & GTK_NO_SHOW_ALL) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_widget_set_no_show_all:
|
||||
* @widget: a #GtkWidget
|
||||
* @no_show_all: the new value for the "no_show_all" property
|
||||
*
|
||||
* Sets the "no_show_all" property, which determines whether calls to
|
||||
* gtk_widget_show_all() and gtk_widget_hide_all() will affect this widget.
|
||||
*
|
||||
* This is mostly for use in constructing widget hierarchies with externally
|
||||
* controlled visibility, see #GtkUIManager.
|
||||
*
|
||||
* Since: 2.4
|
||||
**/
|
||||
void
|
||||
gtk_widget_set_no_show_all (GtkWidget *widget,
|
||||
gboolean no_show_all)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
|
||||
no_show_all = (no_show_all != FALSE);
|
||||
|
||||
if (no_show_all == ((GTK_WIDGET_FLAGS (widget) & GTK_NO_SHOW_ALL) != 0))
|
||||
return;
|
||||
|
||||
if (no_show_all)
|
||||
GTK_WIDGET_SET_FLAGS (widget, GTK_NO_SHOW_ALL);
|
||||
else
|
||||
GTK_WIDGET_UNSET_FLAGS (widget, GTK_NO_SHOW_ALL);
|
||||
|
||||
g_object_notify (G_OBJECT (widget), "no_show_all");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user