X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenuframe.c;h=108864679e88319a7a949dcadab8d767809f9a7a;hb=baa4a878cda78cf7ef9a894b8937c72fa50c897a;hp=120f4c385c89e9a75fa2d9e4d16c10e83181c5a2;hpb=56c548b203d9f089637d587dd9953f268cd28c90;p=chaz%2Fopenbox diff --git a/openbox/menuframe.c b/openbox/menuframe.c index 120f4c38..10886467 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -1,7 +1,7 @@ /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- menuframe.c for the Openbox window manager - Copyright (c) 2004 Mikael Magnusson + Copyright (c) 2006 Mikael Magnusson Copyright (c) 2003 Ben Jansens This program is free software; you can redistribute it and/or modify @@ -23,6 +23,7 @@ #include "screen.h" #include "grab.h" #include "openbox.h" +#include "mainloop.h" #include "config.h" #include "render/theme.h" @@ -66,9 +67,8 @@ ObMenuFrame* menu_frame_new(ObMenu *menu, ObClient *client) self->client = client; attr.event_mask = FRAME_EVENTMASK; - attr.save_under = True; self->window = createWindow(RootWindow(ob_display, ob_screen), - CWEventMask | CWSaveUnder, &attr); + CWEventMask, &attr); attr.event_mask = TITLE_EVENTMASK; self->title = createWindow(self->window, CWEventMask, &attr); self->items = createWindow(self->window, 0, NULL); @@ -189,7 +189,6 @@ void menu_frame_move(ObMenuFrame *self, gint x, gint y) void menu_frame_move_on_screen(ObMenuFrame *self) { Rect *a = NULL; - guint i; gint dx = 0, dy = 0; gint pos, half; @@ -251,6 +250,8 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self) case OB_MENU_ENTRY_TYPE_SEPARATOR: th = SEPARATOR_HEIGHT + 2*PADDING; break; + default: + g_assert_not_reached(); } RECT_SET_SIZE(self->area, self->frame->inner_w, th); XResizeWindow(ob_display, self->window, @@ -411,25 +412,25 @@ static void menu_frame_render(ObMenuFrame *self) gboolean has_icon = FALSE; ObMenu *sub; - XSetWindowBorderWidth(ob_display, self->window, ob_rr_theme->bwidth); + XSetWindowBorderWidth(ob_display, self->window, ob_rr_theme->mbwidth); XSetWindowBorder(ob_display, self->window, - RrColorPixel(ob_rr_theme->b_color)); + RrColorPixel(ob_rr_theme->menu_b_color)); if (!self->parent && self->show_title) { XMoveWindow(ob_display, self->title, - -ob_rr_theme->bwidth, h - ob_rr_theme->bwidth); + -ob_rr_theme->mbwidth, h - ob_rr_theme->mbwidth); self->a_title->texture[0].data.text.string = self->menu->title; RrMinsize(self->a_title, &tw, &th); - tw = MIN(tw, MAX_MENU_WIDTH) + ob_rr_theme->padding * 2; + tw = MIN(tw, MAX_MENU_WIDTH) + ob_rr_theme->paddingx * 2; w = MAX(w, tw); th = ob_rr_theme->menu_title_height; - h += (self->title_h = th + ob_rr_theme->bwidth); + h += (self->title_h = th + ob_rr_theme->mbwidth); - XSetWindowBorderWidth(ob_display, self->title, ob_rr_theme->bwidth); + XSetWindowBorderWidth(ob_display, self->title, ob_rr_theme->mbwidth); XSetWindowBorder(ob_display, self->title, - RrColorPixel(ob_rr_theme->b_color)); + RrColorPixel(ob_rr_theme->menu_b_color)); } XMoveWindow(ob_display, self->items, 0, h); @@ -537,9 +538,9 @@ static void menu_frame_render(ObMenuFrame *self) if (!self->parent && self->show_title) { XResizeWindow(ob_display, self->title, - w, self->title_h - ob_rr_theme->bwidth); + w, self->title_h - ob_rr_theme->mbwidth); RrPaint(self->a_title, self->title, - w, self->title_h - ob_rr_theme->bwidth); + w, self->title_h - ob_rr_theme->mbwidth); XMapWindow(ob_display, self->title); } else XUnmapWindow(ob_display, self->title); @@ -549,8 +550,8 @@ static void menu_frame_render(ObMenuFrame *self) for (it = self->entries; it; it = g_list_next(it)) menu_entry_frame_render(it->data); - w += ob_rr_theme->bwidth * 2; - h += ob_rr_theme->bwidth * 2; + w += ob_rr_theme->mbwidth * 2; + h += ob_rr_theme->mbwidth * 2; RECT_SET_SIZE(self->area, w, h); @@ -675,13 +676,14 @@ void menu_frame_hide(ObMenuFrame *self) void menu_frame_hide_all() { + GList *it; + if (config_submenu_show_delay) { /* remove any submenu open requests */ ob_main_loop_timeout_remove(ob_main_loop, menu_entry_frame_submenu_timeout); } - GList *it = g_list_last(menu_frame_visible); - if (it) + if ((it = g_list_last(menu_frame_visible))) menu_frame_hide(it->data); } @@ -719,8 +721,8 @@ ObMenuEntryFrame* menu_entry_frame_under(gint x, gint y) GList *it; if ((frame = menu_frame_under(x, y))) { - x -= ob_rr_theme->bwidth + frame->area.x; - y -= frame->title_h + ob_rr_theme->bwidth + frame->area.y; + x -= ob_rr_theme->mbwidth + frame->area.x; + y -= frame->title_h + ob_rr_theme->mbwidth + frame->area.y; for (it = frame->entries; it; it = g_list_next(it)) { ObMenuEntryFrame *e = it->data; @@ -793,7 +795,7 @@ void menu_entry_frame_show_submenu(ObMenuEntryFrame *self) self->frame->area.x + self->frame->area.width - ob_rr_theme->menu_overlap - - ob_rr_theme->bwidth, + - ob_rr_theme->mbwidth, self->frame->area.y + self->frame->title_h + self->area.y @@ -801,7 +803,7 @@ void menu_entry_frame_show_submenu(ObMenuEntryFrame *self) menu_frame_show(f, self->frame); } -void menu_entry_frame_execute(ObMenuEntryFrame *self, guint state) +void menu_entry_frame_execute(ObMenuEntryFrame *self, guint state, Time time) { if (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && self->entry->data.normal.enabled) @@ -819,9 +821,9 @@ void menu_entry_frame_execute(ObMenuEntryFrame *self, guint state) menu_frame_hide_all(); if (func) - func(entry, state, data); + func(entry, state, data, time); else - action_run(acts, client, state); + action_run(acts, client, state, time); } }