From 3497fd3ad27d18f6399e1179cdbb096d5ad90f58 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Wed, 14 Jun 2006 19:00:56 -0400 Subject: [PATCH] More work on the slide in windows --- sugar/shell/PresenceWindow.py | 3 ++ sugar/shell/WindowManager.py | 60 +++++++++++++++++++++++++++++------ sugar/shell/shell.py | 16 ++++++---- 3 files changed, 62 insertions(+), 17 deletions(-) diff --git a/sugar/shell/PresenceWindow.py b/sugar/shell/PresenceWindow.py index 9d21a7e9..ce3636e2 100644 --- a/sugar/shell/PresenceWindow.py +++ b/sugar/shell/PresenceWindow.py @@ -14,6 +14,9 @@ class PresenceWindow(gtk.Window): def __init__(self, activity_container): gtk.Window.__init__(self) + self.set_decorated(False) + self.set_skip_taskbar_hint(True) + self._activity_container = activity_container self._pservice = PresenceService.get_instance() diff --git a/sugar/shell/WindowManager.py b/sugar/shell/WindowManager.py index 8b8720ee..2f645475 100644 --- a/sugar/shell/WindowManager.py +++ b/sugar/shell/WindowManager.py @@ -1,6 +1,7 @@ import pygtk pygtk.require('2.0') import gtk +import gobject class WindowManager: __managers_list = [] @@ -12,14 +13,51 @@ class WindowManager: ABSOLUTE = 0 SCREEN_RELATIVE = 1 + + VISIBLE = 0 + SLIDED_IN = 1 + HIDDEN = 2 def __init__(self, window): self._window = window + self._visibility = WindowManager.HIDDEN WindowManager.__managers_list.append(self) 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): + show_slided_in = False + + for manager in WindowManager.__managers_list: + if manager.has_focus(): + show_slided_in = True + + if manager._visibility is WindowManager.VISIBLE: + manager._window.show() + elif manager._visibility is WindowManager.HIDDEN: + manager._window.hide() + elif manager._visibility is WindowManager.SLIDED_IN: + if show_slided_in: + manager._window.show() + else: + manager._window.hide() + + def __focus_change_idle(self): + self._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): manager = None @@ -44,7 +82,7 @@ class WindowManager: def set_position(self, position): self._position = position - + def _update_size_and_position(self): screen_width = self._window.get_screen().get_width() screen_height = self._window.get_screen().get_height() @@ -68,16 +106,18 @@ class WindowManager: self._window.move(x, y) self._window.resize(width, height) - + def slide_window_in(self): - self._window.show() + self._visibility = WindowManager.SLIDED_IN + self._update_visibility() def slide_window_out(self): - self._window.hide() - - def show_window(self): + self._visibility = WindowManager.HIDDEN + self._update_visibility() + + def show(self): + self._visibility = WindowManager.VISIBLE + + def manage(self): self._update_size_and_position() - self._window.show() - - def hide_window(self): - self._window.hide() + self._update_visibility() diff --git a/sugar/shell/shell.py b/sugar/shell/shell.py index da1031a1..ee440426 100755 --- a/sugar/shell/shell.py +++ b/sugar/shell/shell.py @@ -375,17 +375,19 @@ def main(): presence_window = PresenceWindow(activity_container) - wm = WindowManager(presence_window) - wm.set_width(0.15, WindowManager.SCREEN_RELATIVE) - wm.set_height(1.0, WindowManager.SCREEN_RELATIVE) - wm.set_position(WindowManager.LEFT) - wm.show_window() - wm = WindowManager(activity_container.window) wm.set_width(640, WindowManager.ABSOLUTE) wm.set_height(480, WindowManager.ABSOLUTE) wm.set_position(WindowManager.CENTER) - wm.show_window() + wm.show() + wm.manage() + + wm = WindowManager(presence_window) + + wm.set_width(0.15, WindowManager.SCREEN_RELATIVE) + wm.set_height(1.0, WindowManager.SCREEN_RELATIVE) + wm.set_position(WindowManager.LEFT) + wm.manage() console.set_parent_window(activity_container.window)