Blame SOURCES/0003-shell_extensions-Add-remove-tweaks-as-extensions-are.patch

445904
From b6497ea5d0e099c27b7699b936f61c257403e535 Mon Sep 17 00:00:00 2001
445904
From: Rui Matos <tiagomatos@gmail.com>
445904
Date: Thu, 7 Nov 2013 13:06:23 +0100
445904
Subject: [PATCH 3/8] shell_extensions: Add/remove tweaks as extensions are
445904
 added/removed
445904
445904
---
445904
 gtweak/gshellwrapper.py                       |  3 +++
445904
 gtweak/tweaks/tweak_group_shell_extensions.py | 33 ++++++++++++++++++++++++++-
445904
 2 files changed, 35 insertions(+), 1 deletion(-)
445904
445904
diff --git a/gtweak/gshellwrapper.py b/gtweak/gshellwrapper.py
445904
index 22725df..8c7e2ac 100644
445904
--- a/gtweak/gshellwrapper.py
445904
+++ b/gtweak/gshellwrapper.py
445904
@@ -184,6 +184,9 @@ class GnomeShell36(GnomeShell34):
445904
     def install_remote_extension(self, uuid, reply_handler, error_handler, user_data):
445904
         self._proxy.proxy_extensions.InstallRemoteExtension('(s)', uuid, result_handler=reply_handler, error_handler=error_handler, user_data=user_data)
445904
 
445904
+    def get_extension_info(self, uuid):
445904
+        return self._proxy.proxy_extensions.GetExtensionInfo('(s)', uuid)
445904
+
445904
 @gtweak.utils.singleton
445904
 class GnomeShellFactory:
445904
     def __init__(self):
445904
diff --git a/gtweak/tweaks/tweak_group_shell_extensions.py b/gtweak/tweaks/tweak_group_shell_extensions.py
445904
index e33966f..fce8abf 100644
445904
--- a/gtweak/tweaks/tweak_group_shell_extensions.py
445904
+++ b/gtweak/tweaks/tweak_group_shell_extensions.py
445904
@@ -155,7 +155,7 @@ class _ShellExtensionTweak(Gtk.ListBoxRow, Tweak):
445904
         btn.set_label(_("Updating"))
445904
         self.set_sensitive(False)
445904
         self._shell.install_remote_extension(uuid,self.reply_handler, self.error_handler, btn)
445904
-    
445904
+
445904
     def reply_handler(self, proxy_object, result, user_data):
445904
         if result == 's':
445904
             self.deleteButton.show()
445904
@@ -265,14 +265,22 @@ class _ShellExtensionInstallerTweak(Gtk.Box, Tweak):
445904
 
445904
 class ShellExtensionTweakGroup(ListBoxTweakGroup):
445904
     def __init__(self):
445904
+        self._shell = None
445904
+        self._uuids = dict()
445904
+
445904
         extension_tweaks = []
445904
         sg = build_horizontal_sizegroup()
445904
+        self._sg = sg
445904
 
445904
         #check the shell is running
445904
         try:
445904
             shell = GnomeShellFactory().get_shell()
445904
             if shell is None:
445904
                 raise Exception("Shell not running or DBus service not available")
445904
+            else:
445904
+                self._shell = shell
445904
+
445904
+            shell.connect('extension-status-changed', self._on_extension_status_changed)
445904
 
445904
             version =  tuple(shell.version.split("."))
445904
             ego = ExtensionsDotGnomeDotOrg(version)
445904
@@ -283,6 +291,7 @@ class ShellExtensionTweakGroup(ListBoxTweakGroup):
445904
                     try:
445904
                         extension_widget = _ShellExtensionTweak(shell, extension, size_group=sg)
445904
                         extension_tweaks.append(extension_widget)
445904
+                        self._uuids[extension["uuid"]] = extension_widget
445904
                         if extension.get("type") == GnomeShell.EXTENSION_TYPE["PER_USER"]:
445904
                             ego.connect("got-extension-info", self._got_info, extension, extension_widget)
445904
                             ego.query_extension_info(extension["uuid"])
445904
@@ -323,6 +332,28 @@ class ShellExtensionTweakGroup(ListBoxTweakGroup):
445904
         if before and not row.get_header():
445904
             row.set_header (Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL))
445904
 
445904
+    def _on_extension_status_changed(self, shell, uuid, state, error):
445904
+        if uuid not in self._uuids:
445904
+            self._add_extension(uuid)
445904
+            return
445904
+
445904
+        if state == GnomeShell.EXTENSION_STATE["UNINSTALLED"]:
445904
+            self.remove(self._uuids[uuid])
445904
+            del self._uuids[uuid]
445904
+
445904
+    def _add_extension(self, uuid):
445904
+        try:
445904
+            extension = self._shell.get_extension_info(uuid)
445904
+        except:
445904
+            logging.warning("Error getting extension info", exc_info=True)
445904
+            return
445904
+
445904
+        t = _ShellExtensionTweak(self._shell, extension, size_group=self._sg)
445904
+        t.show_all()
445904
+        self.add_tweak_row(t)
445904
+        self._uuids[uuid] = t
445904
+
445904
+
445904
 TWEAK_GROUPS = [
445904
         ShellExtensionTweakGroup(),
445904
 ]
445904
-- 
445904
2.9.3
445904