X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2FBasemenu.cc;h=99dcbfa0c544f7edc69a3ef78c8281c9d2eee592;hb=63f8386dde9fb610492dd9a10d0a688f16d0dcf4;hp=b0e9760623ba6141298d0b8e9091db7621c1cbb3;hpb=dfc5f034581f5a26cba5c4811500438f89f0634a;p=chaz%2Fopenbox diff --git a/src/Basemenu.cc b/src/Basemenu.cc index b0e97606..99dcbfa0 100644 --- a/src/Basemenu.cc +++ b/src/Basemenu.cc @@ -34,13 +34,17 @@ # include #endif // HAVE_STDIO_H -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include +#endif // HAVE_STDLIB_H + +#ifdef HAVE_STRING_H # include -#endif // STDC_HEADERS +#endif // HAVE_STRING_H #include -using namespace std; +using std::min; +using std::max; #include "i18n.h" #include "openbox.h" @@ -49,11 +53,9 @@ using namespace std; static Basemenu *shown = (Basemenu *) 0; -Basemenu::Basemenu(BScreen *scrn) { - screen = scrn; - openbox = screen->getOpenbox(); - image_ctrl = screen->getImageControl(); - display = openbox->getXDisplay(); +Basemenu::Basemenu(BScreen &scrn) : openbox(scrn.getOpenbox()), screen(scrn) { + image_ctrl = screen.getImageControl(); + display = openbox.getXDisplay(); parent = (Basemenu *) 0; alignment = AlignDontCare; @@ -83,16 +85,16 @@ Basemenu::Basemenu(BScreen *scrn) { menu.hilite_pixmap = menu.sel_pixmap = None; - menu.bevel_w = screen->getBevelWidth(); + menu.bevel_w = screen.getBevelWidth(); if (i18n->multibyte()) menu.width = menu.title_h = menu.item_w = menu.frame_h = - screen->getMenuStyle()->t_fontset_extents->max_ink_extent.height + + screen.getMenuStyle()->t_fontset_extents->max_ink_extent.height + (menu.bevel_w * 2); else menu.width = menu.title_h = menu.item_w = menu.frame_h = - screen->getMenuStyle()->t_font->ascent + - screen->getMenuStyle()->t_font->descent + (menu.bevel_w * 2); + screen.getMenuStyle()->t_font->ascent + + screen.getMenuStyle()->t_font->descent + (menu.bevel_w * 2); menu.label = 0; @@ -100,7 +102,7 @@ Basemenu::Basemenu(BScreen *scrn) { menu.persub = menu.minsub = 0; - MenuStyle *style = screen->getMenuStyle(); + MenuStyle *style = screen.getMenuStyle(); if (i18n->multibyte()) { menu.item_h = style->f_fontset_extents->max_ink_extent.height + (menu.bevel_w); @@ -109,44 +111,42 @@ Basemenu::Basemenu(BScreen *scrn) { (menu.bevel_w); } - menu.height = menu.title_h + screen->getBorderWidth() + menu.frame_h; + menu.height = menu.title_h + screen.getBorderWidth() + menu.frame_h; unsigned long attrib_mask = CWBackPixmap | CWBackPixel | CWBorderPixel | CWColormap | CWOverrideRedirect | CWEventMask; XSetWindowAttributes attrib; attrib.background_pixmap = None; attrib.background_pixel = attrib.border_pixel = - screen->getBorderColor()->getPixel(); - attrib.colormap = screen->getColormap(); + screen.getBorderColor()->getPixel(); + attrib.colormap = screen.getColormap(); attrib.override_redirect = True; attrib.event_mask = ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | ExposureMask; menu.window = - XCreateWindow(display, screen->getRootWindow(), menu.x, menu.y, menu.width, - menu.height, screen->getBorderWidth(), screen->getDepth(), - InputOutput, screen->getVisual(), attrib_mask, &attrib); - openbox->saveMenuSearch(menu.window, this); + XCreateWindow(display, screen.getRootWindow(), menu.x, menu.y, menu.width, + menu.height, screen.getBorderWidth(), screen.getDepth(), + InputOutput, screen.getVisual(), attrib_mask, &attrib); + openbox.saveMenuSearch(menu.window, this); attrib_mask = CWBackPixmap | CWBackPixel | CWBorderPixel | CWEventMask; - attrib.background_pixel = screen->getBorderColor()->getPixel(); + attrib.background_pixel = screen.getBorderColor()->getPixel(); attrib.event_mask |= EnterWindowMask | LeaveWindowMask; menu.title = XCreateWindow(display, menu.window, 0, 0, menu.width, menu.height, 0, - screen->getDepth(), InputOutput, screen->getVisual(), + screen.getDepth(), InputOutput, screen.getVisual(), attrib_mask, &attrib); - openbox->saveMenuSearch(menu.title, this); + openbox.saveMenuSearch(menu.title, this); attrib.event_mask |= PointerMotionMask; menu.frame = XCreateWindow(display, menu.window, 0, - menu.title_h + screen->getBorderWidth(), + menu.title_h + screen.getBorderWidth(), menu.width, menu.frame_h, 0, - screen->getDepth(), InputOutput, - screen->getVisual(), attrib_mask, &attrib); - openbox->saveMenuSearch(menu.frame, this); - - menuitems = new LinkedList; + screen.getDepth(), InputOutput, + screen.getVisual(), attrib_mask, &attrib); + openbox.saveMenuSearch(menu.frame, this); // even though this is the end of the constructor the menu is still not // completely created. items must be inserted and it must be update()'d @@ -159,12 +159,9 @@ Basemenu::~Basemenu(void) { if (shown && shown->getWindowID() == getWindowID()) shown = (Basemenu *) 0; - int n = menuitems->count(); - for (int i = 0; i < n; ++i) + while (!menuitems.empty()) remove(0); - delete menuitems; - if (menu.label) delete [] menu.label; @@ -180,13 +177,13 @@ Basemenu::~Basemenu(void) { if (menu.sel_pixmap) image_ctrl->removeImage(menu.sel_pixmap); - openbox->removeMenuSearch(menu.title); + openbox.removeMenuSearch(menu.title); XDestroyWindow(display, menu.title); - openbox->removeMenuSearch(menu.frame); + openbox.removeMenuSearch(menu.frame); XDestroyWindow(display, menu.frame); - openbox->removeMenuSearch(menu.window); + openbox.removeMenuSearch(menu.window); XDestroyWindow(display, menu.window); } @@ -198,9 +195,12 @@ int Basemenu::insert(const char *l, int function, const char *e, int pos) { if (e) exec = bstrdup(e); BasemenuItem *item = new BasemenuItem(label, function, exec); - menuitems->insert(item, pos); + if (pos == -1) + menuitems.push_back(item); + else + menuitems.insert(menuitems.begin() + pos, item); - return menuitems->count(); + return menuitems.size(); } @@ -210,29 +210,36 @@ int Basemenu::insert(const char *l, Basemenu *submenu, int pos) { if (l) label = bstrdup(l); BasemenuItem *item = new BasemenuItem(label, submenu); - menuitems->insert(item, pos); + if (pos == -1) + menuitems.push_back(item); + else + menuitems.insert(menuitems.begin() + pos, item); submenu->parent = this; - return menuitems->count(); + return menuitems.size(); } int Basemenu::insert(const char **ulabel, int pos, int function) { BasemenuItem *item = new BasemenuItem(ulabel, function); - menuitems->insert(item, pos); + if (pos == -1) + menuitems.push_back(item); + else + menuitems.insert(menuitems.begin() + pos, item); - return menuitems->count(); + return menuitems.size(); } int Basemenu::remove(int index) { - if (index < 0 || index > menuitems->count()) return -1; + if (index < 0 || index > (signed)menuitems.size()) return -1; - BasemenuItem *item = menuitems->remove(index); + BasemenuItem *item = menuitems[index]; + menuitems.erase(menuitems.begin() + index); if (item) { - if ((! internal_menu) && (item->submenu())) { + if ((!internal_menu) && (item->submenu())) { Basemenu *tmp = (Basemenu *) item->submenu(); if (! tmp->internal_menu) { @@ -256,12 +263,12 @@ int Basemenu::remove(int index) { else if (which_sub > index) which_sub--; - return menuitems->count(); + return menuitems.size(); } void Basemenu::update(void) { - MenuStyle *style = screen->getMenuStyle(); + MenuStyle *style = screen.getMenuStyle(); if (i18n->multibyte()) { menu.item_h = style->f_fontset_extents->max_ink_extent.height + menu.bevel_w; @@ -283,10 +290,10 @@ void Basemenu::update(void) { if (i18n->multibyte()) { XRectangle ink, logical; - XmbTextExtents(screen->getMenuStyle()->t_fontset, s, l, &ink, &logical); + XmbTextExtents(screen.getMenuStyle()->t_fontset, s, l, &ink, &logical); menu.item_w = logical.width; } else { - menu.item_w = XTextWidth(screen->getMenuStyle()->t_font, s, l); + menu.item_w = XTextWidth(screen.getMenuStyle()->t_font, s, l); } menu.item_w += (menu.bevel_w * 2); @@ -295,36 +302,36 @@ void Basemenu::update(void) { } int ii = 0; - LinkedListIterator it(menuitems); - for (BasemenuItem *tmp = it.current(); tmp; it++, tmp = it.current()) { - const char *s = ((tmp->u && *tmp->u) ? *tmp->u : - ((tmp->l) ? tmp->l : (const char *) 0)); + menuitemList::const_iterator it = menuitems.begin(); + for (; it != menuitems.end(); it++) { + const char *s = (((*it)->u && *(*it)->u) ? *(*it)->u : + (((*it)->l) ? (*it)->l : (const char *) 0)); int l = strlen(s); if (i18n->multibyte()) { XRectangle ink, logical; - XmbTextExtents(screen->getMenuStyle()->f_fontset, s, l, &ink, &logical); + XmbTextExtents(screen.getMenuStyle()->f_fontset, s, l, &ink, &logical); ii = logical.width; } else - ii = XTextWidth(screen->getMenuStyle()->f_font, s, l); + ii = XTextWidth(screen.getMenuStyle()->f_font, s, l); ii += (menu.bevel_w * 2) + (menu.item_h * 2); menu.item_w = ((menu.item_w < (unsigned int) ii) ? ii : menu.item_w); } - if (menuitems->count()) { + if (menuitems.size()) { menu.sublevels = 1; - while (((menu.item_h * (menuitems->count() + 1) / menu.sublevels) - + menu.title_h + screen->getBorderWidth()) > - screen->getHeight()) + while (((menu.item_h * (menuitems.size() + 1) / menu.sublevels) + + menu.title_h + screen.getBorderWidth()) > + screen.size().h()) menu.sublevels++; if (menu.sublevels < menu.minsub) menu.sublevels = menu.minsub; - menu.persub = menuitems->count() / menu.sublevels; - if (menuitems->count() % menu.sublevels) menu.persub++; + menu.persub = menuitems.size() / menu.sublevels; + if (menuitems.size() % menu.sublevels) menu.persub++; } else { menu.sublevels = 0; menu.persub = 0; @@ -334,7 +341,7 @@ void Basemenu::update(void) { if (! menu.width) menu.width = menu.item_w; menu.frame_h = (menu.item_h * menu.persub); - menu.height = ((title_vis) ? menu.title_h + screen->getBorderWidth() : 0) + + menu.height = ((title_vis) ? menu.title_h + screen.getBorderWidth() : 0) + menu.frame_h; if (! menu.frame_h) menu.frame_h = 1; if (menu.height < 1) menu.height = 1; @@ -343,7 +350,7 @@ void Basemenu::update(void) { BTexture *texture; if (title_vis) { tmp = menu.title_pixmap; - texture = &(screen->getMenuStyle()->title); + texture = &(screen.getMenuStyle()->title); if (texture->getTexture() == (BImage_Flat | BImage_Solid)) { menu.title_pixmap = None; XSetWindowBackground(display, menu.title, @@ -358,7 +365,7 @@ void Basemenu::update(void) { } tmp = menu.frame_pixmap; - texture = &(screen->getMenuStyle()->frame); + texture = &(screen.getMenuStyle()->frame); if (texture->getTexture() == (BImage_Flat | BImage_Solid)) { menu.frame_pixmap = None; XSetWindowBackground(display, menu.frame, @@ -371,7 +378,7 @@ void Basemenu::update(void) { if (tmp) image_ctrl->removeImage(tmp); tmp = menu.hilite_pixmap; - texture = &(screen->getMenuStyle()->hilite); + texture = &(screen.getMenuStyle()->hilite); if (texture->getTexture() == (BImage_Flat | BImage_Solid)) { menu.hilite_pixmap = None; } else { @@ -397,7 +404,7 @@ void Basemenu::update(void) { XMoveResizeWindow(display, menu.frame, 0, ((title_vis) ? menu.title_h + - screen->getBorderWidth() : 0), menu.width, + screen.getBorderWidth() : 0), menu.width, menu.frame_h); XClearWindow(display, menu.window); @@ -406,7 +413,7 @@ void Basemenu::update(void) { if (title_vis && visible) redrawTitle(); - for (int i = 0; visible && i < menuitems->count(); i++) { + for (int i = 0; visible && i < (signed)menuitems.size(); i++) { if (i == which_sub) { drawItem(i, True, 0); drawSubmenu(i); @@ -450,7 +457,7 @@ void Basemenu::hide(void) { void Basemenu::internal_hide(void) { if (which_sub != -1) { - BasemenuItem *tmp = menuitems->find(which_sub); + BasemenuItem *tmp = menuitems[which_sub]; tmp->submenu()->internal_hide(); } @@ -487,15 +494,15 @@ void Basemenu::redrawTitle(void) { if (i18n->multibyte()) { XRectangle ink, logical; - XmbTextExtents(screen->getMenuStyle()->t_fontset, text, len, &ink, &logical); + XmbTextExtents(screen.getMenuStyle()->t_fontset, text, len, &ink, &logical); l = logical.width; } else { - l = XTextWidth(screen->getMenuStyle()->t_font, text, len); + l = XTextWidth(screen.getMenuStyle()->t_font, text, len); } l += (menu.bevel_w * 2); - switch (screen->getMenuStyle()->t_justify) { + switch (screen.getMenuStyle()->t_justify) { case BScreen::RightJustify: dx += menu.width - l; break; @@ -505,7 +512,7 @@ void Basemenu::redrawTitle(void) { break; } - MenuStyle *style = screen->getMenuStyle(); + MenuStyle *style = screen.getMenuStyle(); if (i18n->multibyte()) XmbDrawString(display, menu.title, style->t_fontset, style->t_text_gc, dx, (menu.bevel_w - style->t_fontset_extents->max_ink_extent.y), @@ -518,32 +525,32 @@ void Basemenu::redrawTitle(void) { void Basemenu::drawSubmenu(int index) { if (which_sub != -1 && which_sub != index) { - BasemenuItem *itmp = menuitems->find(which_sub); + BasemenuItem *itmp = menuitems[which_sub]; if (! itmp->submenu()->isTorn()) itmp->submenu()->internal_hide(); } - if (index >= 0 && index < menuitems->count()) { - BasemenuItem *item = menuitems->find(index); + if (index >= 0 && index < (signed)menuitems.size()) { + BasemenuItem *item = menuitems[index]; if (item->submenu() && visible && (! item->submenu()->isTorn()) && item->isEnabled()) { if (item->submenu()->parent != this) item->submenu()->parent = this; int sbl = index / menu.persub, i = index - (sbl * menu.persub), x = menu.x + - ((menu.item_w * (sbl + 1)) + screen->getBorderWidth()), y; + ((menu.item_w * (sbl + 1)) + screen.getBorderWidth()), y; if (alignment == AlignTop) y = (((shifted) ? menu.y_shift : menu.y) + - ((title_vis) ? menu.title_h + screen->getBorderWidth() : 0) - + ((title_vis) ? menu.title_h + screen.getBorderWidth() : 0) - ((item->submenu()->title_vis) ? - item->submenu()->menu.title_h + screen->getBorderWidth() : 0)); + item->submenu()->menu.title_h + screen.getBorderWidth() : 0)); else y = (((shifted) ? menu.y_shift : menu.y) + (menu.item_h * i) + - ((title_vis) ? menu.title_h + screen->getBorderWidth() : 0) - + ((title_vis) ? menu.title_h + screen.getBorderWidth() : 0) - ((item->submenu()->title_vis) ? - item->submenu()->menu.title_h + screen->getBorderWidth() : 0)); + item->submenu()->menu.title_h + screen.getBorderWidth() : 0)); if (alignment == AlignBottom && (y + item->submenu()->menu.height) > ((shifted) ? menu.y_shift : @@ -551,16 +558,16 @@ void Basemenu::drawSubmenu(int index) { y = (((shifted) ? menu.y_shift : menu.y) + menu.height - item->submenu()->menu.height); - if ((x + item->submenu()->getWidth()) > screen->getWidth()) { + if ((x + item->submenu()->getWidth()) > screen.size().w()) { x = ((shifted) ? menu.x_shift : menu.x) - - item->submenu()->getWidth() - screen->getBorderWidth(); + item->submenu()->getWidth() - screen.getBorderWidth(); } if (x < 0) x = 0; - if ((y + item->submenu()->getHeight()) > screen->getHeight()) - y = screen->getHeight() - item->submenu()->getHeight() - - (screen->getBorderWidth() * 2); + if ((y + item->submenu()->getHeight()) > screen.size().h()) + y = screen.size().h() - item->submenu()->getHeight() - + (screen.getBorderWidth() * 2); if (y < 0) y = 0; item->submenu()->move(x, y); @@ -577,21 +584,19 @@ void Basemenu::drawSubmenu(int index) { } -Bool Basemenu::hasSubmenu(int index) { - if ((index >= 0) && (index < menuitems->count())) - if (menuitems->find(index)->submenu()) - return True; - - return False; +bool Basemenu::hasSubmenu(int index) { + if (index < 0 | index >= (signed)menuitems.size()) + return false; + return (menuitems[index]->submenu()); } void Basemenu::drawItem(int index, Bool highlight, Bool clear, int x, int y, unsigned int w, unsigned int h) { - if (index < 0 || index > menuitems->count()) return; + if (index < 0 || index > (signed)menuitems.size()) return; - BasemenuItem *item = menuitems->find(index); + BasemenuItem *item = menuitems[index]; if (! item) return; Bool dotext = True, dohilite = True, dosel = True; @@ -607,19 +612,19 @@ void Basemenu::drawItem(int index, Bool highlight, Bool clear, if (text) { if (i18n->multibyte()) { XRectangle ink, logical; - XmbTextExtents(screen->getMenuStyle()->f_fontset, + XmbTextExtents(screen.getMenuStyle()->f_fontset, text, len, &ink, &logical); text_w = logical.width; text_y = item_y + (menu.bevel_w / 2) - - screen->getMenuStyle()->f_fontset_extents->max_ink_extent.y; + screen.getMenuStyle()->f_fontset_extents->max_ink_extent.y; } else { - text_w = XTextWidth(screen->getMenuStyle()->f_font, text, len); + text_w = XTextWidth(screen.getMenuStyle()->f_font, text, len); text_y = item_y + - screen->getMenuStyle()->f_font->ascent + + screen.getMenuStyle()->f_font->ascent + (menu.bevel_w / 2); } - switch(screen->getMenuStyle()->f_justify) { + switch(screen.getMenuStyle()->f_justify) { case BScreen::LeftJustify: text_x = item_x + menu.bevel_w + menu.item_h + 1; break; @@ -637,15 +642,15 @@ void Basemenu::drawItem(int index, Bool highlight, Bool clear, } GC gc = - ((highlight || item->isSelected()) ? screen->getMenuStyle()->h_text_gc : - screen->getMenuStyle()->f_text_gc), + ((highlight || item->isSelected()) ? screen.getMenuStyle()->h_text_gc : + screen.getMenuStyle()->f_text_gc), tgc = - ((highlight) ? screen->getMenuStyle()->h_text_gc : - ((item->isEnabled()) ? screen->getMenuStyle()->f_text_gc : - screen->getMenuStyle()->d_text_gc)); + ((highlight) ? screen.getMenuStyle()->h_text_gc : + ((item->isEnabled()) ? screen.getMenuStyle()->f_text_gc : + screen.getMenuStyle()->d_text_gc)); sel_x = item_x; - if (screen->getMenuStyle()->bullet_pos == Right) + if (screen.getMenuStyle()->bullet_pos == Right) sel_x += (menu.item_w - menu.item_h - menu.bevel_w); sel_x += quarter_w; sel_y = item_y + quarter_w; @@ -682,34 +687,34 @@ void Basemenu::drawItem(int index, Bool highlight, Bool clear, if (dohilite && highlight && (menu.hilite_pixmap != ParentRelative)) { if (menu.hilite_pixmap) XCopyArea(display, menu.hilite_pixmap, menu.frame, - screen->getMenuStyle()->hilite_gc, hoff_x, hoff_y, + screen.getMenuStyle()->hilite_gc, hoff_x, hoff_y, hilite_w, hilite_h, hilite_x, hilite_y); else XFillRectangle(display, menu.frame, - screen->getMenuStyle()->hilite_gc, + screen.getMenuStyle()->hilite_gc, hilite_x, hilite_y, hilite_w, hilite_h); } else if (dosel && item->isSelected() && (menu.sel_pixmap != ParentRelative)) { if (menu.sel_pixmap) XCopyArea(display, menu.sel_pixmap, menu.frame, - screen->getMenuStyle()->hilite_gc, 0, 0, + screen.getMenuStyle()->hilite_gc, 0, 0, half_w, half_w, sel_x, sel_y); else XFillRectangle(display, menu.frame, - screen->getMenuStyle()->hilite_gc, + screen.getMenuStyle()->hilite_gc, sel_x, sel_y, half_w, half_w); } if (dotext && text) { if (i18n->multibyte()) - XmbDrawString(display, menu.frame, screen->getMenuStyle()->f_fontset, + XmbDrawString(display, menu.frame, screen.getMenuStyle()->f_fontset, tgc, text_x, text_y, text, len); else XDrawString(display, menu.frame, tgc, text_x, text_y, text, len); } if (dosel && item->submenu()) { - switch (screen->getMenuStyle()->bullet) { + switch (screen.getMenuStyle()->bullet) { case Square: XDrawRectangle(display, menu.frame, gc, sel_x, sel_y, half_w, half_w); break; @@ -717,7 +722,7 @@ void Basemenu::drawItem(int index, Bool highlight, Bool clear, case Triangle: XPoint tri[3]; - if (screen->getMenuStyle()->bullet_pos == Right) { + if (screen.getMenuStyle()->bullet_pos == Right) { tri[0].x = sel_x + quarter_w - 2; tri[0].y = sel_y + quarter_w - 2; tri[1].x = 4; @@ -766,8 +771,8 @@ void Basemenu::setLabel(const char *l) { } -void Basemenu::setItemSelected(int index, Bool sel) { - if (index < 0 || index >= menuitems->count()) return; +void Basemenu::setItemSelected(int index, bool sel) { + if (index < 0 || index >= (signed)menuitems.size()) return; BasemenuItem *item = find(index); if (! item) return; @@ -777,18 +782,18 @@ void Basemenu::setItemSelected(int index, Bool sel) { } -Bool Basemenu::isItemSelected(int index) { - if (index < 0 || index >= menuitems->count()) return False; +bool Basemenu::isItemSelected(int index) { + if (index < 0 || index >= (signed)menuitems.size()) return false; BasemenuItem *item = find(index); - if (! item) return False; + if (! item) return false; return item->isSelected(); } -void Basemenu::setItemEnabled(int index, Bool enable) { - if (index < 0 || index >= menuitems->count()) return; +void Basemenu::setItemEnabled(int index, bool enable) { + if (index < 0 || index >= (signed)menuitems.size()) return; BasemenuItem *item = find(index); if (! item) return; @@ -798,8 +803,8 @@ void Basemenu::setItemEnabled(int index, Bool enable) { } -Bool Basemenu::isItemEnabled(int index) { - if (index < 0 || index >= menuitems->count()) return False; +bool Basemenu::isItemEnabled(int index) { + if (index < 0 || index >= (signed)menuitems.size()) return false; BasemenuItem *item = find(index); if (! item) return False; @@ -813,11 +818,11 @@ void Basemenu::buttonPressEvent(XButtonEvent *be) { int sbl = (be->x / menu.item_w), i = (be->y / menu.item_h); int w = (sbl * menu.persub) + i; - if (w < menuitems->count() && w >= 0) { + if (w < (signed)menuitems.size() && w >= 0) { which_press = i; which_sbl = sbl; - BasemenuItem *item = menuitems->find(w); + BasemenuItem *item = menuitems[w]; if (item->submenu()) drawSubmenu(w); @@ -855,7 +860,7 @@ void Basemenu::buttonReleaseEvent(XButtonEvent *re) { w = (sbl * menu.persub) + i, p = (which_sbl * menu.persub) + which_press; - if (w < menuitems->count() && w >= 0) { + if (w < (signed)menuitems.size() && w >= 0) { drawItem(p, (p == which_sub), True); if (p == w && isItemEnabled(w)) { @@ -901,10 +906,10 @@ void Basemenu::motionNotifyEvent(XMotionEvent *me) { w = (sbl * menu.persub) + i; if ((i != which_press || sbl != which_sbl) && - (w < menuitems->count() && w >= 0)) { + (w < (signed)menuitems.size() && w >= 0)) { if (which_press != -1 && which_sbl != -1) { int p = (which_sbl * menu.persub) + which_press; - BasemenuItem *item = menuitems->find(p); + BasemenuItem *item = menuitems[p]; drawItem(p, False, True); if (item->submenu()) @@ -918,7 +923,7 @@ void Basemenu::motionNotifyEvent(XMotionEvent *me) { which_press = i; which_sbl = sbl; - BasemenuItem *itmp = menuitems->find(w); + BasemenuItem *itmp = menuitems[w]; if (itmp->submenu()) drawSubmenu(w); @@ -946,12 +951,12 @@ void Basemenu::exposeEvent(XExposeEvent *ee) { if (id_d > menu.persub) id_d = menu.persub; // draw the sublevels and the number of items the exposure spans - LinkedListIterator it(menuitems); + menuitemList::const_iterator it = menuitems.begin(); int i, ii; for (i = sbl; i <= sbl_d; i++) { // set the iterator to the first item in the sublevel needing redrawing - it.set(id + (i * menu.persub)); - for (ii = id; ii <= id_d && it.current(); it++, ii++) { + it = menuitems.begin() + (id + (i * menu.persub)); + for (ii = id; ii <= id_d && it != menuitems.end(); it++, ii++) { int index = ii + (i * menu.persub); // redraw the item drawItem(index, (which_sub == index), False, @@ -965,21 +970,21 @@ void Basemenu::exposeEvent(XExposeEvent *ee) { void Basemenu::enterNotifyEvent(XCrossingEvent *ce) { if (ce->window == menu.frame) { menu.x_shift = menu.x, menu.y_shift = menu.y; - if (menu.x + menu.width > screen->getWidth()) { - menu.x_shift = screen->getWidth() - menu.width - - screen->getBorderWidth(); + if (menu.x + menu.width > screen.size().w()) { + menu.x_shift = screen.size().w() - menu.width - + screen.getBorderWidth(); shifted = True; } else if (menu.x < 0) { - menu.x_shift = -screen->getBorderWidth(); + menu.x_shift = -screen.getBorderWidth(); shifted = True; } - if (menu.y + menu.height > screen->getHeight()) { - menu.y_shift = screen->getHeight() - menu.height - - screen->getBorderWidth(); + if (menu.y + menu.height > screen.size().h()) { + menu.y_shift = screen.size().h() - menu.height - + screen.getBorderWidth(); shifted = True; } else if (menu.y + (signed) menu.title_h < 0) { - menu.y_shift = -screen->getBorderWidth(); + menu.y_shift = -screen.getBorderWidth(); shifted = True; } @@ -987,7 +992,7 @@ void Basemenu::enterNotifyEvent(XCrossingEvent *ce) { XMoveWindow(display, menu.window, menu.x_shift, menu.y_shift); if (which_sub != -1) { - BasemenuItem *tmp = menuitems->find(which_sub); + BasemenuItem *tmp = menuitems[which_sub]; if (tmp->submenu()->isVisible()) { int sbl = (ce->x / menu.item_w), i = (ce->y / menu.item_h), w = (sbl * menu.persub) + i; @@ -1006,7 +1011,7 @@ void Basemenu::enterNotifyEvent(XCrossingEvent *ce) { void Basemenu::leaveNotifyEvent(XCrossingEvent *ce) { if (ce->window == menu.frame) { - if (which_press != -1 && which_sbl != -1 && menuitems->count() > 0) { + if (which_press != -1 && which_sbl != -1 && menuitems.size() > 0) { int p = (which_sbl * menu.persub) + which_press; drawItem(p, (p == which_sub), True); @@ -1026,11 +1031,11 @@ void Basemenu::leaveNotifyEvent(XCrossingEvent *ce) { void Basemenu::reconfigure(void) { XSetWindowBackground(display, menu.window, - screen->getBorderColor()->getPixel()); + screen.getBorderColor()->getPixel()); XSetWindowBorder(display, menu.window, - screen->getBorderColor()->getPixel()); - XSetWindowBorderWidth(display, menu.window, screen->getBorderWidth()); + screen.getBorderColor()->getPixel()); + XSetWindowBorderWidth(display, menu.window, screen.getBorderWidth()); - menu.bevel_w = screen->getBevelWidth(); + menu.bevel_w = screen.getBevelWidth(); update(); }