Multiple instance support.
[drlaunch] / src / widget.py
index bf490f2..409cb3c 100755 (executable)
@@ -44,6 +44,8 @@ from math import pi
 import cairo
 import time
 
+from subprocess import Popen,PIPE
+
 from portrait import FremantleRotation
 import launcher
 from xdg.IconTheme import getIconPath
@@ -68,25 +70,49 @@ class DrlaunchPlugin(IconGrid, HomePluginItem, FremantleRotation):
        self.winConfig=None
 
        self.set_settings(True)
-       self.connect('show-settings', self.slot_show_settings)
-       self.connect('long-press', self.signalLongpress)
-       self.connect('click', self.signalClick)
 
-    def get_id(self):
+       self.id=None
+       self.config=None
+
+    def get_id0(self):
        """If this is called from the constructor then the program
        core dumps """
        aid=self.get_applet_id()
 
-       ret="%s" % aid
+       # Get desktop activity if D.A.M. is present
+       
+       act="/usr/bin/activity"
+
+       if os.path.exists(act):
+           r=Popen([act, "current"], stdout=PIPE).communicate()
+           activity=r[0].strip()
+       else:
+           activity=""
+
+       ret="%s-%s" % (aid, activity)
 
        return(ret)
 
-    def do_realize(self):
-       #print "realize"
+    def get_id(self):
+       if self.id==None:
+           self.id=self.get_id0()
+
+       return(self.id)
+
+    def get_config(self):
+       if self.config==None:
+           id=self.get_id()
+           self.config=config.Config(id)
 
+       return(self.config)
+
+    def do_realize(self):
        launcher.init()
-       config.init(self.get_id())
+       config=self.get_config()
        config.load()
+
+       IconGrid.do_realize(self, config)
+
        self.setSize(config.getSize())
        self.reloadIcons()
 
@@ -94,6 +120,10 @@ class DrlaunchPlugin(IconGrid, HomePluginItem, FremantleRotation):
        self.set_colormap(screen.get_rgba_colormap())
        self.set_app_paintable(True)
 
+       self.connect('show-settings', self.slot_show_settings)
+       self.connect('long-press', self.signalLongpress)
+       self.connect('click', self.signalClick)
+
        HomePluginItem.do_realize(self)
 
     def on_orientation_changed(self, orientation):
@@ -111,7 +141,7 @@ class DrlaunchPlugin(IconGrid, HomePluginItem, FremantleRotation):
            # self.winConfig.show_all()
            return
 
-       s=WinConfig()
+       s=WinConfig(self.get_config())
        s.show_all()
        s.connect('destroy', self.slotConfigDestroy)
        self.winConfig=s
@@ -120,6 +150,9 @@ class DrlaunchPlugin(IconGrid, HomePluginItem, FremantleRotation):
        self.winConfig=None
 
        dt=sender.getData()
+
+       config=self.get_config()
+
        config.setSize(dt['size'])
        config.setApps(dt['apps'])
        config.setIndiv(dt['indiv'])
@@ -141,10 +174,14 @@ class DrlaunchPlugin(IconGrid, HomePluginItem, FremantleRotation):
        self.handle_click(sender, icon)
 
     def signalClick(self, sender, icon):
+       config=self.get_config()
+
        if not config.getLongpress():
            self.handle_click(sender, icon)
 
     def resize(self):
+       config=self.get_config()
+
        w=(self.size[0] * config.iconsize) + \
            (self.size[0] * config.iconspace)
        h=(self.size[1] * config.iconsize) + \