mirror of
https://github.com/Omni-guides/Jackify.git
synced 2026-01-17 19:47:00 +01:00
Sync from development - prepare for v0.2.0.9
This commit is contained in:
@@ -492,27 +492,13 @@ class FileProgressList(QWidget):
|
||||
|
||||
# Widget doesn't exist - create it (only clear when creating new widget)
|
||||
# CRITICAL FIX: Remove all item widgets before clear() to prevent orphaned widgets
|
||||
_debug_log(f"[WIDGET_FIX] About to clear list_widget for summary widget - count={self.list_widget.count()}")
|
||||
for i in range(self.list_widget.count()):
|
||||
item = self.list_widget.item(i)
|
||||
if item:
|
||||
widget = self.list_widget.itemWidget(item)
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] Removing widget before clear (summary) - widget={widget}, parent={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
self.list_widget.removeItemWidget(item)
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Widget became top-level window after removeItemWidget() before clear()!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self.list_widget.clear()
|
||||
# Check widgets in _file_items dict after clear
|
||||
for key, widget in list(self._file_items.items()):
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] Widget in _file_items after clear - key={key}, widget={widget}, parent={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Widget in _file_items is a top-level window after clear()! This is the bug!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self._file_items.clear()
|
||||
|
||||
# Create new summary widget
|
||||
@@ -541,19 +527,8 @@ class FileProgressList(QWidget):
|
||||
# CRITICAL FIX: Call removeItemWidget() before takeItem() to prevent orphaned widgets
|
||||
widget = self.list_widget.itemWidget(item)
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] Removing summary widget - widget={widget}, parent={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
self.list_widget.removeItemWidget(item)
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Summary widget became top-level window after removeItemWidget()!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self.list_widget.takeItem(i)
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] After takeItem (summary) - widget.parent()={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Summary widget is still a top-level window after takeItem()!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
break
|
||||
self._summary_widget = None
|
||||
else:
|
||||
@@ -568,19 +543,8 @@ class FileProgressList(QWidget):
|
||||
# CRITICAL FIX: Call removeItemWidget() before takeItem() to prevent orphaned widgets
|
||||
widget = self.list_widget.itemWidget(item)
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] Removing transition label - widget={widget}, parent={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
self.list_widget.removeItemWidget(item)
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Transition label became top-level window after removeItemWidget()!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self.list_widget.takeItem(i)
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] After takeItem (transition) - widget.parent()={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Transition label is still a top-level window after takeItem()!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
break
|
||||
self._transition_label = None
|
||||
|
||||
@@ -592,27 +556,13 @@ class FileProgressList(QWidget):
|
||||
else:
|
||||
# Show empty state but keep header stable
|
||||
# CRITICAL FIX: Remove all item widgets before clear() to prevent orphaned widgets
|
||||
_debug_log(f"[WIDGET_FIX] About to clear list_widget (empty state) - count={self.list_widget.count()}")
|
||||
for i in range(self.list_widget.count()):
|
||||
item = self.list_widget.item(i)
|
||||
if item:
|
||||
widget = self.list_widget.itemWidget(item)
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] Removing widget before clear (empty) - widget={widget}, parent={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
self.list_widget.removeItemWidget(item)
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Widget became top-level window after removeItemWidget() before clear()!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self.list_widget.clear()
|
||||
# Check widgets in _file_items dict after clear
|
||||
for key, widget in list(self._file_items.items()):
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] Widget in _file_items after clear (empty) - key={key}, widget={widget}, parent={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Widget in _file_items is a top-level window after clear()! This is the bug!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self._file_items.clear()
|
||||
|
||||
# Update last phase tracker
|
||||
@@ -661,21 +611,8 @@ class FileProgressList(QWidget):
|
||||
# CRITICAL FIX: Call removeItemWidget() before takeItem() to prevent orphaned widgets
|
||||
widget = self.list_widget.itemWidget(item)
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] Removing widget for item_key={item_key} - widget={widget}, parent={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
self.list_widget.removeItemWidget(item)
|
||||
# Check if widget became orphaned after removal
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Widget became top-level window after removeItemWidget()! widget={widget}")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self.list_widget.takeItem(i)
|
||||
# Final check after takeItem
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] After takeItem - widget.parent()={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Widget is still a top-level window after takeItem()! This is the bug!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
break
|
||||
del self._file_items[item_key]
|
||||
|
||||
@@ -735,27 +672,13 @@ class FileProgressList(QWidget):
|
||||
def _show_transition_message(self, new_phase: str):
|
||||
"""Show a brief 'Preparing...' message during phase transitions."""
|
||||
# CRITICAL FIX: Remove all item widgets before clear() to prevent orphaned widgets
|
||||
_debug_log(f"[WIDGET_FIX] About to clear list_widget (transition) - count={self.list_widget.count()}")
|
||||
for i in range(self.list_widget.count()):
|
||||
item = self.list_widget.item(i)
|
||||
if item:
|
||||
widget = self.list_widget.itemWidget(item)
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] Removing widget before clear (transition) - widget={widget}, parent={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
self.list_widget.removeItemWidget(item)
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Widget became top-level window after removeItemWidget() before clear()!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self.list_widget.clear()
|
||||
# Check widgets in _file_items dict after clear
|
||||
for key, widget in list(self._file_items.items()):
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] Widget in _file_items after clear (transition) - key={key}, widget={widget}, parent={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Widget in _file_items is a top-level window after clear()! This is the bug!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self._file_items.clear()
|
||||
|
||||
# Header removed - tab label provides context
|
||||
@@ -781,41 +704,15 @@ class FileProgressList(QWidget):
|
||||
def clear(self):
|
||||
"""Clear all file items."""
|
||||
# CRITICAL FIX: Remove all item widgets before clear() to prevent orphaned widgets
|
||||
_debug_log(f"[WIDGET_FIX] clear() called - count={self.list_widget.count()}")
|
||||
for i in range(self.list_widget.count()):
|
||||
item = self.list_widget.item(i)
|
||||
if item:
|
||||
widget = self.list_widget.itemWidget(item)
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] Removing widget before clear() - widget={widget}, parent={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
self.list_widget.removeItemWidget(item)
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Widget became top-level window after removeItemWidget() before clear()!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self.list_widget.clear()
|
||||
# Check widgets in _file_items dict after clear
|
||||
for key, widget in list(self._file_items.items()):
|
||||
if widget:
|
||||
_debug_log(f"[WIDGET_FIX] Widget in _file_items after clear() - key={key}, widget={widget}, parent={widget.parent()}, isWindow()={widget.isWindow()}")
|
||||
if widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Widget in _file_items is a top-level window after clear()! This is the bug!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self._file_items.clear()
|
||||
if self._summary_widget:
|
||||
_debug_log(f"[WIDGET_FIX] Clearing summary_widget - widget={self._summary_widget}, parent={self._summary_widget.parent()}, isWindow()={self._summary_widget.isWindow()}")
|
||||
if self._summary_widget.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Summary widget is a top-level window in clear()!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self._summary_widget = None
|
||||
if self._transition_label:
|
||||
_debug_log(f"[WIDGET_FIX] Clearing transition_label - widget={self._transition_label}, parent={self._transition_label.parent()}, isWindow()={self._transition_label.isWindow()}")
|
||||
if self._transition_label.isWindow():
|
||||
print(f"[WIDGET_FIX] ERROR: Transition label is a top-level window in clear()!")
|
||||
import traceback
|
||||
traceback.print_stack()
|
||||
self._transition_label = None
|
||||
self._last_phase = None
|
||||
# Header removed - tab label provides context
|
||||
|
||||
Reference in New Issue
Block a user