My first window manager!!! :P

This commit is contained in:
Marco Pesenti Gritti 2006-06-14 16:30:53 -04:00
parent 26b117cff0
commit 6cca4f34f3
2 changed files with 96 additions and 3 deletions

View File

@ -0,0 +1,83 @@
import pygtk
pygtk.require('2.0')
import gtk
class WindowManager:
__managers_list = []
CENTER = 0
LEFT = 1
RIGHT = 2
BOTTOM = 3
ABSOLUTE = 0
SCREEN_RELATIVE = 1
def __init__(self, window):
self._window = window
WindowManager.__managers_list.append(self)
window.connect("key-press-event", self.__key_press_event_cb)
def __key_press_event_cb(self, window, event):
manager = None
if event.keyval == gtk.keysyms.Left and \
event.state & gtk.gdk.CONTROL_MASK:
for wm in WindowManager.__managers_list:
if wm._position == WindowManager.LEFT:
manager = wm
if manager and manager._window.get_property('visible'):
manager.slide_window_out()
elif manager:
manager.slide_window_in()
def set_width(self, width, width_type):
self._width = width
self._width_type = width_type
def set_height(self, height, height_type):
self._height = height
self._height_type = height_type
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()
if self._width_type is WindowManager.ABSOLUTE:
width = self._width
elif self._width_type is WindowManager.SCREEN_RELATIVE:
width = screen_width * self._width
if self._height_type is WindowManager.ABSOLUTE:
height = self._height
elif self._height_type is WindowManager.SCREEN_RELATIVE:
height = screen_height * self._height
if self._position is WindowManager.CENTER:
x = (screen_width - width) / 2
y = (screen_height - height) / 2
elif self._position is WindowManager.LEFT:
x = 0
y = (screen_height - height) / 2
self._window.move(x, y)
self._window.resize(width, height)
def slide_window_in(self):
self._window.show()
def slide_window_out(self):
self._window.hide()
def show_window(self):
self._update_size_and_position()
self._window.show()
def hide_window(self):
self._window.hide()

View File

@ -11,6 +11,7 @@ import sugar.util
from sugar.shell.PresenceWindow import PresenceWindow from sugar.shell.PresenceWindow import PresenceWindow
from sugar.shell.Owner import ShellOwner from sugar.shell.Owner import ShellOwner
from sugar.shell.StartPage import StartPage from sugar.shell.StartPage import StartPage
from sugar.shell.WindowManager import WindowManager
class ActivityHost(dbus.service.Object): class ActivityHost(dbus.service.Object):
@ -223,8 +224,6 @@ 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.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("Everyone") tab_label = gtk.Label("Everyone")
@ -375,7 +374,18 @@ def main():
activity_container.show() activity_container.show()
presence_window = PresenceWindow(activity_container) presence_window = PresenceWindow(activity_container)
presence_window.show()
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()
console.set_parent_window(activity_container.window) console.set_parent_window(activity_container.window)