gtk+ r21615 - in trunk: . gtk
- From: mitch svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r21615 - in trunk: . gtk
- Date: Thu, 9 Oct 2008 08:50:33 +0000 (UTC)
Author: mitch
Date: Thu Oct 9 08:50:33 2008
New Revision: 21615
URL: http://svn.gnome.org/viewvc/gtk+?rev=21615&view=rev
Log:
2008-10-09 Michael Natterer <mitch imendio com>
Bug 516425 â Optionally display accelerators in popups
* gtk/gtkuimanager.h (enum GtkUIManagerItemType): add value
GTK_UI_MANAGER_POPUP_WITH_ACCELS which works like _POPUP but
shows the actions' accelerators.
* gtk/gtkuimanager.c: honor the new enum value for programmatically
created UIs, and support <popup accelerators="true"> in the XML
for the same purpose.
Modified:
trunk/ChangeLog
trunk/gtk/gtkuimanager.c
trunk/gtk/gtkuimanager.h
Modified: trunk/gtk/gtkuimanager.c
==============================================================================
--- trunk/gtk/gtkuimanager.c (original)
+++ trunk/gtk/gtkuimanager.c Thu Oct 9 08:50:33 2008
@@ -80,6 +80,7 @@
guint dirty : 1;
guint expand : 1; /* used for separators */
+ guint popup_accels : 1;
};
#define GTK_UI_MANAGER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_UI_MANAGER, GtkUIManagerPrivate))
@@ -1208,7 +1209,8 @@
GQuark action_quark;
gboolean top;
gboolean expand = FALSE;
-
+ gboolean accelerators = FALSE;
+
gboolean raise_error = TRUE;
node_name = NULL;
@@ -1235,6 +1237,10 @@
{
expand = !strcmp (attribute_values[i], "true");
}
+ else if (!strcmp (attribute_names[i], "accelerators"))
+ {
+ accelerators = !strcmp (attribute_values[i], "true");
+ }
/* else silently skip unknown attributes to be compatible with
* future additional attributes.
*/
@@ -1347,6 +1353,9 @@
node_name, strlen (node_name),
NODE_TYPE_POPUP,
TRUE, FALSE);
+
+ NODE_INFO (ctx->current)->popup_accels = accelerators;
+
if (NODE_INFO (ctx->current)->action_name == 0)
NODE_INFO (ctx->current)->action_name = action_quark;
@@ -1799,6 +1808,7 @@
node_type = NODE_TYPE_TOOLBAR;
break;
case GTK_UI_MANAGER_POPUP:
+ case GTK_UI_MANAGER_POPUP_WITH_ACCELS:
node_type = NODE_TYPE_POPUP;
break;
case GTK_UI_MANAGER_ACCELERATOR:
@@ -1823,6 +1833,9 @@
name, name ? strlen (name) : 0,
node_type, TRUE, top);
+ if (type == GTK_UI_MANAGER_POPUP_WITH_ACCELS)
+ NODE_INFO (child)->popup_accels = TRUE;
+
if (action != NULL)
action_quark = g_quark_from_string (action);
@@ -2199,7 +2212,8 @@
static void
update_node (GtkUIManager *self,
GNode *node,
- gboolean in_popup)
+ gboolean in_popup,
+ gboolean popup_accels)
{
Node *info;
GNode *child;
@@ -2219,7 +2233,11 @@
if (!info->dirty)
return;
- in_popup = in_popup || (info->type == NODE_TYPE_POPUP);
+ if (info->type == NODE_TYPE_POPUP)
+ {
+ in_popup = TRUE;
+ popup_accels = info->popup_accels;
+ }
#ifdef DEBUG_UI_MANAGER
g_print ("update_node name=%s dirty=%d popup %d (",
@@ -2576,7 +2594,7 @@
{
g_signal_connect (info->proxy, "notify::visible",
G_CALLBACK (update_smart_separators), NULL);
- if (in_popup)
+ if (in_popup && !popup_accels)
{
/* don't show accels in popups */
GtkWidget *label = GTK_BIN (info->proxy)->child;
@@ -2715,7 +2733,7 @@
current = child;
child = current->next;
- update_node (self, current, in_popup);
+ update_node (self, current, in_popup, popup_accels);
}
if (info->proxy)
@@ -2757,7 +2775,7 @@
* the proxy is reconnected to the new action (or a new proxy widget
* is created and added to the parent container).
*/
- update_node (self, self->private_data->root_node, FALSE);
+ update_node (self, self->private_data->root_node, FALSE, FALSE);
self->private_data->update_tag = 0;
Modified: trunk/gtk/gtkuimanager.h
==============================================================================
--- trunk/gtk/gtkuimanager.h (original)
+++ trunk/gtk/gtkuimanager.h Thu Oct 9 08:50:33 2008
@@ -92,16 +92,17 @@
};
typedef enum {
- GTK_UI_MANAGER_AUTO = 0,
- GTK_UI_MANAGER_MENUBAR = 1 << 0,
- GTK_UI_MANAGER_MENU = 1 << 1,
- GTK_UI_MANAGER_TOOLBAR = 1 << 2,
- GTK_UI_MANAGER_PLACEHOLDER = 1 << 3,
- GTK_UI_MANAGER_POPUP = 1 << 4,
- GTK_UI_MANAGER_MENUITEM = 1 << 5,
- GTK_UI_MANAGER_TOOLITEM = 1 << 6,
- GTK_UI_MANAGER_SEPARATOR = 1 << 7,
- GTK_UI_MANAGER_ACCELERATOR = 1 << 8
+ GTK_UI_MANAGER_AUTO = 0,
+ GTK_UI_MANAGER_MENUBAR = 1 << 0,
+ GTK_UI_MANAGER_MENU = 1 << 1,
+ GTK_UI_MANAGER_TOOLBAR = 1 << 2,
+ GTK_UI_MANAGER_PLACEHOLDER = 1 << 3,
+ GTK_UI_MANAGER_POPUP = 1 << 4,
+ GTK_UI_MANAGER_MENUITEM = 1 << 5,
+ GTK_UI_MANAGER_TOOLITEM = 1 << 6,
+ GTK_UI_MANAGER_SEPARATOR = 1 << 7,
+ GTK_UI_MANAGER_ACCELERATOR = 1 << 8,
+ GTK_UI_MANAGER_POPUP_WITH_ACCELS = 1 << 9
} GtkUIManagerItemType;
#ifdef G_OS_WIN32
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]