Make focus poking async and introduce activity_shutdown in the example-activity.
This commit is contained in:
parent
a77e678a55
commit
d13cf9a91d
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import string
|
import string
|
||||||
|
|
||||||
|
import gc
|
||||||
import dbus
|
import dbus
|
||||||
import dbus.service
|
import dbus.service
|
||||||
import dbus.glib
|
import dbus.glib
|
||||||
@ -86,6 +87,17 @@ class Activity(dbus.service.Object):
|
|||||||
def activity_get_id(self):
|
def activity_get_id(self):
|
||||||
return self.__activity_id
|
return self.__activity_id
|
||||||
|
|
||||||
|
|
||||||
|
def __reply_cb(self):
|
||||||
|
print "in __reply_cb"
|
||||||
|
self.activity_on_disconnected_from_shell()
|
||||||
|
|
||||||
|
def __error_cb(self, error):
|
||||||
|
print "in __error_cb"
|
||||||
|
|
||||||
|
def activity_shutdown(self):
|
||||||
|
self.__activity_object.shutdown(reply_handler = self.__reply_cb, error_handler = self.__error_cb)
|
||||||
|
|
||||||
# pure virtual methods
|
# pure virtual methods
|
||||||
|
|
||||||
def activity_on_connected_to_shell(self):
|
def activity_on_connected_to_shell(self):
|
||||||
@ -134,11 +146,16 @@ class ExampleActivity(Activity):
|
|||||||
def activity_on_disconnected_from_shell(self):
|
def activity_on_disconnected_from_shell(self):
|
||||||
print "act %d: in activity_on_disconnected_to_shell"%self.activity_get_id()
|
print "act %d: in activity_on_disconnected_to_shell"%self.activity_get_id()
|
||||||
print "act %d: Shell disappeared..."%self.activity_get_id()
|
print "act %d: Shell disappeared..."%self.activity_get_id()
|
||||||
deferred_exit()
|
plug = self.activity_get_gtk_plug()
|
||||||
|
plug.destroy()
|
||||||
|
|
||||||
|
del self
|
||||||
|
|
||||||
|
gc.collect()
|
||||||
|
|
||||||
def activity_on_close_from_user(self):
|
def activity_on_close_from_user(self):
|
||||||
print "act %d: in activity_on_close_from_user"%self.activity_get_id()
|
print "act %d: in activity_on_close_from_user"%self.activity_get_id()
|
||||||
deferred_exit()
|
self.activity_shutdown()
|
||||||
|
|
||||||
def activity_on_lost_focus(self):
|
def activity_on_lost_focus(self):
|
||||||
print "act %d: in activity_on_lost_focus"%self.activity_get_id()
|
print "act %d: in activity_on_lost_focus"%self.activity_get_id()
|
||||||
@ -146,16 +163,19 @@ class ExampleActivity(Activity):
|
|||||||
def activity_on_got_focus(self):
|
def activity_on_got_focus(self):
|
||||||
print "act %d: in activity_on_got_focus"%self.activity_get_id()
|
print "act %d: in activity_on_got_focus"%self.activity_get_id()
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
print "in __del__ for ExampleActivity"
|
||||||
|
|
||||||
|
|
||||||
if len(sys.argv) != 2:
|
if len(sys.argv) != 2:
|
||||||
print "usage: example-activity.py <name_of_activity>"
|
print "usage: example-activity.py <name_of_activity>"
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
gc.set_debug(gc.DEBUG_LEAK)
|
||||||
|
|
||||||
example_activity = ExampleActivity(sys.argv[1])
|
example_activity = ExampleActivity(sys.argv[1])
|
||||||
example_activity.activity_connect_to_shell()
|
example_activity.activity_connect_to_shell()
|
||||||
|
example_activity = None
|
||||||
example_activity2 = ExampleActivity(sys.argv[1] + " (2nd)")
|
|
||||||
example_activity2.activity_connect_to_shell()
|
|
||||||
|
|
||||||
gtk.main()
|
gtk.main()
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ class ActivityHost(dbus.service.Object):
|
|||||||
|
|
||||||
notebook = self.activity_container.notebook
|
notebook = self.activity_container.notebook
|
||||||
index = notebook.append_page(self.socket, hbox)
|
index = notebook.append_page(self.socket, hbox)
|
||||||
#notebook.set_current_page(index)
|
notebook.set_current_page(index)
|
||||||
|
|
||||||
def tab_close_button_clicked(self, button):
|
def tab_close_button_clicked(self, button):
|
||||||
self.peer_service.close_from_user()
|
self.peer_service.close_from_user()
|
||||||
@ -92,6 +92,24 @@ class ActivityHost(dbus.service.Object):
|
|||||||
def set_tab_text(self, text):
|
def set_tab_text(self, text):
|
||||||
self.tab_label.set_text(text)
|
self.tab_label.set_text(text)
|
||||||
|
|
||||||
|
@dbus.service.method("com.redhat.Sugar.Shell.ActivityHost", \
|
||||||
|
in_signature="", \
|
||||||
|
out_signature="")
|
||||||
|
def shutdown(self):
|
||||||
|
print "shutdown"
|
||||||
|
for owner, activity in self.activity_container.activities[:]:
|
||||||
|
if activity == self:
|
||||||
|
self.activity_container.activities.remove((owner, activity))
|
||||||
|
|
||||||
|
for i in range(self.activity_container.notebook.get_n_pages()):
|
||||||
|
child = self.activity_container.notebook.get_nth_page(i)
|
||||||
|
if child == self.socket:
|
||||||
|
print "found child"
|
||||||
|
self.activity_container.notebook.remove_page(i)
|
||||||
|
break
|
||||||
|
|
||||||
|
del self
|
||||||
|
|
||||||
def get_host_activity_id(self):
|
def get_host_activity_id(self):
|
||||||
return self.activity_id
|
return self.activity_id
|
||||||
|
|
||||||
@ -114,6 +132,7 @@ class ActivityContainer(dbus.service.Object):
|
|||||||
self.window = gtk.Window()
|
self.window = gtk.Window()
|
||||||
self.window.set_title("OLPC Sugar")
|
self.window.set_title("OLPC Sugar")
|
||||||
self.window.resize(640, 480)
|
self.window.resize(640, 480)
|
||||||
|
self.window.set_geometry_hints(min_width = 640, max_width = 640, min_height = 480, max_height = 480)
|
||||||
self.notebook = gtk.Notebook()
|
self.notebook = gtk.Notebook()
|
||||||
tab_label = gtk.Label("My Laptop")
|
tab_label = gtk.Label("My Laptop")
|
||||||
empty_label = gtk.Label("This activity could launch other activities / be a help page")
|
empty_label = gtk.Label("This activity could launch other activities / be a help page")
|
||||||
@ -129,6 +148,13 @@ class ActivityContainer(dbus.service.Object):
|
|||||||
self.current_activity = None
|
self.current_activity = None
|
||||||
|
|
||||||
|
|
||||||
|
def __focus_reply_cb(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __focus_error_cb(self, error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def notebook_tab_changed(self, notebook, page, page_number):
|
def notebook_tab_changed(self, notebook, page, page_number):
|
||||||
print "in notebook_tab_changed"
|
print "in notebook_tab_changed"
|
||||||
new_activity = notebook.get_nth_page(page_number).get_data("sugar-activity")
|
new_activity = notebook.get_nth_page(page_number).get_data("sugar-activity")
|
||||||
@ -136,12 +162,21 @@ class ActivityContainer(dbus.service.Object):
|
|||||||
print " New activity: ", new_activity
|
print " New activity: ", new_activity
|
||||||
|
|
||||||
if self.current_activity != None:
|
if self.current_activity != None:
|
||||||
self.current_activity.peer_service.lost_focus()
|
if self.has_activity(self.current_activity):
|
||||||
|
self.current_activity.peer_service.lost_focus(reply_handler = self.__focus_reply_cb, error_handler = self.__focus_error_cb)
|
||||||
|
|
||||||
self.current_activity = new_activity
|
self.current_activity = new_activity
|
||||||
|
|
||||||
if self.current_activity != None:
|
if self.current_activity != None:
|
||||||
self.current_activity.peer_service.got_focus()
|
if self.has_activity(self.current_activity):
|
||||||
|
self.current_activity.peer_service.got_focus(reply_handler = self.__focus_reply_cb, error_handler = self.__focus_error_cb)
|
||||||
|
|
||||||
|
|
||||||
|
def has_activity(self, activity_to_check_for):
|
||||||
|
for owner, activity in self.activities[:]:
|
||||||
|
if activity_to_check_for == activity:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def name_owner_changed(self, service_name, old_service_name, new_service_name):
|
def name_owner_changed(self, service_name, old_service_name, new_service_name):
|
||||||
|
Loading…
Reference in New Issue
Block a user