Ticket #1129: 0001-Start-new-activity-instance-when-Alt-key-is-hold-pre.patch

File 0001-Start-new-activity-instance-when-Alt-key-is-hold-pre.patch, 8.2 KB (added by tomeu, 15 years ago)
  • bin/sugar-session

    From 78dbdecb87090e544c376577405e5bebb1a14486 Mon Sep 17 00:00:00 2001
    From: Tomeu Vizoso <tomeu@sugarlabs.org>
    Date: Mon, 24 Aug 2009 11:18:16 +0200
    Subject: [PATCH] Start new activity instance when Alt key is hold pressed #1129
    
    ---
     bin/sugar-session                   |    9 +++++----
     src/jarabe/desktop/favoritesview.py |   17 +++++++++++++++--
     src/jarabe/desktop/homebox.py       |    2 ++
     src/jarabe/desktop/homewindow.py    |    9 +++++++++
     src/jarabe/view/keyhandler.py       |   28 +++++++++++++++++++++++++++-
     5 files changed, 58 insertions(+), 7 deletions(-)
    
    diff --git a/bin/sugar-session b/bin/sugar-session
    index 1ce40a3..2d9bb98 100644
    a b gettext.bindtextdomain('sugar', config.locale_path) 
    4545gettext.bindtextdomain('sugar-toolkit', config.locale_path)
    4646gettext.textdomain('sugar')
    4747
    48 from jarabe.desktop.homewindow import HomeWindow
     48from jarabe.desktop import homewindow
    4949from jarabe.model import sound
    5050from jarabe.view import launcher
    5151from jarabe import intro
    def setup_journal_cb(): 
    117117    from jarabe.journal import journalactivity
    118118    journalactivity.start()
    119119
    120 def show_software_updates_cb(home_window):
     120def show_software_updates_cb():
    121121    logging.debug('STARTUP: show_software_updates_cb')
    122122    if os.path.isfile(os.path.expanduser('~/.sugar-update')):
     123        home_window = homewindow.get_instance()
    123124        home_window.get_home_box().show_software_updates_alert()
    124125
    125126def setup_notification_service_cb():
    def main(): 
    157158
    158159    launcher.setup()
    159160
    160     home_window = HomeWindow()
     161    home_window = homewindow.get_instance()
    161162    home_window.show()
    162163
    163164    gobject.idle_add(unfreeze_dcon_cb)
    def main(): 
    166167    gobject.idle_add(setup_journal_cb)
    167168    gobject.idle_add(setup_notification_service_cb)
    168169    gobject.idle_add(setup_file_transfer_cb)
    169     gobject.idle_add(show_software_updates_cb, home_window)
     170    gobject.idle_add(show_software_updates_cb)
    170171
    171172    try:
    172173        gtk.main()
  • src/jarabe/desktop/favoritesview.py

    diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py
    index 6ca8732..67e1d4a 100644
    a b class FavoritesView(hippo.Canvas): 
    9292        self._layout = None
    9393        self._alert = None
    9494        self._datastore_listener = DatastoreListener()
     95        self._resume_mode = True
    9596
    9697        # More DND stuff
    9798        self.add_events(gtk.gdk.BUTTON_PRESS_MASK |
    class FavoritesView(hippo.Canvas): 
    130131            return
    131132        icon = ActivityIcon(activity_info, self._datastore_listener)
    132133        icon.props.size = style.STANDARD_ICON_SIZE
     134        icon.set_resume_mode(self._resume_mode)
    133135        self._box.insert_sorted(icon, 0, self._layout.compare_activities)
    134136        self._layout.append(icon)
    135137
    class FavoritesView(hippo.Canvas): 
    335337    def __register_alert_response_cb(self, alert, response_id):
    336338        self.remove_alert()
    337339
     340    def set_resume_mode(self, resume_mode):
     341        self._resume_mode = resume_mode
     342        for icon in self._box.get_children():
     343            if hasattr(icon, 'set_resume_mode'):
     344                icon.set_resume_mode(self._resume_mode)
     345
    338346DS_DBUS_SERVICE = 'org.laptop.sugar.DataStore'
    339347DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore'
    340348DS_DBUS_PATH = '/org/laptop/sugar/DataStore'
    class ActivityIcon(CanvasIcon): 
    400408        self._activity_info = activity_info
    401409        self._journal_entries = []
    402410        self._hovering = False
     411        self._resume_mode = True
    403412
    404413        self.connect('hovering-changed', self.__hovering_changed_event_cb)
    405414        self.connect('button-release-event', self.__button_release_event_cb)
    class ActivityIcon(CanvasIcon): 
    446455
    447456    def _update(self):
    448457        self.palette = None
    449         if not self._journal_entries:
     458        if not self._resume_mode or not self._journal_entries:
    450459            self.props.stroke_color = style.COLOR_BUTTON_GREY.get_svg()
    451460            self.props.fill_color = style.COLOR_TRANSPARENT.get_svg()
    452461        else:
    class ActivityIcon(CanvasIcon): 
    506515
    507516    def _activate(self):
    508517        self.palette.popdown(immediate=True)
    509         if self._journal_entries:
     518        if self._resume_mode and self._journal_entries:
    510519            entry = self._journal_entries[0]
    511520
    512521            shell_model = shell.get_model()
    class ActivityIcon(CanvasIcon): 
    548557        return registry.get_bundle_position(self.bundle_id, self.version)
    549558    fixed_position = property(_get_fixed_position, None)
    550559
     560    def set_resume_mode(self, resume_mode):
     561        self._resume_mode = resume_mode
     562        self._update()
     563
    551564class FavoritePalette(ActivityPalette):
    552565    __gtype_name__ = 'SugarFavoritePalette'
    553566
  • src/jarabe/desktop/homebox.py

    diff --git a/src/jarabe/desktop/homebox.py b/src/jarabe/desktop/homebox.py
    index 88da9d2..707c26a 100644
    a b class HomeBox(gtk.VBox): 
    141141    def focus_search_entry(self):
    142142        self._toolbar.search_entry.grab_focus()
    143143
     144    def set_resume_mode(self, resume_mode):
     145        self._favorites_view.set_resume_mode(resume_mode)
    144146
    145147class HomeToolbar(gtk.Toolbar):
    146148    __gtype_name__ = 'SugarHomeToolbar'
  • src/jarabe/desktop/homewindow.py

    diff --git a/src/jarabe/desktop/homewindow.py b/src/jarabe/desktop/homewindow.py
    index bbb0db1..6212970 100644
    a b class HomeWindow(gtk.Window): 
    141141
    142142    def get_home_box(self):
    143143        return self._home_box
     144
     145_instance = None
     146
     147def get_instance():
     148    global _instance
     149    if not _instance:
     150        _instance = HomeWindow()
     151    return _instance
     152
  • src/jarabe/view/keyhandler.py

    diff --git a/src/jarabe/view/keyhandler.py b/src/jarabe/view/keyhandler.py
    index 0505c52..c985cb5 100644
    a b from jarabe.view.tabbinghandler import TabbingHandler 
    3535from jarabe.model.shell import ShellModel
    3636from jarabe import config
    3737from jarabe.journal import journalactivity
     38from jarabe.desktop import homewindow
    3839
    3940_VOLUME_STEP = sound.VOLUME_STEP
    4041_VOLUME_MAX = 100
    _actions_table = { 
    6364    'XF86Search'           : 'open_search',
    6465    '<alt><shift>o'        : 'open_search',
    6566    '<alt><shift>s'        : 'say_text',
     67    'Alt_L'                : 'disable_resume_mode',
     68    'Alt_R'                : 'disable_resume_mode',
    6669}
    6770
    6871SPEECH_DBUS_SERVICE = 'org.laptop.Speech'
    class KeyHandler(object): 
    198201    def handle_open_search(self, event_time):
    199202        journalactivity.get_journal().focus_search()
    200203
     204    def handle_disable_resume_mode(self, event_time):
     205        # TODO: KeyHandler should be a singleton and interested parties
     206        # would listen to it. That way it wouldn't need to reference half
     207        # of the shell classes.
     208        home_box = homewindow.get_instance().get_home_box()
     209        home_box.set_resume_mode(False)
     210
    201211    def _key_pressed_cb(self, grabber, keycode, state, event_time):
    202212        key = grabber.get_key(keycode, state)
    203213        logging.debug('_key_pressed_cb: %i %i %s' % (keycode, state, key))
    204         if key:
     214        if key is not None:
    205215            self._key_pressed = key
    206216            self._keycode_pressed = keycode
    207217            self._keystate_pressed = state
    class KeyHandler(object): 
    232242
    233243        return False
    234244
     245    def _is_resume_mode_keycode(self, keycode):
     246        """See if the physical key pressed matches one of the keys that modify
     247        the resume mode of the favorites view.
     248        """
     249        keymap = gtk.gdk.keymap_get_default()
     250        entries = keymap.get_entries_for_keycode(keycode)
     251        for entry in entries:
     252            if gtk.gdk.keyval_name(entry[0]) in ['Alt_L', 'Alt_R']:
     253                return True
     254        return False
     255
    235256    def _key_released_cb(self, grabber, keycode, state, event_time):
     257        logging.debug('_key_released_cb: %i %i' % (keycode, state))
     258        if self._is_resume_mode_keycode(keycode):
     259            home_box = homewindow.get_instance().get_home_box()
     260            home_box.set_resume_mode(True)
     261
    236262        if self._tabbing_handler.is_tabbing():
    237263            # We stop tabbing and switch to the new window as soon as the
    238264            # modifier key is raised again.