Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2006-06-14 23:00:56 (GMT)
committer Marco Pesenti Gritti <mpg@redhat.com>2006-06-14 23:00:56 (GMT)
commit3497fd3ad27d18f6399e1179cdbb096d5ad90f58 (patch)
tree19d8725487392406e3e3735cd398b5f928073b1c /sugar
parent6cca4f34f35a696430d77d940a6c7a12c3ee6757 (diff)
More work on the slide in windows
Diffstat (limited to 'sugar')
-rw-r--r--sugar/shell/PresenceWindow.py3
-rw-r--r--sugar/shell/WindowManager.py60
-rwxr-xr-xsugar/shell/shell.py16
3 files changed, 62 insertions, 17 deletions
diff --git a/sugar/shell/PresenceWindow.py b/sugar/shell/PresenceWindow.py
index 9d21a7e..ce3636e 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 8b8720e..2f64547 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 da1031a..ee44042 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)