diff --git a/src/Entity/Browser/Container/Page/Content.php b/src/Entity/Browser/Container/Page/Content.php index ce8d4c2c..cfcd25f6 100644 --- a/src/Entity/Browser/Container/Page/Content.php +++ b/src/Entity/Browser/Container/Page/Content.php @@ -53,7 +53,7 @@ class Content ); } - public function set( // @TODO make async + public function set( ?string $mime, ?string $data ): void @@ -64,40 +64,14 @@ class Content { case Filesystem::MIME_TEXT_GEMINI: - $title = null; - $document = new Content\Gemtext( $this ); $document->set( - $data, - $title + $data ); - // Update title by gemtext H1 tag (on available) - if ($title) - { - // Set new title - $this->page->title->setValue( - $title - ); - - // Update tooltip - $this->page->title->setTooltip( - $title - ); - - // Refresh header by new title if current page is active - if ($this->page === $this->page->container->tab->get()) - { - $this->page->container->browser->header->setTitle( - $this->page->title->getValue(), - $this->page->title->getSubtitle() - ); - } - } - break; case Filesystem::MIME_TEXT_PLAIN: diff --git a/src/Entity/Browser/Container/Page/Content/Gemtext.php b/src/Entity/Browser/Container/Page/Content/Gemtext.php index f3dc2c6c..c6ca3044 100644 --- a/src/Entity/Browser/Container/Page/Content/Gemtext.php +++ b/src/Entity/Browser/Container/Page/Content/Gemtext.php @@ -7,6 +7,7 @@ namespace Yggverse\Yoda\Entity\Browser\Container\Page\Content; use \Exception; use \Gdk; use \GdkEvent; +use \Gtk; use \GtkLabel; use \Pango; @@ -17,17 +18,49 @@ use \Yggverse\Yoda\Model\Gtk\Pango\Markup\Gemtext as Markup; class Gemtext extends \Yggverse\Yoda\Abstract\Entity\Browser\Container\Page\Content\Markup { public function set( - string $source, - string | null &$title = null + string $value ): void { - $this->gtk->set_markup( - Markup::format( - $this->_source = $source, - $this->content->page->navbar->request->getValue(), - $this->content->page->content->gtk->get_allocated_width(), - $title - ) + Gtk::timeout_add( // await for renderer dimensions init + 1, function(?string $title = null) use ($value) + { + if ($this->content->page->content->gtk->get_allocated_width() > Markup::WRAP_WIDTH) + { + $this->gtk->set_markup( + Markup::format( + $this->_source = $value, + $this->content->page->navbar->request->getValue(), + $this->content->page->content->gtk->get_allocated_width(), + $title + ) + ); + + // Update title by gemtext H1 tag (on available) + if ($title) + { + // Set new title + $this->content->page->title->setValue( + $title + ); + + // Update tooltip + $this->content->page->title->setTooltip( + $title + ); + + // Refresh header by new title if current page is active + if ($this->content->page === $this->content->page->container->tab->get()) + { + $this->content->page->container->browser->header->setTitle( + $this->content->page->title->getValue(), + $this->content->page->title->getSubtitle() + ); + } + }; + + return false; // stop + } + } ); }