all repos — openbox @ 300491ce5a932ba777274e7f5c3d085f5ca59ee0

openbox fork - make it a bit more like ryudo

sync with bb-cvs
Dana Jansens danakj@orodu.net
commit

300491ce5a932ba777274e7f5c3d085f5ca59ee0

parent

b29977196b527bb50b045cad249e9c149fa0ef75

7 files changed, 62 insertions(+), 24 deletions(-)

jump to
M src/Basemenu.hhsrc/Basemenu.hh

@@ -57,8 +57,7 @@ Pixmap frame_pixmap, title_pixmap, hilite_pixmap, sel_pixmap;

Window window, frame, title; std::string label; - int x, y, x_move, y_move, x_shift, y_shift, sublevels, persub, minsub, - grab_x, grab_y; + int x, y, x_move, y_move, x_shift, y_shift, sublevels, persub, minsub; unsigned int width, height, title_h, frame_h, item_w, item_h, bevel_w, bevel_h; } menu;
M src/GCCache.ccsrc/GCCache.cc

@@ -35,6 +35,12 @@ #include "Color.hh"

#include "Util.hh" +BGCCacheContext::~BGCCacheContext(void) { + if (gc) + XFreeGC(display->getXDisplay(), gc); +} + + void BGCCacheContext::set(const BColor &_color, const XFontStruct * const _font, const int _function, const int _subwindow) {
M src/GCCache.hhsrc/GCCache.hh

@@ -39,6 +39,8 @@ void set(const BColor &_color, const XFontStruct * const _font,

const int _function, const int _subwindow); void set(const XFontStruct * const _font); + ~BGCCacheContext(void); + private: BGCCacheContext(const BaseDisplay * const _display) : display(_display), gc(0), pixel(0ul), fontid(0ul),
M src/Slit.ccsrc/Slit.cc

@@ -86,6 +86,9 @@ delete timer;

delete slitmenu; + screen->removeStrut(&strut); + screen->updateAvailableArea(); + screen->getImageControl()->removeImage(frame.pixmap); blackbox->removeSlitSearch(frame.window);
M src/Toolbar.ccsrc/Toolbar.cc

@@ -159,8 +159,6 @@

frame.base = frame.label = frame.wlabel = frame.clk = frame.button = frame.pbutton = None; - screen->addStrut(&strut); - reconfigure(); mapToolbar(); }

@@ -203,6 +201,7 @@ //not hidden, so windows should not maximize over the toolbar

XMapSubwindows(display, frame.window); XMapWindow(display, frame.window); } + screen->addStrut(&strut); updateStrut(); }

@@ -211,6 +210,9 @@ void Toolbar::unmapToolbar() {

if (toolbarmenu->isVisible()) toolbarmenu->hide(); //hidden so we can maximize over the toolbar + screen->removeStrut(&strut); + screen->updateAvailableArea(); + XUnmapWindow(display, frame.window); updateStrut(); }
M src/Window.ccsrc/Window.cc

@@ -273,8 +273,6 @@ configureShape();

} #endif // SHAPE - grabButtons(); - windowmenu = new Windowmenu(this); if (blackbox_attrib.workspace >= screen->getWorkspaceCount())

@@ -338,6 +336,7 @@ */

positionWindows(); decorate(); + grabButtons(); XMapSubwindows(blackbox->getXDisplay(), frame.window);

@@ -818,11 +817,12 @@

void BlackboxWindow::reconfigure(void) { upsize(); - positionWindows(); decorate(); + redrawWindowFrame(); - redrawWindowFrame(); + ungrabButtons(); + grabButtons(); if (windowmenu) { windowmenu->move(windowmenu->getX(), frame.rect.y() + frame.title_h);

@@ -879,10 +879,8 @@ client.rect.width(), client.rect.height());

XMoveResizeWindow(blackbox->getXDisplay(), client.window, 0, 0, client.rect.width(), client.rect.height()); // ensure client.rect contains the real location - client.rect.setCoords(frame.rect.left() + frame.margin.left, - frame.rect.top() + frame.margin.top, - frame.rect.right() - frame.margin.right, - frame.rect.bottom() - frame.margin.bottom); + client.rect.setPos(frame.rect.left() + frame.margin.left, + frame.rect.top() + frame.margin.top); if (decorations & Decor_Titlebar) { if (frame.title == None) createTitlebar();

@@ -925,6 +923,7 @@ XMapWindow(blackbox->getXDisplay(), frame.handle);

} else if (frame.handle) { destroyHandle(); } + XSync(blackbox->getXDisplay(), False); }

@@ -1112,6 +1111,11 @@

client.min_width = client.min_height = client.width_inc = client.height_inc = 1; client.base_width = client.base_height = 0; + client.win_gravity = NorthWestGravity; +#if 0 + client.min_aspect_x = client.min_aspect_y = + client.max_aspect_x = client.max_aspect_y = 1; +#endif /* use the full screen, not the strut modified size. otherwise when the

