feat: popover bubble

This commit is contained in:
aclist 2026-04-25 01:04:14 +09:00
parent 66909b668b
commit ed508c6764
4 changed files with 25 additions and 3 deletions

View File

@ -136,6 +136,10 @@ class Emitter(GObject.GObject):
def api_change_failed(self) -> None:
pass
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=())
def already_saved_server(self) -> None:
pass
@GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=(str,))
def keyword_set(self, keyword: str) -> None:
pass

View File

@ -569,6 +569,9 @@ class Controller(GObject.GObject):
def get_menu(self) -> "MenuTreeView":
return self.mediator.menu
def is_in_favs(self) -> bool:
return self.config_man.is_in_favs()
def get_config_man(self) -> ConfigManager:
return self.config_man

View File

@ -265,6 +265,7 @@ class ServerModelManager:
proxy_man.remove_row_from_control(record)
else:
if config_man.is_in_favs(fqip):
self.emitter.emit("already_saved_server")
return
config_man.add_saved_server(fqip)
if proxy_man.has_control_model() is False:

View File

@ -204,6 +204,7 @@ class AddPanel(Gtk.Frame):
self.emitter.connect(
"request_ip_entry_focus", lambda _: self.entry.grab_focus()
)
self.emitter.connect("already_saved_server", self._on_duplicate_server)
self.grid = Gtk.Grid(margin=10, vexpand=False, column_spacing=15, row_spacing=5)
self.grid.attach(self.entry, 0, 0, COLS, ROWS)
@ -216,6 +217,21 @@ class AddPanel(Gtk.Frame):
self.add(self.grid)
# TODO: dynamic popover text
self.pop = Gtk.Popover()
self.pop_label = Gtk.Label(
label="This address is already in your Saved Servers",
margin_start=10,
margin_end=10,
)
self.pop.add(self.pop_label)
self.pop.show_all()
self.pop.set_margin_start(10)
self.pop.set_relative_to(self.entry)
def _on_duplicate_server(self, emitter: "Emitter") -> None:
self.pop.popup()
def _on_connect_clicked(self, button: Gtk.Button) -> None:
addr = self.entry.get_text()
self.controller.connect_by_str(addr)
@ -226,9 +242,7 @@ class AddPanel(Gtk.Frame):
def _on_activate(self, entry: Gtk.Entry) -> None:
# NOTE: default action is to add a record, not connect
if not self.add_server.is_sensitive():
return
self._add_server()
self.add_server.emit("clicked")
def _on_add_clicked(self, button: Gtk.Button) -> None:
self._add_server()