X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenuframe.c;h=4a56548f3784543f7dc0abf8007a799c0dddea66;hb=416ee379eaf1b9c0fb98e0367bd0e19d67d51bbb;hp=7052296e14fadec50bd60e50e3fb79f2413cf49e;hpb=a991c07bc1a1f86fd47db0e5442a629f3c39b407;p=chaz%2Fopenbox diff --git a/openbox/menuframe.c b/openbox/menuframe.c index 7052296e..4a56548f 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -94,16 +94,18 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry, attr.event_mask = ENTRY_EVENTMASK; self->window = createWindow(self->frame->items, CWEventMask, &attr); - self->icon = createWindow(self->window, 0, NULL); self->text = createWindow(self->window, 0, NULL); - self->bullet = createWindow(self->window, 0, NULL); + if (entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR) { + self->icon = createWindow(self->window, 0, NULL); + self->bullet = createWindow(self->window, 0, NULL); + } XMapWindow(ob_display, self->window); XMapWindow(ob_display, self->text); self->a_normal = RrAppearanceCopy(ob_rr_theme->a_menu_item); self->a_disabled = RrAppearanceCopy(ob_rr_theme->a_menu_disabled); - self->a_selected = RrAppearanceCopy(ob_rr_theme->a_menu_hilite); + self->a_selected = RrAppearanceCopy(ob_rr_theme->a_menu_selected); if (entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR) { self->a_separator = RrAppearanceCopy(ob_rr_theme->a_clear_tex); @@ -121,7 +123,7 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry, self->a_text_disabled = RrAppearanceCopy(ob_rr_theme->a_menu_text_disabled); self->a_text_selected = - RrAppearanceCopy(ob_rr_theme->a_menu_text_hilite); + RrAppearanceCopy(ob_rr_theme->a_menu_text_selected); return self; } @@ -129,10 +131,12 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry, static void menu_entry_frame_free(ObMenuEntryFrame *self) { if (self) { - XDestroyWindow(ob_display, self->icon); XDestroyWindow(ob_display, self->text); - XDestroyWindow(ob_display, self->bullet); XDestroyWindow(ob_display, self->window); + if (self->entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR) { + XDestroyWindow(ob_display, self->icon); + XDestroyWindow(ob_display, self->bullet); + } RrAppearanceFree(self->a_normal); RrAppearanceFree(self->a_disabled); @@ -256,22 +260,20 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self) self->frame->item_h - 2*PADDING); break; case OB_MENU_ENTRY_TYPE_SEPARATOR: - XMoveResizeWindow(ob_display, self->text, - self->frame->text_x, PADDING, - self->frame->text_w - 2*PADDING, - SEPARATOR_HEIGHT); + XMoveResizeWindow(ob_display, self->text, PADDING, PADDING, + self->area.width - 2*PADDING, SEPARATOR_HEIGHT); self->a_separator->surface.parent = item_a; - self->a_separator->surface.parentx = self->frame->text_x; + self->a_separator->surface.parentx = PADDING; self->a_separator->surface.parenty = PADDING; self->a_separator->texture[0].data.lineart.color = text_a->texture[0].data.text.color; self->a_separator->texture[0].data.lineart.x1 = 2*PADDING; self->a_separator->texture[0].data.lineart.y1 = SEPARATOR_HEIGHT / 2; self->a_separator->texture[0].data.lineart.x2 = - self->frame->text_w - 6*PADDING; + self->area.width - 4*PADDING; self->a_separator->texture[0].data.lineart.y2 = SEPARATOR_HEIGHT / 2; RrPaint(self->a_separator, self->text, - self->frame->text_w - 2*PADDING, SEPARATOR_HEIGHT); + self->area.width - 2*PADDING, SEPARATOR_HEIGHT); break; } @@ -617,12 +619,12 @@ void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry) ObMenuEntryFrame *old = self->selected; ObMenuFrame *oldchild = self->child; + if (entry && entry->entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR) + entry = old; + if (old == entry) return; - if (entry && entry->entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR) - self->selected = entry; - else - self->selected = NULL; + self->selected = entry; if (old) menu_entry_frame_render(old); @@ -667,7 +669,8 @@ void menu_entry_frame_execute(ObMenuEntryFrame *self, gboolean hide) ObClient *client = self->frame->client; /* release grabs before executing the shit */ - menu_frame_hide_all(); + if (hide) + menu_frame_hide_all(); if (func) func(entry, data);