@@ -42,7 +42,7 @@ G_GNUC_INTERNAL DBusMenuItem *dbus_menu_item_new_first_section(u_int32_t id,
42
42
{
43
43
DBusMenuItem * item = g_slice_new0 (DBusMenuItem );
44
44
item -> id = id ;
45
- item -> is_section = true ;
45
+ item -> action_type = DBUS_MENU_ACTION_SECTION ;
46
46
item -> enabled = false;
47
47
item -> toggled = false;
48
48
item -> attributes =
@@ -63,10 +63,9 @@ G_GNUC_INTERNAL DBusMenuItem *dbus_menu_item_new(u_int32_t id, DBusMenuModel *pa
63
63
const char * prop ;
64
64
GVariant * value ;
65
65
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 ;
70
69
item -> attributes =
71
70
g_hash_table_new_full (g_str_hash , g_str_equal , g_free , (GDestroyNotify )g_variant_unref );
72
71
item -> links =
@@ -135,7 +134,8 @@ G_GNUC_INTERNAL DBusMenuItem *dbus_menu_item_new(u_int32_t id, DBusMenuModel *pa
135
134
const char * type = g_variant_get_string (value , NULL );
136
135
if (!g_strcmp0 (type , DBUS_MENU_TYPE_SEPARATOR ))
137
136
{
138
- item -> is_section = true;
137
+ item -> action_type = DBUS_MENU_ACTION_SECTION ;
138
+ action_creator_found = true;
139
139
}
140
140
else if (!g_strcmp0 (type , DBUS_MENU_TYPE_NORMAL ))
141
141
{
@@ -150,10 +150,11 @@ G_GNUC_INTERNAL DBusMenuItem *dbus_menu_item_new(u_int32_t id, DBusMenuModel *pa
150
150
}
151
151
else if (g_strcmp0 (prop , "x-kde-title" ) == 0 )
152
152
{
153
- item -> is_section = true ;
153
+ item -> action_type = DBUS_MENU_ACTION_SECTION ;
154
154
g_hash_table_insert (item -> attributes ,
155
155
g_strdup (G_MENU_ATTRIBUTE_LABEL ),
156
156
value );
157
+ action_creator_found = true;
157
158
}
158
159
else if (!action_creator_found )
159
160
{
@@ -185,7 +186,6 @@ G_GNUC_INTERNAL void dbus_menu_item_free(gpointer data)
185
186
G_GNUC_INTERNAL DBusMenuItem * dbus_menu_item_copy (DBusMenuItem * src )
186
187
{
187
188
DBusMenuItem * dst = g_slice_new0 (DBusMenuItem );
188
- dst -> is_section = src -> is_section ;
189
189
dst -> id = src -> id ;
190
190
dst -> action_type = src -> action_type ;
191
191
dst -> enabled = src -> enabled ;
@@ -211,7 +211,7 @@ static bool check_and_update_mutable_attribute(DBusMenuItem *item, const char *k
211
211
return false;
212
212
}
213
213
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 )
215
215
{
216
216
bool updated = false;
217
217
if (item -> action_type == DBUS_MENU_ACTION_SUBMENU && !item -> toggled )
@@ -272,8 +272,6 @@ G_GNUC_INTERNAL void dbus_menu_item_preload(DBusMenuItem *item)
272
272
if (DBUS_MENU_IS_MODEL (submenu ))
273
273
dbus_menu_model_update_layout (submenu );
274
274
}
275
- dbus_menu_item_update_enabled (item , true);
276
- item -> toggled = true;
277
275
}
278
276
279
277
G_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
427
425
else if (g_strcmp0 (prop , "visible ") == 0 )
428
426
{
429
427
bool vis = g_variant_get_boolean (value );
430
- if (item -> is_section )
428
+ if (item -> action_type == DBUS_MENU_ACTION_SECTION )
431
429
{
432
430
item -> toggled = !vis ;
433
431
continue ;
@@ -554,8 +552,6 @@ G_GNUC_INTERNAL bool dbus_menu_item_compare_immutable(DBusMenuItem *a, DBusMenuI
554
552
{
555
553
if (a -> id != b -> id )
556
554
return false;
557
- if (a -> is_section != b -> is_section )
558
- return false;
559
555
if (a -> referenced_action_group != b -> referenced_action_group )
560
556
return false;
561
557
if (a -> action_type != b -> action_type )
@@ -569,12 +565,12 @@ G_GNUC_INTERNAL void dbus_menu_item_copy_submenu(DBusMenuItem *src, DBusMenuItem
569
565
DBusMenuXml * xml ;
570
566
DBusMenuModel * submenu = NULL ;
571
567
g_object_get (parent , "xml" , & xml , NULL );
572
- if (dst -> toggled )
573
- dst -> enabled = true;
574
568
if (src == NULL )
575
569
{
576
570
if (dst -> action_type == DBUS_MENU_ACTION_SUBMENU )
577
571
{
572
+ if (dst -> toggled )
573
+ dst -> enabled = true;
578
574
submenu =
579
575
dbus_menu_model_new (dst -> id , parent , xml , dst -> referenced_action_group );
580
576
g_hash_table_insert (dst -> links ,
@@ -587,6 +583,8 @@ G_GNUC_INTERNAL void dbus_menu_item_copy_submenu(DBusMenuItem *src, DBusMenuItem
587
583
if (dst -> action_type == DBUS_MENU_ACTION_SUBMENU &&
588
584
src -> action_type == DBUS_MENU_ACTION_SUBMENU )
589
585
{
586
+ if (src -> toggled || dst -> toggled )
587
+ dst -> enabled = dst -> toggled = true;
590
588
submenu =
591
589
DBUS_MENU_MODEL (g_hash_table_lookup (src -> links ,
592
590
src -> enabled ? G_MENU_LINK_SUBMENU
@@ -601,6 +599,8 @@ G_GNUC_INTERNAL void dbus_menu_item_copy_submenu(DBusMenuItem *src, DBusMenuItem
601
599
602
600
G_GNUC_INTERNAL void dbus_menu_item_generate_action (DBusMenuItem * item , DBusMenuModel * parent )
603
601
{
602
+ if (item -> action_type == DBUS_MENU_ACTION_SECTION )
603
+ return ;
604
604
DBusMenuXml * xml ;
605
605
DBusMenuModel * submenu =
606
606
g_hash_table_lookup (item -> links ,
0 commit comments