summaryrefslogtreecommitdiff
path: root/openbox/menuframe.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-08-28 07:49:57 +0000
committerDana Jansens <danakj@orodu.net>2003-08-28 07:49:57 +0000
commitc34915ae8d49f61426912ef332e8097be516bdd3 (patch)
tree83f0a5eb4334f67c2830dd2ade09b125ac485f73 /openbox/menuframe.c
parentf7eb47dba4b091b67a28404ce461b15dffcb4298 (diff)
make submenus not require the menu to exist when they are created, not until they are shown.
crash fix in client_menu
Diffstat (limited to 'openbox/menuframe.c')
-rw-r--r--openbox/menuframe.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/openbox/menuframe.c b/openbox/menuframe.c
index ea7f254c..8ffd27ad 100644
--- a/openbox/menuframe.c
+++ b/openbox/menuframe.c
@@ -170,6 +170,7 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
{
RrAppearance *item_a, *text_a;
gint th; /* temp */
+ ObMenu *sub;
item_a = ((self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
!self->entry->data.normal.enabled) ?
@@ -205,8 +206,8 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
text_a->texture[0].data.text.string = self->entry->data.normal.label;
break;
case OB_MENU_ENTRY_TYPE_SUBMENU:
- text_a->texture[0].data.text.string =
- self->entry->data.submenu.submenu->title;
+ sub = self->entry->data.submenu.submenu;
+ text_a->texture[0].data.text.string = sub ? sub->title : "";
break;
case OB_MENU_ENTRY_TYPE_SEPARATOR:
break;
@@ -265,6 +266,7 @@ static void menu_frame_render(ObMenuFrame *self)
gint tw, th; /* temps */
GList *it;
gboolean has_icon = FALSE, has_bullet = FALSE;
+ ObMenu *sub;
XSetWindowBorderWidth(ob_display, self->window, ob_rr_theme->bwidth);
XSetWindowBorder(ob_display, self->window,
@@ -315,8 +317,8 @@ static void menu_frame_render(ObMenuFrame *self)
/* XXX has_icon = TRUE; */
break;
case OB_MENU_ENTRY_TYPE_SUBMENU:
- text_a->texture[0].data.text.string =
- e->entry->data.submenu.submenu->title;
+ sub = e->entry->data.submenu.submenu;
+ text_a->texture[0].data.text.string = sub ? sub->title : "";
RrMinsize(text_a, &tw, &th);
has_bullet = TRUE;
@@ -378,6 +380,8 @@ static void menu_frame_update(ObMenuFrame *self)
{
GList *mit, *fit;
+ menu_find_submenus(self->menu);
+
self->selected = NULL;
for (mit = self->menu->entries, fit = self->entries; mit && fit;
@@ -538,6 +542,8 @@ void menu_entry_frame_show_submenu(ObMenuEntryFrame *self)
{
ObMenuFrame *f;
+ if (!self->entry->data.submenu.submenu) return;
+
f = menu_frame_new(self->entry->data.submenu.submenu,
self->frame->client);
menu_frame_move(f,