diff --git a/src/servers/app/server/DisplayDriver.cpp b/src/servers/app/server/DisplayDriver.cpp index a24fca37b2..a066a2c68a 100644 --- a/src/servers/app/server/DisplayDriver.cpp +++ b/src/servers/app/server/DisplayDriver.cpp @@ -146,6 +146,7 @@ void DisplayDriver::DrawBitmap(BRegion *region, ServerBitmap *bitmap, const BRec if(!AcquireBuffer(&frameBuffer)) { debugger("ERROR: Couldn't acquire framebuffer in DrawBitmap()\n"); + Unlock(); return; } @@ -306,6 +307,7 @@ void DisplayDriver::CopyRegionList(BList* list, BList* pList, int32 rCount, BReg if(!AcquireBuffer(&frameBuffer)) { debugger("ERROR: Couldn't acquire framebuffer in CopyRegionList()\n"); + Unlock(); return; } @@ -2382,6 +2384,7 @@ void DisplayDriver::FillTriangle(BPoint *pts, const BRect &bounds, const RGBColo end.x=MAX(first.x,MAX(second.x,third.x)); StrokeSolidLine(ROUND(start.x), ROUND(start.y), ROUND(end.x), ROUND(start.y), color); fCursorHandler.DriverShow(); + Unlock(); return; } @@ -2397,6 +2400,7 @@ void DisplayDriver::FillTriangle(BPoint *pts, const BRect &bounds, const RGBColo for(i=(int32)first.y+1; i<=third.y; i++) StrokeSolidLine(ROUND(lineA.GetX(i)), i, ROUND(lineB.GetX(i)), i, color); fCursorHandler.DriverShow(); + Unlock(); return; } @@ -2410,6 +2414,7 @@ void DisplayDriver::FillTriangle(BPoint *pts, const BRect &bounds, const RGBColo for(i=(int32)first.y; iStyle(); if(!style) + { + Unlock(); return 0.0; - + } + FT_Face face; FT_GlyphSlot slot; FT_UInt glyph_index=0, previous=0; diff --git a/src/servers/app/server/LayerData.cpp b/src/servers/app/server/LayerData.cpp index c1d09266d5..4a3b4d7fb8 100644 --- a/src/servers/app/server/LayerData.cpp +++ b/src/servers/app/server/LayerData.cpp @@ -49,7 +49,7 @@ DrawData::DrawData(void) scale=1.0; fontAliasing=true; - if(fontserver) + if(fontserver && fontserver->GetSystemPlain()) font=*(fontserver->GetSystemPlain()); clipReg=NULL; diff --git a/src/servers/app/server/ViewDriver.cpp b/src/servers/app/server/ViewDriver.cpp index 10630efeb1..04ff162f4d 100644 --- a/src/servers/app/server/ViewDriver.cpp +++ b/src/servers/app/server/ViewDriver.cpp @@ -753,6 +753,7 @@ void ViewDriver::SetDrawData(const DrawData *d, bool set_font_data) unlock=true; } + drawview->ConstrainClippingRegion(d->clipReg); drawview->SetPenSize(d->pensize); drawview->SetDrawingMode(d->draw_mode); drawview->SetHighColor(d->highcolor.GetColor32()); diff --git a/src/servers/app/server/WinBorder.cpp b/src/servers/app/server/WinBorder.cpp index cf11ec2569..3ffbf13a13 100644 --- a/src/servers/app/server/WinBorder.cpp +++ b/src/servers/app/server/WinBorder.cpp @@ -304,30 +304,40 @@ void WinBorder::MouseUp(PointerEvent& evt) if (!(Window()->IsLocked())) debugger("you must lock the attached ServerWindow object\n\t before calling WinBorder::MouseUp()\n"); - if (fIsMoving) + click_type action; + + // find out where user clicked in Decorator + action = fDecorator->Clicked(evt.where, evt.buttons, evt.modifiers); + + if(fIsMoving) { fIsMoving = false; return; } + if (fIsResizing) { fIsResizing = false; return; } + if (fIsZooming) { fIsZooming = false; fDecorator->SetZoom(false); fDecorator->DrawZoom(); - Window()->Zoom(); + + if(action==DEC_ZOOM) + Window()->Zoom(); return; } - if (fIsClosing) + if(fIsClosing) { fIsClosing = false; fDecorator->SetClose(false); fDecorator->DrawClose(); - Window()->Quit(); + if(action==DEC_CLOSE) + Window()->Quit(); return; } if(fIsMinimizing) @@ -335,7 +345,8 @@ void WinBorder::MouseUp(PointerEvent& evt) fIsMinimizing = false; fDecorator->SetMinimize(false); fDecorator->DrawMinimize(); - Window()->Minimize(true); + if(action==DEC_MINIMIZE) + Window()->Minimize(true); return; } }