@@ -47,6 +47,7 @@ namespace lsp
47
47
bUIInitialized = false ;
48
48
bRequestProcess = false ;
49
49
bUIActive = false ;
50
+ bRealizeActive = false ;
50
51
51
52
#ifdef LSP_CLAP_OWN_EVENT_LOOP
52
53
pUIThread = NULL ;
@@ -535,38 +536,51 @@ namespace lsp
535
536
status_t UIWrapper::slot_ui_resize (tk::Widget *sender, void *ptr, void *data)
536
537
{
537
538
lsp_trace (" sender = %p, ptr = %p, data = %p" , sender, ptr, data);
539
+ const ws::rectangle_t *r = static_cast <ws::rectangle_t *>(data);
540
+ lsp_trace (" resized.w = %d, resized.h = %d" , int (r->nWidth ), int (r->nHeight ));
538
541
539
542
UIWrapper *this_ = static_cast <UIWrapper *>(ptr);
540
543
tk::Window *wnd = this_->window ();
541
544
if ((wnd == NULL ) || (!wnd->visibility ()->get ()))
542
545
return STATUS_OK;
543
546
544
- ws::rectangle_t rr;
545
- if (wnd->get_screen_rectangle (&rr) != STATUS_OK)
546
- return STATUS_OK;
547
-
548
- this_->pExt ->gui ->request_resize (this_->pExt ->host , rr.nWidth , rr.nHeight );
547
+ ws::size_limit_t sr;
548
+ wnd->get_padded_size_limits (&sr);
549
+ if (((sr.nMinWidth >= 0 ) && (r->nWidth < sr.nMinWidth )) ||
550
+ ((sr.nMinHeight >= 0 ) && (r->nHeight < sr.nMinHeight )))
551
+ {
552
+ this_->pExt ->gui ->request_resize (this_->pExt ->host , sr.nMinWidth , sr.nMinHeight );
553
+ }
549
554
550
555
return STATUS_OK;
551
556
}
552
557
553
558
status_t UIWrapper::slot_ui_show (tk::Widget *sender, void *ptr, void *data)
554
559
{
555
560
lsp_trace (" sender = %p, ptr = %p, data = %p" , sender, ptr, data);
561
+
556
562
return STATUS_OK;
557
563
}
558
564
559
565
status_t UIWrapper::slot_ui_realized (tk::Widget *sender, void *ptr, void *data)
560
566
{
567
+ #ifdef LSP_TRACE
561
568
lsp_trace (" sender = %p, ptr = %p, data = %p" , sender, ptr, data);
569
+ const ws::rectangle_t *r = static_cast <ws::rectangle_t *>(data);
570
+ lsp_trace (" realized.w = %d, realized.h = %d" , int (r->nWidth ), int (r->nHeight ));
571
+ #endif /* LSP_TRACE */
562
572
563
- UIWrapper *this_ = static_cast <UIWrapper *>(ptr);
564
- tk::Window *wnd = this_->window ();
573
+ UIWrapper *self = static_cast <UIWrapper *>(ptr);
574
+ if (self->bRealizeActive )
575
+ return STATUS_OK;
576
+ self->bRealizeActive = true ;
577
+ lsp_finally { self->bRealizeActive = false ; };
565
578
579
+ tk::Window *wnd = self->window ();
566
580
ws::rectangle_t rr;
567
581
if (wnd->get_screen_rectangle (&rr) != STATUS_OK)
568
582
return STATUS_OK;
569
- this_ ->pExt ->gui ->request_resize (this_ ->pExt ->host , rr.nWidth , rr.nHeight );
583
+ self ->pExt ->gui ->request_resize (self ->pExt ->host , rr.nWidth , rr.nHeight );
570
584
571
585
return STATUS_OK;
572
586
}
@@ -713,7 +727,15 @@ namespace lsp
713
727
return false ;
714
728
lsp_finally { sMutex .unlock (); };
715
729
716
- wnd->resize_window (width, height);
730
+ ws::rectangle_t r;
731
+ wnd->get_padded_screen_rectangle (&r);
732
+
733
+ if ((r.nWidth != ssize_t (width)) && (r.nHeight != ssize_t (height)))
734
+ {
735
+ lsp_trace (" width = {%d, %d}, height = {%d, %d}, call for resize" ,
736
+ int (r.nWidth ), int (width), int (r.nHeight ), int (height));
737
+ wnd->resize_window (width, height);
738
+ }
717
739
718
740
return true ;
719
741
}
@@ -838,6 +860,20 @@ namespace lsp
838
860
return res;
839
861
}
840
862
863
+ // Do the sync barrier
864
+ sMutex .lock ();
865
+ lsp_finally { sMutex .unlock (); };
866
+
867
+ // Resize window
868
+ ws::size_limit_t sr;
869
+ wnd->get_padded_size_limits (&sr);
870
+ lsp_trace (" min_w=%d, min_h=%d" , int (sr.nMinWidth ), int (sr.nMinHeight ));
871
+ if ((sr.nMinWidth >= 0 ) && (sr.nMinHeight >= 0 ))
872
+ {
873
+ lsp_trace (" request_resize(%d, %d)" , int (sr.nMinWidth ), int (sr.nMinHeight ));
874
+ pExt->gui ->request_resize (pExt->host , sr.nMinWidth , sr.nMinHeight );
875
+ }
876
+
841
877
// Update UI status
842
878
bUIActive = true ;
843
879
if (pWrapper != NULL )
0 commit comments