home assistant widget

This commit is contained in:
2025-12-10 23:47:37 +01:00
parent 6582fb16e8
commit 0a94acb8f4
2 changed files with 17 additions and 22 deletions

View File

@@ -1,7 +1,7 @@
#pragma once #pragma once
#include <gtkmm/button.h> #include <gtkmm/button.h>
#include <gtkmm/window.h> #include <gtkmm/popover.h>
class WebWidget : public Gtk::Button { class WebWidget : public Gtk::Button {
public: public:
@@ -10,5 +10,5 @@ public:
private: private:
void on_toggle_window(); void on_toggle_window();
Gtk::Window* web_window = nullptr; Gtk::Popover* popover = nullptr;
}; };

View File

@@ -7,21 +7,19 @@ WebWidget::WebWidget(std::string label, std::string title, std::string url) {
signal_clicked().connect( signal_clicked().connect(
sigc::mem_fun(*this, &WebWidget::on_toggle_window)); sigc::mem_fun(*this, &WebWidget::on_toggle_window));
web_window = new Gtk::Window(); popover = new Gtk::Popover();
web_window->set_title(title); popover->set_parent(*this);
web_window->set_default_size(1024, 768); popover->set_autohide(true);
web_window->signal_close_request().connect( popover->signal_closed().connect([this]() {
[this]() { this->add_css_class("minimized");
web_window->hide(); this->remove_css_class("restored");
});
return true;
},
false);
auto webview = webkit_web_view_new(); auto webview = webkit_web_view_new();
gtk_widget_set_hexpand(webview, true); gtk_widget_set_hexpand(webview, true);
gtk_widget_set_vexpand(webview, true); gtk_widget_set_vexpand(webview, true);
gtk_widget_set_size_request(webview, 1024, 768);
auto settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW(webview)); auto settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW(webview));
webkit_settings_set_hardware_acceleration_policy( webkit_settings_set_hardware_acceleration_policy(
@@ -31,22 +29,19 @@ WebWidget::WebWidget(std::string label, std::string title, std::string url) {
// Use C API to set child because we don't have a C++ wrapper for // Use C API to set child because we don't have a C++ wrapper for
// WebKitWebView // WebKitWebView
gtk_window_set_child(web_window->gobj(), webview); gtk_popover_set_child(popover->gobj(), webview);
} }
WebWidget::~WebWidget() { delete web_window; } WebWidget::~WebWidget() {
delete popover;
}
void WebWidget::on_toggle_window() { void WebWidget::on_toggle_window() {
if (web_window->is_visible()) { if (popover->get_visible()) {
web_window->set_visible(false); popover->popdown();
this->add_css_class("minimized");
this->remove_css_class("restored");
} else { } else {
web_window->set_visible(true); popover->popup();
this->remove_css_class("minimized"); this->remove_css_class("minimized");
this->add_css_class("restored"); this->add_css_class("restored");
} }
return;
} }