Fix docked panels appear with "-nosession" cmd line parameters

Fix #8005
This commit is contained in:
Don HO 2020-11-09 04:19:37 +01:00
parent 1961f708c1
commit 7399257f56
4 changed files with 204 additions and 76 deletions

View File

@ -687,6 +687,9 @@ LRESULT Notepad_plus::init(HWND hwnd)
// //
// launch the plugin dlg memorized at the last session // launch the plugin dlg memorized at the last session
// //
if (!nppGUI._isCmdlineNosessionActivated)
{
DockingManagerData& dmd = nppGUI._dockingData; DockingManagerData& dmd = nppGUI._dockingData;
_dockingManager.setDockedContSize(CONT_LEFT, nppGUI._dockingData._leftWidth); _dockingManager.setDockedContSize(CONT_LEFT, nppGUI._dockingData._leftWidth);
@ -711,6 +714,7 @@ LRESULT Notepad_plus::init(HWND hwnd)
ContainerTabInfo & cti = dmd._containerTabInfo[i]; ContainerTabInfo & cti = dmd._containerTabInfo[i];
_dockingManager.setActiveTab(cti._cont, cti._activeTab); _dockingManager.setActiveTab(cti._cont, cti._activeTab);
} }
}
//Load initial docs into doctab //Load initial docs into doctab
loadBufferIntoView(_mainEditView.getCurrentBufferID(), MAIN_VIEW); loadBufferIntoView(_mainEditView.getCurrentBufferID(), MAIN_VIEW);

View File

