From bd3c9e428af5a804fd4631c941fb642c99f6430b Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 2 Jul 2009 13:28:17 +0200 Subject: Add a note about this method not being safe in multithreaded contexts --- src/dbus/qdbusconnection.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/dbus/qdbusconnection.cpp b/src/dbus/qdbusconnection.cpp index 6777aa5..14cadd9 100644 --- a/src/dbus/qdbusconnection.cpp +++ b/src/dbus/qdbusconnection.cpp @@ -973,8 +973,15 @@ QDBusConnection QDBusConnection::systemBus() } /*! + \nonreentrant + Returns the connection that sent the signal, if called in a slot activated by QDBus; otherwise it returns 0. + + \note Please avoid this function. This function is not thread-safe, so if + there's any other thread delivering a D-Bus call, this function may return + the wrong connection. In new code, please use QDBusContext::connection() + (see that class for a description on how to use it). */ QDBusConnection QDBusConnection::sender() { -- cgit v0.12 From b3a0229d70ac87d2ae1fd70a7489e3caf66a2f6f Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 2 Jul 2009 14:06:04 +0200 Subject: Fix oops in strcmp in QBuffer. Reported via qt-bugs. Reviewed-By: Peter Hartmann --- src/corelib/io/qbuffer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/io/qbuffer.cpp b/src/corelib/io/qbuffer.cpp index aed5b82..3883d30 100644 --- a/src/corelib/io/qbuffer.cpp +++ b/src/corelib/io/qbuffer.cpp @@ -452,7 +452,7 @@ qint64 QBuffer::writeData(const char *data, qint64 len) */ void QBuffer::connectNotify(const char *signal) { - if (strcmp(signal + 1, "readyRead()") == 0 || strcmp(signal + 1, "bytesWritten(qint64)")) + if (strcmp(signal + 1, "readyRead()") == 0 || strcmp(signal + 1, "bytesWritten(qint64)") == 0) d_func()->signalConnectionCount++; } -- cgit v0.12 From 349997b5c4167b07d0bdc55beff175b39f3abe75 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 2 Jul 2009 14:18:47 +0200 Subject: Minor: fix spelling in configure.exe -help output. Reported via qt-bugs --- tools/configure/configureapp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 9ee5eef..1e501c5 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -1531,7 +1531,7 @@ bool Configure::displayHelp() desc( "-graphicssystem ", "Specify which graphicssystem should be used.\n" "Available values for :"); desc("GRAPHICS_SYSTEM", "raster", "", " raster - Software rasterizer", ' '); - desc("GRAPHICS_SYSTEM", "opengl", "", " opengl - Using OpenGL accelleration, experimental!", ' '); + desc("GRAPHICS_SYSTEM", "opengl", "", " opengl - Using OpenGL acceleration, experimental!", ' '); desc( "-help, -h, -?", "Display this information.\n"); -- cgit v0.12 From 3473453dda9f40bf94733bc971b0cc1658e7c3c8 Mon Sep 17 00:00:00 2001 From: Norwegian Rock Cat Date: Thu, 2 Jul 2009 14:28:46 +0200 Subject: Fix a regression where dynamic tooltips wouldn't show up in Cocoa. Tracking of mouse events was only enabled when enableMouseTracking or Hover or a tooltip had been set explictly on the item, but this meant that the dynamic QEvent::Tooltips would never get dispatched. So, in order to help out people that might use this feature, all QCocoaViews must pay the mouse move event tax *sigh*. I added comments in the proper places so that we DO the right thing for a release where we can force the change in behavior. Task-number: 257320 Reviewed-by: Denis --- src/gui/kernel/qapplication.cpp | 7 +++++++ src/gui/kernel/qcocoaview_mac.mm | 12 ++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 40795d1..c6af728 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -3724,6 +3724,13 @@ bool QApplication::notify(QObject *receiver, QEvent *e) } } + // ### Qt 5 These dynamic tool tips should be an OPT-IN feature. Some platforms + // like Mac OS X (probably others too), can optimize their views by not + // dispatching mouse move events. We have attributes to control hover, + // and mouse tracking, but as long as we are deciding to implement this + // feature without choice of opting-in or out, you ALWAYS have to have + // tracking enabled. Therefore, the other properties give a false sense of + // performance enhancement. if (e->type() == QEvent::MouseMove && mouse->buttons() == 0) { d->toolTipWidget = w; d->toolTipPos = relpos; diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index ae3265b..17e3313 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -564,11 +564,15 @@ extern "C" { [self removeTrackingArea:t]; } } + + // Ideally, we shouldn't have NSTrackingMouseMoved events included below, it should + // only be turned on if mouseTracking, hover is on or a tool tip is set. + // Unfortunately, Qt will send "tooltip" events on mouse moves, so we need to + // turn it on in ALL case. That means EVERY QCocoaView gets to pay the cost of + // mouse moves delivered to it (Apple recommends keeping it OFF because there + // is a performance hit). So it goes. NSUInteger trackingOptions = NSTrackingMouseEnteredAndExited | NSTrackingActiveInActiveApp - | NSTrackingInVisibleRect; - if (qwidget->hasMouseTracking() || !qwidgetprivate->toolTip.isEmpty() - || qwidget->testAttribute(Qt::WA_Hover)) - trackingOptions |= NSTrackingMouseMoved; + | NSTrackingInVisibleRect | NSTrackingMouseMoved; NSTrackingArea *ta = [[NSTrackingArea alloc] initWithRect:NSMakeRect(0, 0, qwidget->width(), qwidget->height()) -- cgit v0.12 From 097476afe24d69bac65b84b70ed2f93e88875b40 Mon Sep 17 00:00:00 2001 From: Norwegian Rock Cat Date: Wed, 1 Jul 2009 14:34:21 +0200 Subject: Implement hitTest Cocoa calls hitTest on our view to determine if the view should get the mouse press. We always said, "yes" and did all the logic ourselves. Turns out that we can say "no" if I'm transparent to mouse events and remove all that code where we do all the work ourselves. Big maintenance win! For the time being I've kept the "transparentViewForEvent" method since it might be useful for others, but no one is using it at the moment and we may just kill it soon. HitTest should handle this situation correctly. --- src/gui/kernel/qcocoaview_mac.mm | 17 ++++++------- src/gui/kernel/qt_cocoa_helpers_mac.mm | 44 ---------------------------------- 2 files changed, 7 insertions(+), 54 deletions(-) diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index 17e3313..81e06a9 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -554,6 +554,13 @@ extern "C" { return !qwidget->testAttribute(Qt::WA_MacNoClickThrough); } +- (NSView *)hitTest:(NSPoint)aPoint +{ + if (qwidget->testAttribute(Qt::WA_TransparentForMouseEvents)) + return nil; // You cannot hit a transparent for mouse event widget. + return [super hitTest:aPoint]; +} + - (void)updateTrackingAreas { QMacCocoaAutoReleasePool pool; @@ -794,16 +801,6 @@ extern "C" { Qt::KeyboardModifiers keyMods = qt_cocoaModifiers2QtModifiers([theEvent modifierFlags]); QWidget *widgetToGetMouse = qwidget; - if (widgetToGetMouse->testAttribute(Qt::WA_TransparentForMouseEvents)) { - // Simulate passing the event through since Cocoa doesn't do that for us. - // Start by building a tree up. - NSView *candidateView = [self viewUnderTransparentForMouseView:self - widget:widgetToGetMouse - withWindowPoint:windowPoint]; - if (candidateView != nil) { - widgetToGetMouse = QWidget::find(WId(candidateView)); - } - } // Mouse wheel deltas seem to tick in at increments of 0.1. Qt widgets // expect the delta to be a multiple of 120. diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index 2dd4fdf..241ea44 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -851,50 +851,6 @@ bool qt_mac_handleMouseEvent(void * /* NSView * */view, void * /* NSEvent * */ev NSPoint localPoint = [tmpView convertPoint:windowPoint fromView:nil]; QPoint qlocalPoint(localPoint.x, localPoint.y); - if (widgetToGetMouse->testAttribute(Qt::WA_TransparentForMouseEvents)) { - // Simulate passing the event through since Cocoa doesn't do that for us. - // Start by building a tree up. - NSView *candidateView = [theView viewUnderTransparentForMouseView:tmpView - widget:widgetToGetMouse - withWindowPoint:windowPoint]; - if (candidateView != nil) { - // Fast-track our views, since dispatching trough the normal ways - // would just end up going through here anyway. - if ([candidateView isKindOfClass:[QT_MANGLE_NAMESPACE(QCocoaView) class]]) { - return qt_mac_handleMouseEvent(candidateView, theEvent, eventType, button); - } else { - switch (eventType) { - default: - qWarning("not handled! %d", eventType); - break; - case QEvent::MouseMove: - [candidateView mouseMoved:theEvent]; - break; - case QEvent::MouseButtonPress: - if (button == Qt::LeftButton) - [candidateView mouseDown:theEvent]; - else if (button == Qt::RightButton) - [candidateView rightMouseDown:theEvent]; - else - [candidateView otherMouseDown:theEvent]; - break; - case QEvent::MouseButtonRelease: - if (button == Qt::LeftButton) - [candidateView mouseUp:theEvent]; - else if (button == Qt::RightButton) - [candidateView rightMouseUp:theEvent]; - else - [candidateView otherMouseUp:theEvent]; - break; - } - return true; // We've done the dispatching, no need go further. - } - } - // Nothing below me return false - return false; - } - - EventRef carbonEvent = static_cast(const_cast([theEvent eventRef])); if (qt_mac_sendMacEventToWidget(widgetToGetMouse, carbonEvent)) return true; -- cgit v0.12 From c6cc00316b2ce95adddc9fdb658d737057b40682 Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil Date: Thu, 2 Jul 2009 16:25:44 +0200 Subject: Drag and drop events are not delivered correctly in Cocoa Drag and drop events should consider the WA_TransparentForMouseEvents attribute like the mouse events. If this attribute is set for a widget, the event has to be passed to right widget under mouse. The widget is identified by calling hitTest. In such cases the leave event has to be delivered to the widget which actually accepted the enter event. Task-number: 252088 Reviewed-by: Norwegian Rock Cat --- src/gui/kernel/qcocoaview_mac.mm | 49 ++++++++++++++++++++++++++++++++------- src/gui/kernel/qcocoaview_mac_p.h | 2 ++ 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index 81e06a9..4479531 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -288,11 +288,18 @@ extern "C" { { if (qwidget->testAttribute(Qt::WA_DropSiteRegistered) == false) return NSDragOperationNone; + NSPoint windowPoint = [sender draggingLocation]; + if (qwidget->testAttribute(Qt::WA_TransparentForMouseEvents)) { + // pass the drag enter event to the view underneath. + NSView *candidateView = [[[self window] contentView] hitTest:windowPoint]; + if (candidateView && candidateView != self) + return [candidateView draggingEntered:sender]; + } + dragEnterSequence = [sender draggingSequenceNumber]; [self addDropData:sender]; QMimeData *mimeData = dropData; if (QDragManager::self()->source()) mimeData = QDragManager::self()->dragPrivate()->data; - NSPoint windowPoint = [sender draggingLocation]; NSPoint globalPoint = [[sender draggingDestinationWindow] convertBaseToScreen:windowPoint]; NSPoint localPoint = [self convertPoint:windowPoint fromView:nil]; QPoint posDrag(localPoint.x, localPoint.y); @@ -316,6 +323,9 @@ extern "C" { [self removeDropData]; return NSDragOperationNone; } else { + // save the mouse position, used by draggingExited handler. + DnDParams *dndParams = [QCocoaView currentMouseEvent]; + dndParams->activeDragEnterPos = windowPoint; // send a drag move event immediately after a drag enter event (as per documentation). QDragMoveEvent qDMEvent(posDrag, qtAllowed, mimeData, QApplication::mouseButtons(), modifiers); qDMEvent.setDropAction(qDEEvent.dropAction()); @@ -336,11 +346,22 @@ extern "C" { - (NSDragOperation)draggingUpdated:(id < NSDraggingInfo >)sender { - // drag enter event was rejected, so ignore the move event. + NSPoint windowPoint = [sender draggingLocation]; + if (qwidget->testAttribute(Qt::WA_TransparentForMouseEvents)) { + // pass the drag move event to the view underneath. + NSView *candidateView = [[[self window] contentView] hitTest:windowPoint]; + if (candidateView && candidateView != self) + return [candidateView draggingUpdated:sender]; + } + // in cases like QFocusFrame, the view under the mouse might + // not have received the drag enter. Generate a synthetic + // drag enter event for that view. + if (dragEnterSequence != [sender draggingSequenceNumber]) + [self draggingEntered:sender]; + // drag enter event was rejected, so ignore the move event. if (dropData == 0) return NSDragOperationNone; // return last value, if we are still in the answerRect. - NSPoint windowPoint = [sender draggingLocation]; NSPoint globalPoint = [[sender draggingDestinationWindow] convertBaseToScreen:windowPoint]; NSPoint localPoint = [self convertPoint:windowPoint fromView:nil]; NSDragOperation nsActions = [sender draggingSourceOperationMask]; @@ -379,21 +400,34 @@ extern "C" { - (void)draggingExited:(id < NSDraggingInfo >)sender { - Q_UNUSED(sender) - // drag enter event was rejected, so ignore the move event. + dragEnterSequence = -1; + if (qwidget->testAttribute(Qt::WA_TransparentForMouseEvents)) { + // try sending the leave event to the last view which accepted drag enter. + DnDParams *dndParams = [QCocoaView currentMouseEvent]; + NSView *candidateView = [[[self window] contentView] hitTest:dndParams->activeDragEnterPos]; + if (candidateView && candidateView != self) + return [candidateView draggingExited:sender]; + } + // drag enter event was rejected, so ignore the move event. if (dropData) { QDragLeaveEvent de; QApplication::sendEvent(qwidget, &de); [self removeDropData]; } - } - (BOOL)performDragOperation:(id )sender { + NSPoint windowPoint = [sender draggingLocation]; + dragEnterSequence = -1; + if (qwidget->testAttribute(Qt::WA_TransparentForMouseEvents)) { + // pass the drop event to the view underneath. + NSView *candidateView = [[[self window] contentView] hitTest:windowPoint]; + if (candidateView && candidateView != self) + return [candidateView performDragOperation:sender]; + } [self addDropData:sender]; - NSPoint windowPoint = [sender draggingLocation]; NSPoint globalPoint = [[sender draggingDestinationWindow] convertBaseToScreen:windowPoint]; NSPoint localPoint = [self convertPoint:windowPoint fromView:nil]; QPoint posDrop(localPoint.x, localPoint.y); @@ -688,7 +722,6 @@ extern "C" { } if (!lowerView) // Low as we can be at this point. candidateView = viewForDescent; - // Try to go deeper, will also exit out of the loop, if we found the point. viewForDescent = lowerView; lowerView = nil; diff --git a/src/gui/kernel/qcocoaview_mac_p.h b/src/gui/kernel/qcocoaview_mac_p.h index b4a60b6..7c227cc 100644 --- a/src/gui/kernel/qcocoaview_mac_p.h +++ b/src/gui/kernel/qcocoaview_mac_p.h @@ -68,6 +68,7 @@ struct DnDParams NSEvent *theEvent; NSPoint localPoint; NSDragOperation performedAction; + NSPoint activeDragEnterPos; }; QT_END_NAMESPACE @@ -85,6 +86,7 @@ Q_GUI_EXPORT int composingLength; bool sendKeyEvents; QStringList *currentCustomTypes; + NSInteger dragEnterSequence; } - (id)initWithQWidget:(QWidget *)widget widgetPrivate:(QWidgetPrivate *)widgetprivate; - (void) finishInitWithQWidget:(QWidget *)widget widgetPrivate:(QWidgetPrivate *)widgetprivate; -- cgit v0.12 From d2bfae633e99a818c9086846bf330d722afd86f4 Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil Date: Thu, 2 Jul 2009 16:55:38 +0200 Subject: Remove unused function viewUnderTransparentForMouseView in QCocoaView. After we implemented hitTest for QCocoaView, this function is no longer used. Reviewed-by: Norwegian Rock Cat --- src/gui/kernel/qcocoaview_mac.mm | 55 --------------------------------------- src/gui/kernel/qcocoaview_mac_p.h | 2 -- 2 files changed, 57 deletions(-) diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index 4479531..e3ec30a 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -678,61 +678,6 @@ extern "C" { qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseMove, Qt::NoButton); } -- (NSView *)viewUnderTransparentForMouseView:(NSView *)mouseView widget:(QWidget *)widgetToGetMouse - withWindowPoint:(NSPoint)windowPoint -{ - NSMutableArray *viewsToLookAt = [NSMutableArray arrayWithCapacity:5]; - [viewsToLookAt addObject:mouseView]; - QWidget *parentWidget = widgetToGetMouse->parentWidget(); - while (parentWidget) { - [viewsToLookAt addObject:qt_mac_nativeview_for(parentWidget)]; - parentWidget = parentWidget->parentWidget(); - } - - // Now walk through the subviews of each view and determine which subview should - // get the event. We look through all the subviews at a given level with - // the assumption that the last item to be found the candidate has a higher z-order. - // Unfortunately, fast enumeration doesn't go backwards in 10.5, so assume go fast - // forward is quicker than the slow normal way backwards. - NSView *candidateView = nil; - for (NSView *lookView in viewsToLookAt) { - NSPoint tmpPoint = [lookView convertPoint:windowPoint fromView:nil]; - for (NSView *view in [lookView subviews]) { - if (view == mouseView || [view isHidden]) - continue; - NSRect frameRect = [view frame]; - if (NSMouseInRect(tmpPoint, [view frame], [view isFlipped])) - candidateView = view; - } - if (candidateView) - break; - } - - - if (candidateView != nil) { - // Now that we've got a candidate, we have to dig into it's tree and see where it is. - NSView *lowerView = nil; - NSView *viewForDescent = candidateView; - while (viewForDescent) { - NSPoint tmpPoint = [viewForDescent convertPoint:windowPoint fromView:nil]; - // Apply same rule as above wrt z-order. - for (NSView *view in [viewForDescent subviews]) { - if (![view isHidden] && NSMouseInRect(tmpPoint, [view frame], [view isFlipped])) - lowerView = view; - } - if (!lowerView) // Low as we can be at this point. - candidateView = viewForDescent; - // Try to go deeper, will also exit out of the loop, if we found the point. - viewForDescent = lowerView; - lowerView = nil; - } - } - // I am transparent, so I can't be a candidate. - if (candidateView == mouseView) - candidateView = nil; - return candidateView; -} - - (void)mouseDown:(NSEvent *)theEvent { qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonPress, Qt::LeftButton); diff --git a/src/gui/kernel/qcocoaview_mac_p.h b/src/gui/kernel/qcocoaview_mac_p.h index 7c227cc..24040ba 100644 --- a/src/gui/kernel/qcocoaview_mac_p.h +++ b/src/gui/kernel/qcocoaview_mac_p.h @@ -105,8 +105,6 @@ Q_GUI_EXPORT - (QWidget *)qt_qwidget; - (BOOL)qt_leftButtonIsRightButton; - (void)qt_setLeftButtonIsRightButton:(BOOL)isSwapped; -- (NSView *)viewUnderTransparentForMouseView:(NSView *)mouseView widget:(QWidget *)widgetToGetMouse - withWindowPoint:(NSPoint)windowPoint; + (DnDParams*)currentMouseEvent; @end -- cgit v0.12 From 9c64e8f7a5e19e241deaa7e426534dc6761a6890 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Thu, 2 Jul 2009 11:47:10 -0700 Subject: Better debug output for QDirectFBPaintEngine Add unsupportedCompositionMode to the output. Reviewed-by: TrustMe --- src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp index e4ce230..df341fb 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp @@ -81,7 +81,7 @@ template <> inline const bool* ptr(const bool &) { return 0; } template static void rasterFallbackWarn(const char *msg, const char *func, const device *dev, int scale, bool matrixRotShear, bool simplePen, - bool dfbHandledClip, + bool dfbHandledClip, bool unsupportedCompositionMode, const char *nameOne, const T1 &one, const char *nameTwo, const T2 &two, const char *nameThree, const T3 &three) @@ -98,7 +98,8 @@ static void rasterFallbackWarn(const char *msg, const char *func, const device * dbg << "scale" << scale << "matrixRotShear" << matrixRotShear << "simplePen" << simplePen - << "dfbHandledClip" << dfbHandledClip; + << "dfbHandledClip" << dfbHandledClip + << "unsupportedCompositionMode" << unsupportedCompositionMode; const T1 *t1 = ptr(one); const T2 *t2 = ptr(two); @@ -124,6 +125,7 @@ static void rasterFallbackWarn(const char *msg, const char *func, const device * __FUNCTION__, state()->painter->device(), \ d_func()->scale, d_func()->matrixRotShear, \ d_func()->simplePen, d_func()->dfbCanHandleClip(), \ + d_func()->unsupportedCompositionMode, \ #one, one, #two, two, #three, three); \ if (op & (QT_DIRECTFB_DISABLE_RASTERFALLBACKS)) \ return; @@ -138,6 +140,7 @@ static void rasterFallbackWarn(const char *msg, const char *func, const device * __FUNCTION__, state()->painter->device(), \ d_func()->scale, d_func()->matrixRotShear, \ d_func()->simplePen, d_func()->dfbCanHandleClip(), \ + d_func()->unsupportedCompositionMode, \ #one, one, #two, two, #three, three); #else #define RASTERFALLBACK(op, one, two, three) -- cgit v0.12 From b0f18119b4559a2b425222c2d63671422c014783 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Thu, 2 Jul 2009 18:25:03 -0700 Subject: QDirectFBPaintEngine return if destRect is null Reviewed-by: Donald --- src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp index df341fb..947cc76 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp @@ -1062,6 +1062,8 @@ void QDirectFBPaintEnginePrivate::blit(const QRectF &dest, IDirectFBSurface *s, { const QRect sr = src.toRect(); const QRect dr = transform.mapRect(dest).toRect(); + if (dr.isEmpty()) + return; const DFBRectangle sRect = { sr.x(), sr.y(), sr.width(), sr.height() }; DFBResult result; -- cgit v0.12 From 5b701c1bbbbf4993117bd0311717b73fafae02fd Mon Sep 17 00:00:00 2001 From: Bill King Date: Fri, 3 Jul 2009 13:08:17 +1000 Subject: Fixes invalid length for numeric fields in oracle. When the precisionpolicy is high, and the field is numeric, it was getting confused as a string field and pulling the wrong length value. --- src/sql/drivers/oci/qsql_oci.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sql/drivers/oci/qsql_oci.cpp b/src/sql/drivers/oci/qsql_oci.cpp index 8d34dd8..1ffd999 100644 --- a/src/sql/drivers/oci/qsql_oci.cpp +++ b/src/sql/drivers/oci/qsql_oci.cpp @@ -611,7 +611,7 @@ static QSqlField qFromOraInf(const OraFieldInfo &ofi) QSqlField f(ofi.name, ofi.type); f.setRequired(ofi.oraIsNull == 0); - if (ofi.type == QVariant::String) + if (ofi.type == QVariant::String && ofi.oraType != SQLT_NUM && ofi.oraType != SQLT_VNU) f.setLength(ofi.oraFieldLength); else f.setLength(ofi.oraPrecision == 0 ? 38 : int(ofi.oraPrecision)); -- cgit v0.12 From e0912dad8095adb8da4bd27128a5baacfda59eb5 Mon Sep 17 00:00:00 2001 From: Bill King Date: Fri, 3 Jul 2009 15:31:54 +1000 Subject: Fixes ::record for dialect 3 named tables in interbase/firebird. The comparison was mistakenly only uppercasing one side, so mixed case table names were reporting back as if they weren't found for both QSqlDatabase::record() and QSqlDatabase::primaryIndex() --- src/sql/drivers/ibase/qsql_ibase.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sql/drivers/ibase/qsql_ibase.cpp b/src/sql/drivers/ibase/qsql_ibase.cpp index 0033418..5e94c81 100644 --- a/src/sql/drivers/ibase/qsql_ibase.cpp +++ b/src/sql/drivers/ibase/qsql_ibase.cpp @@ -1583,7 +1583,7 @@ QSqlRecord QIBaseDriver::record(const QString& tablename) const "b.RDB$FIELD_SCALE, b.RDB$FIELD_PRECISION, a.RDB$NULL_FLAG " "FROM RDB$RELATION_FIELDS a, RDB$FIELDS b " "WHERE b.RDB$FIELD_NAME = a.RDB$FIELD_SOURCE " - "AND a.RDB$RELATION_NAME = '") + tablename.toUpper() + QLatin1String("' " + "AND UPPER(a.RDB$RELATION_NAME) = '") + tablename.toUpper() + QLatin1String("' " "ORDER BY a.RDB$FIELD_POSITION")); while (q.next()) { @@ -1616,7 +1616,7 @@ QSqlIndex QIBaseDriver::primaryIndex(const QString &table) const q.exec(QLatin1String("SELECT a.RDB$INDEX_NAME, b.RDB$FIELD_NAME, d.RDB$FIELD_TYPE, d.RDB$FIELD_SCALE " "FROM RDB$RELATION_CONSTRAINTS a, RDB$INDEX_SEGMENTS b, RDB$RELATION_FIELDS c, RDB$FIELDS d " "WHERE a.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' " - "AND a.RDB$RELATION_NAME = '") + table.toUpper() + + "AND UPPER(a.RDB$RELATION_NAME) = '") + table.toUpper() + QLatin1String(" 'AND a.RDB$INDEX_NAME = b.RDB$INDEX_NAME " "AND c.RDB$RELATION_NAME = a.RDB$RELATION_NAME " "AND c.RDB$FIELD_NAME = b.RDB$FIELD_NAME " -- cgit v0.12 From 238c5e3025d8f48dd73f1c4060d08701444eac0d Mon Sep 17 00:00:00 2001 From: Bill King Date: Fri, 3 Jul 2009 15:34:44 +1000 Subject: Fix up two more qsqldatabase autotests. --- tests/auto/qsqldatabase/tst_qsqldatabase.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp index 28a2191..21064c3 100644 --- a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp +++ b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp @@ -188,7 +188,7 @@ private slots: void oci_fieldLength_data() { generic_data("QOCI"); } void oci_fieldLength(); - void sqlite_bindAndFetchUInt_data() { generic_data("QSQLITE3"); } + void sqlite_bindAndFetchUInt_data() { generic_data("QSQLITE"); } void sqlite_bindAndFetchUInt(); void sqlStatementUseIsNull_189093_data() { generic_data(); } @@ -1526,6 +1526,7 @@ void tst_QSqlDatabase::psql_escapedIdentifiers() QString field1Name = QString("fIeLdNaMe"); QString field2Name = QString("ZuLu"); + q.exec(QString("DROP SCHEMA \"%1\" CASCADE").arg(schemaName)); QString createSchema = QString("CREATE SCHEMA \"%1\"").arg(schemaName); QVERIFY_SQL(q, exec(createSchema)); QString createTable = QString("CREATE TABLE \"%1\".\"%2\" (\"%3\" int PRIMARY KEY, \"%4\" varchar(20))").arg(schemaName).arg(tableName).arg(field1Name).arg(field2Name); @@ -1681,6 +1682,8 @@ void tst_QSqlDatabase::precisionPolicy() q.setNumericalPrecisionPolicy(QSql::LowPrecisionInt32); QVERIFY_SQL(q, exec(query)); + if(db.driverName().startsWith("QOCI")) + QEXPECT_FAIL("", "Oracle fails to move to next when data columns are oversize", Abort); QVERIFY_SQL(q, next()); QCOMPARE(q.value(0).type(), QVariant::Invalid); } @@ -2262,6 +2265,10 @@ void tst_QSqlDatabase::sqlite_bindAndFetchUInt() QFETCH(QString, dbName); QSqlDatabase db = QSqlDatabase::database(dbName); CHECK_DATABASE(db); + if (db.driverName().startsWith("QSQLITE2")) { + QSKIP("SQLite3 specific test", SkipSingle); + return; + } QSqlQuery q(db); QString tableName = qTableName("uint_test"); -- cgit v0.12 From 012d133b2093e0949872263297c23277d0ce30d9 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Fri, 3 Jul 2009 16:47:56 +1000 Subject: Fixed dead code possibly leading to crash. Looks like this `&&' was meant to be `||'. QNetworkProxy::FtpCachingProxy is 5 so it's clearly impossible for type to be less than 0 and greater than QNetworkProxy::FtpCachingProxy. Reviewed-by: Aaron Kennedy --- src/network/kernel/qnetworkproxy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/kernel/qnetworkproxy.cpp b/src/network/kernel/qnetworkproxy.cpp index c2743ef..103b948 100644 --- a/src/network/kernel/qnetworkproxy.cpp +++ b/src/network/kernel/qnetworkproxy.cpp @@ -366,7 +366,7 @@ static QNetworkProxy::Capabilities defaultCapabilitiesForType(QNetworkProxy::Pro int(QNetworkProxy::HostNameLookupCapability)), }; - if (int(type) < 0 && int(type) > int(QNetworkProxy::FtpCachingProxy)) + if (int(type) < 0 || int(type) > int(QNetworkProxy::FtpCachingProxy)) type = QNetworkProxy::DefaultProxy; return QNetworkProxy::Capabilities(defaults[int(type)]); } -- cgit v0.12 From 8fa9744b1b18f97b98fc434b8b8057434118e3db Mon Sep 17 00:00:00 2001 From: Bill King Date: Mon, 6 Jul 2009 12:30:32 +1000 Subject: Fix precision autotest for SqlServer Sql Server can't count. Reduce the expected length of string when we're on sql server. --- tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp b/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp index 91533dd..812c862 100644 --- a/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp +++ b/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp @@ -155,11 +155,9 @@ void tst_Q3SqlCursor::createTestTables( QSqlDatabase db ) } if (tst_Databases::isMSAccess(db)) { - QVERIFY_SQL(q, exec("create table " + qTableName("qtest_precision") + " (col1 number)")); - } else if (db.driverName().startsWith("QIBASE")) { - QVERIFY_SQL(q, exec("create table " + qTableName("qtest_precision") + " (col1 numeric(15, 14))")); + QVERIFY_SQL(q, exec("create table " + qTableName("qtest_precision") + " (col1 number)")); } else { - QVERIFY_SQL(q, exec("create table " + qTableName("qtest_precision") + " (col1 numeric(15, 14))")); + QVERIFY_SQL(q, exec("create table " + qTableName("qtest_precision") + " (col1 numeric(15, 14))")); } } @@ -555,7 +553,7 @@ void tst_Q3SqlCursor::unicode() void tst_Q3SqlCursor::precision() { - static const QString precStr = "1.23456789012345"; + static const QString precStr = QLatin1String("1.23456789012345"); static const double precDbl = 2.23456789012345; QFETCH( QString, dbName ); @@ -574,7 +572,10 @@ void tst_Q3SqlCursor::precision() QVERIFY_SQL(cur, select()); QVERIFY( cur.next() ); - QCOMPARE( cur.value( 0 ).asString(), QString( precStr ) ); + if(!tst_Databases::isSqlServer(db)) + QCOMPARE( cur.value( 0 ).asString(), precStr ); + else + QCOMPARE( cur.value( 0 ).asString(), precStr.left(precStr.size()-1) ); QVERIFY( cur.next() ); QCOMPARE( cur.value( 0 ).asDouble(), precDbl ); } -- cgit v0.12 From 8915977e56b58c4631dfb2b8616585b664e55f38 Mon Sep 17 00:00:00 2001 From: Bill King Date: Mon, 6 Jul 2009 15:57:41 +1000 Subject: Fix more sql autotest failures. Sql server fails at numeric field calculations. (Confirmed by running against MySql via odbc). Also, quote fields properly. The drivers know how to do it correctly, so let them handle it. --- tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp b/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp index 812c862..360c3b7 100644 --- a/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp +++ b/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp @@ -575,7 +575,7 @@ void tst_Q3SqlCursor::precision() if(!tst_Databases::isSqlServer(db)) QCOMPARE( cur.value( 0 ).asString(), precStr ); else - QCOMPARE( cur.value( 0 ).asString(), precStr.left(precStr.size()-1) ); + QCOMPARE( cur.value( 0 ).asString(), precStr.left(precStr.size()-1) ); // Sql server fails at counting. QVERIFY( cur.next() ); QCOMPARE( cur.value( 0 ).asDouble(), precDbl ); } @@ -759,8 +759,9 @@ void tst_Q3SqlCursor::insertFieldNameContainsWS() { QSqlQuery q(db); q.exec(QString("DROP TABLE %1").arg(tableName)); - QString query = QString("CREATE TABLE %1 (id int, \"first Name\" varchar(20), " - "lastName varchar(20))"); + QString query = "CREATE TABLE %1 (id int, " + + db.driver()->escapeIdentifier("first Name", QSqlDriver::FieldName) + + " varchar(20), lastName varchar(20))"; QVERIFY_SQL(q, exec(query.arg(tableName))); Q3SqlCursor cur(QString("%1").arg(tableName), true, db); -- cgit v0.12 From bf5112c6673d32cbaad33c388d38690264adf107 Mon Sep 17 00:00:00 2001 From: ck Date: Mon, 6 Jul 2009 10:20:02 +0200 Subject: Fixed race condition in search module. Task-number: 257441 Reviewed-by: kh --- tools/assistant/lib/qhelpsearchengine.cpp | 10 ++++------ .../lib/qhelpsearchindexreader_clucene.cpp | 21 +++++++++++++++------ .../lib/qhelpsearchindexreader_clucene_p.h | 5 ++--- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/tools/assistant/lib/qhelpsearchengine.cpp b/tools/assistant/lib/qhelpsearchengine.cpp index 9faafe0..15f7f9e 100644 --- a/tools/assistant/lib/qhelpsearchengine.cpp +++ b/tools/assistant/lib/qhelpsearchengine.cpp @@ -96,6 +96,7 @@ private: delete indexWriter; } + int hitsCount() const { int count = 0; @@ -107,12 +108,9 @@ private: QList hits(int start, int end) const { - QList returnValue; - if (indexReader) { - for (int i = start; i < end && i < hitsCount(); ++i) - returnValue.append(indexReader->hit(i)); - } - return returnValue; + return indexReader ? + indexReader->hits(start, end) : + QList(); } void updateIndex(bool reindex = false) diff --git a/tools/assistant/lib/qhelpsearchindexreader_clucene.cpp b/tools/assistant/lib/qhelpsearchindexreader_clucene.cpp index 227e558..867e060 100644 --- a/tools/assistant/lib/qhelpsearchindexreader_clucene.cpp +++ b/tools/assistant/lib/qhelpsearchindexreader_clucene.cpp @@ -86,8 +86,8 @@ void QHelpSearchIndexReader::cancelSearching() void QHelpSearchIndexReader::search(const QString &collectionFile, const QString &indexFilesFolder, const QList &queryList) { - QMutexLocker lock(&mutex); - + wait(); + this->hitList.clear(); this->m_cancel = false; this->m_query = queryList; @@ -99,12 +99,18 @@ void QHelpSearchIndexReader::search(const QString &collectionFile, const QString int QHelpSearchIndexReader::hitsCount() const { + QMutexLocker lock(&mutex); return hitList.count(); } -QHelpSearchEngine::SearchHit QHelpSearchIndexReader::hit(int index) const +QList QHelpSearchIndexReader::hits(int start, + int end) const { - return hitList.at(index); + QList hits; + QMutexLocker lock(&mutex); + for (int i = start; i < end && i < hitList.count(); ++i) + hits.append(hitList.at(i)); + return hits; } void QHelpSearchIndexReader::run() @@ -135,7 +141,7 @@ void QHelpSearchIndexReader::run() if(QCLuceneIndexReader::indexExists(indexPath)) { mutex.lock(); if (m_cancel) { - mutex.unlock(); + mutex.unlock(); return; } mutex.unlock(); @@ -213,7 +219,9 @@ void QHelpSearchIndexReader::run() #if !defined(QT_NO_EXCEPTIONS) } catch(...) { + mutex.lock(); hitList.clear(); + mutex.unlock(); emit searchingFinished(0); } #endif @@ -416,8 +424,9 @@ void QHelpSearchIndexReader::boostSearchHits(const QHelpEngineCore &engine, boostedList.append(it.value()); } while (it != hitMap.constBegin()); boostedList += hitList.mid(count, hitList.count()); - + mutex.lock(); hitList = boostedList; + mutex.unlock(); } } diff --git a/tools/assistant/lib/qhelpsearchindexreader_clucene_p.h b/tools/assistant/lib/qhelpsearchindexreader_clucene_p.h index 47af43f..e7ac0eb 100644 --- a/tools/assistant/lib/qhelpsearchindexreader_clucene_p.h +++ b/tools/assistant/lib/qhelpsearchindexreader_clucene_p.h @@ -85,9 +85,8 @@ public: void search(const QString &collectionFile, const QString &indexFilesFolder, const QList &queryList); - int hitsCount() const; - QHelpSearchEngine::SearchHit hit(int index) const; + QList hits(int start, int end) const; signals: void searchingStarted(); @@ -105,7 +104,7 @@ private: const QList &queryList); private: - QMutex mutex; + mutable QMutex mutex; QList hitList; QWaitCondition waitCondition; -- cgit v0.12 From 18a717b3f2e6a19a5ad631b68b26d09ba934bece Mon Sep 17 00:00:00 2001 From: ck Date: Mon, 6 Jul 2009 10:24:37 +0200 Subject: Removed superfluous code in assistant's search module. Reviewed-by: kh --- tools/assistant/lib/qhelpsearchengine.cpp | 19 ++++++------------- .../assistant/lib/qhelpsearchindexreader_clucene.cpp | 1 - .../assistant/lib/qhelpsearchindexreader_clucene_p.h | 2 -- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/tools/assistant/lib/qhelpsearchengine.cpp b/tools/assistant/lib/qhelpsearchengine.cpp index 15f7f9e..2a41d04 100644 --- a/tools/assistant/lib/qhelpsearchengine.cpp +++ b/tools/assistant/lib/qhelpsearchengine.cpp @@ -84,14 +84,12 @@ private: , resultWidget(0) , helpEngine(helpEngine) { - hitList.clear(); indexReader = 0; indexWriter = 0; } ~QHelpSearchEnginePrivate() { - hitList.clear(); delete indexReader; delete indexWriter; } @@ -129,11 +127,9 @@ private: connect(indexWriter, SIGNAL(indexingFinished()), this, SLOT(optimizeIndex())); } - if (indexWriter) { - indexWriter->cancelIndexing(); - indexWriter->updateIndex(helpEngine->collectionFile(), - indexFilesFolder(), reindex); - } + indexWriter->cancelIndexing(); + indexWriter->updateIndex(helpEngine->collectionFile(), + indexFilesFolder(), reindex); } void cancelIndexing() @@ -157,11 +153,9 @@ private: connect(indexReader, SIGNAL(searchingFinished(int)), this, SIGNAL(searchingFinished(int))); } - if (indexReader) { - m_queryList = queryList; - indexReader->cancelSearching(); - indexReader->search(helpEngine->collectionFile(), indexFilesFolder(), queryList); - } + m_queryList = queryList; + indexReader->cancelSearching(); + indexReader->search(helpEngine->collectionFile(), indexFilesFolder(), queryList); } void cancelSearching() @@ -202,7 +196,6 @@ private: QHelpSearchIndexWriter *indexWriter; QPointer helpEngine; - QList hitList; QList m_queryList; }; diff --git a/tools/assistant/lib/qhelpsearchindexreader_clucene.cpp b/tools/assistant/lib/qhelpsearchindexreader_clucene.cpp index 867e060..89d6040 100644 --- a/tools/assistant/lib/qhelpsearchindexreader_clucene.cpp +++ b/tools/assistant/lib/qhelpsearchindexreader_clucene.cpp @@ -70,7 +70,6 @@ QHelpSearchIndexReader::~QHelpSearchIndexReader() { mutex.lock(); this->m_cancel = true; - waitCondition.wakeOne(); mutex.unlock(); wait(); diff --git a/tools/assistant/lib/qhelpsearchindexreader_clucene_p.h b/tools/assistant/lib/qhelpsearchindexreader_clucene_p.h index e7ac0eb..8876d80 100644 --- a/tools/assistant/lib/qhelpsearchindexreader_clucene_p.h +++ b/tools/assistant/lib/qhelpsearchindexreader_clucene_p.h @@ -106,8 +106,6 @@ private: private: mutable QMutex mutex; QList hitList; - QWaitCondition waitCondition; - bool m_cancel; QString m_collectionFile; QList m_query; -- cgit v0.12 From fd181167709283a2ceefa5285d6189fa7de23bb6 Mon Sep 17 00:00:00 2001 From: Norwegian Rock Cat Date: Mon, 6 Jul 2009 14:08:41 +0200 Subject: Implement QApplication::setOverrideCursor to use pure Cocoa calls Seems this was a victim of our cursor fixing. Cocoa does a lot for us with setting cursors. This meant that we didn't need to do as much meddling and as a result qt_mac_set_cursor does nothing in Cocoa. Unfortunately, this broke setOverrideCursor. Luckily Cocoa has a stack that works exactly like Qt, so we can just use that. Task-number: 257507 Reviewed-by: Prasanth Ullattil --- src/gui/kernel/qapplication_mac.mm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_mac.mm b/src/gui/kernel/qapplication_mac.mm index 5ded153..0d86c8e 100644 --- a/src/gui/kernel/qapplication_mac.mm +++ b/src/gui/kernel/qapplication_mac.mm @@ -1294,8 +1294,13 @@ void QApplication::setOverrideCursor(const QCursor &cursor) { qApp->d_func()->cursor_list.prepend(cursor); +#ifdef QT_MAC_USE_COCOA + QMacCocoaAutoReleasePool pool; + [static_cast(qt_mac_nsCursorForQCursor(cursor)) push]; +#else if (qApp && qApp->activeWindow()) qt_mac_set_cursor(&qApp->d_func()->cursor_list.first(), QCursor::pos()); +#endif } void QApplication::restoreOverrideCursor() @@ -1304,12 +1309,17 @@ void QApplication::restoreOverrideCursor() return; qApp->d_func()->cursor_list.removeFirst(); +#ifdef QT_MAC_USE_COCOA + QMacCocoaAutoReleasePool pool; + [NSCursor pop]; +#else if (qApp && qApp->activeWindow()) { const QCursor def(Qt::ArrowCursor); qt_mac_set_cursor(qApp->d_func()->cursor_list.isEmpty() ? &def : &qApp->d_func()->cursor_list.first(), QCursor::pos()); } -} #endif +} +#endif // QT_NO_CURSOR QWidget *QApplication::topLevelAt(const QPoint &p) { -- cgit v0.12 From e07e95da3d35a2ea1ab2b325df6c91620f948497 Mon Sep 17 00:00:00 2001 From: Norwegian Rock Cat Date: Mon, 6 Jul 2009 15:43:03 +0200 Subject: Fix issue where a mainwindow would show two size grips in Cocoa. OK. this is a bit strange. It seems the topdata->resizer value is used to control whether or not we should show a resize handle based on a count (0 no, non-zero yes). Since we somehow decided that this value will never be larger than 15, we made it 4-bits wide. There's a "Qt/Mac" API, QWidgetPrivate::qt_mac_update_sizer(QWidget *, int = 0) which would adjust this value by the int passed in.. We use that in several places, not excluding the QStatusBar where we would pass 1 if we want to show, and -1 if we didn't. Now if you subtract -1 from zero when you are 4 bits wide, well, bad things happen. Therefore protect that (since if it's at zero we have succeeded, we don't want to show the resizer). This seems to work well. The private API is certainly an interesting way of solving the problem, but is easy to abuse (for example, this code will break if resizer = 1 and we are passed -2 in the function. Task-number: 257485 Reviewed-by: Prasanth Ullattil --- src/gui/kernel/qwidget_mac.mm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index ec9a049..f96d061 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -1526,12 +1526,16 @@ void QWidgetPrivate::toggleDrawers(bool visible) *****************************************************************************/ bool QWidgetPrivate::qt_mac_update_sizer(QWidget *w, int up) { + // I'm not sure what "up" is if(!w || !w->isWindow()) return false; QTLWExtra *topData = w->d_func()->topData(); QWExtra *extraData = w->d_func()->extraData(); - topData->resizer += up; + // topData->resizer is only 4 bits, so subtracting -1 from zero causes bad stuff + // to happen, prevent that here (you really want the thing hidden). + if (up >= 0 || topData->resizer != 0) + topData->resizer += up; OSWindowRef windowRef = qt_mac_window_for(OSViewRef(w->winId())); { #ifndef QT_MAC_USE_COCOA @@ -1544,7 +1548,6 @@ bool QWidgetPrivate::qt_mac_update_sizer(QWidget *w, int up) bool remove_grip = (topData->resizer || (w->windowFlags() & Qt::FramelessWindowHint) || (extraData->maxw && extraData->maxh && extraData->maxw == extraData->minw && extraData->maxh == extraData->minh)); - #ifndef QT_MAC_USE_COCOA WindowAttributes attr; GetWindowAttributes(windowRef, &attr); -- cgit v0.12 From 1222ea208587ed039e436d58aa6d7ea6ea6c014e Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Mon, 6 Jul 2009 19:29:07 +0200 Subject: Update Russian Qt phrase book Merge-request: 803 Reviewed-by: Oswald Buddenhagen --- tools/linguist/phrasebooks/russian.qph | 52 +++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/tools/linguist/phrasebooks/russian.qph b/tools/linguist/phrasebooks/russian.qph index 629c60b..69af041 100644 --- a/tools/linguist/phrasebooks/russian.qph +++ b/tools/linguist/phrasebooks/russian.qph @@ -10,7 +10,7 @@ accessibility - удобство + специальные возможности action handle @@ -345,8 +345,8 @@ активная зона - icon - пиктограмма + Icon + Значок inactive @@ -402,7 +402,7 @@ list view - древовидный список + список manual link @@ -901,10 +901,6 @@ панель инструментов - tooltip - всплывающая подсказка - - tree view control древовидный список @@ -1054,10 +1050,46 @@ Case Sensitive - Регистрозависимо + Учитывать регистр Whole words - Слова полностью + Слова целиком + + + Find Next + Найти следующее + + + Find Previous + Найти предыдущее + + + Case Sensitive + Учитывать регистр символов + + + Whole words only + Только слова целиком + + + Subwindow + Дочернее окно + + + Next + Далее + + + tree view + древовидный список + + + ToolTip + Подсказка + + + Checkable + Переключаемое -- cgit v0.12 From e1d2dffc8cfe4195210ce435c394d8af9b9823e8 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Mon, 6 Jul 2009 19:29:08 +0200 Subject: Update Russian translation for Qt libraries. almost done; only few strings left untranslated. Merge-request: 803 Reviewed-by: Oswald Buddenhagen --- translations/qt_ru.ts | 212 +++++++++++++++++++++++++------------------------- 1 file changed, 104 insertions(+), 108 deletions(-) diff --git a/translations/qt_ru.ts b/translations/qt_ru.ts index 1e6a4eb..9529c33 100644 --- a/translations/qt_ru.ts +++ b/translations/qt_ru.ts @@ -57,7 +57,7 @@ Accessibility - Средства для людей с ограниченными возможностями + Специальные возможности @@ -87,7 +87,7 @@ Check your Gstreamer installation and make sure you have libgstreamer-plugins-base installed. Невозможно начать воспроизведение. -Проверьте установку Gstreamer и убедитесь, +Проверьте установку Gstreamer и убедитесь, что пакет libgstreamer-plugins-base установлен. @@ -917,22 +917,22 @@ to QAxSelect - + Select ActiveX Control Выбор компоненты ActiveX - + OK Выбрать - + &Cancel &Отмена - + COM &Object: COM &Объект: @@ -1022,7 +1022,7 @@ to Открыть - + False Нет @@ -1491,32 +1491,32 @@ Please verify the correct file name was given. Показать скр&ытые файлы - - + + Back Назад - - + + Parent Directory Родительский каталог - - + + List View Список - - + + Detail View Подробный вид - - + + Files of type: Типы файлов: @@ -1595,8 +1595,8 @@ Do you want to delete it anyway? Показать - - + + Forward Вперёд @@ -1628,14 +1628,14 @@ Do you want to delete it anyway? &Имя файла: - - + + Look in: Перейти к: - - + + Create New Folder Создать папку @@ -1799,7 +1799,7 @@ Do you want to delete it anyway? Arabic - + Арабская @@ -1809,57 +1809,57 @@ Do you want to delete it anyway? Thaana - + Таана Devanagari - + Деванагири Bengali - + Бенгальская Gurmukhi - + Гурмукхи Gujarati - + Гуджарати Oriya - + Ория Tamil - + Тамильская Telugu - + Телугу Kannada - + Каннада Malayalam - + Малайялам Sinhala - + Сингальская @@ -1869,7 +1869,7 @@ Do you want to delete it anyway? Lao - + Лаосская @@ -1879,7 +1879,7 @@ Do you want to delete it anyway? Myanmar - + Мьянма @@ -1924,7 +1924,7 @@ Do you want to delete it anyway? Ogham - + Огамическая @@ -2210,7 +2210,7 @@ Do you want to delete it anyway? Ошибка записи ответа на устройство - + Connection refused Отказано в соединении @@ -2372,7 +2372,7 @@ Do you want to delete it anyway? QIBaseDriver - + Error opening database Ошибка открытия базы данных @@ -2395,7 +2395,7 @@ Do you want to delete it anyway? QIBaseResult - + Unable to create BLOB Невозможно создать BLOB @@ -2441,7 +2441,7 @@ Do you want to delete it anyway? Невозможно выполнить транзакцию - + Could not allocate statement Не удалось получить ресурсы для создания выражения @@ -2452,12 +2452,12 @@ Do you want to delete it anyway? - + Could not describe input statement Не удалось описать входящее выражение - + Could not describe statement Не удалось описать выражение @@ -3223,7 +3223,7 @@ Do you want to delete it anyway? Ошибка загрузки %1 - ответ сервера: %2 - + Protocol "%1" is unknown Неизвестный протокол "%1" @@ -3231,7 +3231,7 @@ Do you want to delete it anyway? QNetworkReplyImpl - + Operation canceled Операция отменена @@ -3240,7 +3240,7 @@ Do you want to delete it anyway? QOCIDriver - + Unable to logon Невозможно авторизоваться @@ -3269,7 +3269,7 @@ Do you want to delete it anyway? QOCIResult - + Unable to bind column for batch execute @@ -3281,7 +3281,7 @@ Do you want to delete it anyway? Невозможно выполнить пакетное выражение - + Unable to goto next Невозможно перейти к следующей строке @@ -3314,7 +3314,7 @@ Do you want to delete it anyway? QODBCDriver - + Unable to connect Невозможно соединиться @@ -3324,7 +3324,7 @@ Do you want to delete it anyway? Невозможно соединиться - Драйвер не поддерживает требуемый функционал - + Unable to disable autocommit Невозможно отключить автовыполнение транзакции @@ -3347,7 +3347,7 @@ Do you want to delete it anyway? QODBCResult - + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration QODBCResult::reset: Невозможно установить 'SQL_CURSOR_STATIC' атрибутом выражение. Проверьте настройки драйвера ODBC @@ -3376,12 +3376,12 @@ Do you want to delete it anyway? - + Unable to fetch last Невозможно получить последнюю строку - + Unable to fetch Невозможно получить данные @@ -3471,7 +3471,7 @@ Do you want to delete it anyway? Не удалось начать транзакцию - + Could not commit transaction Не удалось выполнить транзакцию @@ -3494,7 +3494,7 @@ Do you want to delete it anyway? QPSQLResult - + Unable to create query Невозможно создать запрос @@ -3527,86 +3527,82 @@ Do you want to delete it anyway? Точки (pt) - + Form Форма - + Paper Бумага - + Page size: Размер страницы: - + Width: Ширина: - + Height: Высота: - + Paper source: Источник бумаги: - + Orientation Ориентация - + Portrait Книжная - + Landscape Альбомная - + Reverse landscape Перевёрнутая альбомная - + Reverse portrait Перевёрнутая книжная - + Margins Поля - - + top margin верхнее поле - - + left margin левое поле - - + right margin правое поле - - + bottom margin нижнее поле @@ -4165,17 +4161,17 @@ Please choose a different file name. QPrintPropertiesWidget - + Form Форма - + Page Страница - + Advanced Дополнительно @@ -4183,97 +4179,97 @@ Please choose a different file name. QPrintSettingsOutput - + Form Форма - + Copies Копии - + Print range Диапазон печати - + Print all Все - + Pages from Страницы от - + to до - + Selection Выделенный фрагмент - + Output Settings Настройки вывода - + Copies: Количество копий: - + Collate Разобрать про копиям - + Reverse Обратный порядок - + Options Параметры - + Color Mode Режим цвета - + Color Цвет - + Grayscale Оттенки серого - + Duplex Printing Двусторонняя печать - + None Нет - + Long side По длинной стороне - + Short side По короткой стороне @@ -4281,47 +4277,47 @@ Please choose a different file name. QPrintWidget - + Form Форма - + Printer Принтер - + &Name: &Название: - + P&roperties С&войства - + Location: Расположение: - + Preview Просмотр - + Type: Тип: - + Output &file: Выходной &файл: - + ... ... @@ -6258,7 +6254,7 @@ Please choose a different file name. QWizard - + Go Back Назад -- cgit v0.12 From 16f03cce9fc898e751c04ef590e91e82e0c1f79d Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Mon, 6 Jul 2009 19:29:09 +0200 Subject: Update Russian translation for Qt Linguist. typo fixes; clarify several strings; use 'own languages' hack Merge-request: 803 Reviewed-by: Oswald Buddenhagen --- translations/linguist_ru.ts | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/translations/linguist_ru.ts b/translations/linguist_ru.ts index 058d86a..86c7434 100644 --- a/translations/linguist_ru.ts +++ b/translations/linguist_ru.ts @@ -42,7 +42,7 @@ Note that the modified entries will be reset to unfinished if 'Set translated entries to finished' above is unchecked. - Имейте в виду, что изменённые записи будут отмечены как незавершённые, если не включен параметр "Помечать переведенные записи как завершённые". + Имейте в виду, что изменённые записи будут отмечены как незавершённые, если не включён параметр "Помечать переведенные записи как завершённые". @@ -289,7 +289,7 @@ Will assume a single universal form. LRelease - + Generated %n translation(s) (%1 finished and %2 unfinished) @@ -617,7 +617,7 @@ All files (*) <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist is a tool for adding translations to Qt applications.</p><p>%2</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.</p> - <center><img src=":/images/splash.png"/></img><p>%1</p></center><p>Qt Linguist - инструмент для добавления переводов в приложения на основе Qt.</p><p>%2</p><p>Copyright (C) 2009 Корпорация Nokia и/или её дочерние подразделения.</p><p>Программа предоставляется "как есть" без гарантий любого рода, включая гарантии дизайна, коммерческой ценности и пригодности для определённой цели.</p> + @@ -1250,7 +1250,7 @@ All files (*) Toggle checking that phrase suggestions are used. - Переключение проверки использования предложений для фраз. Если выявлено несовпадение, будет показано сообщение в окне предупреждений. + Переключение проверки использования предложений для фраз. @@ -1466,6 +1466,11 @@ All files (*) + Russian + Русский + + + German Немецкий @@ -1517,7 +1522,7 @@ All files (*) Developer comments - Комментарии разработчика + Комментарий разработчика @@ -1547,7 +1552,7 @@ All files (*) %1 translator comments - Комментарий переводчика на %1 + %1 перевод: комментарий переводчика @@ -1583,10 +1588,11 @@ Line: %2 MsgEdit - + This is the right panel of the main window. - + Правая панель главного окна + @@ -1800,17 +1806,17 @@ Line: %2 C++ source files - Исходные коды C++ + Файлы исходных кодов C++ Java source files - Исходные коды Java + Файлы исходных кодов Java Qt Script source files - Исходные коды Qt Script + Файлы исходных кодов Qt Script -- cgit v0.12 From bcc679a7a06f64459b942b001ae7df2d27b43746 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Mon, 6 Jul 2009 19:29:09 +0200 Subject: Add Russian translation for qvfb Merge-request: 803 Reviewed-by: Oswald Buddenhagen --- tools/qvfb/translations/translations.pro | 1 + translations/qvfb_ru.ts | 328 +++++++++++++++++++++++++++++++ 2 files changed, 329 insertions(+) create mode 100644 translations/qvfb_ru.ts diff --git a/tools/qvfb/translations/translations.pro b/tools/qvfb/translations/translations.pro index 736a72c..f667bb8 100644 --- a/tools/qvfb/translations/translations.pro +++ b/tools/qvfb/translations/translations.pro @@ -27,6 +27,7 @@ SOURCES = ../qvfb.cpp \ ../../shared/deviceskin/deviceskin.cpp TRANSLATIONS=$$[QT_INSTALL_TRANSLATIONS]/qvfb_pl.ts \ + $$[QT_INSTALL_TRANSLATIONS]/qvfb_ru.ts \ $$[QT_INSTALL_TRANSLATIONS]/qvfb_untranslated.ts \ $$[QT_INSTALL_TRANSLATIONS]/qvfb_zh_CN.ts \ $$[QT_INSTALL_TRANSLATIONS]/qvfb_zh_TW.ts diff --git a/translations/qvfb_ru.ts b/translations/qvfb_ru.ts new file mode 100644 index 0000000..b084380 --- /dev/null +++ b/translations/qvfb_ru.ts @@ -0,0 +1,328 @@ + + + + + AnimationSaveWidget + + + + Record + Записать + + + + Reset + Сбросить + + + + Save + Сохранить + + + + Save in MPEG format (requires netpbm package installed) + Сохранить в формат MPEG (требуется установленный пакет netpbm) + + + + + Click record to begin recording. + Нажмите "Записать" для начала записи. + + + + + Finished saving. + Сохранение завершено. + + + + Paused. Click record to resume, or save if done. + Приостановлено. Нажмите "Записать" для продолжения или "Сохранить", если готово. + + + + Pause + Пауза + + + + Recording... + Идёт запись... + + + + Saving... + Сохранение... + + + + + Save animation... + Сохранение анимации... + + + + Save canceled. + Сохранение отменено. + + + + Save failed! + Сохранение не удалось! + + + + Config + + + Configure + Настройка + + + + Size + Размер + + + + 176x220 "SmartPhone" + + + + + 240x320 "PDA" + + + + + 320x240 "TV" / "QVGA" + + + + + 640x480 "VGA" + + + + + 800x600 + + + + + 1024x768 + + + + + Custom + Особый + + + + Depth + Глубина + + + + 1 bit monochrome + 1 бит (монохромный) + + + + 4 bit grayscale + 4 бита (градации серого) + + + + 8 bit + 8 бит + + + + 12 (16) bit + 12 (16) бит + + + + 15 bit + 15 бит + + + + 16 bit + 16 бит + + + + 18 bit + 18 бит + + + + 24 bit + 24 бита + + + + 32 bit + 32 бита + + + + 32 bit ARGB + 32 бита (ARGB) + + + + Skin + Обложка + + + + None + Нет + + + + Emulate touch screen (no mouse move) + Эмулировать тачскрин (без перемещения мыши) + + + + Emulate LCD screen (Only with fixed zoom of 3.0 times magnification) + Эмулировать ж/к экран (только с 3-х кратным увеличением) + + + + <p>Note that any applications using the virtual framebuffer will be terminated if you change the Size or Depth <i>above</i>. You may freely modify the Gamma <i>below</i>. + <p>Имейте в виду, что любая программа будет завершена, если изменится размер или глубина экрана. Параметр Гамма можно менять свободно. + + + + Gamma + Гамма + + + + Blue + Синий + + + + + + + 1.0 + + + + + Green + Зеленый + + + + All + Все + + + + Red + Красный + + + + Set all to 1.0 + Выставить все в 1.0 + + + + &OK + &Готово + + + + &Cancel + &Отмена + + + + DeviceSkin + + + The image file '%1' could not be loaded. + Не удалось загрузить изображение '%1'. + + + + The skin directory '%1' does not contain a configuration file. + Каталог обложки '%1' не содержит файла настроек. + + + + The skin configuration file '%1' could not be opened. + Не удалось открыть файл настроек обложки '%1'. + + + + The skin configuration file '%1' could not be read: %2 + Не удалось прочитать файл настроек обложки '%1': %2 + + + + Syntax error: %1 + Синтаксическая ошибка: %1 + + + + The skin "up" image file '%1' does not exist. + Файл изображения "up" '%1' не существует. + + + + The skin "down" image file '%1' does not exist. + Файл изображения "down" '%1' не существует. + + + + The skin "closed" image file '%1' does not exist. + Файл изображения "closed" '%1' не существует. + + + + The skin cursor image file '%1' does not exist. + Файл изображения курсора '%1' не существует. + + + + Syntax error in area definition: %1 + Синтаксическая ошибка в определении области: %1 + + + + Mismatch in number of areas, expected %1, got %2. + Несовпадение количества зон: ожидается %1, указано %2. + + + + QVFb + + + Browse... + Обзор... + + + + Load Custom Skin... + Загрузить обложку пользователя... + + + + All QVFB Skins (*.skin) + Все обложки QVFB (*.skin) + + + -- cgit v0.12 From 962bdf2eb305c5dd01fc03dbe0c17afb4a42c8aa Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Mon, 6 Jul 2009 19:29:10 +0200 Subject: Add basic Russian translation for qtconfig Merge-request: 803 Reviewed-by: Oswald Buddenhagen --- tools/qtconfig/translations/translations.pro | 1 + translations/qtconfig_ru.ts | 906 +++++++++++++++++++++++++++ 2 files changed, 907 insertions(+) create mode 100644 translations/qtconfig_ru.ts diff --git a/tools/qtconfig/translations/translations.pro b/tools/qtconfig/translations/translations.pro index fbbdb2bba2..1f9f572 100644 --- a/tools/qtconfig/translations/translations.pro +++ b/tools/qtconfig/translations/translations.pro @@ -8,6 +8,7 @@ HEADERS += ../colorbutton.h ../previewframe.h ../previewwidget.h ../mainw FORMS = ../mainwindowbase.ui ../paletteeditoradvancedbase.ui ../previewwidgetbase.ui TRANSLATIONS=$$[QT_INSTALL_TRANSLATIONS]/qtconfig_pl.ts \ + $$[QT_INSTALL_TRANSLATIONS]/qtconfig_ru.ts \ $$[QT_INSTALL_TRANSLATIONS]/qtconfig_untranslated.ts \ $$[QT_INSTALL_TRANSLATIONS]/qtconfig_zh_CN.ts \ $$[QT_INSTALL_TRANSLATIONS]/qtconfig_zh_TW.ts diff --git a/translations/qtconfig_ru.ts b/translations/qtconfig_ru.ts new file mode 100644 index 0000000..b1965f2 --- /dev/null +++ b/translations/qtconfig_ru.ts @@ -0,0 +1,906 @@ + + + + + MainWindow + + + Desktop Settings (Default) + Настройки рабочего стола (по умолчанию) + + + + Choose style and palette based on your desktop settings. + Выбор стиля и палитры на основе настроек рабочего стола. + + + + On The Spot + + + + + + + + Auto (default) + Автоматически (по умолчанию) + + + + Choose audio output automatically. + Автоматический выбор звукового выхода. + + + + + aRts + aRts + + + + Experimental aRts support for GStreamer. + Экспериментальная поддержка aRts в GStreamer. + + + + Phonon GStreamer backend not available. + Модуль Phonon поддержки GStreamer не доступен. + + + + Choose render method automatically + Автоматический выбор метода отрисовки + + + + + X11 + + + + + Use X11 Overlays + Использовать оверлеи X11 + + + + + OpenGL + + + + + Use OpenGL if avaiable + Использовать OpenGL, если доступен + + + + + Software + Программный + + + + Use simple software rendering + Использовать простую программную отрисовку + + + + No changes to be saved. + Нет изменений для сохранения. + + + + Saving changes... + Сохранение изменений... + + + + Over The Spot + + + + + Off The Spot + + + + + Root + + + + + Select a Directory + Выбор каталога + + + + <h3>%1</h3><br/>Version %2<br/><br/>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).<br/><br/>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.<br/> + + + + + + + Qt Configuration + Конфигурация Qt + + + + Save Changes + Сохранение изменений + + + + Save changes to settings? + Сохранить изменения настроек? + + + + &Yes + &Да + + + + &No + &Нет + + + + &Cancel + &Отмена + + + + MainWindowBase + + + Qt Configuration + Конфигурация Qt + + + + Appearance + Внешний вид + + + + GUI Style + Стиль пользовательского графического интерфейса + + + + Select GUI &Style: + &Стиль интерфейса: + + + + Build Palette + Палитра + + + + &3-D Effects: + Эффекты &3-D: + + + + Window Back&ground: + &Фон окна: + + + + &Tune Palette... + &Настроить палитру... + + + + Please use the KDE Control Center to set the palette. + Используйте Центр управления KDE для настройки цветов. + + + + Preview + Предпросмотр + + + + Select &Palette: + Выбор &палитры: + + + + Active Palette + Палитра активных элементов + + + + Inactive Palette + Палитра неактивных элементов + + + + Disabled Palette + Палитра выключенных элементов + + + + Fonts + Шрифты + + + + Default Font + Шрифт по умолчанию + + + + &Style: + &Стиль: + + + + &Point Size: + &Размер в точках: + + + + F&amily: + Семе&йство: + + + + Sample Text + Текст для примера (Sample Text) + + + + Font Substitution + Подстановка шрифтов + + + + S&elect or Enter a Family: + &Выберите или введите семейство: + + + + Current Substitutions: + Текущие замены: + + + + + Up + Выше + + + + + Down + Ниже + + + + + Remove + Удалить + + + + Select s&ubstitute Family: + Выберите п&одставляемое семейство: + + + + + Add + Добавить + + + + Interface + Интерфейс + + + + Feel Settings + Настройка указателя + + + + + ms + мс + + + + &Double Click Interval: + &Интервал двойного щелчка: + + + + No blinking + Без мигания + + + + &Cursor Flash Time: + &Период мигания курсора: + + + + lines + строк + + + + Wheel &Scroll Lines: + &Прокручивать строк при повороте колёсика: + + + + Resolve symlinks in URLs + Разрешать символьные ссылки в URL-ах + + + + GUI Effects + Эффекты пользовательского интерфейса + + + + &Enable + &Включить + + + + Alt+E + Alt+D + + + + &Menu Effect: + Эффект &меню: + + + + C&omboBox Effect: + Эффект C&omboBox: + + + + &ToolTip Effect: + Эффект &ToolTip: + + + + Tool&Box Effect: + Эффект Tool&Box: + + + + + + + Disable + Выключен + + + + + + + Animate + Анимация + + + + + Fade + Затухание + + + + Global Strut + Специальные возможности + + + + Minimum &Width: + Минимальная &ширина: + + + + Minimum Hei&ght: + Минимальная в&ысота: + + + + + pixels + пикселей + + + + Enhanced support for languages written right-to-left + Расширенная поддержка письма справа налево + + + + XIM Input Style: + Стиль ввода XIM: + + + + On The Spot + + + + + Over The Spot + + + + + Off The Spot + + + + + Root + + + + + Default Input Method: + Метод ввода по умолчанию: + + + + Printer + Принтер + + + + Enable Font embedding + Разрешить встраивание шрифтов + + + + Font Paths + Пути к шрифтам + + + + Browse... + Обзор... + + + + Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list. + Нажмите кнопку <b>Обзор...</b> или укажите каталог и нажмите Ввод для добавления его в список. + + + + Phonon + Phonon + + + + About Phonon + О Phonon + + + + + Current Version: + Текущая версия: + + + + + Not available + Недоступно + + + + + Website: + Вэб-сайт: + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html> + + + + + About GStreamer + О GStreamer + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html> + + + + + GStreamer backend settings + Настройки модуля GStreamer + + + + Preferred audio sink: + Предпочитаемое звуковое устройство: + + + + Preferred render method: + Предпочитаемый метод отрисовки: + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Note: changes to these settings may prevent applications from starting up correctly.</span></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Внимание: Изменение данных настроек может повлечь невозможность корректного запуска приложений.</span></p></body></html> + + + + &File + &Файл + + + + &Help + &Справка + + + + &Save + &Сохранить + + + + Save + Сохранить + + + + Ctrl+S + + + + + E&xit + В&ыход + + + + Exit + Выход + + + + &About + &О программе + + + + About + О программе + + + + About &Qt + О &Qt + + + + About Qt + О Qt + + + + PaletteEditorAdvancedBase + + + Tune Palette + Настройка палитры + + + + <b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p> + <b>Изменение палитры</b><p>Изменение палитры текущего виджета или формы.</p><p>Используйте сформированную палитру или выберите цвета для каждой группы цветов и каждой их роли.</p><p>Палитру можно проверить на виджетах в разных режимах отображения в разделе предпросмотра.</p> + + + + Select &Palette: + Выбор &палитры: + + + + Active Palette + Палитра активных элементов + + + + Inactive Palette + Палитра неактивных элементов + + + + Disabled Palette + Палитра выключенных элементов + + + + Auto + Автоматически + + + + Build inactive palette from active + Создать неактивную палитру из активной + + + + Build disabled palette from active + Создать выключенную палитру из активной + + + + Central color &roles + Роли &цветов + + + + Choose central color role + Выберите роль цвета + + + + <b>Select a color role.</b><p>Available central roles are: <ul> <li>Window - general background color.</li> <li>WindowText - general foreground color. </li> <li>Base - used as background color for e.g. text entry widgets, usually white or another light color. </li> <li>Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. </li> <li>Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. </li> <li>ButtonText - a foreground color used with the Button color. </li> <li>Highlight - a color to indicate a selected or highlighted item. </li> <li>HighlightedText - a text color that contrasts to Highlight. </li> <li>BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. </li> </ul> </p> + <b>Выбор роли цвета.</b><p>Доступны следующие роли: <ul><li>Window - основной цвет фона.</li> <li>WindowText - основной цвет текста.</li> <li>Base - используется в качестве фона для, например, виджетов с текстовыми полями, обычно, белый или другой светлый цвет.</li> <li>Text - цвет текста используемый совместно с Base. Обычно, он совпадает с WindowText, так как в этом случае получается максимальный контраст и с Window, и с Base.</li> <li>Button - основной цвет фона кнопки, которой требуется цвет отличный от Window, например, в стиле Macintosh.</li> <li>ButtonText - цвет текста используемый совместно с Button.</li> <li>Highlight - цвет для обозначения выбранного или выделенного элемента.</li> <li>HighlightedText - цвет текста контрастирующий с Highlight.</li> <li>BrightText - цвет текста, который отличается от WindowText и хорошо контрастирует с черным.</li></ul></p> + + + + Window + + + + + WindowText + + + + + Button + + + + + Base + + + + + Text + + + + + BrightText + + + + + ButtonText + + + + + Highlight + + + + + HighlightedText + + + + + &Select Color: + &Выбор цвета: + + + + + Choose a color + Выберите цвет + + + + Choose a color for the selected central color role. + Выберите цвет для указанной роли. + + + + 3-D shadow &effects + Эффекты т&рехмерной тени + + + + Build &from button color + Получ&ить из цвета кнопки + + + + Generate shadings + Создание полутонов + + + + Check to let 3D-effect colors be calculated from button-color. + Включите, чтобы цвета эффекта трёхмерности были получены из цвета кнопки. + + + + Choose 3D-effect color role + Выбор роли цвета дял эффекта трёхмерности + + + + <b>Select a color role.</b><p>Available effect roles are: <ul> <li>Light - lighter than Button color. </li> <li>Midlight - between Button and Light. </li> <li>Mid - between Button and Dark. </li> <li>Dark - darker than Button. </li> <li>Shadow - a very dark color. </li> </ul> + <b>Выбор роли цвета.</b><p>Доступны следующие роли: <ul> <li>Light - светлее цвета Button. </li> <li>Midlight - среднее между Light и Button. </li> <li>Mid - среднее между Button и Dark. </li> <li>Dark - темнее цвета Button. </li> <li>Shadow - очень темный цвет. </li> </ul> + + + + Light + + + + + Midlight + + + + + Mid + + + + + Dark + + + + + Shadow + + + + + Select Co&lor: + Выбор &цвета: + + + + Choose a color for the selected effect color role. + Выбор цвета для указанной роли. + + + + OK + Принять + + + + Close dialog and apply all changes. + Закрыть окно с применением изменений. + + + + Cancel + Отмена + + + + Close dialog and discard all changes. + Закрыть окно с отменой изменений. + + + + PreviewFrame + + + Desktop settings will only take effect after an application restart. + Настройки рабочего стола применятся после перезапуска приложения. + + + + PreviewWidgetBase + + + Preview Window + Окно предпросмотра + + + + ButtonGroup + + + + + RadioButton1 + + + + + RadioButton2 + + + + + RadioButton3 + + + + + ButtonGroup2 + + + + + CheckBox1 + + + + + CheckBox2 + + + + + LineEdit + + + + + ComboBox + + + + + PushButton + + + + + <p> +<a href="http://qtsoftware.com">http://qtsoftware.com</a> +</p> +<p> +<a href="http://www.kde.org">http://www.kde.org</a> +</p> + + + + -- cgit v0.12 From 4a5340fbe4d6ca3df4573fe4147103fb8379cb55 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Mon, 6 Jul 2009 19:29:11 +0200 Subject: Update Russian translation for Qt Help Merge-request: 803 Reviewed-by: Oswald Buddenhagen --- translations/qt_help_ru.ts | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/translations/qt_help_ru.ts b/translations/qt_help_ru.ts index 16748fb..c2dc041 100644 --- a/translations/qt_help_ru.ts +++ b/translations/qt_help_ru.ts @@ -6,17 +6,17 @@ Search Results - Результаты поиска + Результат поиска Note: - Замечание: + Примечание: The search results may not be complete since the documentation is still being indexed! - Могли быть показаны не все результаты, так как документация ещё индексируется! + Результат поиска может быть неполным, так как документация ещё индексируется! @@ -45,7 +45,7 @@ Cannot open collection file: %1 - Не удалось открыть файл набора: %1 + Не удалось открыть файл набора: %1 @@ -168,12 +168,12 @@ Insert custom filters... - Вставка индивидуальных фильтров... + Добавление индивидуальных фильтров... Insert help data for filter section (%1 of %2)... - Вставка данных справки для секции фильтра (%1 из %2)... + Добавление данных справки для раздела фильтра (%1 из %2)... @@ -198,7 +198,7 @@ Insert files... - Вставка файлов... + Добавление файлов... @@ -228,22 +228,22 @@ Insert indices... - Вставка указателей... + Добавление указателей... Insert contents... - Вставка оглавления... + Добавление содержания... Cannot insert contents! - Не удаётся вставить оглавление! + Не удалось добавить содержание! Cannot register contents! - Не удаётся зарегистрировать оглавление! + Не удалось зарегистрировать содержание! @@ -271,12 +271,12 @@ <B>without</B> the words: - <B>не содержит</B> слова: + <B>не содержит</B> слов: with <B>exact phrase</B>: - содержит <B>фразу полностью</B>: + содержит <B>точную фразу</B>: @@ -286,7 +286,7 @@ with <B>at least one</B> of the words: - содержит <B> минимум одно</B> из слов: + содержит <B>хотя бы одно</B> из слов: @@ -294,7 +294,7 @@ 0 - 0 of 0 Hits - 0 - 0 из 0 соответствий + 0 - 0 из 0 совпадений @@ -302,7 +302,7 @@ %1 - %2 of %3 Hits - %1 - %2 из %3 соответствий + %1 - %2 из %3 совпадений @@ -315,12 +315,12 @@ Unknown token. - Неизвестный токен. + Неизвестный идентификатор. Unknown token. Expected "QtHelpProject"! - Неизвестный токен. Ожидается "QtHelpProject"! + Неизвестный идентификатор. Ожидается "QtHelpProject"! -- cgit v0.12 From 034e15917bb81b65de7828466dbc15b2e2a84b47 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Mon, 6 Jul 2009 19:29:12 +0200 Subject: Update Russian translation for Qt Assistant Merge-request: 803 Reviewed-by: Oswald Buddenhagen --- translations/assistant_ru.ts | 80 ++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 43 deletions(-) diff --git a/translations/assistant_ru.ts b/translations/assistant_ru.ts index 32aa739..ecec0f8 100644 --- a/translations/assistant_ru.ts +++ b/translations/assistant_ru.ts @@ -57,16 +57,16 @@ Новая папка - + - - - + + + Bookmarks Закладки - + Delete Folder Удалить папку @@ -79,12 +79,12 @@ BookmarkManager - + Bookmarks Закладки - + Remove Удалить @@ -94,7 +94,7 @@ Удаление папки приведёт к удалению её содержимого.<br>Желаете продолжить? - + New Folder Новая папка @@ -103,7 +103,7 @@ BookmarkWidget - + Delete Folder Удалить папку @@ -138,7 +138,7 @@ Фильтр: - + Add Добавить @@ -161,7 +161,7 @@ Закрыть текущую страницу - + Print Document Печать документа @@ -226,24 +226,24 @@ FindWidget - + Previous - Предыдущее совпадение + Предыдущее Next - Следующее совпадение + Следующее Case Sensitive - Регистрозависимо + Учитывать регистр Whole words - Слова полностью + Слова целиком @@ -441,31 +441,31 @@ MainWindow - + Index - Индекс + Указатель - - + + Contents Содержание - - + + Bookmarks Закладки - - - + + + Qt Assistant Qt Assistant - + Unfiltered Без фильтрации @@ -473,10 +473,10 @@ Looking for Qt Documentation... - Поиск по документации Qt... + Поиск документации по Qt... - + &File &Файл @@ -656,7 +656,7 @@ Добавить закладку... - + CTRL+D @@ -723,12 +723,12 @@ Could not find the associated content item. - Не удалось найти элемент, связанный с содержанием. + Не удалось найти элемент, связанный с содержанием. About %1 - О %1 + О %1 @@ -767,7 +767,7 @@ Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents. - Некоторые открытые в Qt Assistant документы ссылаются на документацию, которую вы пытаетесь удалить. Удаление данной документации приведёт к закрытию таких документов. + Некоторые открытые в Qt Assistant документы ссылаются на документацию, которую вы пытаетесь удалить. Её удаление приведёт к закрытию этих документов. @@ -830,7 +830,7 @@ 1 - + 1 @@ -876,18 +876,12 @@ Restore to default - Восстановить по умолчанию + Страница по умолчанию QObject - - - Bookmark - Закладка - - The specified collection file does not exist! Указанный файл набора отсутствует! @@ -1037,17 +1031,17 @@ Reason: Choose a topic for <b>%1</b>: - Выберите статью для <b>%1</b>: + Выберите раздел для <b>%1</b>: Choose Topic - Выбор статьи + Выбор раздела &Topics - &Статьи + &Разделы -- cgit v0.12 From 283b1ba1cf6cd34d07d9f2b2bb0d40223e172339 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Mon, 6 Jul 2009 19:29:12 +0200 Subject: Update Russian translation for Qt Assistant adp Merge-request: 803 Reviewed-by: Oswald Buddenhagen --- translations/assistant_adp_ru.ts | 289 ++++++++++++++++++++++++++++++++------- 1 file changed, 243 insertions(+), 46 deletions(-) diff --git a/translations/assistant_adp_ru.ts b/translations/assistant_adp_ru.ts index a587a91..c47798b 100644 --- a/translations/assistant_adp_ru.ts +++ b/translations/assistant_adp_ru.ts @@ -4,10 +4,12 @@ AssistantServer + Failed to bind to port %1 Не удалось открыть порт %1 + Qt Assistant Qt Assistant @@ -15,22 +17,27 @@ FontPanel + &Family Се&мейство + &Style &Стиль + Font Шрифт + &Writing system Система &письма + &Point size &Размер в пикселях @@ -38,22 +45,27 @@ FontSettingsDialog + Application Приложение + Browser Обозреватель + Font settings for: Настройки шрифта для: + Use custom settings Использование индивидуальных настроек + Font Settings Настройки шрифта @@ -61,202 +73,261 @@ HelpDialog + &Index &Указатель + &Look For: &Искать: + &New - &Создать + &Новая + + &Search &Поиск + <b>Enter a keyword.</b><p>The list will select an item that matches the entered string best.</p> - <b>Ввод слова.</b><p>В список попадет то, что лучше соответствует введенной строке.</p> + <b>Указание ключевого слова.</b><p>Список заполняется элементами, лучше соответствующими указанному ключевому слову.</p> + <b>Enter search word(s).</b><p>Enter here the word(s) you are looking for. The words may contain wildcards (*). For a sequence of words quote them.</p> - <b>Ввод одного или более слов для поиска.</b><p>Сюда следует ввести одно или несколько слов, которые требуется найти. Слова могут содержкать символы-заменители (*). Если требуется найти словосочетание, то его нужно заключить в кавычки.</p> + <b>Указание слов для поиска.</b><p>Введите одно или несколько слов, по которым требуется осуществить поиск. Слова могут содержкать символы-заменители (*). Если требуется найти сочетание слов, заключите искомую фразу в кавычки.</p> + <b>Found documents</b><p>This list contains all found documents from the last search. The documents are ordered, i.e. the first document has the most matches.</p> - <b>Найденные документы</b><p>В этом списке представлены все найденные при последнем поиске документы. Документы упорядочены по релевантности, т.е. чем выше, тем чаще в нём встречаются указанные слова.</p> + <b>Найденные документы</b><p>В данном списке представлены все найденные при последнем поиске документы. Документы упорядочены по релевантности, т.е. чем выше в списке, тем чаще в нём встречаются искомые слова.</p> + <b>Help topics organized by category.</b><p>Double-click an item to see the topics in that category. To view a topic, just double-click it.</p> - <b>Статьи справки распределённые по разделам.</b><p>Дважды кликните по одному из пунктов, чтобы увидеть какие статьи содержатся в данном разделе. Для открытия статьи просто дважды щелкните на ней.</p> + <b>Разделы справки, распределённые по категориям.</b><p>Дважды щёлкните по одному из пунктов для отображения разделов в данной категории. Для открытия раздела дважды щёлкните по нему.</p> + <b>Help</b><p>Choose the topic you want help on from the contents list, or search the index for keywords.</p> - <b>Справка</b><p>Выберите необходимую статью справки из списка разделов или воспользуйтесь поиском по предметному указателю.</p> + <b>Справка</b><p>Выберите раздел справки из содержания или воспользуйтесь поиском по предметному указателю.</p> + <b>List of available help topics.</b><p>Double-click on an item to open its help page. If more than one is found, you must specify which page you want.</p> - <b>Список доступных статей справки.</b><p>Дважды щёлкните на пункте для открытия страницы помощи. Если найдено более одной, то потребуется выбрать желаемую страницу.</p> + <b>Список доступных разделов справки.</b><p>Дважды щёлкните по одному из пунктов для открытия страницы справки. Если найдено более одной страницы, выберите желаемую.</p> + Add new bookmark - Добавить новую закладку + Добавить закладку + Add the currently displayed page as a new bookmark. - Добавление текущей открытой страницы в закладки. + Добавить отображаемую страницу в закладки. + Cannot open the index file %1 Не удаётся открыть файл индекса %1 + Con&tents Содер&жание + Delete bookmark Удалить закладку + Delete the selected bookmark. - Удаление выбранной закладки. + Удалить выбранную закладку. + Display the help page for the full text search. - Открытие справки по полнотекстовому поиску. + Показать справку по полнотекстовому поиску. + Display the help page. - Открыть страницу справки. + Показать страницу справки. + Displays help topics organized by category, index or bookmarks. Another tab inherits the full text search. - Здесь отображается список тем, распределенных по разделам, указатель или закладки. Последняя вкладка содержит полнотекстовый поиск. + Отображает список разделов, распредёленных по категориям, указатель или закладки. Последняя вкладка содержит панель полнотекстового поиска. + Displays the list of bookmarks. Отображает список закладок. + + Documentation file %1 does not exist! Skipping file. Файл документации %1 не существует! Пропущен. + Documentation file %1 is not compatible! Skipping file. - Файл документации %1 не совместим! + Несовместимый файл документации %1! Пропущен. + + Done Готово + Enter keyword Введите ключевое слово + Enter searchword(s). - Введите одно или более слов для поиска. + Введите одно или несколько слов для поиска. + Failed to load keyword index file Assistant will not work! Не удалось загрузить файл индекса ключевых слов -Assistant не будет работать! +Qt Assistant не будет работать! + Failed to save fulltext search index Assistant will not work! Не удалось сохранить индекс полнотекстового поиска -Assistant не будет работать! +Qt Assistant не будет работать! + Found &Documents: Найденные &документы: + + Full Text Search Полнотекстовый поиск + He&lp &Справка + Help Справка + Indexing files... Индексирование файлов... + Open Link in New Tab Открыть ссылку в новой вкладке + Open Link in New Window Открыть ссылку в новом окне + + Parse Error Ошибка обработки + + Prepare... Подготовка... + Preparing... Подготовка... + Pressing this button starts the search. Нажатие на эту кнопку запустит процесс поиска. + + + Qt Assistant Qt Assistant + Reading dictionary... Чтение каталога... + Searching f&or: &Искать: + Start searching. Начать поиск. + The closing quotation mark is missing. Пропущена закрывающая кавычка. + Using a wildcard within phrases is not allowed. - Использование символов-заменителей внутри фраз не допустимо. + Использование символов-заменителей внутри фраз недопустимо. + + + Warning Предупреждение + + column 1 столбец 1 + Open Link in Current Tab Открыть ссылку в текущей вкладке + %n document(s) found. Найден %n документ. @@ -265,10 +336,12 @@ Assistant не будет работать! + &Bookmarks &Закладки + &Delete &Удалить @@ -276,38 +349,47 @@ Assistant не будет работать! HelpWindow + <div align="center"><h1>The page could not be found</h1><br><h3>'%1'</h3></div> <div align="center"><h1>Страница не найдена</h1><br><h3>'%1'</h3></div> + Copy &Link Location Копировать &адрес ссылки + Error... Ошибка... + Failed to open link: '%1' Не удалось открыть ссылку: '%1' + Help Справка + OK Закрыть + Open Link in New Tab Открыть ссылку в новой вкладке + Open Link in New Window Shift+LMB Открыть ссылку в новом окне Shift+LMB + Unable to launch web browser. Невозможно запустить вэб-браузер. @@ -317,6 +399,7 @@ Assistant не будет работать! Index + Untitled Неозаглавлено @@ -324,354 +407,445 @@ Assistant не будет работать! MainWindow + + "What's This?" context sensitive help. - "Что это?" - контекстная справка. + Контекстная справка "Что это?". + &Add Bookmark - &Добавление закладки + &Добавить закладку + &Close &Закрыть + &Copy &Копировать + &Edit &Правка + &File &Файл + &Find in Text... П&оиск по тексту... + &Go &Перейти + &Help &Справка + &Home &Домой + &Next - &Вперёд + Сл&едующий + &Previous - &Назад + &Предыдущий + &Print... &Печать... + &View &Вид + &Window &Окно + ... ... + About Qt О Qt + About Qt Assistant О Qt Assistant + Add Tab Добавить вкладку + Add the currently displayed page as a new bookmark. - Добавление текущей открытой страницы в закладки. + Добавить отображаемую страницу в закладки. + Boo&kmarks &Закладки + Cannot open file for writing! - Не удается открыть файл для записи! + Не удалось открыть файл для записи! + Close Tab Закрыть вкладку + Close the current window. Закрыть текущее окно. + Display further information about Qt Assistant. Показать дополнительную информацию о Qt Assistant. + Displays the main page of a specific documentation set. - Открывает главную страницу выбранного набора документации. + Открывает стартовую страницу выбранного набора документации. + E&xit - Вы&ход + В&ыход + Failed to open about application contents in file: '%1' Не удалось получить информацию о приложении из файла: '%1' + Find &Next - Продолжить п&оиск + Найти &следующее + Find &Previous Найти &предыдущее + Font Settings... Настройки шрифта... + Go Перейти + Go to the home page. Qt Assistant's home page is the Qt Reference Documentation. Перейти на домашнюю страницу. Домашная страница Qt Assistant - Справочная документация по Qt. + Go to the next page. Переход на следующую страницу. + Initializing Qt Assistant... Инициализация Qt Assistant... + Minimize Свернуть + New Window Новое окно + Next Tab Следующая вкладка + Open a new window. Открыть новое окно. + Open the Find dialog. Qt Assistant will search the currently displayed page for the text you enter. - Открыть окно поиска. Qt Assistant произведёт поиск введённого текста на текущей открытой странице. + Открыть окно поиска. Qt Assistant произведёт поиск введённого текста на отображаемой странице. + Previous Tab Предыдущая вкладка + Print the currently displayed page. - Печать текущей открытой страницы. + Печатать отображаемую страницу. + + Qt Assistant Qt Assistant + Qt Assistant Manual Руководство по Qt Assistant + Qt Assistant by Nokia Qt Assistant от Nokia + Quit Qt Assistant. Выйти из Qt Assistant. + + Save Page Сохранить страницу + Save Page As... Сохранить страницу как... + Select the page in contents tab. - Выбор страницы в оглавлении. + Выбрать страницу во вкладке содержания. + Sidebar Боковая панель + Sync with Table of Contents - Синхронизировать с оглавлением + Синхронизировать с содержанием + Toolbar Панель инструментов + Views Виды + What's This? Что это? + Zoom &in У&величить + Zoom &out У&меньшить + Zoom in on the document, i.e. increase the font size. - Увеличение масштаба документа, т.е. увеличение размера шрифта. + Увеличить размер шрифта. + Zoom out on the document, i.e. decrease the font size. - Уменьшение масштаба документа, т.е. уменьшение размера шрифта. + Уменьшить размер шрифта. + Ctrl+M + SHIFT+CTRL+= + Ctrl+T + Ctrl+I + Ctrl+B + Ctrl+S + Ctrl+] + Ctrl+[ + Ctrl+P + Ctrl+Q + Copy the selected text to the clipboard. Скопировать выделенный текст в буфер обмена. + Ctrl+C + Ctrl+F + F3 + Shift+F3 + Ctrl+Home + Go to the previous page. Переход на предыдущую страницу. + Alt+Left + Alt+Right + Ctrl++ + Ctrl+- + Ctrl+N + Ctrl+W + Shift+F1 + Ctrl+Alt+N + Ctrl+Alt+Right + Ctrl+Alt+Left + Ctrl+Alt+Q + F1 + Ctrl+Alt+S @@ -679,6 +853,7 @@ Assistant не будет работать! QObject + Qt Assistant by Nokia Qt Assistant от Nokia @@ -686,54 +861,67 @@ Assistant не будет работать! TabbedBrowser + ... ... + <img src=":/trolltech/assistant/images/wrap.png">&nbsp;Search wrapped <img src=":/trolltech/assistant/images/wrap.png">&nbsp;Поиск с начала + Add page - Добавить страницу + Добавить вкладку + Case Sensitive - Регистрозависимо + Учитывать регистр + Close Other Tabs Закрыть остальные вкладки + Close Tab Закрыть вкладку + Close page - Закрыть страницу + Закрыть вкладку + New Tab Новая вкладка + Next - Следующий + Следующее + Previous - Предыдущий + Предыдущее + Untitled Безымянный + Whole words - Слова полностью + Слова целиком + TabbedBrowser @@ -741,40 +929,49 @@ Assistant не будет работать! TopicChooser + &Close &Закрыть + &Display &Показать + &Topics - &Статьи + &Разделы + Choose Topic - Выбор статьи + Выбор раздела + Choose a topic for <b>%1</b> - Выберите статью для <b>%1</b> + Выберите раздел для <b>%1</b> + Close the Dialog. - Закрытие окна. + Закрыть диалог. + Displays a list of available help topics for the keyword. - Показывает список доступных статей справки, соответствующих ключевому слову. + Показывает список доступных разделов справки, найденных по ключевому слову. + Open the topic selected in the list. - Открытие выбранной в списке темы. + Открыть выбранный раздел. + Select a topic from the list and click the <b>Display</b>-button to open the online help. - Выберите статью из списка и нажмите на кнопку <b>Показать</b> для открытия онлайн справки. + Выберите раздел из списка и нажмите на кнопку <b>Показать</b> для открытия онлайн справки. -- cgit v0.12 From 3814b2adf50b5724e3375ea2048d13960c8aed82 Mon Sep 17 00:00:00 2001 From: Derick Hawcroft Date: Tue, 7 Jul 2009 14:44:52 +1000 Subject: Handle all PostgreSQL notifications sitting in the queue Task-number: 257247 Reviewed-by: trustme --- src/sql/drivers/psql/qsql_psql.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp index 770df4c..69697da 100644 --- a/src/sql/drivers/psql/qsql_psql.cpp +++ b/src/sql/drivers/psql/qsql_psql.cpp @@ -1248,15 +1248,15 @@ QStringList QPSQLDriver::subscribedToNotificationsImplementation() const void QPSQLDriver::_q_handleNotification(int) { PQconsumeInput(d->connection); - PGnotify *notify = PQnotifies(d->connection); - if (notify) { - QString name(QLatin1String(notify->relname)); + PGnotify *notify = 0; + while((notify = PQnotifies(d->connection)) != 0) { + QString name(QLatin1String(notify->relname)); if (d->seid.contains(name)) emit notification(name); else qWarning("QPSQLDriver: received notification for '%s' which isn't subscribed to.", - qPrintable(name)); + qPrintable(name)); qPQfreemem(notify); } -- cgit v0.12 From 343e8b7e75c98a4fd1b692a230de8d1132988705 Mon Sep 17 00:00:00 2001 From: Norwegian Rock Cat Date: Tue, 7 Jul 2009 10:05:02 +0200 Subject: Fix typo in color calculation. Argh! It's divide by 256 not 265. The worst part was that I used the same values in Cocoa as well, so they were both "damaged." It should be good now. Task-number: 257499 Reviewed-by: Prasanth Ullattil --- src/gui/kernel/qt_mac.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qt_mac.cpp b/src/gui/kernel/qt_mac.cpp index 27df5d1..0c3b707 100644 --- a/src/gui/kernel/qt_mac.cpp +++ b/src/gui/kernel/qt_mac.cpp @@ -134,7 +134,7 @@ QColor qcolorForThemeTextColor(ThemeTextColor themeColor) #ifdef Q_OS_MAC32 RGBColor c; GetThemeTextColor(themeColor, 32, true, &c); - QColor color = QColor(c.red / 265, c.green / 256, c.blue / 256); + QColor color = QColor(c.red / 256, c.green / 256, c.blue / 256); return color; #else // There is no equivalent to GetThemeTextColor in 64-bit and it was rather bad that @@ -156,13 +156,13 @@ QColor qcolorForThemeTextColor(ThemeTextColor themeColor) case kThemeTextColorAlertInactive: case kThemeTextColorDialogInactive: case kThemeTextColorPlacardInactive: - return QColor(67, 69, 69, 255); + return QColor(69, 69, 69, 255); case kThemeTextColorPopupButtonInactive: case kThemeTextColorPopupLabelInactive: case kThemeTextColorPushButtonInactive: case kThemeTextColorTabFrontInactive: case kThemeTextColorBevelButtonInactive: - return QColor(123, 127, 127, 255); + return QColor(127, 127, 127, 255); default: { QNativeImage nativeImage(16,16, QNativeImage::systemFormat()); CGRect cgrect = CGRectMake(0, 0, 16, 16); -- cgit v0.12 From 20b2c6bd8e6f6a7ef384f4b478623768c11e01ae Mon Sep 17 00:00:00 2001 From: Norwegian Rock Cat Date: Tue, 7 Jul 2009 13:45:15 +0200 Subject: Document limitation in Cocoa cursor handling. It seems there is a bug in AppKit which will automatically reset a cursor even when it is grabbed, but won't reset it when it's brought back into the window. The upshot of this is that doing a setCursor() inside of mouse handling behaves slightly different than on the other platforms (including Carbon). However, we are at the mercy of Cocoa here and I would rather have all the other things AppKit does right and live with this bug which they may fix some day. --- src/gui/kernel/qwidget.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index e6a5ae0..9d40b00 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -4590,6 +4590,11 @@ void QWidget::unsetLayoutDirection() By default, this property contains a cursor with the Qt::ArrowCursor shape. + Some underlying window implementations will reset the cursor if it + leaves a widget even if the mouse is grabbed. If you want to have + a cursor set for all widgets, even when outside the window, consider + QApplication::setOverrideCursor(). + \sa QApplication::setOverrideCursor() */ -- cgit v0.12 From f37bd111f7622a34b3a7bd63f5a82f6042dc0f0d Mon Sep 17 00:00:00 2001 From: Norwegian Rock Cat Date: Tue, 7 Jul 2009 16:46:30 +0200 Subject: Stop showing then hiding windows on starting designer in top-level mode. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We've had this since 4.5 and it's very annoying to see the window show and quickly hide itself. I was hoping it wasn't a bug in Qt, and it turns it isn't and it was happening on all platforms. Reviewed-by: Friedemann Kleint Shout outs: João for testing. --- tools/designer/src/designer/qdesigner_workbench.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/designer/src/designer/qdesigner_workbench.cpp b/tools/designer/src/designer/qdesigner_workbench.cpp index 923687a2..ce8dde6 100644 --- a/tools/designer/src/designer/qdesigner_workbench.cpp +++ b/tools/designer/src/designer/qdesigner_workbench.cpp @@ -462,8 +462,7 @@ void QDesignerWorkbench::switchToTopLevelMode() // make sure that the widgetbox is visible if it is different from neutral. QDesignerToolWindow *widgetBoxWrapper = widgetBoxToolWindow(); Q_ASSERT(widgetBoxWrapper); - if (!widgetBoxWrapper->action()->isChecked()) - widgetBoxWrapper->action()->trigger(); + const bool needWidgetBoxWrapperVisible = widgetBoxWrapper->action()->isChecked(); switchToNeutralMode(); const QPoint desktopOffset = desktopGeometry().topLeft(); @@ -502,7 +501,7 @@ void QDesignerWorkbench::switchToTopLevelMode() found_visible_window |= tw->isVisible(); } - if (!widgetBoxWrapper->action()->isChecked()) + if (needWidgetBoxWrapperVisible) widgetBoxWrapper->action()->trigger(); if (!m_toolWindows.isEmpty() && !found_visible_window) -- cgit v0.12 From e5049ecc4590896a75dedcb098da9e991e1764ee Mon Sep 17 00:00:00 2001 From: Derick Hawcroft Date: Wed, 8 Jul 2009 09:20:31 +1000 Subject: Handle special number cases (nan,{+-}infinity) in PostgreSQL When contructing the EXECUTE statement, there is a special case that we need to handle whereby we explicitly put quotes around the special float values before submutting the statement for execution Task-number:233829 Reviewed-by: Bill King --- src/sql/drivers/psql/qsql_psql.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp index 69697da..64b2a23 100644 --- a/src/sql/drivers/psql/qsql_psql.cpp +++ b/src/sql/drivers/psql/qsql_psql.cpp @@ -54,6 +54,8 @@ #include #include +#include + #include #include @@ -1144,6 +1146,21 @@ QString QPSQLDriver::formatValue(const QSqlField &field, bool trimStrings) const qPQfreemem(data); break; } + case QVariant::Double: { + double val = field.value().toDouble(); + if (isnan(val)) + r = QLatin1String("'NaN'"); + else { + int res = isinf(val); + if (res == 1) + r = QLatin1String("'Infinity'"); + else if (res == -1) + r = QLatin1String("'-Infinity'"); + else + r = QSqlDriver::formatValue(field, trimStrings); + } + break; + } default: r = QSqlDriver::formatValue(field, trimStrings); break; -- cgit v0.12 From c2198e1c7884b835807e45ff53c3c54e86900211 Mon Sep 17 00:00:00 2001 From: Derick Hawcroft Date: Wed, 8 Jul 2009 09:29:33 +1000 Subject: Auto test for task 233829 - postgreSQL specific autotest. Task-number:233829 --- tests/auto/qsqlquery/tst_qsqlquery.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/tests/auto/qsqlquery/tst_qsqlquery.cpp b/tests/auto/qsqlquery/tst_qsqlquery.cpp index ed19e91..4b41eaf 100644 --- a/tests/auto/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp @@ -188,6 +188,9 @@ private slots: void task_205701_data() { generic_data("QMYSQL"); } void task_205701(); + void task_233829_data() { generic_data(); } + void task_233829(); + private: // returns all database connections @@ -301,7 +304,7 @@ void tst_QSqlQuery::dropTestTables( QSqlDatabase db ) tablenames << qTableName( "qtest_lockedtable" ); tablenames << qTableName( "Planet" ); - + tablenames << qTableName( "task_250026" ); tst_Databases::safeDropTables( db, tablenames ); @@ -2814,5 +2817,30 @@ void tst_QSqlQuery::task_234422() #endif +void tst_QSqlQuery::task_233829() +{ + QFETCH( QString, dbName ); + QSqlDatabase db = QSqlDatabase::database( dbName ); + CHECK_DATABASE( db ); + + if (!db.driverName().startsWith( "QPSQL" )) { + QSKIP( "This is a PostgreSQL specific test", SkipSingle ); + } + + QSqlQuery q( db ); + QString tableName = qTableName("task_233829"); + q.exec("DROP TABLE " + tableName); + QVERIFY_SQL(q,exec("CREATE TABLE " + tableName + " (dbl1 double precision,dbl2 double precision) without oids;")); + + QString queryString("INSERT INTO " + tableName +"(dbl1, dbl2) VALUES(?,?)"); + + double k = 0.0; + QVERIFY_SQL(q,prepare(queryString)); + q.bindValue(0,0.0 / k); // nan + q.bindValue(1,0.0 / k); // nan + QVERIFY_SQL(q,exec()); + q.exec("DROP TABLE " + tableName); +} + QTEST_MAIN( tst_QSqlQuery ) #include "tst_qsqlquery.moc" -- cgit v0.12 From 529df6f1dbcf8992417d03ef2c9c3ec3f2d7bc4b Mon Sep 17 00:00:00 2001 From: Derick Hawcroft Date: Wed, 8 Jul 2009 09:39:53 +1000 Subject: remove debug --- src/sql/drivers/psql/qsql_psql.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp index 64b2a23..8de79a3 100644 --- a/src/sql/drivers/psql/qsql_psql.cpp +++ b/src/sql/drivers/psql/qsql_psql.cpp @@ -54,7 +54,6 @@ #include #include -#include #include #include -- cgit v0.12 From 355d058a0c7eba3ae3b2a54dda566d94a4134941 Mon Sep 17 00:00:00 2001 From: Derick Hawcroft Date: Wed, 8 Jul 2009 10:50:09 +1000 Subject: safely drop tables. --- tests/auto/qsqlquery/tst_qsqlquery.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/auto/qsqlquery/tst_qsqlquery.cpp b/tests/auto/qsqlquery/tst_qsqlquery.cpp index 4b41eaf..30b85e8 100644 --- a/tests/auto/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp @@ -295,6 +295,9 @@ void tst_QSqlQuery::dropTestTables( QSqlDatabase db ) << qTableName( "blobstest" ) << qTableName( "oraRowId" ); + if ( db.driverName().startsWith("QPSQL") ) + tablenames <<"task_233829"; + if ( db.driverName().startsWith("QSQLITE") ) tablenames << qTableName( "record_sqlite" ); @@ -2839,7 +2842,6 @@ void tst_QSqlQuery::task_233829() q.bindValue(0,0.0 / k); // nan q.bindValue(1,0.0 / k); // nan QVERIFY_SQL(q,exec()); - q.exec("DROP TABLE " + tableName); } QTEST_MAIN( tst_QSqlQuery ) -- cgit v0.12 From 5ff22b1ed4da11dc16a236825c939b5ae38d27cc Mon Sep 17 00:00:00 2001 From: Bill King Date: Wed, 8 Jul 2009 11:09:42 +1000 Subject: Fixes Dericks inf/nan patch for msvc --- src/sql/drivers/psql/qsql_psql.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp index 8de79a3..33f2e2b 100644 --- a/src/sql/drivers/psql/qsql_psql.cpp +++ b/src/sql/drivers/psql/qsql_psql.cpp @@ -59,7 +59,20 @@ #include #include +#if defined(_MSC_VER) +#include +#define isnan(x) _isnan(x) +int isinf(double x) +{ + if(_fpclass(x) == _FPCLASS_NINF) + return -1; + else if(_fpclass(x) == _FPCLASS_PINF) + return 1; + else return 0; +} +#else #include +#endif // workaround for postgres defining their OIDs in a private header file #define QBOOLOID 16 -- cgit v0.12 From b2e62931f1b2968a69aa013b27a50d2e6beb4e27 Mon Sep 17 00:00:00 2001 From: Bill King Date: Wed, 8 Jul 2009 11:17:40 +1000 Subject: Cleanup more SQL autotest failures. --- tests/auto/qsqldatabase/tst_databases.h | 13 +++++++++++++ tests/auto/qsqldatabase/tst_qsqldatabase.cpp | 7 ++++++- tests/auto/qsqlquery/tst_qsqlquery.cpp | 20 +++++++++----------- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/tests/auto/qsqldatabase/tst_databases.h b/tests/auto/qsqldatabase/tst_databases.h index bd51b97..8ee74df 100644 --- a/tests/auto/qsqldatabase/tst_databases.h +++ b/tests/auto/qsqldatabase/tst_databases.h @@ -249,12 +249,15 @@ public: // addDb( "QODBC3", "DRIVER={SQL Native Client};SERVER=silence.nokia.troll.no\\SQLEXPRESS", "troll", "trond", "" ); // addDb( "QODBC", "DRIVER={MySQL ODBC 3.51 Driver};SERVER=mysql5-nokia.trolltech.com.au;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" ); +// addDb( "QODBC", "DRIVER={MySQL ODBC 5.1 Driver};SERVER=mysql4-nokia.trolltech.com.au;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" ); // addDb( "QODBC", "DRIVER={FreeTDS};SERVER=horsehead.nokia.troll.no;DATABASE=testdb;PORT=4101;UID=troll;PWD=trondk", "troll", "trondk", "" ); // addDb( "QODBC", "DRIVER={FreeTDS};SERVER=silence.nokia.troll.no;DATABASE=testdb;PORT=2392;UID=troll;PWD=trond", "troll", "trond", "" ); // addDb( "QODBC", "DRIVER={FreeTDS};SERVER=bq-winserv2003-x86-01.apac.nokia.com;DATABASE=testdb;PORT=1433;UID=testuser;PWD=Ee4Gabf6_;TDS_Version=8.0", "", "", "" ); // addDb( "QODBC", "DRIVER={FreeTDS};SERVER=bq-winserv2008-x86-01.apac.nokia.com;DATABASE=testdb;PORT=1433;UID=testuser;PWD=Ee4Gabf6_;TDS_Version=8.0", "", "", "" ); // addDb( "QTDS7", "testdb", "testuser", "Ee4Gabf6_", "bq-winserv2003" ); // addDb( "QTDS7", "testdb", "testuser", "Ee4Gabf6_", "bq-winserv2008" ); +// addDb( "QODBC3", "DRIVER={SQL SERVER};SERVER=bq-winserv2003-x86-01.apac.nokia.com;DATABASE=testdb;PORT=1433", "testuser", "Ee4Gabf6_", "" ); +// addDb( "QODBC3", "DRIVER={SQL SERVER};SERVER=bq-winserv2008-x86-01.apac.nokia.com;DATABASE=testdb;PORT=1433", "testuser", "Ee4Gabf6_", "" ); } void open() @@ -438,6 +441,16 @@ public: return db.databaseName().contains( "Access Driver", Qt::CaseInsensitive ); } + static bool isPostgreSQL( QSqlDatabase db ) + { + return db.driverName().startsWith("QPSQL") || (db.driverName().startsWith("QODBC") && db.databaseName().contains("PostgreSQL") ); + } + + static bool isMySQL( QSqlDatabase db ) + { + return db.driverName().startsWith("QMYSQL") || (db.driverName().startsWith("QODBC") && db.databaseName().contains("MySQL") ); + } + // -1 on fail, else Oracle version static int getOraVersion( QSqlDatabase db ) { diff --git a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp index 21064c3..025e895 100644 --- a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp +++ b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp @@ -256,6 +256,8 @@ static int createFieldTable(const FieldDef fieldDefs[], QSqlDatabase db) QString autoName = tst_Databases::autoFieldName(db); if (tst_Databases::isMSAccess(db)) qs.append(" (id int not null"); + else if (tst_Databases::isPostgreSQL(db)) + qs.append(" (id serial not null"); else qs.append(QString("(id integer not null %1 primary key").arg(autoName)); @@ -1350,6 +1352,8 @@ void tst_QSqlDatabase::transaction() } QVERIFY_SQL(q, exec("select * from " + qTableName("qtest") + " where id = 41")); + if(db.driverName().startsWith("QODBC") && dbName.contains("MySQL")) + QEXPECT_FAIL("", "Some odbc drivers don't actually roll back despite telling us they do, especially the mysql driver", Continue); QVERIFY(!q.next()); populateTestTables(db); @@ -1427,7 +1431,8 @@ void tst_QSqlDatabase::caseSensivity() bool cs = false; if (db.driverName().startsWith("QMYSQL") || db.driverName().startsWith("QSQLITE") - || db.driverName().startsWith("QTDS")) + || db.driverName().startsWith("QTDS") + || db.driverName().startsWith("QODBC")) cs = true; QSqlRecord rec = db.record(qTableName("qtest")); diff --git a/tests/auto/qsqlquery/tst_qsqlquery.cpp b/tests/auto/qsqlquery/tst_qsqlquery.cpp index 30b85e8..5e782ca 100644 --- a/tests/auto/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp @@ -188,7 +188,7 @@ private slots: void task_205701_data() { generic_data("QMYSQL"); } void task_205701(); - void task_233829_data() { generic_data(); } + void task_233829_data() { generic_data("QPSQL"); } void task_233829(); @@ -322,7 +322,10 @@ void tst_QSqlQuery::createTestTables( QSqlDatabase db ) // in the MySQL server startup script q.exec( "set table_type=innodb" ); - QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest" ) + " (id int "+tst_Databases::autoFieldName(db) +" NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id))" ) ); + if(tst_Databases::isPostgreSQL(db)) + QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest" ) + " (id serial NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id)) WITH OIDS" ) ); + else + QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest" ) + " (id int "+tst_Databases::autoFieldName(db) +" NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id))" ) ); if ( tst_Databases::isSqlServer( db ) || db.driverName().startsWith( "QTDS" ) ) QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_null" ) + " (id int null, t_varchar varchar(20) null)" ) ); @@ -1874,7 +1877,7 @@ void tst_QSqlQuery::invalidQuery() QVERIFY( !q.next() ); QVERIFY( !q.isActive() ); - if ( !db.driverName().startsWith( "QOCI" ) && !db.driverName().startsWith( "QDB2" ) ) { + if ( !db.driverName().startsWith( "QOCI" ) && !db.driverName().startsWith( "QDB2" ) && !db.driverName().startsWith( "QODBC" ) ) { // oracle and db2 just prepares everything without complaining if ( db.driver()->hasFeature( QSqlDriver::PreparedQueries ) ) QVERIFY( !q.prepare( "blahfasel" ) ); @@ -2034,7 +2037,7 @@ void tst_QSqlQuery::oraArrayBind() q.bindValue( 0, list, QSql::In ); - QVERIFY_SQL( q, execBatch( QSqlQuery::ValuesAsRows ) ); + QVERIFY_SQL( q, execBatch( QSqlQuery::ValuesAsColumns ) ); QVERIFY_SQL( q, prepare( "BEGIN " "ora_array_test.get_table(?); " @@ -2046,7 +2049,7 @@ void tst_QSqlQuery::oraArrayBind() q.bindValue( 0, list, QSql::Out ); - QVERIFY_SQL( q, execBatch( QSqlQuery::ValuesAsRows ) ); + QVERIFY_SQL( q, execBatch( QSqlQuery::ValuesAsColumns ) ); QVariantList out_list = q.boundValue( 0 ).toList(); @@ -2593,7 +2596,7 @@ void tst_QSqlQuery::blobsPreparedQuery() if ( db.driverName().startsWith( "QPSQL" ) ) typeName = "BYTEA"; - else if ( db.driverName().startsWith( "QODBC" ) ) + else if ( db.driverName().startsWith( "QODBC" ) && tst_Databases::isSqlServer( db )) typeName = "IMAGE"; QVERIFY_SQL( q, exec( QString( "CREATE TABLE %1(id INTEGER, data %2)" ).arg( tableName ).arg( typeName ) ) ); @@ -2826,13 +2829,8 @@ void tst_QSqlQuery::task_233829() QSqlDatabase db = QSqlDatabase::database( dbName ); CHECK_DATABASE( db ); - if (!db.driverName().startsWith( "QPSQL" )) { - QSKIP( "This is a PostgreSQL specific test", SkipSingle ); - } - QSqlQuery q( db ); QString tableName = qTableName("task_233829"); - q.exec("DROP TABLE " + tableName); QVERIFY_SQL(q,exec("CREATE TABLE " + tableName + " (dbl1 double precision,dbl2 double precision) without oids;")); QString queryString("INSERT INTO " + tableName +"(dbl1, dbl2) VALUES(?,?)"); -- cgit v0.12 From 291279cc24aa543454953b93b1db026caf0d7eb6 Mon Sep 17 00:00:00 2001 From: Bill King Date: Wed, 8 Jul 2009 11:52:38 +1000 Subject: Make the table actually delete before the autotest --- tests/auto/qsqlquery/tst_qsqlquery.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qsqlquery/tst_qsqlquery.cpp b/tests/auto/qsqlquery/tst_qsqlquery.cpp index 5e782ca..c94b693 100644 --- a/tests/auto/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp @@ -296,7 +296,7 @@ void tst_QSqlQuery::dropTestTables( QSqlDatabase db ) << qTableName( "oraRowId" ); if ( db.driverName().startsWith("QPSQL") ) - tablenames <<"task_233829"; + tablenames << qTableName("task_233829"); if ( db.driverName().startsWith("QSQLITE") ) tablenames << qTableName( "record_sqlite" ); -- cgit v0.12 From 9e2b47da3b88c63acb1b3a8cb7566f2a1e0e18ff Mon Sep 17 00:00:00 2001 From: Derick Hawcroft Date: Wed, 8 Jul 2009 14:47:21 +1000 Subject: make test behave like others --- tests/auto/qsqlquery/tst_qsqlquery.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qsqlquery/tst_qsqlquery.cpp b/tests/auto/qsqlquery/tst_qsqlquery.cpp index c94b693..0e30873 100644 --- a/tests/auto/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp @@ -2831,7 +2831,7 @@ void tst_QSqlQuery::task_233829() QSqlQuery q( db ); QString tableName = qTableName("task_233829"); - QVERIFY_SQL(q,exec("CREATE TABLE " + tableName + " (dbl1 double precision,dbl2 double precision) without oids;")); + QVERIFY_SQL(q,exec("CREATE TABLE " + tableName + "(dbl1 double precision,dbl2 double precision) without oids;")); QString queryString("INSERT INTO " + tableName +"(dbl1, dbl2) VALUES(?,?)"); -- cgit v0.12 From ed4c85c33683ce541590639f19adcef8dcd001a8 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 8 Jul 2009 12:09:08 +0200 Subject: don't drop all location tags after the first file without any Task-number: 256647 --- tools/linguist/lupdate/main.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/linguist/lupdate/main.cpp b/tools/linguist/lupdate/main.cpp index c28bf8b..52a57fb 100644 --- a/tools/linguist/lupdate/main.cpp +++ b/tools/linguist/lupdate/main.cpp @@ -178,9 +178,10 @@ static void updateTsFiles(const Translator &fetchedTor, const QStringList &tsFil if (options & Verbose) printOut(QObject::tr("Updating '%1'...\n").arg(fn)); + UpdateOptions theseOptions = options; if (tor.locationsType() == Translator::NoLocations) // Could be set from file - options |= NoLocations; - Translator out = merge(tor, fetchedTor, options, err); + theseOptions |= NoLocations; + Translator out = merge(tor, fetchedTor, theseOptions, err); if (!codecForTr.isEmpty()) out.setCodecName(codecForTr); -- cgit v0.12 From 48f049d6fbddd60d99fb6ebc15fd5b52a3b515ec Mon Sep 17 00:00:00 2001 From: Benjamin Poulain Date: Wed, 8 Jul 2009 16:23:21 +0200 Subject: Update QGroupBox on focus We cannot assume the position of the decorations when a QGroupBox get the focus. Task-number: 257660 Reviewed-by: Thierry --- src/gui/widgets/qgroupbox.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/gui/widgets/qgroupbox.cpp b/src/gui/widgets/qgroupbox.cpp index fe882a6..022c377 100644 --- a/src/gui/widgets/qgroupbox.cpp +++ b/src/gui/widgets/qgroupbox.cpp @@ -479,11 +479,7 @@ void QGroupBox::focusInEvent(QFocusEvent *fe) if (focusPolicy() == Qt::NoFocus) { d->_q_fixFocus(fe->reason()); } else { - QStyleOptionGroupBox box; - initStyleOption(&box); - QRect rect = style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxCheckBox, this) - | style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxLabel, this); - update(rect); + QWidget::focusInEvent(fe); } } -- cgit v0.12