Fix a bunch of issues with the chat window
This commit is contained in:
parent
b703d93534
commit
bf55ae8644
@ -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
|
||||||
|
@ -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()
|
|
||||||
|
@ -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,31 +329,29 @@ 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)
|
||||||
|
|
||||||
|
if activity:
|
||||||
host_chat = activity.get_chat()
|
host_chat = activity.get_chat()
|
||||||
self._chat_window.add(host_chat)
|
self._chat_window.add(host_chat)
|
||||||
host_chat.show()
|
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:
|
||||||
|
Loading…
Reference in New Issue
Block a user