--- a/src/Window.cc 2013-02-13 05:04:05.000000000 -0500 +++ b/src/Window.cc 2017-11-05 17:31:37.516503305 -0500 @@ -2745,6 +2745,14 @@ m_button_grab_x = x - frame().x() - frame().window().borderWidth(); m_button_grab_y = y - frame().y() - frame().window().borderWidth(); + // If mouse clicked on the border, start window resize instead of move + if (m_button_grab_x <= 0 || m_button_grab_x >= (int)frame().window().width() + || m_button_grab_y >= (int)frame().window().height() ) { + ReferenceCorner dir = getResizeDirection(m_button_grab_x,m_button_grab_y,EDGEORCORNERRESIZE,frame().window().borderWidth(),frame().window().borderWidth()); + startResizing(m_button_grab_x, m_button_grab_y, dir); + return; + } + moving = true; Fluxbox *fluxbox = Fluxbox::instance(); @@ -2752,7 +2760,7 @@ // freely map and unmap the window we're moving. grabPointer(screen().rootWindow().window(), False, ButtonMotionMask | ButtonReleaseMask, GrabModeAsync, GrabModeAsync, - screen().rootWindow().window(), frame().theme()->moveCursor(), CurrentTime); + screen().rootWindow().window(), None, CurrentTime); if (menu().isVisible()) menu().hide(); --- a/src/FbTk/FbDrawable.hh +++ b/src/FbTk/FbDrawable.hh @@ -52,7 +52,8 @@ public: LEFT, RIGHT, UP, - DOWN + DOWN, + MENU }; // x, y, width and height define a space within which we're drawing a triangle --- a/src/ToolFactory.cc 2013-02-13 05:04:05.000000000 -0500 +++ b/src/ToolFactory.cc 2017-10-31 12:11:20.000000000 -0400 @@ -101,6 +101,8 @@ cmd_str += " (workspace=[current])"; } + if (name.find("menu") != std::string::npos) cmd_str = "Exec fbappselect"; + FbTk::RefCount > cmd(FbTk::CommandParser::instance().parse(cmd_str)); if (cmd == 0) // we need a command return 0; @@ -110,6 +112,9 @@ if (name.find("prev") != std::string::npos) arrow_type = FbTk::FbDrawable::LEFT; + if (name.find("menu") != std::string::npos) + arrow_type = FbTk::FbDrawable::MENU; + ArrowButton *win = new ArrowButton(arrow_type, parent, 0, 0, button_size, button_size); --- a/src/FbTk/FbDrawable.cc 2017-10-19 06:06:08.000000000 -0400 +++ a/src/FbTk/FbDrawable.cc 2017-10-19 06:06:57.013131070 -0400 @@ -96,7 +96,7 @@ if (drawable() == 0 || gc == 0 || width == 0 || height == 0) return; - XPoint pts[3]; + XPoint pts[4]; if (scale < 100) scale = 100; // not bigger than the space allowed else if (scale > 10000) scale = 10000; // not too small... @@ -115,6 +115,26 @@ } switch (type) { + case FbTk::FbDrawable::MENU: + { + int s=7; int m=2; int d=2; int sh=-1; //size margin distance + pts[0].x=m+sh; pts[0].y=m+sh; pts[1].x=m+s+sh; pts[1].y=m+sh; + pts[2].x=m+s+sh; pts[2].y=m+s+sh; pts[3].x=m+sh; pts[3].y=m+s+sh; + fillPolygon(gc, pts, 4, Convex, CoordModeOrigin); + + pts[0].x=m+s+d+sh; pts[0].y=m+sh; pts[1].x=m+s+d+s+sh; pts[1].y=m+sh; + pts[2].x=m+s+d+s+sh; pts[2].y=m+s+sh; pts[3].x=m+s+d+sh; pts[3].y=m+s+sh; + fillPolygon(gc, pts, 4, Convex, CoordModeOrigin); + + pts[0].x=m+sh; pts[0].y=m+s+d+sh; pts[1].x=m+s+sh; pts[1].y=m+s+d+sh; + pts[2].x=m+s+sh; pts[2].y=m+s+d+s+sh; pts[3].x=m+sh; pts[3].y=m+s+d+s+sh; + fillPolygon(gc, pts, 4, Convex, CoordModeOrigin); + + pts[0].x=m+s+d+sh; pts[0].y=m+s+d+sh; pts[1].x=m+s+d+s+sh; pts[1].y=m+s+d+sh; + pts[2].x=m+s+d+s+sh; pts[2].y=m+s+d+s+sh; pts[3].x=m+s+d+sh; pts[3].y=m+s+d+s+sh; + fillPolygon(gc, pts, 4, Convex, CoordModeOrigin); + return; + } case FbTk::FbDrawable::LEFT: // start at the tip pts[0].x = (width / 2) - (ax / 2); pts[0].y = height / 2;