[Dextrose] [PATCH sugar v3] uy#698: Rectifying "Activity-icons not displaying, if notification-messages are shown"

Esteban Bordón ebordon at plan.ceibal.edu.uy
Wed Feb 1 05:35:36 EST 2012


Excellent! Now is working perfectly.

Thanks Ajay!

cheers,
Esteban.


2012/2/1 Ajay Garg <ajay at activitycentral.com>

> Hi Esteban.
>
> It was, in fact, the issue of a misplaced call to
> "gobject.idle_add(show_notifications_cb)"; it needed to be setup after the
> call "gobject.idle_add(setup_frame_cb)" has been invocated.
>
> Please find attached the new "sugar-session". For brevity, I am also
> attaching the original "sugar-session", and the diff.
>
> Regards,
> Ajay
>
>
> On Tue, Jan 31, 2012 at 11:17 PM, Esteban Bordón <
> ebordon at plan.ceibal.edu.uy> wrote:
>
>> The class Notifier contains the invocation of jarabe.frame .If you want
>> to test you have to change these lines for the lines sent before.
>>
>> cheers,
>> Esteban.
>>
>> 2012/1/31 Ajay Garg <ajay at activitycentral.com>
>>
>>> Hi Esteban.
>>>
>>> Please send the file "bin/sugar-session" (that contains the
>>> "gobject.idle_add(show_notification_cb)" call.
>>>
>>> It seems that the call has been placed too early in the bootstrap
>>> process.
>>>
>>> Regards,
>>> Ajay
>>>
>>>
>>> On Tue, Jan 31, 2012 at 10:40 PM, Esteban Bordón <
>>> ebordon at plan.ceibal.edu.uy> wrote:
>>>
>>>> I've applied this patch on a dx3 image and activities icons are still
>>>> missed.
>>>>
>>>> To test I've created a callback for display a notification:
>>>>
>>>> def show_notification_cb():
>>>>     from jarabe.frame import get_view
>>>>     frame = get_view()
>>>>     frame.add_message(body="body", summary="summary")
>>>>
>>>> and I've added in bootstrap:
>>>>
>>>> gobject.idle_add(show_notification_cb)
>>>>
>>>> I attach shell.log because some messages refers to
>>>> frame/activitiestray.py that was patched
>>>>
>>>>  cheers,
>>>> Esteban
>>>>
>>>>
>>>> 2012/1/31 Anish Mangal <anish at sugarlabs.org>
>>>>
>>>>> Ping. Could somebody review this please :-)
>>>>>
>>>>> On Tue, Jan 24, 2012 at 10:35, Ajay Garg <ajay at activitycentral.com>
>>>>> wrote:
>>>>> > ---
>>>>> >
>>>>> > Issue:
>>>>> > ------
>>>>> > Originally discussed at :
>>>>> > http://lists.sugarlabs.org/archive/dextrose/2011-August/001340.html
>>>>> >
>>>>> > and catched by Esteban Bordón, the issue is that whenever (and not
>>>>> just
>>>>> > at startup) any notification-messages are displayed, any
>>>>> Activity-icon
>>>>> > (and not just the Journal-Activity icon) is not displayed in the
>>>>> > top-panel-frame.
>>>>> >
>>>>> > Technical history/details:
>>>>> > ---------------------------
>>>>> >
>>>>> > The mesh-, group-, home-, and activity-zoom buttons are a group of
>>>>> > radiobuttons; only one may be visibly-active at a time (this is
>>>>> > highlighted by the white-background of the corresponding selected
>>>>> > zoom-button).
>>>>> > Please see:
>>>>> >               "src/jarabe/frame/zoomtoolbar.py"
>>>>> > for code-details.
>>>>> >
>>>>> > Similarly, all the opened activity-instances are shown by a yet
>>>>> another
>>>>> > group of radiobuttons; the selected activity being highlighed by the
>>>>> > corresponding selected activity-icon-button.
>>>>> >
>>>>> > Now, what was happening, was that the notification-message-icon was
>>>>> > being added into the Activities-Tray (the second group of
>>>>> radiobuttons
>>>>> > as discussed above); but any further activity-icons were not being
>>>>> added
>>>>> > into the tray, because the notification-message-icon did not respect
>>>>> the
>>>>> > semantics of the activity-icons. Hence, the
>>>>> notification-message-icon, and
>>>>> > any other activity-icon (including Journal-activity icon) were not
>>>>> being
>>>>> > made a part of the same group.
>>>>> >
>>>>> > Fix:
>>>>> > ----
>>>>> >
>>>>> > The top-panel-frame-setup (wherein the startup-notification-messages
>>>>> may
>>>>> > be added) gets processed, ONLY after the journal has been set-up.
>>>>> > Thus, "gio.File.monitor_file" has been used as the signalling
>>>>> mechanism.
>>>>> >
>>>>> > As rightly pointed out by Bernie and Sascha, gio-file-monitor might
>>>>> not
>>>>> > be the best signalling/synchronizing mechaism here. I tried to use
>>>>> threading.Event()
>>>>> > objects, but it needed to spawn another thread (note that all
>>>>> operations
>>>>> > happen here in the context of the main-thread, even for
>>>>> "gobject.idle_add()"
>>>>> > operations.
>>>>> >
>>>>> >
>>>>> > CHANGELOG:
>>>>> > ---------
>>>>> >
>>>>> > Changes of version-3 over version-2 :
>>>>> > -------------------------------------
>>>>> > a. Review changes as per Bernie and Sascha.
>>>>> >
>>>>> >
>>>>> > Changes of version-2 over version-1 :
>>>>> > -------------------------------------
>>>>> > a. Reverted to the previous-behaviour, wherein the
>>>>> notification-message-icon
>>>>> >   is shown at the end of all activity-icons (Thanks Anish and
>>>>> Estaban).
>>>>> >   Of course, this included the fix of the issue :)
>>>>> >
>>>>> >
>>>>> >  bin/sugar-session                  |   22 +++++++++++++++++++++-
>>>>> >  src/jarabe/frame/activitiestray.py |   18 ++++++++++++++++++
>>>>> >  2 files changed, 39 insertions(+), 1 deletions(-)
>>>>> >
>>>>> > diff --git a/bin/sugar-session b/bin/sugar-session
>>>>> > index 40c9db7..1b28d4f 100755
>>>>> > --- a/bin/sugar-session
>>>>> > +++ b/bin/sugar-session
>>>>> > @@ -21,6 +21,7 @@ import sys
>>>>> >  import time
>>>>> >  import subprocess
>>>>> >  import shutil
>>>>> > +import gio
>>>>> >
>>>>> >  if os.environ.get('SUGAR_LOGGER_LEVEL', '') == 'debug':
>>>>> >     print '%r STARTUP: Starting the shell' % time.time()
>>>>> > @@ -35,6 +36,9 @@ import gobject
>>>>> >  import dbus.glib
>>>>> >  import wnck
>>>>> >
>>>>> > +MONITORS = []
>>>>> > +MONITOR_ACTION_TAKEN = False
>>>>> > +
>>>>> >  try:
>>>>> >     import xklavier
>>>>> >  except ImportError:
>>>>> > @@ -181,15 +185,31 @@ def setup_window_manager():
>>>>> >             shell=True):
>>>>> >         logging.warning('Can not disable metacity keybindings')
>>>>> >
>>>>> > +def file_monitor_changed_cb(monitor, one_file, other_file,
>>>>> event_type):
>>>>> > +    global MONITOR_ACTION_TAKEN
>>>>> > +    if (not MONITOR_ACTION_TAKEN) and \
>>>>> > +       (one_file.get_path() ==
>>>>> os.path.expanduser('~/.sugar/journal_created')):
>>>>> > +        if event_type == gio.FILE_MONITOR_EVENT_CREATED:
>>>>> > +            gobject.idle_add(setup_frame_cb)
>>>>> > +            MONITOR_ACTION_TAKEN = True
>>>>> > +
>>>>> > +def arrange_for_setup_frame_cb():
>>>>> > +    path = gio.File(os.path.expanduser('~/.sugar/journal_created'))
>>>>> > +    monitor = path.monitor_file()
>>>>> > +    monitor.connect('changed', file_monitor_changed_cb)
>>>>> > +    MONITORS.append(monitor)
>>>>> > +
>>>>> >  def bootstrap():
>>>>> >     setup_window_manager()
>>>>> >
>>>>> >     from jarabe.view import launcher
>>>>> >     launcher.setup()
>>>>> >
>>>>> > -    gobject.idle_add(setup_frame_cb)
>>>>> >     gobject.idle_add(setup_keyhandler_cb)
>>>>> > +
>>>>> > +    arrange_for_setup_frame_cb()
>>>>> >     gobject.idle_add(setup_journal_cb)
>>>>> > +
>>>>> >     gobject.idle_add(setup_notification_service_cb)
>>>>> >     gobject.idle_add(setup_file_transfer_cb)
>>>>> >     gobject.idle_add(show_software_updates_cb)
>>>>> > diff --git a/src/jarabe/frame/activitiestray.py
>>>>> b/src/jarabe/frame/activitiestray.py
>>>>> > index 2b8b7c6..1c8e285 100644
>>>>> > --- a/src/jarabe/frame/activitiestray.py
>>>>> > +++ b/src/jarabe/frame/activitiestray.py
>>>>> > @@ -246,6 +246,24 @@ class ActivitiesTray(HTray):
>>>>> >         button.connect('clicked', self.__activity_clicked_cb,
>>>>> home_activity)
>>>>> >         button.show()
>>>>> >
>>>>> > +        # JournalActivity is always the first activity to be added.
>>>>> > +        # Broadcast the signal-of-its-creation.
>>>>> > +        if group is None:
>>>>> > +            self._signal_addition_of_journal_activity()
>>>>> > +
>>>>> > +    def _signal_addition_of_journal_activity(self):
>>>>> > +        monitor_file =
>>>>> os.path.expanduser('~/.sugar/journal_created')
>>>>> > +
>>>>> > +        # Remove the file, if it exists.
>>>>> > +        # This is important, since we are checking for the
>>>>> > +        # FILE_CREATED event in the monitor.
>>>>> > +        if os.path.exists(monitor_file):
>>>>> > +            os.remove(monitor_file)
>>>>> > +
>>>>> > +        # Now, create the file.
>>>>> > +        f = open(monitor_file, 'w')
>>>>> > +        f.close()
>>>>> > +
>>>>> >     def __activity_removed_cb(self, home_model, home_activity):
>>>>> >         logging.debug('__activity_removed_cb: %r', home_activity)
>>>>> >         button = self._buttons[home_activity]
>>>>> > --
>>>>> > 1.7.4.4
>>>>> >
>>>>> > _______________________________________________
>>>>> > Dextrose mailing list
>>>>> > Dextrose at lists.sugarlabs.org
>>>>> > http://lists.sugarlabs.org/listinfo/dextrose
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Anish | anish at sugarlabs.org
>>>>> _______________________________________________
>>>>> Dextrose mailing list
>>>>> Dextrose at lists.sugarlabs.org
>>>>> http://lists.sugarlabs.org/listinfo/dextrose
>>>>>
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sugarlabs.org/archive/dextrose/attachments/20120201/5b5d99bb/attachment.html>


More information about the Dextrose mailing list