mirror of
https://github.com/nomic-ai/gpt4all.git
synced 2025-09-22 11:58:55 +00:00
chat: system tray icon and close to tray (#3109)
Signed-off-by: bgallois <benjamin@gallois.cc> Signed-off-by: Adam Treat <treat.adam@gmail.com> Co-authored-by: Adam Treat <treat.adam@gmail.com>
This commit is contained in:
@@ -130,6 +130,7 @@ public:
|
||||
QList<QString> generatedQuestions() const { return m_generatedQuestions; }
|
||||
|
||||
bool needsSave() const { return m_needsSave; }
|
||||
void setNeedsSave(bool n) { m_needsSave = n; }
|
||||
|
||||
public Q_SLOTS:
|
||||
void serverNewPromptResponsePair(const QString &prompt, const QList<PromptAttachment> &attachments = {});
|
||||
|
@@ -51,6 +51,10 @@ void ChatListModel::loadChats()
|
||||
connect(thread, &ChatsRestoreThread::finished, thread, &QObject::deleteLater);
|
||||
thread->start();
|
||||
|
||||
ChatSaver *saver = new ChatSaver;
|
||||
connect(this, &ChatListModel::requestSaveChats, saver, &ChatSaver::saveChats, Qt::QueuedConnection);
|
||||
connect(saver, &ChatSaver::saveChatsFinished, this, &ChatListModel::saveChatsFinished, Qt::QueuedConnection);
|
||||
|
||||
connect(MySettings::globalInstance(), &MySettings::serverChatChanged, this, &ChatListModel::handleServerEnabledChanged);
|
||||
}
|
||||
|
||||
@@ -88,9 +92,6 @@ void ChatListModel::saveChats()
|
||||
return;
|
||||
}
|
||||
|
||||
ChatSaver *saver = new ChatSaver;
|
||||
connect(this, &ChatListModel::requestSaveChats, saver, &ChatSaver::saveChats, Qt::QueuedConnection);
|
||||
connect(saver, &ChatSaver::saveChatsFinished, this, &ChatListModel::saveChatsFinished, Qt::QueuedConnection);
|
||||
emit requestSaveChats(toSave);
|
||||
}
|
||||
|
||||
@@ -128,6 +129,7 @@ void ChatSaver::saveChats(const QVector<Chat *> &chats)
|
||||
continue;
|
||||
}
|
||||
|
||||
chat->setNeedsSave(false);
|
||||
if (originalFile.exists())
|
||||
originalFile.remove();
|
||||
tempFile.rename(filePath);
|
||||
|
@@ -33,7 +33,6 @@ class ChatSaver : public QObject
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ChatSaver();
|
||||
void stop();
|
||||
|
||||
Q_SIGNALS:
|
||||
void saveChatsFinished();
|
||||
@@ -238,7 +237,6 @@ public Q_SLOTS:
|
||||
Q_SIGNALS:
|
||||
void countChanged();
|
||||
void currentChatChanged();
|
||||
void chatsSavedFinished();
|
||||
void requestSaveChats(const QVector<Chat*> &);
|
||||
void saveChatsFinished();
|
||||
|
||||
|
@@ -19,6 +19,10 @@
|
||||
# include "network.h"
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
#include "macosdock.h"
|
||||
#endif
|
||||
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
|
||||
class MyLLM: public LLM { };
|
||||
@@ -105,3 +109,21 @@ bool LLM::isNetworkOnline() const
|
||||
auto * netinfo = QNetworkInformation::instance();
|
||||
return !netinfo || netinfo->reachability() == QNetworkInformation::Reachability::Online;
|
||||
}
|
||||
|
||||
void LLM::showDockIcon() const
|
||||
{
|
||||
#ifdef Q_OS_MAC
|
||||
MacOSDock::showIcon();
|
||||
#else
|
||||
qt_noop();
|
||||
#endif
|
||||
}
|
||||
|
||||
void LLM::hideDockIcon() const
|
||||
{
|
||||
#ifdef Q_OS_MAC
|
||||
MacOSDock::hideIcon();
|
||||
#else
|
||||
qt_noop();
|
||||
#endif
|
||||
}
|
||||
|
@@ -23,6 +23,9 @@ public:
|
||||
Q_INVOKABLE QString systemTotalRAMInGBString() const;
|
||||
Q_INVOKABLE bool isNetworkOnline() const;
|
||||
|
||||
Q_INVOKABLE void showDockIcon() const;
|
||||
Q_INVOKABLE void hideDockIcon() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void isNetworkOnlineChanged();
|
||||
|
||||
|
9
gpt4all-chat/src/macosdock.h
Normal file
9
gpt4all-chat/src/macosdock.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#ifndef MACOSDOCK_H
|
||||
#define MACOSDOCK_H
|
||||
|
||||
struct MacOSDock {
|
||||
static void showIcon();
|
||||
static void hideIcon();
|
||||
};
|
||||
|
||||
#endif // MACOSDOCK_H
|
13
gpt4all-chat/src/macosdock.mm
Normal file
13
gpt4all-chat/src/macosdock.mm
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "macosdock.h"
|
||||
|
||||
#include <Cocoa/Cocoa.h>
|
||||
|
||||
void MacOSDock::showIcon()
|
||||
{
|
||||
[[NSApplication sharedApplication] setActivationPolicy:NSApplicationActivationPolicyRegular];
|
||||
}
|
||||
|
||||
void MacOSDock::hideIcon()
|
||||
{
|
||||
[[NSApplication sharedApplication] setActivationPolicy:NSApplicationActivationPolicyProhibited];
|
||||
}
|
@@ -44,6 +44,7 @@ static void raiseWindow(QWindow *window)
|
||||
|
||||
SetForegroundWindow(hwnd);
|
||||
#else
|
||||
LLM::globalInstance()->showDockIcon();
|
||||
window->show();
|
||||
window->raise();
|
||||
window->requestActivate();
|
||||
|
@@ -49,6 +49,7 @@ static const QVariantMap basicDefaults {
|
||||
{ "lastVersionStarted", "" },
|
||||
{ "networkPort", 4891, },
|
||||
{ "saveChatsContext", false },
|
||||
{ "systemTray", false },
|
||||
{ "serverChat", false },
|
||||
{ "userDefaultModel", "Application default" },
|
||||
{ "suggestionMode", QVariant::fromValue(SuggestionMode::LocalDocsOnly) },
|
||||
@@ -206,6 +207,7 @@ void MySettings::restoreApplicationDefaults()
|
||||
setDevice(defaults::device);
|
||||
setThreadCount(defaults::threadCount);
|
||||
setSaveChatsContext(basicDefaults.value("saveChatsContext").toBool());
|
||||
setSystemTray(basicDefaults.value("saveTrayContext").toBool());
|
||||
setServerChat(basicDefaults.value("serverChat").toBool());
|
||||
setNetworkPort(basicDefaults.value("networkPort").toInt());
|
||||
setModelPath(defaultLocalModelsPath());
|
||||
@@ -444,6 +446,7 @@ void MySettings::setThreadCount(int value)
|
||||
}
|
||||
|
||||
bool MySettings::saveChatsContext() const { return getBasicSetting("saveChatsContext" ).toBool(); }
|
||||
bool MySettings::systemTray() const { return getBasicSetting("systemTray" ).toBool(); }
|
||||
bool MySettings::serverChat() const { return getBasicSetting("serverChat" ).toBool(); }
|
||||
int MySettings::networkPort() const { return getBasicSetting("networkPort" ).toInt(); }
|
||||
QString MySettings::userDefaultModel() const { return getBasicSetting("userDefaultModel" ).toString(); }
|
||||
@@ -462,6 +465,7 @@ FontSize MySettings::fontSize() const { return FontSize (getEnu
|
||||
SuggestionMode MySettings::suggestionMode() const { return SuggestionMode(getEnumSetting("suggestionMode", suggestionModeNames)); }
|
||||
|
||||
void MySettings::setSaveChatsContext(bool value) { setBasicSetting("saveChatsContext", value); }
|
||||
void MySettings::setSystemTray(bool value) { setBasicSetting("systemTray", value); }
|
||||
void MySettings::setServerChat(bool value) { setBasicSetting("serverChat", value); }
|
||||
void MySettings::setNetworkPort(int value) { setBasicSetting("networkPort", value); }
|
||||
void MySettings::setUserDefaultModel(const QString &value) { setBasicSetting("userDefaultModel", value); }
|
||||
|
@@ -49,6 +49,7 @@ class MySettings : public QObject
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int threadCount READ threadCount WRITE setThreadCount NOTIFY threadCountChanged)
|
||||
Q_PROPERTY(bool saveChatsContext READ saveChatsContext WRITE setSaveChatsContext NOTIFY saveChatsContextChanged)
|
||||
Q_PROPERTY(bool systemTray READ systemTray WRITE setSystemTray NOTIFY systemTrayChanged)
|
||||
Q_PROPERTY(bool serverChat READ serverChat WRITE setServerChat NOTIFY serverChatChanged)
|
||||
Q_PROPERTY(QString modelPath READ modelPath WRITE setModelPath NOTIFY modelPathChanged)
|
||||
Q_PROPERTY(QString userDefaultModel READ userDefaultModel WRITE setUserDefaultModel NOTIFY userDefaultModelChanged)
|
||||
@@ -142,6 +143,8 @@ public:
|
||||
void setThreadCount(int value);
|
||||
bool saveChatsContext() const;
|
||||
void setSaveChatsContext(bool value);
|
||||
bool systemTray() const;
|
||||
void setSystemTray(bool value);
|
||||
bool serverChat() const;
|
||||
void setServerChat(bool value);
|
||||
QString modelPath();
|
||||
@@ -218,6 +221,7 @@ Q_SIGNALS:
|
||||
void suggestedFollowUpPromptChanged(const ModelInfo &info);
|
||||
void threadCountChanged();
|
||||
void saveChatsContextChanged();
|
||||
void systemTrayChanged();
|
||||
void serverChatChanged();
|
||||
void modelPathChanged();
|
||||
void userDefaultModelChanged();
|
||||
|
Reference in New Issue
Block a user