Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/toolkitfix/graphics/window.py
diff options
context:
space:
mode:
Diffstat (limited to 'toolkitfix/graphics/window.py')
-rw-r--r--toolkitfix/graphics/window.py132
1 files changed, 99 insertions, 33 deletions
diff --git a/toolkitfix/graphics/window.py b/toolkitfix/graphics/window.py
index 78996e0..1004a78 100644
--- a/toolkitfix/graphics/window.py
+++ b/toolkitfix/graphics/window.py
@@ -1,4 +1,5 @@
# Copyright (C) 2007, Red Hat, Inc.
+# Copyright (C) 2009, Aleksey Lim, Sayamindu Dasgupta
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -21,10 +22,14 @@ STABLE.
import gobject
import gtk
+import warnings
from sugar.graphics.icon import Icon
from sugar.tutorius.overlayer import Overlayer
+_UNFULLSCREEN_BUTTON_VISIBILITY_TIMEOUT = 2
+
+
class UnfullscreenButton(gtk.Window):
def __init__(self):
@@ -74,7 +79,9 @@ class UnfullscreenButton(gtk.Window):
def _screen_size_changed_cb(self, screen):
self._reposition()
+
class Window(gtk.Window):
+
def __init__(self, **args):
self._enable_fullscreen_mode = True
@@ -83,12 +90,12 @@ class Window(gtk.Window):
self.connect('realize', self.__window_realize_cb)
self.connect('window-state-event', self.__window_state_event_cb)
self.connect('key-press-event', self.__key_press_cb)
-
- self.toolbox = None
+
+ self._toolbar_box = None
self._alerts = []
- self.canvas = None
+ self._canvas = None
self.tray = None
-
+
self._vbox = gtk.VBox()
self._hbox = gtk.HBox()
self._vbox.pack_start(self._hbox)
@@ -97,7 +104,11 @@ class Window(gtk.Window):
self._event_box = gtk.EventBox()
self._hbox.pack_start(self._event_box)
self._event_box.show()
-
+ self._event_box.add_events(gtk.gdk.POINTER_MOTION_HINT_MASK
+ | gtk.gdk.POINTER_MOTION_MASK)
+ self._event_box.connect('motion-notify-event', self.__motion_notify_cb)
+
+ self.add(self._vbox)
self._vbox.show()
self._overlayer = Overlayer(self._vbox)
@@ -109,61 +120,72 @@ class Window(gtk.Window):
self._unfullscreen_button.set_transient_for(self)
self._unfullscreen_button.connect_button_press(
self.__unfullscreen_button_pressed)
+ self._unfullscreen_button_timeout_id = None
def set_canvas(self, canvas):
- if self.canvas:
- self._event_box.remove(self.canvas)
+ if self._canvas:
+ self._event_box.remove(self._canvas)
if canvas:
self._event_box.add(canvas)
-
- self.canvas = canvas
-
- def set_toolbox(self, toolbox):
- if self.toolbox:
- self._vbox.remove(self.toolbox)
-
- self._vbox.pack_start(toolbox, False)
- self._vbox.reorder_child(toolbox, 0)
-
- self.toolbox = toolbox
+
+ self._canvas = canvas
+
+ def get_canvas(self):
+ return self._canvas
+
+ canvas = property(get_canvas, set_canvas)
+
+ def get_toolbar_box(self):
+ return self._toolbar_box
+
+ def set_toolbar_box(self, toolbar_box):
+ if self._toolbar_box:
+ self._vbox.remove(self._toolbar_box)
+
+ self._vbox.pack_start(toolbar_box, False)
+ self._vbox.reorder_child(toolbar_box, 0)
+
+ self._toolbar_box = toolbar_box
+
+ toolbar_box = property(get_toolbar_box, set_toolbar_box)
def set_tray(self, tray, position):
if self.tray:
- box = self.tray.get_parent()
+ box = self.tray.get_parent()
box.remove(self.tray)
-
+
if position == gtk.POS_LEFT:
self._hbox.pack_start(tray, False)
elif position == gtk.POS_RIGHT:
self._hbox.pack_end(tray, False)
elif position == gtk.POS_BOTTOM:
self._vbox.pack_end(tray, False)
-
+
self.tray = tray
def add_alert(self, alert):
self._alerts.append(alert)
if len(self._alerts) == 1:
self._vbox.pack_start(alert, False)
- if self.toolbox is not None:
+ if self._toolbar_box is not None:
self._vbox.reorder_child(alert, 1)
- else:
+ else:
self._vbox.reorder_child(alert, 0)
-
+
def remove_alert(self, alert):
if alert in self._alerts:
self._alerts.remove(alert)
# if the alert is the visible one on top of the queue
- if alert.get_parent() is not None:
+ if alert.get_parent() is not None:
self._vbox.remove(alert)
if len(self._alerts) >= 1:
self._vbox.pack_start(self._alerts[0], False)
- if self.toolbox is not None:
+ if self._toolbar_box is not None:
self._vbox.reorder_child(self._alerts[0], 1)
else:
self._vbox.reorder_child(self._alert[0], 0)
-
+
def __window_realize_cb(self, window):
group = gtk.Window()
group.realize()
@@ -174,8 +196,8 @@ class Window(gtk.Window):
return False
if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN:
- if self.toolbox is not None:
- self.toolbox.hide()
+ if self._toolbar_box is not None:
+ self._toolbar_box.hide()
if self.tray is not None:
self.tray.hide()
@@ -183,9 +205,18 @@ class Window(gtk.Window):
if self.props.enable_fullscreen_mode:
self._unfullscreen_button.show()
+ if self._unfullscreen_button_timeout_id is not None:
+ gobject.source_remove(self._unfullscreen_button_timeout_id)
+ self._unfullscreen_button_timeout_id = None
+
+ self._unfullscreen_button_timeout_id = \
+ gobject.timeout_add_seconds( \
+ _UNFULLSCREEN_BUTTON_VISIBILITY_TIMEOUT, \
+ self.__unfullscreen_button_timeout_cb)
+
else:
- if self.toolbox is not None:
- self.toolbox.show()
+ if self._toolbar_box is not None:
+ self._toolbar_box.show()
if self.tray is not None:
self.tray.show()
@@ -193,6 +224,10 @@ class Window(gtk.Window):
if self.props.enable_fullscreen_mode:
self._unfullscreen_button.hide()
+ if self._unfullscreen_button_timeout_id:
+ gobject.source_remove(self._unfullscreen_button_timeout_id)
+ self._unfullscreen_button_timeout_id = None
+
def __key_press_cb(self, widget, event):
key = gtk.gdk.keyval_name(event.keyval)
if event.state & gtk.gdk.MOD1_MASK:
@@ -208,6 +243,27 @@ class Window(gtk.Window):
def __unfullscreen_button_pressed(self, widget, event):
self.unfullscreen()
+ def __motion_notify_cb(self, widget, event):
+ if self._is_fullscreen and self.props.enable_fullscreen_mode:
+ if not self._unfullscreen_button.props.visible:
+ self._unfullscreen_button.show()
+ else:
+ # Reset the timer
+ if self._unfullscreen_button_timeout_id is not None:
+ gobject.source_remove(self._unfullscreen_button_timeout_id)
+ self._unfullscreen_button_timeout_id = None
+
+ self._unfullscreen_button_timeout_id = \
+ gobject.timeout_add_seconds( \
+ _UNFULLSCREEN_BUTTON_VISIBILITY_TIMEOUT, \
+ self.__unfullscreen_button_timeout_cb)
+ return True
+
+ def __unfullscreen_button_timeout_cb(self):
+ self._unfullscreen_button.hide()
+ self._unfullscreen_button_timeout_id = None
+ return False
+
def set_enable_fullscreen_mode(self, enable_fullscreen_mode):
self._enable_fullscreen_mode = enable_fullscreen_mode
@@ -215,6 +271,16 @@ class Window(gtk.Window):
return self._enable_fullscreen_mode
enable_fullscreen_mode = gobject.property(type=object,
- setter=set_enable_fullscreen_mode,
- getter=get_enable_fullscreen_mode)
+ setter=set_enable_fullscreen_mode, getter=get_enable_fullscreen_mode)
+
+ # DEPRECATED
+
+ def set_toolbox(self, toolbar_box):
+ warnings.warn('use toolbar_box instead of toolbox', DeprecationWarning)
+ self.set_toolbar_box(toolbar_box)
+
+ def get_toolbox(self):
+ warnings.warn('use toolbar_box instead of toolbox', DeprecationWarning)
+ return self._toolbar_box
+ toolbox = property(get_toolbox, set_toolbox)