Fix a bunch of issues with the chat window

This commit is contained in:
Marco Pesenti Gritti 2006-06-18 01:47:53 -04:00
parent b703d93534
commit bf55ae8644
3 changed files with 30 additions and 66 deletions

View File

@ -12,7 +12,7 @@ class PresenceWindow(gtk.Window):
_MODEL_COL_VISIBLE = 3 _MODEL_COL_VISIBLE = 3
def __init__(self, activity_container): def __init__(self, activity_container):
gtk.Window.__init__(self, gtk.WINDOW_POPUP) gtk.Window.__init__(self)
self._activity_container = activity_container self._activity_container = activity_container
self._activity = None self._activity = None

View File

@ -15,48 +15,12 @@ class WindowManager:
ABSOLUTE = 0 ABSOLUTE = 0
SCREEN_RELATIVE = 1 SCREEN_RELATIVE = 1
VISIBLE = 0
SLIDED_IN = 1
HIDDEN = 2
def __init__(self, window): def __init__(self, window):
self._window = window self._window = window
self._visibility = WindowManager.HIDDEN
WindowManager.__managers_list.append(self) WindowManager.__managers_list.append(self)
window.connect("key-press-event", self.__key_press_event_cb) window.connect("key-press-event", self.__key_press_event_cb)
window.connect("focus-in-event", self.__focus_in_event_cb)
window.connect_after("focus-out-event", self.__focus_out_event_cb)
def has_focus(self):
return self._window.has_toplevel_focus()
def _update_visibility(self):
visible = False
if self._visibility is WindowManager.VISIBLE:
visible = True
elif self._visibility is WindowManager.HIDDEN:
visible = False
elif self._visibility is WindowManager.SLIDED_IN:
for manager in WindowManager.__managers_list:
if manager.has_focus():
visible = True
if self._window.get_property('visible') != visible:
self._window.set_property('visible', visible)
def __focus_change_idle(self):
for manager in WindowManager.__managers_list:
manager._update_visibility()
return False
def __focus_in_event_cb(self, window, event):
gobject.idle_add(self.__focus_change_idle)
def __focus_out_event_cb(self, window, event):
gobject.idle_add(self.__focus_change_idle)
def __key_press_event_cb(self, window, event): def __key_press_event_cb(self, window, event):
manager = None manager = None
@ -117,16 +81,16 @@ class WindowManager:
self._window.resize(width, height) self._window.resize(width, height)
def slide_window_in(self): def slide_window_in(self):
self._visibility = WindowManager.SLIDED_IN self._window.show()
self._update_visibility()
def slide_window_out(self): def slide_window_out(self):
self._visibility = WindowManager.HIDDEN self._window.hide()
self._update_visibility()
def show(self): def show(self):
self._visibility = WindowManager.VISIBLE self._window.show()
def update(self):
self._update_size_and_position()
def manage(self): def manage(self):
self._update_size_and_position() self._update_size_and_position()
self._update_visibility()

View File

@ -73,12 +73,12 @@ class ActivityHost(dbus.service.Object):
hbox.show() hbox.show()
self._create_chat()
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)
self._create_chat()
def _create_chat(self): def _create_chat(self):
self._group_chat = GroupChat(self) self._group_chat = GroupChat(self)
@ -297,6 +297,8 @@ class ActivityContainer(dbus.service.Object):
self._presence_window = PresenceWindow(self) self._presence_window = PresenceWindow(self)
self._presence_window.set_transient_for(self.window) self._presence_window.set_transient_for(self.window)
self._presence_window.set_decorated(False)
self._presence_window.set_skip_taskbar_hint(True)
wm = WindowManager(self._presence_window) wm = WindowManager(self._presence_window)
@ -305,17 +307,17 @@ class ActivityContainer(dbus.service.Object):
wm.set_position(WindowManager.LEFT) wm.set_position(WindowManager.LEFT)
wm.manage() wm.manage()
self._chat_window = gtk.Window(gtk.WINDOW_POPUP) self._chat_window = gtk.Window()
self._chat_window.set_transient_for(self.window) self._chat_window.set_transient_for(self.window)
self._chat_window.set_decorated(False) self._chat_window.set_decorated(False)
self._chat_window.set_skip_taskbar_hint(True) self._chat_window.set_skip_taskbar_hint(True)
wm = WindowManager(self._chat_window) self._chat_wm = WindowManager(self._chat_window)
wm.set_width(0.5, WindowManager.SCREEN_RELATIVE) self._chat_wm.set_width(0.5, WindowManager.SCREEN_RELATIVE)
wm.set_height(0.5, WindowManager.SCREEN_RELATIVE) self._chat_wm.set_height(0.5, WindowManager.SCREEN_RELATIVE)
wm.set_position(WindowManager.TOP) self._chat_wm.set_position(WindowManager.TOP)
wm.manage() self._chat_wm.manage()
def show(self): def show(self):
self.window.show() self.window.show()
@ -327,32 +329,30 @@ class ActivityContainer(dbus.service.Object):
pass pass
def set_current_activity(self, activity): def set_current_activity(self, activity):
print 'current activity'
self.current_activity = activity self.current_activity = activity
self._presence_window.set_activity(activity) self._presence_window.set_activity(activity)
host_chat = self._chat_window.get_child() host_chat = self._chat_window.get_child()
if host_chat: if host_chat:
host_chat.unparent() self._chat_window.remove(host_chat)
host_chat = activity.get_chat() if activity:
self._chat_window.add(host_chat) host_chat = activity.get_chat()
host_chat.show() self._chat_window.add(host_chat)
host_chat.show()
# For some reason the substitution screw up window position
self._chat_wm.update()
def notebook_tab_changed(self, notebook, page, page_number): def notebook_tab_changed(self, notebook, page, page_number):
#print "in notebook_tab_changed"
#print notebook.get_nth_page(page_number)
new_activity = notebook.get_nth_page(page_number).get_data("sugar-activity") new_activity = notebook.get_nth_page(page_number).get_data("sugar-activity")
#print " Current activity: ", self.current_activity
#print " New activity: ", new_activity
if self.current_activity != None: if self.current_activity != None:
if self.has_activity(self.current_activity): 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.peer_service.lost_focus(reply_handler = self.__focus_reply_cb, error_handler = self.__focus_error_cb)
if self.has_activity(new_activity): #if self.has_activity(new_activity):
self.set_current_activity(new_activity) self.set_current_activity(new_activity)
if self.current_activity != None: if self.current_activity != None:
if self.has_activity(self.current_activity): if self.has_activity(self.current_activity):