From: Manuel Nickschas Date: Sun, 14 Sep 2014 14:48:12 +0000 (+0200) Subject: Merge pull request #82 from jpnurmi/legacypeer X-Git-Tag: 0.11.0~14 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=e69f471077b6cc3ca719763892eaf31197ec1726;hp=8440be1fc6350dec8aa582d1493a8d2911c070a3 Merge pull request #82 from jpnurmi/legacypeer LegacyPeer: kill the dependency to Quassel::buildInfo() --- diff --git a/.travis.yml b/.travis.yml index 3eac5a59..b99c62bb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,12 @@ compiler: - clang before_install: - - echo "yes" | sudo add-apt-repository ppa:kalakris/cmake + - sudo add-apt-repository ppa:kalakris/cmake/test -y - sudo apt-get update -qq - sudo apt-get install cmake + - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y + - sudo apt-get update -qq + - if [ "$CXX" = "g++" ]; then sudo apt-get install -qq g++-4.7; fi + - if [ "$CXX" = "g++" ]; then export CXX="g++-4.7" CC="gcc-4.7"; fi script: mkdir build && cd build && cmake ../ && make diff --git a/CMakeLists.txt b/CMakeLists.txt index d6b0d2e9..7e238174 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,11 @@ include(FeatureSummary) include(QuasselCompileSettings) include(QuasselMacros) +# Setting COMPILE_DEFINITIONS_ is deprecated since CMake 3.0 in favor of generator expressions. +# These have existed since CMake 2.8.10; until we depend on that, we have to explicitly enable the old policy. +if (CMAKE_MAJOR_VERSION GREATER 2) + cmake_policy(SET CMP0043 OLD) +endif() # Options and variables that can be set on the command line ##################################################################### @@ -246,16 +251,23 @@ if (USE_QT5) DESCRIPTION "contains tools for handling translation files" PURPOSE "Required for having translations" ) - # Qt5 does not define a target for lconvert, so we need to find it ourselves + # Some Qt5 versions do not define a target for lconvert, so we need to find it ourselves if (Qt5LinguistTools_FOUND) if (NOT TARGET Qt5::lconvert AND TARGET Qt5::lrelease) get_target_property(_lrelease_location Qt5::lrelease LOCATION) get_filename_component(_lrelease_path ${_lrelease_location} PATH) find_program(QT_LCONVERT_EXECUTABLE NAMES lconvert-qt5 lconvert PATHS ${_lrelease_path} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + elseif(TARGET Qt5::lconvert AND NOT Qt5_LCONVERT_EXECUTABLE) + # Newer Qt5 versions define the target, but not the Qt5_LCONVERT_EXECUTABLE variable for some reason + get_target_property(QT_LCONVERT_EXECUTABLE Qt5::lconvert LOCATION) endif() + # Compatibility with the Qt4 variables - set (QT_LRELEASE_EXECUTABLE ${Qt5_LRELEASE_EXECUTABLE}) - set (QT_LUPDATE_EXECUTABLE ${Qt5_LUPDATE_EXECUTABLE}) + set(QT_LRELEASE_EXECUTABLE ${Qt5_LRELEASE_EXECUTABLE}) + set(QT_LUPDATE_EXECUTABLE ${Qt5_LUPDATE_EXECUTABLE}) + if (Qt5_LCONVERT_EXECUTABLE) + set(QT_LCONVERT_EXECUTABLE ${Qt5_LCONVERT_EXECUTABLE}) + endif() endif() else(USE_QT5) diff --git a/cmake/QuasselCompileSettings.cmake b/cmake/QuasselCompileSettings.cmake index bf2e4ea9..bd61d5cd 100644 --- a/cmake/QuasselCompileSettings.cmake +++ b/cmake/QuasselCompileSettings.cmake @@ -7,7 +7,7 @@ include(CheckCXXCompilerFlag) -if(CMAKE_CONFIGURATION_TYPES) +if (CMAKE_CONFIGURATION_TYPES) set(CMAKE_CONFIGURATION_TYPES Release RelWithDebInfo Debug Debugfull Profile) set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING "These are the configuration types we support" FORCE) endif() @@ -24,23 +24,25 @@ set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO QT_NO_ set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_PROFILE QT_NO_DEBUG NDEBUG) set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL QT_NO_DEBUG NDEBUG) -if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) +if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS QT_NO_DEBUG NDEBUG) endif() # Enable various flags on gcc -if(CMAKE_COMPILER_IS_GNUCXX) +if (CMAKE_COMPILER_IS_GNUCXX) + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7") + message(WARNING "Your compiler is too old; we expect at least GCC 4.7. Your build will likely fail.") + endif() + # Let's just hope that all gccs support these options and skip the tests... # -fno-strict-aliasing is needed apparently for Qt < 4.6 - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ansi -Wall -Wextra -Wnon-virtual-dtor -fno-strict-aliasing") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Wnon-virtual-dtor -fno-strict-aliasing -Wundef -Wcast-align -Wpointer-arith -Wformat-security -fno-check-new -fno-common") # set(CMAKE_CXX_FLAGS_RELEASE "-O2") # use CMake default # set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -O2") # use CMake default set(CMAKE_CXX_FLAGS_DEBUG "-g -ggdb -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline") set(CMAKE_CXX_FLAGS_DEBUGFULL "-g3 -ggdb -fno-inline") set(CMAKE_CXX_FLAGS_PROFILE "-g3 -ggdb -fno-inline -ftest-coverage -fprofile-arcs") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ansi -W -Wall -Wextra -Wnon-virtual-dtor -fno-strict-aliasing -Wundef -Wcast-align -Wpointer-arith -Wformat-security -fno-check-new -fno-common") - check_cxx_compiler_flag(-Woverloaded-virtual CXX_W_OVERLOADED_VIRTUAL) if(CXX_W_OVERLOADED_VIRTUAL) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual") @@ -48,11 +50,14 @@ if(CMAKE_COMPILER_IS_GNUCXX) # Just for miniz set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wno-unused-function -Wno-undef -fno-strict-aliasing") -endif() # ... and for Clang -if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wextra -Wpointer-arith -Wformat-security -Woverloaded-virtual -fno-common -Werror=return-type") +elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.1") + message(WARNING "Your compiler is too old; we expect at least Clang 3.1. Your build will likely fail.") + endif() + + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wnon-virtual-dtor -Wno-long-long -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wextra -Wpointer-arith -Wformat-security -Woverloaded-virtual -fno-common -Wno-deprecated-register") # set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG -DQT_NO_DEBUG") # Use CMake default # set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG -DQT_NO_DEBUG") # Use CMake default set(CMAKE_CXX_FLAGS_DEBUG "-g -O2 -fno-inline") @@ -60,10 +65,20 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(CMAKE_CXX_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wno-unused-function -Wno-undef -fno-strict-aliasing") + +# For MSVC, at least do a version sanity check +elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC") + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "18.0") + message(WARNING "Your compiler is too old; we expect at least Visual Studio Nov 2013 CTP (MSVC 18). Your build will likely fail.") + endif() + +# Unknown/unsupported compiler +else() + message(WARNING "Unknown or unsupported compiler. Make sure to enable C++11 support. Good luck.") endif() # Mac build stuff -if(APPLE AND DEPLOY) +if (APPLE AND DEPLOY) set(CMAKE_OSX_ARCHITECTURES "x86_64") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.8") set(CMAKE_OSX_SYSROOT "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk") diff --git a/src/client/clientuserinputhandler.cpp b/src/client/clientuserinputhandler.cpp index 2a323edd..2f890810 100644 --- a/src/client/clientuserinputhandler.cpp +++ b/src/client/clientuserinputhandler.cpp @@ -129,7 +129,7 @@ void ClientUserInputHandler::switchBuffer(const NetworkId &networkId, const QStr QList bufferViewConfigList = clientBufferViewManager->clientBufferViewConfigs(); foreach(ClientBufferViewConfig *bufferViewConfig, bufferViewConfigList) { if (bufferViewConfig->temporarilyRemovedBuffers().contains(newBufId)) { - bufferViewConfig->addBuffer(newBufId, bufferViewConfig->bufferList().length()); + bufferViewConfig->requestAddBuffer(newBufId, bufferViewConfig->bufferList().length()); //if (bufferViewConfig->sortAlphabetically()) { // TODO we need to trigger a sort here, but can't reach the model required // to get a bufferviewfilter, as the bufferviewmanager only managers configs diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 63a123e6..6d7f3ec3 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -1279,7 +1279,8 @@ void NetworkModel::updateBufferActivity(Message &msg) } } else { - updateBufferActivity(bufferItem(msg.bufferInfo()), msg); + if ((BufferSettings(msg.bufferId()).messageFilter() & msg.type()) != msg.type()) + updateBufferActivity(bufferItem(msg.bufferInfo()), msg); } } diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 53c43927..20b25e0e 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -80,7 +80,7 @@ void ChatView::init(MessageFilter *filter) setScene(_scene); connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarChanged(int))); - _lastScrollbarPos = verticalScrollBar()->value(); + _lastScrollbarPos = verticalScrollBar()->maximum(); connect(Client::networkModel(), SIGNAL(markerLineSet(BufferId, MsgId)), SLOT(markerLineSet(BufferId, MsgId))); @@ -126,18 +126,26 @@ bool ChatView::event(QEvent *event) void ChatView::resizeEvent(QResizeEvent *event) { + // if view is currently scrolled to bottom, we want it that way after resizing + bool atBottom = (_lastScrollbarPos == verticalScrollBar()->maximum()); + QGraphicsView::resizeEvent(event); - // FIXME: do we really need to scroll down on resize? + // if scrolling to bottom, do it immediately. + if(atBottom) + { + // we can reduce viewport updates if we scroll to the bottom allready at the beginning + verticalScrollBar()->setValue(verticalScrollBar()->maximum()); + } - // we can reduce viewport updates if we scroll to the bottom allready at the beginning - verticalScrollBar()->setValue(verticalScrollBar()->maximum()); scene()->updateForViewport(viewport()->width(), viewport()->height()); adjustSceneRect(); - _lastScrollbarPos = verticalScrollBar()->maximum(); - verticalScrollBar()->setValue(verticalScrollBar()->maximum()); - + if(atBottom) + { + _lastScrollbarPos = verticalScrollBar()->maximum(); + verticalScrollBar()->setValue(verticalScrollBar()->maximum()); + } checkChatLineCaches(); } diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 2a1ce6f4..63fe459b 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -1025,13 +1025,15 @@ void MainWin::setupToolBars() #endif } -#ifdef Q_OS_MAC void MainWin::saveMainToolBarStatus(bool enabled) { +#ifdef Q_OS_MAC QtUiSettings uiSettings; uiSettings.setValue("ShowMainToolBar", enabled); -} +#else + Q_UNUSED(enabled); #endif +} void MainWin::connectedToCore() diff --git a/src/qtui/mainwin.h b/src/qtui/mainwin.h index ad16889c..08400375 100644 --- a/src/qtui/mainwin.h +++ b/src/qtui/mainwin.h @@ -154,9 +154,7 @@ private slots: void saveMenuBarStatus(bool enabled); void saveStatusBarStatus(bool enabled); -#ifdef Q_OS_MAC void saveMainToolBarStatus(bool enabled); -#endif void loadLayout(); void saveLayout();