diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 426073a83..5d0b57f0e 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -9,6 +9,7 @@ and this project adheres to http://semver.org/spec/v2.0.0.html[Semantic Versioni
== https://github.com/robotframework/RIDE[Unreleased]
=== Fixed
+- Fixed extra scrolling bars in Grid Editor.
- Fixed broken directory selection dialog when opening Test Suite directory on first RIDE execution after install.
- Fixed disappering Project Explorer tree elements, after editing directory elements (i.e. variable or keyword).
- Fixed blank Project Explorer panel when docking. Long time existing issue.
diff --git a/README.adoc b/README.adoc
index 7e78e2c05..8db91baf8 100644
--- a/README.adoc
+++ b/README.adoc
@@ -46,7 +46,7 @@ Likewise, the current version of wxPython, is 4.2.5, but RIDE is known to work w
`pip install -U robotframework-ride`
-(3.9 <= python <= 3.14) Install current development version (**2.2.5dev10**) with:
+(3.9 <= python <= 3.14) Install current development version (**2.2.5dev11**) with:
`pip install -U https://github.com/robotframework/RIDE/archive/develop.zip`
diff --git a/src/robotide/application/CHANGELOG.html b/src/robotide/application/CHANGELOG.html
index e3e5a3be8..ecd0c4a08 100644
--- a/src/robotide/application/CHANGELOG.html
+++ b/src/robotide/application/CHANGELOG.html
@@ -1,6 +1,8 @@
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog
and this project adheres to Semantic Versioning.
-
+Fixed extra scrolling bars in Grid Editor.
+
-
Fixed broken directory selection dialog when opening Test Suite directory on first RIDE execution after install.
-
Fixed disappering Project Explorer tree elements, after editing directory elements (i.e. variable or keyword).
diff --git a/src/robotide/application/releasenotes.py b/src/robotide/application/releasenotes.py
index 7a10e8888..08a62bd6d 100644
--- a/src/robotide/application/releasenotes.py
+++ b/src/robotide/application/releasenotes.py
@@ -175,6 +175,7 @@ def set_content(self, html_win, content):
New Features and Fixes Highlights
+- Fixed extra scrolling bars in Grid Editor.
- Fixed broken directory selection dialog when opening Test Suite directory on first RIDE execution after install.
- Fixed disappering Project Explorer tree elements, after editing directory elements (i.e. variable or keyword).
- Fixed blank Project Explorer panel when docking. Long time existing issue.
diff --git a/src/robotide/editor/__init__.py b/src/robotide/editor/__init__.py
index bb9f6f710..62100f51c 100644
--- a/src/robotide/editor/__init__.py
+++ b/src/robotide/editor/__init__.py
@@ -194,10 +194,10 @@ def on_file_deleted(self, message):
self._create_editor()
-class _EditorTab(wx.ScrolledWindow):
+class _EditorTab(wx.Panel):
def __init__(self, plugin):
- wx.ScrolledWindow.__init__(self, plugin.notebook, style=wx.SUNKEN_BORDER)
+ wx.Panel.__init__(self, parent=plugin.notebook, style=wx.SUNKEN_BORDER)
self.plugin = plugin
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(self.sizer)
diff --git a/src/robotide/editor/editors.py b/src/robotide/editor/editors.py
index 55d0fc578..8d462f863 100644
--- a/src/robotide/editor/editors.py
+++ b/src/robotide/editor/editors.py
@@ -193,7 +193,7 @@ def _collabsible_changed(self, event=None):
self.EnableScrolling(True, True)
self.Refresh()
self.Parent.GetSizer().Layout()
- self.Parent.EnableScrolling(True, True)
+ # self.Parent.EnableScrolling(True, True)
self.Parent.Refresh()
if event:
event.Skip()
diff --git a/src/robotide/ui/mainframe.py b/src/robotide/ui/mainframe.py
index 8d81ee8bf..25539b5ee 100644
--- a/src/robotide/ui/mainframe.py
+++ b/src/robotide/ui/mainframe.py
@@ -296,19 +296,25 @@ def _init_ui(self):
"""
# DEBUG: self.leftpanel = wx.Panel(self, name="left_panel", size = (275, 250))
if new_ui: # Only when creating UI we add panes
- # Tree is always created here
- self.tree = Tree(self, self.actions, self._application.settings)
+ # Tree is always created here, inside a plain panel. AUI must manage the holder and
+ # never the Tree itself: docking a floating pane reparents the managed window, and a
+ # reparented wx.ScrolledWindow (which CustomTreeCtrl is) stops receiving paint events
+ # on wxGTK, leaving a correctly sized but permanently blank panel. The Files pane uses
+ # the same idiom (FileExplorer is a wx.Panel wrapping its tree_ctrl).
+ self.tree_holder = wx.Panel(self)
+ self.tree = Tree(self.tree_holder, self.actions, self._application.settings)
self.tree.SetMinSize(wx.Size(275, 250))
self.tree.SetFont(wx.Font(self.fontinfo))
- # self.leftpanel.Bind(wx.EVT_SIZE, self.tree.OnSize)
- # self.aui_mgr.AddPane(self.leftpanel, aui.AuiPaneInfo().Name("left_panel").Caption("left_panel").Left())
+ tree_sizer = wx.BoxSizer(wx.VERTICAL)
+ tree_sizer.Add(self.tree, 1, wx.EXPAND)
+ self.tree_holder.SetSizer(tree_sizer)
+ self.tree_holder.SetMinSize(wx.Size(275, 250))
# DEBUG: Next was already called from application.py
# print(f"DEBUG: mainframe.py RideFrame NEW UI tree caption {_('Test Suites')}")
- self.aui_mgr.AddPane(self.tree,
+ self.aui_mgr.AddPane(self.tree_holder,
aui.AuiPaneInfo().Name("tree_content").Caption(_('Test Suites')).CloseButton(True)
.LeftDockable(True)
) # DEBUG: remove .CloseButton(False) when restore is fixed
- # DEBUG: self.aui_mgr.GetPane(self.tree).DestroyOnClose()
# TreePlugin will manage showing the Tree
self.actions.register_actions(action_info_collection(_menudata, self, data_nt=self._menudata_nt,
container=self.tree))
@@ -502,14 +508,16 @@ def OnFloatDock(self, event):
# panelabel = event.pane.caption
etype = event.GetEventType()
# strs = "Pane %s "%panelabel
+ # Only the persisted docked/floating state is recorded here. The tree keeps its nodes and
+ # repaints by itself across the transition, so rebuilding it would just discard the current
+ # selection; and calling into the AUI manager from these events re-enters its own drag
+ # handling.
if etype == aui.wxEVT_AUI_PANE_FLOATING:
# strs += "is about to be floated"
if event.pane.name == "file_manager":
self.filemgr.update_tree()
elif event.pane.name == "tree_content":
self._application.treeplugin.set_float_docked(False)
- self._application.treeplugin.on_show_tree(None)
- self.tree.refresh_view()
# elif etype == aui.wxEVT_AUI_PANE_FLOATED:
# strs += "has been floated"
elif etype == aui.wxEVT_AUI_PANE_DOCKING:
@@ -518,8 +526,6 @@ def OnFloatDock(self, event):
self.filemgr.update_tree()
elif event.pane.name == "tree_content":
self._application.treeplugin.set_float_docked(True)
- self._application.treeplugin.on_show_tree(None)
- self.tree.refresh_view()
# elif etype == aui.wxEVT_AUI_PANE_DOCKED:
# strs += "has been docked"
# print("DEBUG: " + strs + "\n")
diff --git a/src/robotide/version.py b/src/robotide/version.py
index 2b90747b2..26b88895a 100644
--- a/src/robotide/version.py
+++ b/src/robotide/version.py
@@ -15,5 +15,5 @@
#
# Automatically generated by `tasks.py`.
-VERSION = 'v2.2.5dev10'
+VERSION = 'v2.2.5dev11'