From 06df57e0a3ba3e40cc1635b183409ac7668b61fd Mon Sep 17 00:00:00 2001
From: Nico Alt <nicoalt@posteo.org>
Date: Thu, 26 Mar 2020 12:00:03 +0000
Subject: [PATCH] Refactor actions

---
 briar-gtk/briar_gtk/actions/actions.py     | 20 +++++++++++++++++---
 briar-gtk/briar_gtk/actions/application.py |  9 +++++----
 briar-gtk/briar_gtk/actions/window.py      | 14 ++++++++------
 briar-gtk/briar_gtk/application.py         |  4 ++--
 briar-gtk/briar_gtk/window.py              |  4 ++--
 5 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/briar-gtk/briar_gtk/actions/actions.py b/briar-gtk/briar_gtk/actions/actions.py
index d2fc7c9..4b34067 100644
--- a/briar-gtk/briar_gtk/actions/actions.py
+++ b/briar-gtk/briar_gtk/actions/actions.py
@@ -5,10 +5,24 @@
 from gi.repository import Gio
 
 
+# pylint: disable=too-few-public-methods
 class Actions:
 
-    # pylint: disable=no-member
-    def _setup_action(self, key, parameter, callback):
+    def __init__(self, widget):
+        self.widget = widget
+
+    def _create_action(self, key, parameter, callback):
         action = Gio.SimpleAction.new(key, parameter)
         action.connect("activate", callback)
-        self.add_action(action)
+        return action
+
+    def _setup_action(self, key, parameter, callback):
+        action = self._create_action(key, parameter, callback)
+        self.actions.add_action(action)
+
+    def _setup_global_action_group(self):
+        self.actions = self.widget
+
+    def _setup_simple_action_group(self, name):
+        self.actions = Gio.SimpleActionGroup.new()
+        self.widget.insert_action_group(name, self.actions)
diff --git a/briar-gtk/briar_gtk/actions/application.py b/briar-gtk/briar_gtk/actions/application.py
index 93a85ee..50b9e96 100644
--- a/briar-gtk/briar_gtk/actions/application.py
+++ b/briar-gtk/briar_gtk/actions/application.py
@@ -12,17 +12,18 @@ from briar_gtk.actions.actions import Actions
 # pylint: disable=too-few-public-methods
 class ApplicationActions(Actions):
 
-    def __init__(self):
+    def __init__(self, widget):
+        super().__init__(widget)
+        self._setup_global_action_group()
         self._setup_actions()
 
     def _setup_actions(self):
         self._setup_quit_action()
 
-    # pylint: disable=no-member
     def _setup_quit_action(self):
         self._setup_action("quit", None, self._quit)
-        self.set_accels_for_action("app.quit", ["<Ctrl>q"])
+        self.widget.set_accels_for_action("app.quit", ["<Ctrl>q"])
 
     # pylint: disable=unused-argument
     def _quit(self, action, parameter):
-        self.quit()
+        self.widget.quit()
diff --git a/briar-gtk/briar_gtk/actions/window.py b/briar-gtk/briar_gtk/actions/window.py
index 66ab67d..1ffc617 100644
--- a/briar-gtk/briar_gtk/actions/window.py
+++ b/briar-gtk/briar_gtk/actions/window.py
@@ -16,7 +16,9 @@ from briar_gtk.define import APP
 # pylint: disable=too-few-public-methods
 class WindowActions(Actions):
 
-    def __init__(self):
+    def __init__(self, widget):
+        super().__init__(widget)
+        self._setup_global_action_group()
         self._setup_actions()
 
     def _setup_actions(self):
@@ -41,17 +43,17 @@ class WindowActions(Actions):
 
     # pylint: disable=unused-argument
     def _back_to_sidebar(self, action, parameter):
-        if isinstance(self.current_container, MainWindowContainer):
-            self.current_container.show_sidebar()
+        if isinstance(self.widget.current_container, MainWindowContainer):
+            self.widget.current_container.show_sidebar()
 
     # pylint: disable=unused-argument
     def _open_about_page(self, action, parameter):
-        self.current_container.open_about_page()
+        self.widget.current_container.open_about_page()
 
     # pylint: disable=unused-argument
     def _open_add_contact(self, action, parameter):
-        self.show_add_contact_container()
+        self.widget.show_add_contact_container()
 
     # pylint: disable=unused-argument
     def _open_private_chat(self, action, contact_id):
-        self.current_container.open_private_chat(contact_id.get_int32())
+        self.widget.current_container.open_private_chat(contact_id.get_int32())
diff --git a/briar-gtk/briar_gtk/application.py b/briar-gtk/briar_gtk/application.py
index 39e80ec..1dc959d 100644
--- a/briar-gtk/briar_gtk/application.py
+++ b/briar-gtk/briar_gtk/application.py
@@ -20,12 +20,12 @@ from briar_gtk.define import APPLICATION_STYLING_PATH, BRIAR_HEADLESS_JAR
 from briar_gtk.window import Window
 
 
-class Application(Gtk.Application, ApplicationActions):
+class Application(Gtk.Application):
 
     def __init__(self):
         Application._set_application_name(APPLICATION_NAME)
         super().__init__(application_id=APPLICATION_ID)
-        ApplicationActions.__init__(self)
+        ApplicationActions(self)
 
     # pylint: disable=arguments-differ
     def do_startup(self):
diff --git a/briar-gtk/briar_gtk/window.py b/briar-gtk/briar_gtk/window.py
index f45998a..851664c 100644
--- a/briar-gtk/briar_gtk/window.py
+++ b/briar-gtk/briar_gtk/window.py
@@ -11,13 +11,13 @@ from briar_gtk.containers.startup import StartupContainer
 from briar_gtk.define import APP, APPLICATION_ID, APPLICATION_NAME
 
 
-class Window(Gtk.ApplicationWindow, WindowActions):
+class Window(Gtk.ApplicationWindow):
 
     DEFAULT_WINDOW_SIZE = (900, 600)
 
     def __init__(self):
         self._initialize_gtk_application_window()
-        WindowActions.__init__(self)
+        WindowActions(self)
         self._setup_content()
 
     def show_main_container(self):
-- 
GitLab