@ -99,6 +99,8 @@ void Notepad_plus_Window::init(HINSTANCE hInst, HWND parent, const TCHAR *cmdLin
if (cmdLineParams->_isNoPlugin) if (cmdLineParams->_isNoPlugin)
_notepad_plus_plus_core._pluginsManager.disable(); _notepad_plus_plus_core._pluginsManager.disable();
nppGUI._isCmdlineNosessionActivated = cmdLineParams->_isNoSession;
_hSelf = ::CreateWindowEx( _hSelf = ::CreateWindowEx(
WS_EX_ACCEPTFILES | (_notepad_plus_plus_core._nativeLangSpeaker.isRTL()?WS_EX_LAYOUTRTL:0), WS_EX_ACCEPTFILES | (_notepad_plus_plus_core._nativeLangSpeaker.isRTL()?WS_EX_LAYOUTRTL:0),
_className, _className,
@ -168,8 +170,7 @@ void Notepad_plus_Window::init(HINSTANCE hInst, HWND parent, const TCHAR *cmdLin
if (cmdLineParams->_alwaysOnTop) if (cmdLineParams->_alwaysOnTop)
::SendMessage(_hSelf, WM_COMMAND, IDM_VIEW_ALWAYSONTOP, 0); ::SendMessage(_hSelf, WM_COMMAND, IDM_VIEW_ALWAYSONTOP, 0);
nppGUI._isCmdlineNosessionActivated = cmdLineParams->_isNoSession; if (nppGUI._rememberLastSession && !nppGUI._isCmdlineNosessionActivated)
if (nppGUI._rememberLastSession && !cmdLineParams->_isNoSession)
_notepad_plus_plus_core.loadLastSession(); _notepad_plus_plus_core.loadLastSession();
if (nppParams.doFunctionListExport() || nppParams.doPrintAndExit()) if (nppParams.doFunctionListExport() || nppParams.doPrintAndExit())

View File

@ -5461,8 +5461,6 @@ void NppParameters::feedDockingManager(TiXmlNode *node)
if (element->Attribute(TEXT("bottomHeight"), &i)) if (element->Attribute(TEXT("bottomHeight"), &i))
_nppGUI._dockingData._bottomHight = i; _nppGUI._dockingData._bottomHight = i;
for (TiXmlNode *childNode = node->FirstChildElement(TEXT("FloatingWindow")); for (TiXmlNode *childNode = node->FirstChildElement(TEXT("FloatingWindow"));
childNode ; childNode ;
childNode = childNode->NextSibling(TEXT("FloatingWindow")) ) childNode = childNode->NextSibling(TEXT("FloatingWindow")) )
@ -5528,6 +5526,116 @@ void NppParameters::feedDockingManager(TiXmlNode *node)
} }
} }
TiXmlElement NppParameters::duplicateDockingManager(TiXmlNode *node)
{
TiXmlElement *element = node->ToElement();
TiXmlElement DMNode(TEXT("GUIConfig"));
DMNode.SetAttribute(TEXT("name"), TEXT("DockingManager"));
int i;
if (element->Attribute(TEXT("leftWidth"), &i))
DMNode.SetAttribute(TEXT("leftWidth"), i);
if (element->Attribute(TEXT("rightWidth"), &i))
DMNode.SetAttribute(TEXT("rightWidth"), i);
if (element->Attribute(TEXT("topHeight"), &i))
DMNode.SetAttribute(TEXT("topHeight"), i);
if (element->Attribute(TEXT("bottomHeight"), &i))
DMNode.SetAttribute(TEXT("bottomHeight"), i);
for (TiXmlNode *childNode = node->FirstChildElement(TEXT("FloatingWindow"));
childNode;
childNode = childNode->NextSibling(TEXT("FloatingWindow")))
{
TiXmlElement *floatElement = childNode->ToElement();
int cont;
if (floatElement->Attribute(TEXT("cont"), &cont))
{
TiXmlElement FWNode(TEXT("FloatingWindow"));
FWNode.SetAttribute(TEXT("cont"), cont);
int x = 0;
int y = 0;
int w = 100;
int h = 100;
floatElement->Attribute(TEXT("x"), &x);
FWNode.SetAttribute(TEXT("x"), x);
floatElement->Attribute(TEXT("y"), &y);
FWNode.SetAttribute(TEXT("y"), y);
floatElement->Attribute(TEXT("width"), &w);
FWNode.SetAttribute(TEXT("width"), w);
floatElement->Attribute(TEXT("height"), &h);
FWNode.SetAttribute(TEXT("height"), h);
DMNode.InsertEndChild(FWNode);
}
}
for (TiXmlNode *childNode = node->FirstChildElement(TEXT("PluginDlg"));
childNode;
childNode = childNode->NextSibling(TEXT("PluginDlg")))
{
TiXmlElement *dlgElement = childNode->ToElement();
const TCHAR *name = dlgElement->Attribute(TEXT("pluginName"));
TiXmlElement PDNode(TEXT("PluginDlg"));
int id;
const TCHAR *idStr = dlgElement->Attribute(TEXT("id"), &id);
if (name && idStr)
{
int curr = 0; // on left
int prev = 0; // on left
dlgElement->Attribute(TEXT("curr"), &curr);
dlgElement->Attribute(TEXT("prev"), &prev);
bool isVisible = false;
const TCHAR *val = dlgElement->Attribute(TEXT("isVisible"));
if (val)
{
isVisible = (lstrcmp(val, TEXT("yes")) == 0);
}
PDNode.SetAttribute(TEXT("pluginName"), name);
PDNode.SetAttribute(TEXT("id"), idStr);
PDNode.SetAttribute(TEXT("curr"), curr);
PDNode.SetAttribute(TEXT("prev"), prev);
PDNode.SetAttribute(TEXT("isVisible"), isVisible ? TEXT("yes") : TEXT("no"));
DMNode.InsertEndChild(PDNode);
}
}
for (TiXmlNode *childNode = node->FirstChildElement(TEXT("ActiveTabs"));
childNode;
childNode = childNode->NextSibling(TEXT("ActiveTabs")))
{
TiXmlElement *dlgElement = childNode->ToElement();
TiXmlElement CTNode(TEXT("ActiveTabs"));
int cont;
if (dlgElement->Attribute(TEXT("cont"), &cont))
{
int activeTab = 0;
dlgElement->Attribute(TEXT("activeTab"), &activeTab);
CTNode.SetAttribute(TEXT("cont"), cont);
CTNode.SetAttribute(TEXT("activeTab"), activeTab);
DMNode.InsertEndChild(CTNode);
}
}
return DMNode;
}
bool NppParameters::writeScintillaParams() bool NppParameters::writeScintillaParams()
{ {
if (!_pXmlUserDoc) return false; if (!_pXmlUserDoc) return false;
@ -5594,12 +5702,19 @@ bool NppParameters::writeScintillaParams()
void NppParameters::createXmlTreeFromGUIParams() void NppParameters::createXmlTreeFromGUIParams()
{ {
TiXmlNode *nppRoot = _pXmlUserDoc->FirstChild(TEXT("NotepadPlus")); TiXmlNode *nppRoot = _pXmlUserDoc->FirstChild(TEXT("NotepadPlus"));
if (not nppRoot) if (!nppRoot)
{ {
nppRoot = _pXmlUserDoc->InsertEndChild(TiXmlElement(TEXT("NotepadPlus"))); nppRoot = _pXmlUserDoc->InsertEndChild(TiXmlElement(TEXT("NotepadPlus")));
} }
TiXmlNode *oldGUIRoot = nppRoot->FirstChildElement(TEXT("GUIConfigs")); TiXmlNode *oldGUIRoot = nppRoot->FirstChildElement(TEXT("GUIConfigs"));
TiXmlElement dockMngNode(TEXT(""));
if (_nppGUI._isCmdlineNosessionActivated)
{
// Copy DockingParamNode
dockMngNode = duplicateDockingManager(oldGUIRoot);
}
// Remove the old root nod if it exist // Remove the old root nod if it exist
if (oldGUIRoot) if (oldGUIRoot)
{ {
@ -6054,8 +6169,15 @@ void NppParameters::createXmlTreeFromGUIParams()
// <GUIConfig name="DockingManager" leftWidth="328" rightWidth="359" topHeight="200" bottomHeight="436"> // <GUIConfig name="DockingManager" leftWidth="328" rightWidth="359" topHeight="200" bottomHeight="436">
// ... // ...
if (_nppGUI._isCmdlineNosessionActivated)
{
newGUIRoot->InsertEndChild(dockMngNode);
}
else
{
insertDockingParamNode(newGUIRoot); insertDockingParamNode(newGUIRoot);
} }
}
bool NppParameters::writeFindHistory() bool NppParameters::writeFindHistory()
{ {

View File

@ -1852,6 +1852,7 @@ private:
void feedFileListParameters(TiXmlNode *node); void feedFileListParameters(TiXmlNode *node);
void feedScintillaParam(TiXmlNode *node); void feedScintillaParam(TiXmlNode *node);
void feedDockingManager(TiXmlNode *node); void feedDockingManager(TiXmlNode *node);
TiXmlElement duplicateDockingManager(TiXmlNode *node);
void feedFindHistoryParameters(TiXmlNode *node); void feedFindHistoryParameters(TiXmlNode *node);
void feedProjectPanelsParameters(TiXmlNode *node); void feedProjectPanelsParameters(TiXmlNode *node);
void feedFileBrowserParameters(TiXmlNode *node); void feedFileBrowserParameters(TiXmlNode *node);