Ticket #1102: dslo1102.patch

File dslo1102.patch, 3.8 KB (added by sayamindu, 15 years ago)

Patch to implement the behaviour. The unfullscreen button disappears after a 2 second timeout.

  • src/sugar/graphics/window.py

    diff --git a/src/sugar/graphics/window.py b/src/sugar/graphics/window.py
    index e82b3b9..809d55f 100644
    a b import gtk 
    2424
    2525from sugar.graphics.icon import Icon
    2626
     27UNFULLSCREEN_BUTTON_VISIBILITY_TIMEOUT = 2
     28
    2729class UnfullscreenButton(gtk.Window):
    2830
    2931    def __init__(self):
    class Window(gtk.Window): 
    8284        self.connect('realize', self.__window_realize_cb)
    8385        self.connect('window-state-event', self.__window_state_event_cb)
    8486        self.connect('key-press-event', self.__key_press_cb)
    85        
     87
    8688        self.toolbox = None
    8789        self._alerts = []
    8890        self.canvas = None
    class Window(gtk.Window): 
    9698        self._event_box = gtk.EventBox()
    9799        self._hbox.pack_start(self._event_box)
    98100        self._event_box.show()
    99        
     101        events = self._event_box.get_events()
     102        self._event_box.set_events(events | gtk.gdk.POINTER_MOTION_MASK | \
     103            gtk.gdk.POINTER_MOTION_HINT_MASK)
     104        self._event_box.connect('motion-notify-event', self.__motion_notify_cb)
     105
    100106        self.add(self._vbox)
    101107        self._vbox.show()
    102108
    class Window(gtk.Window): 
    105111        self._unfullscreen_button.set_transient_for(self)
    106112        self._unfullscreen_button.connect_button_press(
    107113            self.__unfullscreen_button_pressed)
     114        self._unfullscreen_button_timeout_id = None
    108115
    109116    def set_canvas(self, canvas):
    110117        if self.canvas:
    class Window(gtk.Window): 
    179186            if self.props.enable_fullscreen_mode:
    180187                self._unfullscreen_button.show()
    181188
     189                if self._unfullscreen_button_timeout_id:
     190                    gobject.source_remove(self._unfullscreen_button_timeout_id)
     191                    self._unfullscreen_button_timeout_id = None
     192
     193                gobject.timeout_add_seconds(UNFULLSCREEN_BUTTON_VISIBILITY_TIMEOUT, \
     194                    self._unfullscreen_button_timeout_cb)
     195
    182196        else:
    183197            if self.toolbox is not None:
    184198                self.toolbox.show()
    class Window(gtk.Window): 
    189203            if self.props.enable_fullscreen_mode:
    190204                self._unfullscreen_button.hide()
    191205
     206                if self._unfullscreen_button_timeout_id:
     207                    gobject.source_remove(self._unfullscreen_button_timeout_id)
     208                    self._unfullscreen_button_timeout_id = None
     209
    192210    def __key_press_cb(self, widget, event):
    193211        key = gtk.gdk.keyval_name(event.keyval)
    194212        if event.state & gtk.gdk.MOD1_MASK:
    class Window(gtk.Window): 
    204222    def __unfullscreen_button_pressed(self, widget, event):
    205223        self.unfullscreen()
    206224
     225    def __motion_notify_cb(self, widget, event):
     226        if self._is_fullscreen and self.props.enable_fullscreen_mode:
     227            if not self._unfullscreen_button.props.visible:
     228                self._unfullscreen_button.show()
     229            else:
     230                # Reset the timer
     231                if self._unfullscreen_button_timeout_id:
     232                    gobject.source_remove(self._unfullscreen_button_timeout_id)
     233                    self._unfullscreen_button_timeout_id = None
     234
     235                gobject.timeout_add_seconds(UNFULLSCREEN_BUTTON_VISIBILITY_TIMEOUT, \
     236                    self._unfullscreen_button_timeout_cb)
     237        return True
     238
     239    def _unfullscreen_button_timeout_cb(self):
     240        self._unfullscreen_button.hide()
     241        return False
     242
    207243    def set_enable_fullscreen_mode(self, enable_fullscreen_mode):
    208244        self._enable_fullscreen_mode = enable_fullscreen_mode
    209245
    class Window(gtk.Window): 
    214250                                              setter=set_enable_fullscreen_mode,
    215251                                              getter=get_enable_fullscreen_mode)
    216252
     253