sync with bb-cvs

This commit is contained in:
Dana Jansens 2002-07-07 10:27:06 +00:00
parent b29977196b
commit 300491ce5a
7 changed files with 62 additions and 24 deletions

View file

@ -57,8 +57,7 @@ private:
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;

View file

@ -35,6 +35,12 @@ extern "C" {
#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) {

View file

@ -39,6 +39,8 @@ public:
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),

View file

@ -86,6 +86,9 @@ Slit::~Slit(void) {
delete slitmenu;
screen->removeStrut(&strut);
screen->updateAvailableArea();
screen->getImageControl()->removeImage(frame.pixmap);
blackbox->removeSlitSearch(frame.window);

View file

@ -159,8 +159,6 @@ Toolbar::Toolbar(BScreen *scrn) {
frame.base = frame.label = frame.wlabel = frame.clk = frame.button =
frame.pbutton = None;
screen->addStrut(&strut);
reconfigure();
mapToolbar();
}
@ -203,6 +201,7 @@ void Toolbar::mapToolbar() {
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();
}

View file

@ -273,8 +273,6 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
}
#endif // SHAPE
grabButtons();
windowmenu = new Windowmenu(this);
if (blackbox_attrib.workspace >= screen->getWorkspaceCount())
@ -338,6 +336,7 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
positionWindows();
decorate();
grabButtons();
XMapSubwindows(blackbox->getXDisplay(), frame.window);
@ -818,12 +817,13 @@ void BlackboxWindow::positionButtons(bool redecorate_label) {
void BlackboxWindow::reconfigure(void) {
upsize();
positionWindows();
decorate();
redrawWindowFrame();
ungrabButtons();
grabButtons();
if (windowmenu) {
windowmenu->move(windowmenu->getX(), frame.rect.y() + frame.title_h);
windowmenu->reconfigure();
@ -879,10 +879,8 @@ void BlackboxWindow::positionWindows(void) {
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 @@ void BlackboxWindow::positionWindows(void) {
} else if (frame.handle) {
destroyHandle();
}
XSync(blackbox->getXDisplay(), False);
}
@ -1112,6 +1111,11 @@ void BlackboxWindow::getWMNormalHints(void) {
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 @@ void BlackboxWindow::getWMNormalHints(void) {
*/
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 @@ void BlackboxWindow::getWMNormalHints(void) {
client.normal_hint_flags = sizehint.flags;
if (sizehint.flags & PMinSize) {
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) {
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 @@ void BlackboxWindow::getWMNormalHints(void) {
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 @@ BlackboxWindow *BlackboxWindow::getTransientFor(void) const {
*/
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 @@ void BlackboxWindow::configure(int dx, int 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 @@ void BlackboxWindow::configure(int dx, int dy,
XSendEvent(blackbox->getXDisplay(), client.window, False,
StructureNotifyMask, &event);
screen->updateNetizenConfigNotify(&event);
XFlush(blackbox->getXDisplay());
}
}
@ -1593,6 +1612,7 @@ bool BlackboxWindow::setInputFocus(void) {
ce.xclient.data.l[4] = 0l;
XSendEvent(blackbox->getXDisplay(), client.window, False,
NoEventMask, &ce);
XFlush(blackbox->getXDisplay());
}
return ret;
@ -1709,6 +1729,7 @@ void BlackboxWindow::close(void) {
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 @@ void BlackboxWindow::propertyNotifyEvent(const XPropertyEvent *pe) {
decorations &= ~(Decor_Maximize | Decor_Handle);
functions &= ~(Func_Resize | Func_Maximize);
} else {
if (! isTransient()) {
decorations |= Decor_Maximize | Decor_Handle;
functions |= Func_Resize | Func_Maximize;
functions |= Func_Maximize;
}
functions |= Func_Resize;
}
grabButtons();
setAllowedActions();

View file

@ -176,8 +176,10 @@ private:
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;