Merge pull request #82 from jpnurmi/legacypeer
authorManuel Nickschas <sputnick@quassel-irc.org>
Sun, 14 Sep 2014 14:48:12 +0000 (16:48 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sun, 14 Sep 2014 14:48:12 +0000 (16:48 +0200)
LegacyPeer: kill the dependency to Quassel::buildInfo()

.travis.yml
CMakeLists.txt
cmake/QuasselCompileSettings.cmake
src/client/clientuserinputhandler.cpp
src/client/networkmodel.cpp
src/qtui/chatview.cpp
src/qtui/mainwin.cpp
src/qtui/mainwin.h

index 3eac5a5..b99c62b 100644 (file)
@@ -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
index d6b0d2e..7e23817 100644 (file)
@@ -34,6 +34,11 @@ include(FeatureSummary)
 include(QuasselCompileSettings)
 include(QuasselMacros)
 
+# Setting COMPILE_DEFINITIONS_<CONFIG> 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)
index bf2e4ea..bd61d5c 100644 (file)
@@ -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")
index 2a323ed..2f89081 100644 (file)
@@ -129,7 +129,7 @@ void ClientUserInputHandler::switchBuffer(const NetworkId &networkId, const QStr
         QList<ClientBufferViewConfig *> 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
index 63a123e..6d7f3ec 100644 (file)
@@ -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);
     }
 }
 
index 53c4392..20b25e0 100644 (file)
@@ -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();
 }
 
index 2a1ce6f..63fe459 100644 (file)
@@ -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()
index ad16889..0840037 100644 (file)
@@ -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();