Ticket #2184: delayed_popup.patch

File delayed_popup.patch, 1.9 KB (added by manuq, 11 years ago)

Patch: prevent fast popup popdown

  • src/sugar3/graphics/palettewindow.py

    diff --git a/src/sugar3/graphics/palettewindow.py b/src/sugar3/graphics/palettewindow.py
    index c48ae55..d3d0e99 100644
    a b import math 
    2929from gi.repository import Gdk
    3030from gi.repository import Gtk
    3131from gi.repository import GObject
     32from gi.repository import GLib
    3233
    3334from gi.repository import SugarGestures
    3435from sugar3.graphics import palettegroup
    3536from sugar3.graphics import animator
    3637from sugar3.graphics import style
    3738
     39_RECONNECT_TIMEOUT = 300
     40
    3841
    3942def _calculate_gap(a, b):
    4043    """Helper function to find the gap position and size of widget a"""
    class PaletteWindow(GObject.GObject): 
    675678    def _invoker_toggle_state_cb(self, invoker):
    676679        if self.is_up() and self._palette_state == self.SECONDARY:
    677680            self.popdown(immediate=True)
     681            self._invoker.disconnect_then_connect_delayed()
    678682        else:
    679683            self.popup(immediate=True, state=self.SECONDARY)
    680684
    class WidgetInvoker(Invoker): 
    11021106        self._long_pressed_controller.detach(self._widget)
    11031107        self._long_pressed_controller.disconnect(self._long_pressed_hid)
    11041108
     1109    def disconnect_then_connect_delayed(self):
     1110        def reconnect():
     1111            self._release_hid = self._widget.connect('button-release-event',
     1112                self.__button_release_event_cb)
     1113            if GObject.signal_lookup('clicked', self._widget) != 0:
     1114                self._click_hid = self._widget.connect('clicked',
     1115                    self.__click_event_cb)
     1116
     1117        self._widget.disconnect(self._release_hid)
     1118        if self._click_hid:
     1119            self._widget.disconnect(self._click_hid)
     1120        GLib.timeout_add(_RECONNECT_TIMEOUT, reconnect)
     1121
    11051122    def get_rect(self):
    11061123        allocation = self._widget.get_allocation()
    11071124        window = self._widget.get_window()