diff --git a/src/x11/i3/ipc/connection.cpp b/src/x11/i3/ipc/connection.cpp index 1939fb5b..774c2c98 100644 --- a/src/x11/i3/ipc/connection.cpp +++ b/src/x11/i3/ipc/connection.cpp @@ -247,7 +247,7 @@ void I3Ipc::handleGetWorkspacesEvent(I3IpcEvent* event) { workspace->updateFromObject(object); if (!existed) { - this->mWorkspaces.insertObject(workspace); + this->mWorkspaces.insertObjectSorted(workspace, &I3Ipc::compareWorkspaces); } names.push_back(name); @@ -379,7 +379,7 @@ void I3Ipc::handleWorkspaceEvent(I3IpcEvent* event) { } if (!existed) { - this->mWorkspaces.insertObject(workspace); + this->mWorkspaces.insertObjectSorted(workspace, &I3Ipc::compareWorkspaces); qCInfo(logI3Ipc) << "Added workspace" << workspace->bindableName().value() << "to list"; } } else if (change == "focus") { @@ -478,6 +478,10 @@ I3Monitor* I3Ipc::findMonitorByName(const QString& name) { ObjectModel* I3Ipc::monitors() { return &this->mMonitors; } ObjectModel* I3Ipc::workspaces() { return &this->mWorkspaces; } +bool I3Ipc::compareWorkspaces(I3Workspace* a, I3Workspace* b) { + return a->bindableNumber().value() > b->bindableNumber().value(); +} + QString I3IpcEvent::type() const { return I3IpcEvent::eventToString(this->mCode); } QString I3IpcEvent::data() const { return QString::fromUtf8(this->mData.toJson()); } diff --git a/src/x11/i3/ipc/connection.hpp b/src/x11/i3/ipc/connection.hpp index c8f61661..d29f4857 100644 --- a/src/x11/i3/ipc/connection.hpp +++ b/src/x11/i3/ipc/connection.hpp @@ -109,6 +109,7 @@ public: [[nodiscard]] ObjectModel* monitors(); [[nodiscard]] ObjectModel* workspaces(); + signals: void connected(); void rawEvent(I3IpcEvent* event); @@ -132,6 +133,7 @@ private: void handleGetWorkspacesEvent(I3IpcEvent* event); void handleGetOutputsEvent(I3IpcEvent* event); static void handleRunCommand(I3IpcEvent* event); + static bool compareWorkspaces(I3Workspace* a, I3Workspace* b); void reconnectIPC();