Make URLs stylable and fix on-hover underline
[quassel.git] / src / uisupport / uistyle.cpp
index 555f877..0ebdf06 100644 (file)
@@ -112,7 +112,9 @@ void UiStyle::loadStyleSheet() {
     }
     _listItemFormats = parser.listItemFormats();
 
-    qApp->setStyleSheet(styleSheet); // pass the remaining sections to the application
+    styleSheet = styleSheet.trimmed();
+    if(!styleSheet.isEmpty())
+      qApp->setStyleSheet(styleSheet); // pass the remaining sections to the application
   }
 
   emit changed();
@@ -352,7 +354,7 @@ void UiStyle::mergeFormat(QTextCharFormat &fmt, quint32 ftype, quint64 label) {
 
   // URL
   if(ftype & Url)
-    mergeSubElementFormat(fmt, ftype & Url, label);
+    mergeSubElementFormat(fmt, ftype & (Url | 0x000000ff), label);
 }
 
 // Merge a subelement format into an existing message format
@@ -394,6 +396,8 @@ UiStyle::FormatType UiStyle::formatType(Message::Type msgType) {
       return ErrorMsg;
     case Message::DayChange:
       return DayChangeMsg;
+    case Message::Topic:
+      return TopicMsg;
   }
   //Q_ASSERT(false); // we need to handle all message types
   qWarning() << Q_FUNC_INFO << "Unknown message type:" << msgType;
@@ -608,6 +612,9 @@ void UiStyle::StyledMessage::style() const {
       //: Day Change Message
       t = tr("{Day changed to %1}").arg(timestamp().toString());
       break;
+    case Message::Topic:
+      //: Topic Message
+      t = tr("%1").arg(txt); break;
     default:
       t = tr("[%1]").arg(txt);
   }
@@ -672,6 +679,8 @@ QString UiStyle::StyledMessage::decoratedSender() const {
       return tr("*"); break;
     case Message::DayChange:
       return tr("-"); break;
+    case Message::Topic:
+      return tr("*"); break;
     default:
       return tr("%1").arg(plainSender());
   }
@@ -685,9 +694,10 @@ quint8 UiStyle::StyledMessage::senderHash() const {
   QString nick = nickFromMask(sender()).toLower();
   if(!nick.isEmpty()) {
     int chopCount = 0;
-    while(nick.at(nick.count() - 1 - chopCount) == '_')
+    while(chopCount < nick.size() && nick.at(nick.count() - 1 - chopCount) == '_')
       chopCount++;
-    nick.chop(chopCount);
+    if(chopCount < nick.size())
+      nick.chop(chopCount);
   }
   quint16 hash = qChecksum(nick.toAscii().data(), nick.toAscii().size());
   return (_senderHash = (hash & 0xf) + 1);