Skip to content

Commit

Permalink
Properly initialize the the app in the application class. Fixes #320
Browse files Browse the repository at this point in the history
  • Loading branch information
xeco23 committed Jul 28, 2023
1 parent 8191521 commit fa23fa4
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 51 deletions.
46 changes: 2 additions & 44 deletions src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
#include <clocale>
#include <iostream>
#include <glibmm/i18n.h>
#include "Config.hpp"
#include "ui/Application.hpp"
#include "ui/MainWindow.hpp"
#include "util/Helper.hpp"
#include "util/Settings.hpp"

namespace
{
Expand All @@ -23,52 +20,13 @@ int main(int argc, char** argv)
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
textdomain(GETTEXT_PACKAGE);

auto app = wfl::ui::Application{argc, argv, WFL_APP_ID, Gio::APPLICATION_HANDLES_OPEN};
auto app = wfl::ui::Application{argc, argv};

wfl::util::redirectOutputToLogger();

signal(SIGINT, sigterm);
signal(SIGTERM, sigterm);
signal(SIGPIPE, SIG_IGN);

auto mainWindow = std::unique_ptr<wfl::ui::MainWindow>{};

try
{
auto const refBuilder = Gtk::Builder::create_from_resource("/main/ui/MainWindow.ui");

wfl::ui::MainWindow* window = nullptr;
refBuilder->get_widget_derived("window_main", window);
mainWindow.reset(window);
}
catch (Glib::Exception const& error)
{
std::cerr << "Failed to load ui resource: " << error.what().c_str() << std::endl;
return 1;
}

app.signal_open().connect(
[&app, &mainWindow](Gtk::Application::type_vec_files const& files, const Glib::ustring&)
{
if (!files.empty())
{
// Activate the application if it's not running
app.activate();
mainWindow->openUrl(files.at(0U)->get_uri());
}
});

if (wfl::util::Settings::getInstance().getValue<bool>("general", "start-in-tray")
&& wfl::util::Settings::getInstance().getValue<bool>("general", "close-to-tray"))
{
mainWindow->hide();
wfl::ui::Application::getInstance().keepAlive();
return app.run();
}
else if (wfl::util::Settings::getInstance().getValue<bool>("general", "start-minimized"))
{
mainWindow->iconify();
}

return app.run(*mainWindow);
return app.run();
}
59 changes: 54 additions & 5 deletions src/ui/Application.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#include "Application.hpp"
#include <iostream>
#include <gtkmm/window.h>
#include <gtkmm/settings.h>
#include "Config.hpp"
#include "../util/Settings.hpp"

namespace wfl::ui
Expand All @@ -11,9 +14,10 @@ namespace wfl::ui
return *m_instance;
}

Application::Application(int argc, char** argv, Glib::ustring const& id, Gio::ApplicationFlags flags)
: Gtk::Application{argc, argv, id, flags}
Application::Application(int argc, char** argv)
: Gtk::Application{argc, argv, WFL_APP_ID, Gio::APPLICATION_HANDLES_OPEN}
, m_onHold{false}
, m_mainWindow{nullptr}
{
if (!m_instance)
{
Expand All @@ -29,7 +33,7 @@ namespace wfl::ui
{
if (!m_onHold)
{
Gtk::Application::hold();
hold();
m_onHold = true;
}
}
Expand All @@ -38,17 +42,62 @@ namespace wfl::ui
{
if (m_onHold)
{
Gtk::Application::release();
release();
m_onHold = false;
}
}

void Application::on_startup()
{
Gtk::Application::on_startup();

try
{
auto const refBuilder = Gtk::Builder::create_from_resource("/main/ui/MainWindow.ui");

wfl::ui::MainWindow* window = nullptr;
refBuilder->get_widget_derived("window_main", window);
m_mainWindow.reset(window);
}
catch (Glib::Exception const& error)
{
std::cerr << "Failed to load ui resource: " << error.what().c_str() << std::endl;
return;
}

if (wfl::util::Settings::getInstance().getValue<bool>("general", "start-in-tray")
&& wfl::util::Settings::getInstance().getValue<bool>("general", "close-to-tray"))
{
m_mainWindow->hide();
keepAlive();
}
else if (wfl::util::Settings::getInstance().getValue<bool>("general", "start-minimized"))
{
m_mainWindow->iconify();
}

add_window(*m_mainWindow);
}

void Application::on_activate()
{
auto const settings = Gtk::Settings::get_default();
auto const settings = Gtk::Settings::get_default();
auto const preferDark = util::Settings::getInstance().getValue<bool>("appearance", "prefer-dark-theme");
settings->property_gtk_application_prefer_dark_theme().set_value(preferDark);

Gtk::Application::on_activate();
}

void Application::on_open(Application::type_vec_files const& files, Glib::ustring const&)
{
if (!files.empty())
{
// Activate the application if it's not running
activate();
if (m_mainWindow)
{
m_mainWindow->openUrl(files.at(0U)->get_uri());
}
}
}
}
8 changes: 6 additions & 2 deletions src/ui/Application.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include <gtkmm/application.h>
#include "MainWindow.hpp"

namespace wfl::ui
{
Expand All @@ -10,19 +11,22 @@ namespace wfl::ui
static Application& getInstance();

public:
Application(int argc, char** argv, Glib::ustring const& id, Gio::ApplicationFlags flags = Gio::APPLICATION_FLAGS_NONE);
Application(int argc, char** argv);

public:
void keepAlive();
void endKeepAlive();

protected:
virtual void on_startup() override;
virtual void on_activate() override;
virtual void on_open(type_vec_files const& files, Glib::ustring const&) override;

private:
static Application* m_instance;

private:
bool m_onHold;
bool m_onHold;
std::unique_ptr<MainWindow> m_mainWindow;
};
}

0 comments on commit fa23fa4

Please sign in to comment.