Fix plugin lifecycle, tabs cleanup, and add auto-scroll to tabs
- Fix unload() method naming in nanoesq_temp_buffer plugin - Wrap tabs_widget in ScrolledWindow/Viewport for proper scrolling - Add auto-scroll to center when switching/adding tabs - Return manifest_meta in manifest_manager for manual plugins - Refactor remove_plugin() to properly clean up all manifest lists - Fix widget references in plugins_ui for proper removal
This commit is contained in:
@@ -23,7 +23,7 @@ class Plugin(PluginCode):
|
||||
def load(self):
|
||||
self._manage_signals("register_command")
|
||||
|
||||
def load(self):
|
||||
def unload(self):
|
||||
self._manage_signals("unregister_command")
|
||||
|
||||
def _manage_signals(self, action: str):
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
|
||||
from gi.repository import Gtk
|
||||
|
||||
# Application imports
|
||||
from libs.event_factory import Event_Factory, Code_Event_Types
|
||||
@@ -25,8 +28,19 @@ class Plugin(PluginCode):
|
||||
|
||||
self.register_controller("tabs", self.tabs_controller)
|
||||
|
||||
code_container.add( self.tabs_controller.tabs_widget )
|
||||
code_container.reorder_child(self.tabs_controller.tabs_widget, 0)
|
||||
scrolled_win = Gtk.ScrolledWindow()
|
||||
viewport = Gtk.Viewport()
|
||||
|
||||
scrolled_win.set_overlay_scrolling(False)
|
||||
scrolled_win.set_size_request(-1, 50)
|
||||
|
||||
viewport.add( self.tabs_controller.tabs_widget )
|
||||
scrolled_win.add( viewport )
|
||||
code_container.add( scrolled_win )
|
||||
code_container.reorder_child(scrolled_win, 0)
|
||||
|
||||
viewport.show()
|
||||
scrolled_win.show()
|
||||
|
||||
event = Event_Factory.create_event("get_files")
|
||||
self.emit_to("files", event)
|
||||
@@ -36,7 +50,14 @@ class Plugin(PluginCode):
|
||||
def unload(self):
|
||||
self.unregister_controller("tabs")
|
||||
self.tabs_controller.unload_tabs()
|
||||
self.tabs_controller.tabs_widget.destroy()
|
||||
|
||||
tabs_widget = self.tabs_controller.tabs_widget
|
||||
viewport = tabs_widget.get_parent()
|
||||
scrolled_win = viewport.get_parent()
|
||||
|
||||
tabs_widget.destroy()
|
||||
viewport.destroy()
|
||||
scrolled_win.destroy()
|
||||
|
||||
self.tabs_controller.tabs_widget = None
|
||||
self.tabs_controller = None
|
||||
|
||||
@@ -27,7 +27,7 @@ class TabsWidget(Gtk.Notebook):
|
||||
|
||||
|
||||
def _setup_styling(self):
|
||||
self.set_scrollable(True)
|
||||
...
|
||||
|
||||
def _setup_signals(self):
|
||||
self.connect("page-added", self._page_added)
|
||||
@@ -67,6 +67,7 @@ class TabsWidget(Gtk.Notebook):
|
||||
)
|
||||
|
||||
self.emit(event)
|
||||
self._scroll_to_center(tab)
|
||||
|
||||
def _bind_tab_menu(self, tab, page_widget):
|
||||
def do_context_menu(tab, eve, page_widget):
|
||||
@@ -81,6 +82,21 @@ class TabsWidget(Gtk.Notebook):
|
||||
page_widget
|
||||
)
|
||||
|
||||
def _scroll_to_center(self, tab):
|
||||
scrolled_win = self.get_parent().get_parent()
|
||||
alloc = tab.get_allocation()
|
||||
tab_x = alloc.x
|
||||
tab_width = alloc.width
|
||||
view_width = scrolled_win.get_allocated_width()
|
||||
target = tab_x + tab_width / 2 - view_width / 2
|
||||
adj = scrolled_win.get_hadjustment()
|
||||
lower = adj.get_lower()
|
||||
upper = adj.get_upper()
|
||||
page_size = adj.get_page_size()
|
||||
target = max(lower, min(target, upper - page_size))
|
||||
|
||||
adj.set_value(target)
|
||||
|
||||
def create_menu(self, page_widget) -> Gtk.Menu:
|
||||
context_menu = Gtk.Menu()
|
||||
close_submenu = Gtk.Menu()
|
||||
@@ -130,6 +146,7 @@ class TabsWidget(Gtk.Notebook):
|
||||
self.page_num(page_widget)
|
||||
)
|
||||
self.handler_unblock(self.switch_page_id)
|
||||
self._scroll_to_center(tab)
|
||||
|
||||
break
|
||||
|
||||
|
||||
Reference in New Issue
Block a user