2026-03-08 00:46:21 -06:00
|
|
|
# Python imports
|
|
|
|
|
|
|
|
|
|
# Lib imports
|
|
|
|
|
import gi
|
|
|
|
|
gi.require_version('Gtk', '3.0')
|
|
|
|
|
from gi.repository import Gtk
|
|
|
|
|
|
|
|
|
|
# Application imports
|
|
|
|
|
from libs.event_factory import Event_Factory, Code_Event_Types
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-03-22 00:35:51 -05:00
|
|
|
def ask_yes_no(message):
|
|
|
|
|
dialog = Gtk.MessageDialog(
|
|
|
|
|
parent = None,
|
|
|
|
|
flags = 0,
|
|
|
|
|
message_type = Gtk.MessageType.QUESTION,
|
|
|
|
|
buttons = Gtk.ButtonsType.YES_NO,
|
|
|
|
|
text = message,
|
|
|
|
|
)
|
|
|
|
|
dialog.set_title("Confirm")
|
|
|
|
|
|
|
|
|
|
response = dialog.run()
|
|
|
|
|
dialog.destroy()
|
|
|
|
|
|
|
|
|
|
return response == Gtk.ResponseType.YES
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def file_is_deleted(file, emit):
|
|
|
|
|
file.was_deleted = True
|
2026-03-08 00:46:21 -06:00
|
|
|
event = Event_Factory.create_event(
|
|
|
|
|
"file_externally_deleted",
|
2026-03-22 00:35:51 -05:00
|
|
|
file = file,
|
|
|
|
|
buffer = file.buffer
|
2026-03-08 00:46:21 -06:00
|
|
|
)
|
feat: Complete plugin lifecycle management with lazy loading and runtime reload
Major changes:
- Add unload() method to all plugins for proper cleanup (unregister commands/providers/LSP clients, destroy widgets, clear state)
- Implement lazy widget loading via "show" signal across all containers
- Add autoload: false manifest option for manual/conditional plugin loading
- Add Plugins UI with runtime load/unload toggle via Ctrl+Shift+p
- Implement controller unregistration system with proper signal disconnection
- Add new events: UnregisterCommandEvent, GetFilesEvent, GetSourceViewsEvent, TogglePluginsUiEvent
- Fix signal leaks by tracking and disconnecting handlers in widgets (search/replace, LSP manager, tabs, telescope, markdown preview)
- Add Save/Save As to tabs context menu
- Improve search/replace behavior (selection handling, focus management)
- Add telescope file initialization from existing loaded files
- Refactor plugin reload watcher to dynamically add/remove plugins on filesystem changes
- Add new plugins: file_history, extend_source_view_menu, godot_lsp_client
- Fix bug in prettify_json (undefined variable reference
2026-03-21 13:26:12 -05:00
|
|
|
emit(event)
|
2026-03-08 00:46:21 -06:00
|
|
|
|
|
|
|
|
|
2026-03-22 00:35:51 -05:00
|
|
|
def file_is_externally_modified(file, emit):
|
|
|
|
|
event = Event_Factory.create_event(
|
|
|
|
|
"file_externally_modified",
|
|
|
|
|
file = file,
|
|
|
|
|
buffer = file.buffer
|
|
|
|
|
)
|
|
|
|
|
emit(event)
|
|
|
|
|
|
|
|
|
|
if not file.buffer.get_modified():
|
|
|
|
|
file.reload()
|
|
|
|
|
return
|
2026-03-08 00:46:21 -06:00
|
|
|
|
2026-03-22 00:35:51 -05:00
|
|
|
result = ask_yes_no("File has been externally modified. Reload?")
|
|
|
|
|
if not result: return
|
2026-03-08 00:46:21 -06:00
|
|
|
|
2026-03-22 00:35:51 -05:00
|
|
|
file.reload()
|