Blob Blame History Raw
From 970f199e2c34edb92e5e67080365926ef51e63d4 Mon Sep 17 00:00:00 2001
From: Rui Matos <tiagomatos@gmail.com>
Date: Thu, 7 Nov 2013 21:40:56 +0100
Subject: [PATCH 4/6] Add tweaks for shell extensions installed after startup

---
 gtweak/tweaks/tweak_shell_extensions.py | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/gtweak/tweaks/tweak_shell_extensions.py b/gtweak/tweaks/tweak_shell_extensions.py
index 648a4ca..e3ef7b6 100644
--- a/gtweak/tweaks/tweak_shell_extensions.py
+++ b/gtweak/tweaks/tweak_shell_extensions.py
@@ -203,14 +203,22 @@ class ShellExtensionTweakGroup(TweakGroup):
     def __init__(self):
         TweakGroup.__init__(self, N_("Shell Extensions"))
 
+        self._shell = None
+        self._uuids = set()
+
         extension_tweaks = []
         sg = build_horizontal_sizegroup()
+        self._sg = sg
 
         #check the shell is running
         try:
             shell = GnomeShellFactory().get_shell()
             if shell is None:
                 raise Exception("Shell not running or DBus service not available")
+            else:
+                self._shell = shell
+
+            shell.extensions_proxy.connect('g-signal', self._extensions_signal)
 
             #add the extension installer
             extension_tweaks.append(
@@ -223,6 +231,7 @@ class ShellExtensionTweakGroup(TweakGroup):
                     try:
                         extension_tweaks.append(
                             _ShellExtensionTweak(shell, extension, size_group=sg))
+                        self._uuids.add(extension["uuid"])
                     except:
                         logging.warning("Invalid extension", exc_info=True)
             except:
@@ -232,6 +241,26 @@ class ShellExtensionTweakGroup(TweakGroup):
 
         self.set_tweaks(*extension_tweaks)
 
+    def _extensions_signal(self, proxy, sender, signal, params):
+        if signal != 'ExtensionStatusChanged':
+            return
+
+        uuid = params[0]
+        if uuid in self._uuids:
+            return
+
+        try:
+            extension = self._shell.extensions_proxy.GetExtensionInfo('(s)', uuid)
+            try:
+                self.set_tweaks(_ShellExtensionTweak(self._shell, extension, size_group=self._sg))
+                self._uuids.add(uuid)
+                self.model.tweaks_changed(self)
+            except:
+                logging.warning("Invalid extension", exc_info=True)
+        except:
+            logging.warning("Error getting extension info", exc_info=True)
+
+
 TWEAK_GROUPS = (
         ShellExtensionTweakGroup(),
 )
-- 
1.8.3.1