@@ -42,7 +42,7 @@ G_GNUC_INTERNAL DBusMenuItem *dbus_menu_item_new_first_section(u_int32_t id,
4242{
4343 DBusMenuItem * item = g_slice_new0 (DBusMenuItem );
4444 item -> id = id ;
45- item -> is_section = true ;
45+ item -> action_type = DBUS_MENU_ACTION_SECTION ;
4646 item -> enabled = false;
4747 item -> toggled = false;
4848 item -> attributes =
@@ -63,10 +63,9 @@ G_GNUC_INTERNAL DBusMenuItem *dbus_menu_item_new(u_int32_t id, DBusMenuModel *pa
6363 const char * prop ;
6464 GVariant * value ;
6565 item_set_magic (item );
66- item -> is_section = false;
67- item -> enabled = true;
68- item -> toggled = false;
69- item -> id = id ;
66+ item -> enabled = true;
67+ item -> toggled = false;
68+ item -> id = id ;
7069 item -> attributes =
7170 g_hash_table_new_full (g_str_hash , g_str_equal , g_free , (GDestroyNotify )g_variant_unref );
7271 item -> links =
@@ -135,7 +134,8 @@ G_GNUC_INTERNAL DBusMenuItem *dbus_menu_item_new(u_int32_t id, DBusMenuModel *pa
135134 const char * type = g_variant_get_string (value , NULL );
136135 if (!g_strcmp0 (type , DBUS_MENU_TYPE_SEPARATOR ))
137136 {
138- item -> is_section = true;
137+ item -> action_type = DBUS_MENU_ACTION_SECTION ;
138+ action_creator_found = true;
139139 }
140140 else if (!g_strcmp0 (type , DBUS_MENU_TYPE_NORMAL ))
141141 {
@@ -150,10 +150,11 @@ G_GNUC_INTERNAL DBusMenuItem *dbus_menu_item_new(u_int32_t id, DBusMenuModel *pa
150150 }
151151 else if (g_strcmp0 (prop , "x-kde-title" ) == 0 )
152152 {
153- item -> is_section = true ;
153+ item -> action_type = DBUS_MENU_ACTION_SECTION ;
154154 g_hash_table_insert (item -> attributes ,
155155 g_strdup (G_MENU_ATTRIBUTE_LABEL ),
156156 value );
157+ action_creator_found = true;
157158 }
158159 else if (!action_creator_found )
159160 {
@@ -185,7 +186,6 @@ G_GNUC_INTERNAL void dbus_menu_item_free(gpointer data)
185186G_GNUC_INTERNAL DBusMenuItem * dbus_menu_item_copy (DBusMenuItem * src )
186187{
187188 DBusMenuItem * dst = g_slice_new0 (DBusMenuItem );
188- dst -> is_section = src -> is_section ;
189189 dst -> id = src -> id ;
190190 dst -> action_type = src -> action_type ;
191191 dst -> enabled = src -> enabled ;
@@ -211,7 +211,7 @@ static bool check_and_update_mutable_attribute(DBusMenuItem *item, const char *k
211211 return false;
212212}
213213
214- static bool dbus_menu_item_update_enabled (DBusMenuItem * item , bool enabled )
214+ G_GNUC_INTERNAL bool dbus_menu_item_update_enabled (DBusMenuItem * item , bool enabled )
215215{
216216 bool updated = false;
217217 if (item -> action_type == DBUS_MENU_ACTION_SUBMENU && !item -> toggled )
@@ -272,8 +272,6 @@ G_GNUC_INTERNAL void dbus_menu_item_preload(DBusMenuItem *item)
272272 if (DBUS_MENU_IS_MODEL (submenu ))
273273 dbus_menu_model_update_layout (submenu );
274274 }
275- dbus_menu_item_update_enabled (item , true);
276- item -> toggled = true;
277275}
278276
279277G_GNUC_INTERNAL bool dbus_menu_item_copy_attributes (DBusMenuItem * src , DBusMenuItem * dst )
@@ -427,7 +425,7 @@ G_GNUC_INTERNAL bool dbus_menu_item_update_props(DBusMenuItem *item, GVariant *p
427425 else if (g_strcmp0 (prop , "visible ") == 0 )
428426 {
429427 bool vis = g_variant_get_boolean (value );
430- if (item -> is_section )
428+ if (item -> action_type == DBUS_MENU_ACTION_SECTION )
431429 {
432430 item -> toggled = !vis ;
433431 continue ;
@@ -554,8 +552,6 @@ G_GNUC_INTERNAL bool dbus_menu_item_compare_immutable(DBusMenuItem *a, DBusMenuI
554552{
555553 if (a -> id != b -> id )
556554 return false;
557- if (a -> is_section != b -> is_section )
558- return false;
559555 if (a -> referenced_action_group != b -> referenced_action_group )
560556 return false;
561557 if (a -> action_type != b -> action_type )
@@ -569,12 +565,12 @@ G_GNUC_INTERNAL void dbus_menu_item_copy_submenu(DBusMenuItem *src, DBusMenuItem
569565 DBusMenuXml * xml ;
570566 DBusMenuModel * submenu = NULL ;
571567 g_object_get (parent , "xml" , & xml , NULL );
572- if (dst -> toggled )
573- dst -> enabled = true;
574568 if (src == NULL )
575569 {
576570 if (dst -> action_type == DBUS_MENU_ACTION_SUBMENU )
577571 {
572+ if (dst -> toggled )
573+ dst -> enabled = true;
578574 submenu =
579575 dbus_menu_model_new (dst -> id , parent , xml , dst -> referenced_action_group );
580576 g_hash_table_insert (dst -> links ,
@@ -587,6 +583,8 @@ G_GNUC_INTERNAL void dbus_menu_item_copy_submenu(DBusMenuItem *src, DBusMenuItem
587583 if (dst -> action_type == DBUS_MENU_ACTION_SUBMENU &&
588584 src -> action_type == DBUS_MENU_ACTION_SUBMENU )
589585 {
586+ if (src -> toggled || dst -> toggled )
587+ dst -> enabled = dst -> toggled = true;
590588 submenu =
591589 DBUS_MENU_MODEL (g_hash_table_lookup (src -> links ,
592590 src -> enabled ? G_MENU_LINK_SUBMENU
@@ -601,6 +599,8 @@ G_GNUC_INTERNAL void dbus_menu_item_copy_submenu(DBusMenuItem *src, DBusMenuItem
601599
602600G_GNUC_INTERNAL void dbus_menu_item_generate_action (DBusMenuItem * item , DBusMenuModel * parent )
603601{
602+ if (item -> action_type == DBUS_MENU_ACTION_SECTION )
603+ return ;
604604 DBusMenuXml * xml ;
605605 DBusMenuModel * submenu =
606606 g_hash_table_lookup (item -> links ,
0 commit comments