home assistant widget
This commit is contained in:
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user