1*4882a593SmuzhiyunFrom 2c45682a5e8abb58f7fd0769e11c0a3b230b7ceb Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Sat, 9 May 2020 17:23:59 +0800 4*4882a593SmuzhiyunSubject: [PATCH 09/17] qwaylandxdgshell: Support switching between fullscreen 5*4882a593Smuzhiyun and maximized 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun1/ The weston expected a commit to apply new window states. 8*4882a593Smuzhiyun2/ Switching between fullscreen and maximized requests unsetting the old 9*4882a593Smuzhiyunstate firstly. 10*4882a593Smuzhiyun 11*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 12*4882a593Smuzhiyun--- 13*4882a593Smuzhiyun .../shellintegration/xdg-shell/qwaylandxdgshell.cpp | 11 +++++++++-- 14*4882a593Smuzhiyun 1 file changed, 9 insertions(+), 2 deletions(-) 15*4882a593Smuzhiyun 16*4882a593Smuzhiyundiff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp 17*4882a593Smuzhiyunindex 61f7e8c..c663000 100644 18*4882a593Smuzhiyun--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp 19*4882a593Smuzhiyun+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp 20*4882a593Smuzhiyun@@ -99,6 +99,9 @@ void QWaylandXdgSurface::Toplevel::applyConfigure() 21*4882a593Smuzhiyun m_xdgSurface->m_window->resizeFromApplyConfigure(m_pending.size); 22*4882a593Smuzhiyun } 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun+ // Trigger a update to commit new state 25*4882a593Smuzhiyun+ m_xdgSurface->m_window->window()->requestUpdate(); 26*4882a593Smuzhiyun+ 27*4882a593Smuzhiyun m_applied = m_pending; 28*4882a593Smuzhiyun qCDebug(lcQpaWayland) << "Applied pending xdg_toplevel configure event:" << m_applied.size << m_applied.states; 29*4882a593Smuzhiyun } 30*4882a593Smuzhiyun@@ -162,6 +165,11 @@ void QWaylandXdgSurface::Toplevel::requestWindowStates(Qt::WindowStates states) 31*4882a593Smuzhiyun // Re-send what's different from the applied state 32*4882a593Smuzhiyun Qt::WindowStates changedStates = m_applied.states ^ states; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun+ if (changedStates & Qt::WindowFullScreen) { 35*4882a593Smuzhiyun+ if (!(states & Qt::WindowFullScreen)) 36*4882a593Smuzhiyun+ unset_fullscreen(); 37*4882a593Smuzhiyun+ } 38*4882a593Smuzhiyun+ 39*4882a593Smuzhiyun if (changedStates & Qt::WindowMaximized) { 40*4882a593Smuzhiyun if (states & Qt::WindowMaximized) 41*4882a593Smuzhiyun set_maximized(); 42*4882a593Smuzhiyun@@ -175,8 +183,7 @@ void QWaylandXdgSurface::Toplevel::requestWindowStates(Qt::WindowStates states) 43*4882a593Smuzhiyun if (screen) { 44*4882a593Smuzhiyun set_fullscreen(screen->output()); 45*4882a593Smuzhiyun } 46*4882a593Smuzhiyun- } else 47*4882a593Smuzhiyun- unset_fullscreen(); 48*4882a593Smuzhiyun+ } 49*4882a593Smuzhiyun } 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun // Minimized state is not reported by the protocol, so always send it 52*4882a593Smuzhiyun-- 53*4882a593Smuzhiyun2.20.1 54*4882a593Smuzhiyun 55