@@ -1120,11 +1124,7 @@ rendering bugs.

*/ const Rect& screen_area = screen->getRect(); client.max_width = screen_area.width(); - client.max_height = screen_area.height(); - client.min_aspect_x = client.min_aspect_y = - client.max_aspect_x = client.max_aspect_y = 1; - client.win_gravity = NorthWestGravity; if (! XGetWMNormalHints(blackbox->getXDisplay(), client.window, &sizehint, &icccm_mask))

@@ -1133,13 +1133,22 @@

client.normal_hint_flags = sizehint.flags; if (sizehint.flags & PMinSize) { - client.min_width = sizehint.min_width; - client.min_height = sizehint.min_height; + if (sizehint.min_width >= 0) + client.min_width = sizehint.min_width; + if (sizehint.min_height >= 0) + client.min_height = sizehint.min_height; } if (sizehint.flags & PMaxSize) { - client.max_width = sizehint.max_width; - client.max_height = sizehint.max_height; + if (sizehint.max_width > static_cast<signed>(client.min_width)) + client.max_width = sizehint.max_width; + else + client.max_width = client.min_width; + + if (sizehint.max_height > static_cast<signed>(client.min_height)) + client.max_height = sizehint.max_height; + else + client.max_height = client.min_height; } if (sizehint.flags & PResizeInc) {

@@ -1147,12 +1156,14 @@ client.width_inc = sizehint.width_inc;

client.height_inc = sizehint.height_inc; } +#if 0 // we do not support this at the moment if (sizehint.flags & PAspect) { client.min_aspect_x = sizehint.min_aspect.x; client.min_aspect_y = sizehint.min_aspect.y; client.max_aspect_x = sizehint.max_aspect.x; client.max_aspect_y = sizehint.max_aspect.y; } +#endif if (sizehint.flags & PBaseSize) { client.base_width = sizehint.base_width;

@@ -1445,7 +1456,8 @@ * move.

*/ void BlackboxWindow::configure(int dx, int dy, unsigned int dw, unsigned int dh) { - bool send_event = (frame.rect.x() != dx || frame.rect.y() != dy); + bool send_event = ((frame.rect.x() != dx || frame.rect.y() != dy) && + ! flags.moving); if (dw != frame.rect.width() || dh != frame.rect.height()) { frame.rect.setRect(dx, dy, dw, dh);

@@ -1474,9 +1486,15 @@ frame.rect.setPos(dx, dy);

XMoveWindow(blackbox->getXDisplay(), frame.window, frame.rect.x(), frame.rect.y()); + /* + we may have been called just after an opaque window move, so even though + the old coords match the new ones no ConfigureNotify has been sent yet. + There are likely other times when this will be relevant as well. + */ + if (! flags.moving) send_event = True; } - if (send_event && ! flags.moving) { + if (send_event) { // if moving, the update and event will occur when the move finishes client.rect.setPos(frame.rect.left() + frame.margin.left, frame.rect.top() + frame.margin.top);

@@ -1498,6 +1516,7 @@

XSendEvent(blackbox->getXDisplay(), client.window, False, StructureNotifyMask, &event); screen->updateNetizenConfigNotify(&event); + XFlush(blackbox->getXDisplay()); } }

@@ -1593,6 +1612,7 @@ ce.xclient.data.l[3] = 0l;

ce.xclient.data.l[4] = 0l; XSendEvent(blackbox->getXDisplay(), client.window, False, NoEventMask, &ce); + XFlush(blackbox->getXDisplay()); } return ret;

@@ -1709,6 +1729,7 @@ ce.xclient.data.l[2] = 0l;

ce.xclient.data.l[3] = 0l; ce.xclient.data.l[4] = 0l; XSendEvent(blackbox->getXDisplay(), client.window, False, NoEventMask, &ce); + XFlush(blackbox->getXDisplay()); }

@@ -2601,8 +2622,11 @@ client.max_height <= client.min_height) {

decorations &= ~(Decor_Maximize | Decor_Handle); functions &= ~(Func_Resize | Func_Maximize); } else { - decorations |= Decor_Maximize | Decor_Handle; - functions |= Func_Resize | Func_Maximize; + if (! isTransient()) { + decorations |= Decor_Maximize | Decor_Handle; + functions |= Func_Maximize; + } + functions |= Func_Resize; } grabButtons(); setAllowedActions();
M src/Window.hhsrc/Window.hh

@@ -176,8 +176,10 @@ unsigned int

min_width, min_height, // can not be resized smaller max_width, max_height, // can not be resized larger width_inc, height_inc, // increment step +#if 0 // not supported at the moment min_aspect_x, min_aspect_y, // minimum aspect ratio max_aspect_x, max_aspect_y, // maximum aspect ratio +#endif base_width, base_height, win_gravity;