Make _mainWin a QPointer, to avoid problems with double deletion in case we use KDE
[quassel.git] / src / qtui / qtui.h
index d170ae3..9a00ef4 100644 (file)
@@ -24,6 +24,7 @@
 #include "quasselui.h"
 
 #include "abstractnotificationbackend.h"
+#include "mainwin.h"
 
 class ActionCollection;
 class MainWin;
@@ -48,22 +49,24 @@ public:
   inline static QtUiStyle *style();
   inline static MainWin *mainWindow();
 
-  //! Access the global ActionCollection.
-  /** This ActionCollection is associated with the main window, i.e. it contains global
+  //! Access global ActionCollections.
+  /** These ActionCollections are associated with the main window, i.e. they contain global
    *  actions (and thus, shortcuts). Widgets providing application-wide shortcuts should
-   *  create appropriate Action objects using QtUi::actionCollection()->add\<Action\>().
+   *  create appropriate Action objects using QtUi::actionCollection(cat)->add\<Action\>().
+   *  @param category The category (default: "General")
    */
-  inline static ActionCollection *actionCollection();
+  static ActionCollection *actionCollection(const QString &category = "General");
+  inline AbstractActionProvider *actionProvider() const;
 
   /* Notifications */
 
   static void registerNotificationBackend(AbstractNotificationBackend *);
   static void unregisterNotificationBackend(AbstractNotificationBackend *);
   static void unregisterAllNotificationBackends();
-  static const QSet<AbstractNotificationBackend *> &notificationBackends();
+  static const QList<AbstractNotificationBackend *> &notificationBackends();
   static uint invokeNotification(BufferId bufId, const QString &sender, const QString &text);
   static void closeNotification(uint notificationId);
-  static void closeNotifications(BufferId bufferId);
+  static void closeNotifications(BufferId bufferId = BufferId());
   static const QList<AbstractNotificationBackend::Notification> &activeNotifications();
 
 public slots:
@@ -74,15 +77,17 @@ protected slots:
   void disconnectedFromCore();
 
 private:
-  static MainWin *_mainWin;
-  static ActionCollection *_actionCollection;
+  AbstractActionProvider *_actionProvider;
+
+  static QPointer<MainWin> _mainWin;
+  static QHash<QString, ActionCollection *> _actionCollections;
   static QtUiStyle *_style;
-  static QSet<AbstractNotificationBackend *> _notificationBackends;
+  static QList<AbstractNotificationBackend *> _notificationBackends;
   static QList<AbstractNotificationBackend::Notification> _notifications;
 };
 
-ActionCollection *QtUi::actionCollection() { return _actionCollection; }
 QtUiStyle *QtUi::style() { return _style; }
 MainWin *QtUi::mainWindow() { return _mainWin; }
+AbstractActionProvider *QtUi::actionProvider() const { return _actionProvider; }
 
 #endif