~ubuntu-branches/ubuntu/precise/firefox/precise-proposed

« back to all changes in this revision

Viewing changes to debian/globalmenu/components/src/uMenuChangeObserver.h

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2012-04-02 08:30:28 UTC
  • Revision ID: package-import@ubuntu.com-20120402083028-430x8nc65vivx0ne
Tags: 11.0+build1-0ubuntu2
* Update globalmenu-extension to 3.0.1
  - Reduce our memory footprint a bit, which wasn't really a lot anyway
  - Avoid the use of the component manager for accessing commonly used
    services, where "commonly used" means "accessed when building every
    menu item". This should save some CPU cycles when building or
    refreshing menus
  - Try to recycle menuitems when they are removed from a menu by
    adding contiguous blocks of removed items to a "free list" which
    is emptied asynchronously, and reusing the items in this list when
    new items are added in place of the removed items. This means that
    refreshing the history menu contents when the menu is opened no
    longer alters the menu structure, but results in a shifting of
    properties between existing nodes instead. This has a few benefits:
    + With no layout changes, unity-panel-service doesn't request
      the entire menu structure, which significantly reduces dbus traffic
      and makes it much faster to refresh the menu contents
    + The size of the menu doesn't change when it is refreshed, which
      eliminates the flicker that used to occur when opening the history
      menu.
    + The HUD can refresh our menus now without triggering layout updates
      (assuming that menu layout really hasn't changed, eg, by adding
      a bookmark)
  - Remove all use of the global observer service for sending our own
    internal notifications around
  - Clean up the way we ensure that the correct edit commands are
    enabled by just installing our own popupshowing handler rather
    than using an additional notification to fix things up after the
    default handler runs
  - Get rid of a static initializer
  - Don't support older than Firefox 11
  - Fix some GError leaks
  - Hide the internal menu when creating a native menu, rather than
    waiting for confirmation that the native menu is registered
    successfully. We don't try to create a native menu if we don't
    find a menu service to register the menu with anyway
  - Keep menu contents updated whilst the menu is open, rather than
    just whilst it is opening

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2
 
 *
3
 
 * ***** BEGIN LICENSE BLOCK *****
4
 
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5
 
 *
6
 
 * The contents of this file are subject to the Mozilla Public License Version
7
 
 * 1.1 (the "License"); you may not use this file except in compliance with
8
 
 * the License. You may obtain a copy of the License at
9
 
 * http://www.mozilla.org/MPL/
10
 
 *
11
 
 * Software distributed under the License is distributed on an "AS IS" basis,
12
 
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13
 
 * for the specific language governing rights and limitations under the
14
 
 * License.
15
 
 *
16
 
 * The Original Code is Mozilla Communicator.
17
 
 *
18
 
 * The Initial Developer of the Original Code is
19
 
 * Netscape Communications Corp.
20
 
 * Portions created by the Initial Developer are Copyright (C) 1999
21
 
 * the Initial Developer. All Rights Reserved.
22
 
 *
23
 
 * Contributor(s):
24
 
 *   Mike Pinkerton
25
 
 *   Josh Aas <josh@mozilla.com> (decomtaminate)
26
 
 *
27
 
 * Alternatively, the contents of this file may be used under the terms of
28
 
 * either the GNU General Public License Version 2 or later (the "GPL"), or
29
 
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30
 
 * in which case the provisions of the GPL or the LGPL are applicable instead
31
 
 * of those above. If you wish to allow use of your version of this file only
32
 
 * under the terms of either the GPL or the LGPL, and not to allow others to
33
 
 * use your version of this file under the terms of the MPL, indicate your
34
 
 * decision by deleting the provisions above and replace them with the notice
35
 
 * and other provisions required by the GPL or the LGPL. If you do not delete
36
 
 * the provisions above, a recipient may use your version of this file under
37
 
 * the terms of any one of the MPL, the GPL or the LGPL.
38
 
 *
39
 
 * ***** END LICENSE BLOCK ***** */
40
 
 
41
 
#ifndef _U_MENUCHANGEOBSERVER_H
42
 
#define _U_MENUCHANGEOBSERVER_H
43
 
 
44
 
class nsIContent;
45
 
class nsIDocument;
46
 
class nsIAtom;
47
 
 
48
 
#define NS_DECL_UMENUCHANGEOBSERVER \
49
 
void ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, nsIAtom *aAttribute); \
50
 
void ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aContainer, nsIContent *aChild, PRInt32 aIndexInContainer); \
51
 
void ObserveContentInserted(nsIDocument *aDocument, nsIContent *aContainer, nsIContent *aChild, PRInt32 aIndexInContainer);
52
 
 
53
 
// Something that wants to be alerted to changes in attributes or changes in
54
 
// its corresponding content object.
55
 
//
56
 
// This interface is used by our menu code so we only have to have one
57
 
// nsIDocumentObserver.
58
 
//
59
 
// Any class that implements this interface must take care to unregister itself
60
 
// on deletion.
61
 
class uMenuChangeObserver
62
 
{
63
 
public:
64
 
  // XXX use dom::Element
65
 
  virtual void ObserveAttributeChanged(nsIDocument *aDocument,
66
 
                                       nsIContent *aContent,
67
 
                                       nsIAtom *aAttribute)=0;
68
 
 
69
 
  virtual void ObserveContentRemoved(nsIDocument *aDocument,
70
 
                                     nsIContent *aContainer,
71
 
                                     nsIContent *aChild, 
72
 
                                     PRInt32 aIndexInContainer)=0;
73
 
 
74
 
  virtual void ObserveContentInserted(nsIDocument *aDocument,
75
 
                                      nsIContent *aContainer,
76
 
                                      nsIContent *aChild, 
77
 
                                      PRInt32 aIndexInContainer)=0;
78
 
};
79
 
 
80
 
#endif