From 0a94acb8f439f86e0af9fb882cf26145b719f1f9 Mon Sep 17 00:00:00 2001 From: Arif Hasanic Date: Wed, 10 Dec 2025 23:47:37 +0100 Subject: [PATCH] home assistant widget --- include/widgets/webWidget.hpp | 4 ++-- src/widgets/webWidget.cpp | 35 +++++++++++++++-------------------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/include/widgets/webWidget.hpp b/include/widgets/webWidget.hpp index aad0b10..e3d8564 100644 --- a/include/widgets/webWidget.hpp +++ b/include/widgets/webWidget.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include class WebWidget : public Gtk::Button { public: @@ -10,5 +10,5 @@ public: private: void on_toggle_window(); - Gtk::Window* web_window = nullptr; + Gtk::Popover* popover = nullptr; }; diff --git a/src/widgets/webWidget.cpp b/src/widgets/webWidget.cpp index bc2d9ea..733f7f5 100644 --- a/src/widgets/webWidget.cpp +++ b/src/widgets/webWidget.cpp @@ -7,21 +7,19 @@ WebWidget::WebWidget(std::string label, std::string title, std::string url) { signal_clicked().connect( sigc::mem_fun(*this, &WebWidget::on_toggle_window)); - web_window = new Gtk::Window(); - web_window->set_title(title); - web_window->set_default_size(1024, 768); + popover = new Gtk::Popover(); + popover->set_parent(*this); + popover->set_autohide(true); - web_window->signal_close_request().connect( - [this]() { - web_window->hide(); - - return true; - }, - false); + popover->signal_closed().connect([this]() { + this->add_css_class("minimized"); + this->remove_css_class("restored"); + }); auto webview = webkit_web_view_new(); gtk_widget_set_hexpand(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)); 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 // 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() { - if (web_window->is_visible()) { - web_window->set_visible(false); - - this->add_css_class("minimized"); - this->remove_css_class("restored"); + if (popover->get_visible()) { + popover->popdown(); } else { - web_window->set_visible(true); + popover->popup(); this->remove_css_class("minimized"); this->add_css_class("restored"); } - - return; }