diff -urN -X .gitignore /mnt/i/linux/dana/menu_w_def/obrender/theme.c ./obrender/theme.c --- /mnt/i/linux/dana/menu_w_def/obrender/theme.c 2011-09-20 12:54:29.000000000 +0300 +++ ./obrender/theme.c 2011-10-26 11:04:28.000000000 +0300 @@ -1667,6 +1667,7 @@ g_free(theme->def_win_icon); RrPixmapMaskFree(theme->menu_bullet_mask); + RrPixmapMaskFree(theme->menu_bullet_def_mask); RrPixmapMaskFree(theme->down_arrow_mask); RrPixmapMaskFree(theme->up_arrow_mask); diff -urN -X .gitignore /mnt/i/linux/dana/menu_w_def/openbox/event.c ./openbox/event.c --- /mnt/i/linux/dana/menu_w_def/openbox/event.c 2011-09-20 12:54:29.000000000 +0300 +++ ./openbox/event.c 2011-10-26 11:08:06.000000000 +0300 @@ -1816,13 +1816,11 @@ if (ev->xbutton.button==1 && e->frame->child && (menu_entry_frame_x_not_in_bullet(e->frame, ev->xbutton.x))) { - ObMenuEntryFrame *def_entry = - e->frame->child->default_entry; - if (def_entry) - e = def_entry; + if (e->frame->child->default_entry) + e = e->frame->child->default_entry; } menu_entry_frame_execute(e, ev->xbutton.state); - } + } } else menu_frame_hide_all(); @@ -1983,10 +1981,10 @@ else if (frame->selected){ /* execute selected entry */ menu_entry_frame_execute(frame->selected, ev->xkey.state); + } } } } - } return ret; } diff -urN -X .gitignore /mnt/i/linux/dana/menu_w_def/openbox/menu.c ./openbox/menu.c --- /mnt/i/linux/dana/menu_w_def/openbox/menu.c 2011-09-20 12:54:29.000000000 +0300 +++ ./openbox/menu.c 2011-10-26 16:57:46.000000000 +0300 @@ -292,10 +292,8 @@ c = obt_xml_find_node(node->next, "action"); } e = menu_add_normal(state->parent, -1, label, acts, TRUE); - if (is_default){ + if (is_default && !state->parent->default_entry) state->parent->default_entry = e; - state->parent->has_default_entry = TRUE; - } if (config_menu_show_icons && obt_xml_attr_string(node, "icon", &icon)) { @@ -597,6 +595,7 @@ GSList *actions, gboolean allow_shortcut) { ObMenuEntry *e; + e = menu_entry_new(self, OB_MENU_ENTRY_TYPE_NORMAL, id); e->data.normal.actions = actions; diff -urN -X .gitignore /mnt/i/linux/dana/menu_w_def/openbox/menuframe.c ./openbox/menuframe.c --- /mnt/i/linux/dana/menu_w_def/openbox/menuframe.c 2011-09-20 12:54:29.000000000 +0300 +++ ./openbox/menuframe.c 2011-10-26 16:55:51.000000000 +0300 @@ -55,6 +55,7 @@ static void menu_entry_frame_free(ObMenuEntryFrame *self); static void menu_frame_update(ObMenuFrame *self); static gboolean submenu_show_timeout(gpointer data); +static void menu_frame_hide(ObMenuFrame *self); static gboolean submenu_hide_timeout(gpointer data); @@ -188,9 +189,9 @@ self->icon = createWindow(self->window, 0, NULL); g_hash_table_insert(menu_frame_map, &self->icon, self); } - if ( (entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) - || ( (entry->type == OB_MENU_ENTRY_TYPE_NORMAL) - && (entry == entry->menu->default_entry))) + if (entry->type == OB_MENU_ENTRY_TYPE_SUBMENU + || (entry->type == OB_MENU_ENTRY_TYPE_NORMAL + && entry == entry->menu->default_entry)) { self->bullet = createWindow(self->window, 0, NULL); g_hash_table_insert(menu_frame_map, &self->bullet, self); @@ -368,6 +369,7 @@ gint th; /* temp */ ObMenu *sub; ObMenuFrame *frame = self->frame; + gboolean has_bullet; switch (self->entry->type) { case OB_MENU_ENTRY_TYPE_NORMAL: @@ -528,15 +530,15 @@ g_assert_not_reached(); } - gboolean has_bullet = FALSE; + has_bullet = FALSE; if ((self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) && (self == self->frame->default_entry)) { // show the mark of the default item RrAppearance *bullet_a; XMoveResizeWindow(obt_display, self->bullet, - 0, frame->item_margin.top, - self->frame->icon_x, + PADDING, PADDING, + ITEM_HEIGHT - 2*PADDING, ITEM_HEIGHT - 2*PADDING); bullet_a = ((self == self->frame->selected) ? ob_rr_theme->a_menu_bullet_def_selected : @@ -628,14 +630,14 @@ BULLET_X, PADDING, ITEM_HEIGHT - 2*PADDING, ITEM_HEIGHT - 2*PADDING); - if (sub->has_default_entry) + if (sub->default_entry) bullet_a = ((self == self->frame->selected) ? - ob_rr_theme->a_menu_bullet_def_selected : - ob_rr_theme->a_menu_bullet_def_normal); + ob_rr_theme->a_menu_bullet_def_selected : + ob_rr_theme->a_menu_bullet_def_normal); else bullet_a = ((self == self->frame->selected) ? - ob_rr_theme->a_menu_bullet_selected : - ob_rr_theme->a_menu_bullet_normal); + ob_rr_theme->a_menu_bullet_selected : + ob_rr_theme->a_menu_bullet_normal); bullet_a->surface.parent = item_a; bullet_a->surface.parentx = self->frame->text_x + self->frame->text_w - ITEM_HEIGHT + PADDING; @@ -848,8 +850,8 @@ self->text_w = w; if (self->entries) { - gint def_w = ob_rr_theme->a_menu_bullet_def_normal->w; - if (self->menu->has_default_entry) { + gint def_w = ITEM_HEIGHT-2*PADDING; + if (self->menu->default_entry) { w += def_w; self->icon_x += def_w; self->text_x += def_w; @@ -1115,7 +1117,7 @@ return TRUE; } -void menu_frame_hide(ObMenuFrame *self) +static void menu_frame_hide(ObMenuFrame *self) { ObMenu *const menu = self->menu; GList *it = g_list_find(menu_frame_visible, self); diff -urN -X .gitignore /mnt/i/linux/dana/menu_w_def/openbox/menuframe.h ./openbox/menuframe.h --- /mnt/i/linux/dana/menu_w_def/openbox/menuframe.h 2011-09-20 12:54:29.000000000 +0300 +++ ./openbox/menuframe.h 2011-10-26 15:09:09.000000000 +0300 @@ -145,7 +145,6 @@ gboolean menu_entry_frame_x_not_in_bullet(ObMenuFrame* frame, gint x /* local */); void menu_entry_frame_show_submenu(ObMenuEntryFrame *self); -void menu_frame_hide(ObMenuFrame *self); gboolean menu_frame_show(ObMenuFrame *self); void menu_entry_frame_execute(ObMenuEntryFrame *self, guint state); diff -urN -X .gitignore /mnt/i/linux/dana/menu_w_def/openbox/menu.h ./openbox/menu.h --- /mnt/i/linux/dana/menu_w_def/openbox/menu.h 2011-09-20 12:54:29.000000000 +0300 +++ ./openbox/menu.h 2011-10-26 16:56:07.000000000 +0300 @@ -79,7 +79,6 @@ /* default entry */ ObMenuEntry *default_entry; - gboolean has_default_entry; /* plugin data */ gpointer data;