XMapWindow(ob_display, self->text);
self->a_normal = RrAppearanceCopy(ob_rr_theme->a_menu_normal);
- self->a_disabled = RrAppearanceCopy(ob_rr_theme->a_menu_disabled);
self->a_selected = RrAppearanceCopy(ob_rr_theme->a_menu_selected);
+ self->a_disabled = RrAppearanceCopy(ob_rr_theme->a_menu_disabled);
+ self->a_disabled_selected =
+ RrAppearanceCopy(ob_rr_theme->a_menu_disabled_selected);
if (entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR) {
self->a_separator = RrAppearanceCopy(ob_rr_theme->a_clear_tex);
self->a_text_normal =
RrAppearanceCopy(ob_rr_theme->a_menu_text_normal);
- self->a_text_disabled =
- RrAppearanceCopy(ob_rr_theme->a_menu_text_disabled);
self->a_text_selected =
RrAppearanceCopy(ob_rr_theme->a_menu_text_selected);
+ self->a_text_disabled =
+ RrAppearanceCopy(ob_rr_theme->a_menu_text_disabled);
+ self->a_text_disabled_selected =
+ RrAppearanceCopy(ob_rr_theme->a_menu_text_disabled_selected);
self->a_text_title =
RrAppearanceCopy(ob_rr_theme->a_menu_text_title);
}
RrAppearanceFree(self->a_normal);
- RrAppearanceFree(self->a_disabled);
RrAppearanceFree(self->a_selected);
+ RrAppearanceFree(self->a_disabled);
+ RrAppearanceFree(self->a_disabled_selected);
RrAppearanceFree(self->a_separator);
RrAppearanceFree(self->a_icon);
RrAppearanceFree(self->a_mask);
RrAppearanceFree(self->a_text_normal);
- RrAppearanceFree(self->a_text_disabled);
RrAppearanceFree(self->a_text_selected);
+ RrAppearanceFree(self->a_text_disabled);
+ RrAppearanceFree(self->a_text_disabled_selected);
RrAppearanceFree(self->a_text_title);
RrAppearanceFree(self->a_bullet_normal);
RrAppearanceFree(self->a_bullet_selected);
/* try to the right of the cursor */
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
+ self->direction_right = TRUE;
if (dx != 0) {
/* try to the left of the cursor */
myx = *x - self->area.width;
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
+ self->direction_right = FALSE;
}
if (dx != 0) {
/* if didnt fit on either side so just use what it says */
myx = *x;
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
+ self->direction_right = TRUE;
}
*x = myx + dx;
*y += dy;
/* try to the bottom right of the cursor */
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
+ self->direction_right = TRUE;
if (dx != 0 || dy != 0) {
/* try to the bottom left of the cursor */
myx = *x - self->area.width;
myy = *y;
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
+ self->direction_right = FALSE;
}
if (dx != 0 || dy != 0) {
/* try to the top right of the cursor */
myx = *x;
myy = *y - self->area.height;
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
+ self->direction_right = TRUE;
}
if (dx != 0 || dy != 0) {
/* try to the top left of the cursor */
myx = *x - self->area.width;
myy = *y - self->area.height;
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
+ self->direction_right = FALSE;
}
if (dx != 0 || dy != 0) {
/* if didnt fit on either side so just use what it says */
myx = *x;
myy = *y;
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
+ self->direction_right = TRUE;
}
*x = myx + dx;
*y = myy + dy;
switch (self->entry->type) {
case OB_MENU_ENTRY_TYPE_NORMAL:
case OB_MENU_ENTRY_TYPE_SUBMENU:
- item_a = ((self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
- !self->entry->data.normal.enabled) ?
- self->a_disabled :
+ item_a = (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
+ !self->entry->data.normal.enabled ?
+ /* disabled */
(self == self->frame->selected ?
- self->a_selected :
- self->a_normal));
+ self->a_disabled_selected : self->a_disabled) :
+ /* enabled */
+ (self == self->frame->selected ?
+ self->a_selected : self->a_normal));
th = self->frame->item_h;
break;
case OB_MENU_ENTRY_TYPE_SEPARATOR:
switch (self->entry->type) {
case OB_MENU_ENTRY_TYPE_NORMAL:
- text_a = (!self->entry->data.normal.enabled ?
- self->a_text_disabled :
+ text_a = (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
+ !self->entry->data.normal.enabled ?
+ /* disabled */
+ (self == self->frame->selected ?
+ self->a_text_disabled_selected : self->a_text_disabled) :
+ /* enabled */
(self == self->frame->selected ?
- self->a_text_selected :
- self->a_text_normal));
+ self->a_text_selected : self->a_text_normal));
text_a->texture[0].data.text.string = self->entry->data.normal.label;
if (self->entry->data.normal.shortcut &&
(self->frame->menu->show_all_shortcuts ||
self->a_mask->texture[0].data.mask.mask =
self->entry->data.normal.mask;
- c = ((self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
- !self->entry->data.normal.enabled) ?
- self->entry->data.normal.mask_disabled_color :
+ c = (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
+ !self->entry->data.normal.enabled ?
+ /* disabled */
+ (self == self->frame->selected ?
+ self->entry->data.normal.mask_disabled_selected_color :
+ self->entry->data.normal.mask_disabled_color) :
+ /* enabled */
(self == self->frame->selected ?
self->entry->data.normal.mask_selected_color :
self->entry->data.normal.mask_normal_color));
gint l, t, r, b;
e->a_text_normal->texture[0].data.text.string = "";
- RrMinsize(e->a_text_normal, &tw, &th);
+ RrMinSize(e->a_text_normal, &tw, &th);
tw += 2*PADDING;
th += 2*PADDING;
self->item_h = th;
MAX(self->item_margin.top, t),
MAX(self->item_margin.right, r),
MAX(self->item_margin.bottom, b));
+ RrMargins(e->a_disabled_selected, &l, &t, &r, &b);
+ STRUT_SET(self->item_margin,
+ MAX(self->item_margin.left, l),
+ MAX(self->item_margin.top, t),
+ MAX(self->item_margin.right, r),
+ MAX(self->item_margin.bottom, b));
} else
self->item_h = 0;
XSetWindowBorder(ob_display, e->window,
RrColorPixel(ob_rr_theme->menu_b_color));
- text_a = ((e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
- !e->entry->data.normal.enabled) ?
- e->a_text_disabled :
+
+ text_a = (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
+ !e->entry->data.normal.enabled ?
+ /* disabled */
+ (e == self->selected ?
+ e->a_text_disabled_selected : e->a_text_disabled) :
+ /* enabled */
(e == self->selected ?
- e->a_text_selected :
- e->a_text_normal));
+ e->a_text_selected : e->a_text_normal));
switch (e->entry->type) {
case OB_MENU_ENTRY_TYPE_NORMAL:
text_a->texture[0].data.text.string = e->entry->data.normal.label;
- RrMinsize(text_a, &tw, &th);
+ RrMinSize(text_a, &tw, &th);
tw = MIN(tw, MAX_MENU_WIDTH);
if (e->entry->data.normal.icon_data ||
case OB_MENU_ENTRY_TYPE_SUBMENU:
sub = e->entry->data.submenu.submenu;
text_a->texture[0].data.text.string = sub ? sub->title : "";
- RrMinsize(text_a, &tw, &th);
+ RrMinSize(text_a, &tw, &th);
tw = MIN(tw, MAX_MENU_WIDTH);
if (e->entry->data.normal.icon_data ||
if (e->entry->data.separator.label != NULL) {
e->a_text_title->texture[0].data.text.string =
e->entry->data.separator.label;
- RrMinsize(e->a_text_title, &tw, &th);
+ RrMinSize(e->a_text_title, &tw, &th);
tw = MIN(tw, MAX_MENU_WIDTH);
th = ob_rr_theme->menu_title_height +
(ob_rr_theme->mbwidth - PADDING) *2;
{
GList *it;
- if (menu_frame_visible == NULL) {
- /* no menus shown yet */
- if (!grab_pointer(TRUE, TRUE, OB_CURSOR_POINTER))
- return FALSE;
- if (!grab_keyboard(TRUE)) {
- grab_pointer(FALSE, TRUE, OB_CURSOR_POINTER);
- return FALSE;
- }
- }
-
/* determine if the underlying menu is already visible */
for (it = menu_frame_visible; it; it = g_list_next(it)) {
ObMenuFrame *f = it->data;
}
if (!it) {
if (self->menu->update_func)
- self->menu->update_func(self, self->menu->data);
+ if (!self->menu->update_func(self, self->menu->data))
+ return FALSE;
+ }
+
+ if (menu_frame_visible == NULL) {
+ /* no menus shown yet */
+ if (!grab_pointer(TRUE, TRUE, OB_CURSOR_POINTER))
+ return FALSE;
+ if (!grab_keyboard(TRUE)) {
+ grab_pointer(FALSE, TRUE, OB_CURSOR_POINTER);
+ return FALSE;
+ }
}
menu_frame_update(self);
e = it->data;
if (e->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU)
break;
- if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
- e->entry->data.normal.enabled)
+ if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL)
break;
}
}
e = it->data;
if (e->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU)
break;
- if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
- e->entry->data.normal.enabled)
+ if (e->entry->type == OB_MENU_ENTRY_TYPE_NORMAL)
break;
}
}