AutoCatGnome/gtkpp/Application.cpp

45 lines
1.3 KiB
C++

//
// Created by selim on 10.05.2022.
//
#include "Application.h"
#include "Window.h"
namespace gtkpp {
void activateCallback(GtkApplication* app, void *data) {
auto application = reinterpret_cast<Application*>(data);
application->_signalActivate.emit();
}
Application::Application(const std::string &id) {
_app = adw_application_new(id.c_str(), G_APPLICATION_FLAGS_NONE);
g_signal_connect(_app, "activate", G_CALLBACK(activateCallback), this);
}
int Application::run(int argc, char **argv) {
return g_application_run(G_APPLICATION(_app), argc, argv);
}
void Application::onActivate(const std::function<void()>& callback) {
_signalActivate.connect(callback);
}
AdwApplication *Application::gobj() const {
return _app;
}
void Application::addWindow(const std::shared_ptr<Window>& window) {
_windows.push_back(window);
gtk_application_add_window(GTK_APPLICATION(_app), GTK_WINDOW(window->gobj()));
}
void Application::removeWindow(Window* window) {
std::remove_if(_windows.begin(),
_windows.end(),
[window](const auto& ptr) { return ptr.get() == window; });
gtk_application_remove_window(GTK_APPLICATION(_app), GTK_WINDOW(window->gobj()));
}
}