45 lines
1.3 KiB
C++
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_DEFAULT_FLAGS);
|
|
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()));
|
|
}
|
|
|
|
}
|