Back to index

libappindicator  12.10.0
Classes | Defines | Enumerations | Functions | Variables
app-indicator.c File Reference
#include <libdbusmenu-glib/menuitem.h>
#include <libdbusmenu-glib/server.h>
#include <libdbusmenu-gtk/client.h>
#include <libdbusmenu-gtk/parser.h>
#include <libindicator/indicator-desktop-shortcuts.h>
#include "app-indicator.h"
#include "app-indicator-enum-types.h"
#include "application-service-marshal.h"
#include "gen-notification-watcher.xml.h"
#include "gen-notification-item.xml.h"
#include "dbus-shared.h"
#include "generate-id.h"

Go to the source code of this file.

Classes

struct  _AppIndicatorPrivate

Defines

#define PANEL_ICON_SUFFIX   "panel"
#define PROP_ID_S   "id"
#define PROP_CATEGORY_S   "category"
#define PROP_STATUS_S   "status"
#define PROP_ICON_NAME_S   "icon-name"
#define PROP_ICON_DESC_S   "icon-desc"
#define PROP_ATTENTION_ICON_NAME_S   "attention-icon-name"
#define PROP_ATTENTION_ICON_DESC_S   "attention-icon-desc"
#define PROP_ICON_THEME_PATH_S   "icon-theme-path"
#define PROP_CONNECTED_S   "connected"
#define PROP_LABEL_S   "label"
#define PROP_LABEL_GUIDE_S   "label-guide"
#define PROP_ORDERING_INDEX_S   "ordering-index"
#define PROP_DBUS_MENU_SERVER_S   "dbus-menu-server"
#define PROP_TITLE_S   "title"
#define APP_INDICATOR_GET_PRIVATE(o)   (G_TYPE_INSTANCE_GET_PRIVATE ((o), APP_INDICATOR_TYPE, AppIndicatorPrivate))
#define DEFAULT_ITEM_PATH   "/org/ayatana/NotificationItem"
#define DEFAULT_FALLBACK_TIMER   100 /* in milliseconds */
#define WARN_BAD_TYPE(prop, value)   g_warning("Can not work with property '%s' with value of type '%s'.", prop, G_VALUE_TYPE_NAME(value))
#define APP_INDICATOR_SHORTY_NICK   "app-indicator-shorty-nick"

Enumerations

enum  {
  NEW_ICON, NEW_ATTENTION_ICON, NEW_STATUS, NEW_LABEL,
  CONNECTION_CHANGED, NEW_ICON_THEME_PATH, SCROLL_EVENT, LAST_SIGNAL
}
enum  {
  PROP_0, PROP_ID, PROP_CATEGORY, PROP_STATUS,
  PROP_ICON_NAME, PROP_ICON_DESC, PROP_ATTENTION_ICON_NAME, PROP_ATTENTION_ICON_DESC,
  PROP_ICON_THEME_PATH, PROP_CONNECTED, PROP_LABEL, PROP_LABEL_GUIDE,
  PROP_ORDERING_INDEX, PROP_DBUS_MENU_SERVER, PROP_TITLE
}

Functions

static void app_indicator_class_init (AppIndicatorClass *klass)
static void app_indicator_init (AppIndicator *self)
static void app_indicator_dispose (GObject *object)
static void app_indicator_finalize (GObject *object)
static void app_indicator_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
static void app_indicator_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
static void signal_label_change (AppIndicator *self)
static void check_connect (AppIndicator *self)
static void register_service_cb (GObject *obj, GAsyncResult *res, gpointer user_data)
static void start_fallback_timer (AppIndicator *self, gboolean disable_timeout)
static gboolean fallback_timer_expire (gpointer data)
static GtkStatusIcon * fallback (AppIndicator *self)
static void status_icon_status_wrapper (AppIndicator *self, const gchar *status, gpointer data)
static gboolean scroll_event_wrapper (GtkWidget *status_icon, GdkEventScroll *event, gpointer user_data)
static gboolean middle_click_wrapper (GtkWidget *status_icon, GdkEventButton *event, gpointer user_data)
static void status_icon_changes (AppIndicator *self, gpointer data)
static void status_icon_activate (GtkStatusIcon *icon, gpointer data)
static void status_icon_menu_activate (GtkStatusIcon *status_icon, guint button, guint activate_time, gpointer user_data)
static void unfallback (AppIndicator *self, GtkStatusIcon *status_icon)
static gchar * append_panel_icon_suffix (const gchar *icon_name)
static void watcher_owner_changed (GObject *obj, GParamSpec *pspec, gpointer user_data)
static void theme_changed_cb (GtkIconTheme *theme, gpointer user_data)
static void sec_activate_target_parent_changed (GtkWidget *menuitem, GtkWidget *old_parent, gpointer user_data)
static GVariant * bus_get_prop (GDBusConnection *connection, const gchar *sender, const gchar *path, const gchar *interface, const gchar *property, GError **error, gpointer user_data)
static void bus_method_call (GDBusConnection *connection, const gchar *sender, const gchar *path, const gchar *interface, const gchar *method, GVariant *params, GDBusMethodInvocation *invocation, gpointer user_data)
static void bus_creation (GObject *obj, GAsyncResult *res, gpointer user_data)
static void bus_watcher_ready (GObject *obj, GAsyncResult *res, gpointer user_data)
 G_DEFINE_TYPE (AppIndicator, app_indicator, G_TYPE_OBJECT)
static gboolean signal_label_change_idle (gpointer user_data)
static const gchar * category_from_enum (AppIndicatorCategory category)
static gboolean widget_is_menu_child (AppIndicator *self, GtkWidget *child)
AppIndicator * app_indicator_new (const gchar *id, const gchar *icon_name, AppIndicatorCategory category)
AppIndicator * app_indicator_new_with_path (const gchar *id, const gchar *icon_name, AppIndicatorCategory category, const gchar *icon_theme_path)
void app_indicator_set_status (AppIndicator *self, AppIndicatorStatus status)
 app_indicator_get_type:
void app_indicator_set_attention_icon (AppIndicator *self, const gchar *icon_name)
 app_indicator_set_attention_icon: : The #AppIndicator object to use : The name of the attention icon to set for this indicator
void app_indicator_set_attention_icon_full (AppIndicator *self, const gchar *icon_name, const gchar *icon_desc)
 app_indicator_set_attention_icon_full: : The #AppIndicator object to use : The name of the attention icon to set for this indicator : A textual description of the icon
void app_indicator_set_icon (AppIndicator *self, const gchar *icon_name)
 app_indicator_set_icon: : The #AppIndicator object to use : The icon name to set.
void app_indicator_set_icon_full (AppIndicator *self, const gchar *icon_name, const gchar *icon_desc)
 app_indicator_set_icon_full: : The #AppIndicator object to use : The icon name to set.
void app_indicator_set_label (AppIndicator *self, const gchar *label, const gchar *guide)
 app_indicator_set_label: : The #AppIndicator object to use : The label to show next to the icon.
void app_indicator_set_icon_theme_path (AppIndicator *self, const gchar *icon_theme_path)
 app_indicator_set_icon_theme_path: : The #AppIndicator object to use : The icon theme path to set.
static void setup_dbusmenu (AppIndicator *self)
void app_indicator_set_menu (AppIndicator *self, GtkMenu *menu)
 app_indicator_set_menu: : The #AppIndicator : (allow-none): A #GtkMenu to set
void app_indicator_set_ordering_index (AppIndicator *self, guint32 ordering_index)
 app_indicator_set_ordering_index: : The #AppIndicator : A value for the ordering of this app indicator
void app_indicator_set_secondary_activate_target (AppIndicator *self, GtkWidget *menuitem)
 app_indicator_set_secondary_activate_target: : The #AppIndicator : (allow-none): A #GtkWidget to be activated on secondary activation
void app_indicator_set_title (AppIndicator *self, const gchar *title)
 app_indicator_set_title: : The #AppIndicator : (allow-none): Title of the app indicator
const gchar * app_indicator_get_id (AppIndicator *self)
 app_indicator_get_id: : The #AppIndicator object to use
AppIndicatorCategory app_indicator_get_category (AppIndicator *self)
 app_indicator_get_category: : The #AppIndicator object to use
AppIndicatorStatus app_indicator_get_status (AppIndicator *self)
 app_indicator_get_status: : The #AppIndicator object to use
const gchar * app_indicator_get_icon (AppIndicator *self)
 app_indicator_get_icon: : The #AppIndicator object to use
const gchar * app_indicator_get_icon_desc (AppIndicator *self)
 app_indicator_get_icon_desc: : The #AppIndicator object to use
const gchar * app_indicator_get_icon_theme_path (AppIndicator *self)
 app_indicator_get_icon_theme_path: : The #AppIndicator object to use
const gchar * app_indicator_get_attention_icon (AppIndicator *self)
 app_indicator_get_attention_icon: : The #AppIndicator object to use
const gchar * app_indicator_get_attention_icon_desc (AppIndicator *self)
 app_indicator_get_attention_icon_desc: : The #AppIndicator object to use
const gchar * app_indicator_get_title (AppIndicator *self)
 app_indicator_get_title: : The #AppIndicator object to use
GtkMenu * app_indicator_get_menu (AppIndicator *self)
 app_indicator_get_menu: : The #AppIndicator object to use
const gchar * app_indicator_get_label (AppIndicator *self)
 app_indicator_get_label: : The #AppIndicator object to use
const gchar * app_indicator_get_label_guide (AppIndicator *self)
 app_indicator_get_label_guide: : The #AppIndicator object to use
guint32 app_indicator_get_ordering_index (AppIndicator *self)
 app_indicator_get_ordering_index: : The #AppIndicator object to use
GtkWidget * app_indicator_get_secondary_activate_target (AppIndicator *self)
 app_indicator_get_secondary_activate_target: : The #AppIndicator object to use
static void shorty_activated_cb (DbusmenuMenuitem *mi, guint timestamp, gpointer user_data)
void app_indicator_build_menu_from_desktop (AppIndicator *self, const gchar *desktop_file, const gchar *desktop_profile)
 app_indicator_build_menu_from_desktop: : The #AppIndicator object to use : A path to the desktop file to build the menu from : Which entries should be used from the desktop file

Variables

static guint signals [LAST_SIGNAL] = { 0 }
static GDBusNodeInfo * item_node_info = NULL
static GDBusInterfaceInfo * item_interface_info = NULL
static GDBusNodeInfo * watcher_node_info = NULL
static GDBusInterfaceInfo * watcher_interface_info = NULL
static const GDBusInterfaceVTable item_interface_table

Class Documentation

struct _AppIndicatorPrivate

Definition at line 66 of file app-indicator.c.

Class Members
gchar * accessible_desc
gchar * att_accessible_desc
gchar * attention_icon_name
AppIndicatorCategory category
gchar * clean_id
GDBusConnection * connection
guint dbus_registration
gint fallback_timer
gchar * icon_name
gchar * icon_theme_path
gchar * id
gchar * label
guint label_change_idle
gchar * label_guide
GtkWidget * menu
DbusmenuServer * menuservice
guint32 ordering_index
gchar * path
gboolean sec_activate_enabled
GtkWidget * sec_activate_target
IndicatorDesktopShortcuts * shorties
AppIndicatorStatus status
GtkStatusIcon * status_icon
gchar * title
GDBusProxy * watcher_proxy

Define Documentation

#define APP_INDICATOR_GET_PRIVATE (   o)    (G_TYPE_INSTANCE_GET_PRIVATE ((o), APP_INDICATOR_TYPE, AppIndicatorPrivate))

Definition at line 152 of file app-indicator.c.

#define APP_INDICATOR_SHORTY_NICK   "app-indicator-shorty-nick"

Definition at line 2472 of file app-indicator.c.

#define DEFAULT_FALLBACK_TIMER   100 /* in milliseconds */

Definition at line 159 of file app-indicator.c.

#define DEFAULT_ITEM_PATH   "/org/ayatana/NotificationItem"

Definition at line 156 of file app-indicator.c.

#define PANEL_ICON_SUFFIX   "panel"

Definition at line 51 of file app-indicator.c.

#define PROP_ATTENTION_ICON_DESC_S   "attention-icon-desc"

Definition at line 142 of file app-indicator.c.

#define PROP_ATTENTION_ICON_NAME_S   "attention-icon-name"

Definition at line 141 of file app-indicator.c.

#define PROP_CATEGORY_S   "category"

Definition at line 137 of file app-indicator.c.

#define PROP_CONNECTED_S   "connected"

Definition at line 144 of file app-indicator.c.

#define PROP_DBUS_MENU_SERVER_S   "dbus-menu-server"

Definition at line 148 of file app-indicator.c.

#define PROP_ICON_DESC_S   "icon-desc"

Definition at line 140 of file app-indicator.c.

#define PROP_ICON_NAME_S   "icon-name"

Definition at line 139 of file app-indicator.c.

#define PROP_ICON_THEME_PATH_S   "icon-theme-path"

Definition at line 143 of file app-indicator.c.

#define PROP_ID_S   "id"

Definition at line 136 of file app-indicator.c.

#define PROP_LABEL_GUIDE_S   "label-guide"

Definition at line 146 of file app-indicator.c.

#define PROP_LABEL_S   "label"

Definition at line 145 of file app-indicator.c.

#define PROP_ORDERING_INDEX_S   "ordering-index"

Definition at line 147 of file app-indicator.c.

#define PROP_STATUS_S   "status"

Definition at line 138 of file app-indicator.c.

#define PROP_TITLE_S   "title"

Definition at line 149 of file app-indicator.c.

#define WARN_BAD_TYPE (   prop,
  value 
)    g_warning("Can not work with property '%s' with value of type '%s'.", prop, G_VALUE_TYPE_NAME(value))

Definition at line 772 of file app-indicator.c.


Enumeration Type Documentation

anonymous enum
Enumerator:
NEW_ICON 
NEW_ATTENTION_ICON 
NEW_STATUS 
NEW_LABEL 
CONNECTION_CHANGED 
NEW_ICON_THEME_PATH 
SCROLL_EVENT 
LAST_SIGNAL 

Definition at line 102 of file app-indicator.c.

anonymous enum
Enumerator:
PROP_0 
PROP_ID 
PROP_CATEGORY 
PROP_STATUS 
PROP_ICON_NAME 
PROP_ICON_DESC 
PROP_ATTENTION_ICON_NAME 
PROP_ATTENTION_ICON_DESC 
PROP_ICON_THEME_PATH 
PROP_CONNECTED 
PROP_LABEL 
PROP_LABEL_GUIDE 
PROP_ORDERING_INDEX 
PROP_DBUS_MENU_SERVER 
PROP_TITLE 

Definition at line 117 of file app-indicator.c.


Function Documentation

void app_indicator_build_menu_from_desktop ( AppIndicator *  self,
const gchar *  desktop_file,
const gchar *  desktop_profile 
)

app_indicator_build_menu_from_desktop: : The #AppIndicator object to use : A path to the desktop file to build the menu from : Which entries should be used from the desktop file

This function allows for building the Application Indicator menu from a static desktop file.

Definition at line 2503 of file app-indicator.c.

{
       g_return_if_fail(IS_APP_INDICATOR(self));
       AppIndicatorPrivate *priv = self->priv;

       /* Build a new shortcuts object */
       if (priv->shorties != NULL) {
              g_object_unref(priv->shorties);
              priv->shorties = NULL;
       }
       priv->shorties = indicator_desktop_shortcuts_new(desktop_file, desktop_profile);
       g_return_if_fail(priv->shorties != NULL);

       const gchar ** nicks = indicator_desktop_shortcuts_get_nicks(priv->shorties);
       int nick_num;

       /* Place the items on a dbusmenu */
       DbusmenuMenuitem * root = dbusmenu_menuitem_new();

       for (nick_num = 0; nicks[nick_num] != NULL; nick_num++) {
              DbusmenuMenuitem * item = dbusmenu_menuitem_new();
              g_object_set_data(G_OBJECT(item), APP_INDICATOR_SHORTY_NICK, (gpointer)nicks[nick_num]);

              gchar * name = indicator_desktop_shortcuts_nick_get_name(priv->shorties, nicks[nick_num]);
              dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, name);
              g_free(name);

              g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(shorty_activated_cb), self);

              dbusmenu_menuitem_child_append(root, item);
       }

       /* Swap it if needed */
       if (priv->menuservice == NULL) {
              gchar * path = g_strdup_printf(DEFAULT_ITEM_PATH "/%s/Menu", priv->clean_id);
              priv->menuservice = dbusmenu_server_new (path);
              g_free(path);
       }

       dbusmenu_server_set_root (priv->menuservice, root);

       if (priv->menu != NULL) {
              g_object_unref(G_OBJECT(priv->menu));
              priv->menu = NULL;
       }

       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void app_indicator_class_init ( AppIndicatorClass *  klass) [static]

AppIndicator:id:

The ID for this indicator, which should be unique, but used consistently by this program and its indicator.

AppIndicator:category:

The type of indicator that this represents. Please don't use 'Other'. Defaults to 'ApplicationStatus'.

AppIndicator:status:

Whether the indicator is shown or requests attention. Defaults to 'Passive'.

AppIndicator:icon-name:

The name of the regular icon that is shown for the indicator.

AppIndicator:icon-desc:

The description of the regular icon that is shown for the indicator.

AppIndicator:attention-icon-name:

If the indicator sets it's status to APP_INDICATOR_STATUS_ATTENTION then this icon is shown.

AppIndicator:attention-icon-desc:

If the indicator sets it's status to APP_INDICATOR_STATUS_ATTENTION then this textual description of the icon shown.

AppIndicator:icon-theme-path:

An additional place to look for icon names that may be installed by the application.

AppIndicator:connected:

Pretty simple, TRUE if we have a reasonable expectation of being displayed through this object. You should hide your TrayIcon if so.

AppIndicator:label:

A label that can be shown next to the string in the application indicator. The label will not be shown unless there is an icon as well. The label is useful for numerical and other frequently updated information. In general, it shouldn't be shown unless a user requests it as it can take up a significant amount of space on the user's panel. This may not be shown in all visualizations.

AppIndicator:label-guide:

An optional string to provide guidance to the panel on how big the #AppIndicator:label string could get. If this is set correctly then the panel should never 'jiggle' as the string adjusts through out the range of options. For instance, if you were providing a percentage like "54% thrust" in #AppIndicator:label you'd want to set this string to "100% thrust" to ensure space when Scotty can get you enough power.

AppIndicator:ordering-index:

The ordering index is an odd parameter, and if you think you don't need it you're probably right. In general, the application indicator try to place the applications in a recreatable place taking into account which category they're in to try and group them. But, there are some cases where you'd want to ensure indicators are next to each other. To do that you can override the generated ordering index and replace it with a new one. Again, you probably don't want to be doing this, but in case you do, this is the way.

AppIndicator:dbus-menu-server:

A way to get the internal dbusmenu server if it is available. This should only be used for testing.

AppIndicator:title:

Provides a way to refer to this application indicator in a human readable form. This is used in the Unity desktop in the HUD as the first part of the menu entries to distinguish them from the focused application's entries.

AppIndicator::new-icon: : The #AppIndicator object

when #AppIndicator:icon-name is changed

AppIndicator::new-attention-icon: : The #AppIndicator object

Emitted when #AppIndicator:attention-icon-name is changed

AppIndicator::new-status: : The #AppIndicator object : The string value of the AppIndicatorStatus enum.

Emitted when #AppIndicator:status is changed

AppIndicator::new-label: : The #AppIndicator object : The string for the label : The string for the guide

Emitted when either #AppIndicator:label or #AppIndicator:label-guide are changed.

AppIndicator::connection-changed: : The #AppIndicator object : Whether we're connected or not

Signaled when we connect to a watcher, or when it drops away.

AppIndicator::new-icon-theme-path: : The #AppIndicator object

Signaled when there is a new icon set for the object.

AppIndicator::scroll-event: : The #AppIndicator object : How many steps the scroll wheel has taken : (type Gdk.ScrollDirection) Which direction the wheel went in

Signaled when the #AppIndicator receives a scroll event.

Definition at line 208 of file app-indicator.c.

{
       GObjectClass *object_class = G_OBJECT_CLASS (klass);

       g_type_class_add_private (klass, sizeof (AppIndicatorPrivate));

       /* Clean up */
       object_class->dispose = app_indicator_dispose;
       object_class->finalize = app_indicator_finalize;

       /* Property funcs */
       object_class->set_property = app_indicator_set_property;
       object_class->get_property = app_indicator_get_property;

       /* Our own funcs */
       klass->fallback = fallback;
       klass->unfallback = unfallback;

       /* Properties */

       g_object_class_install_property (object_class,
                                         PROP_ID,
                                         g_param_spec_string(PROP_ID_S,
                                                             "The ID for this indicator",
                                                             "An ID that should be unique, but used consistently by this program and its indicator.",
                                                             NULL,
                                                             G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY));

       g_object_class_install_property (object_class,
                                         PROP_CATEGORY,
                                         g_param_spec_string (PROP_CATEGORY_S,
                                                              "Indicator Category",
                                                              "The type of indicator that this represents.  Please don't use 'other'. Defaults to 'ApplicationStatus'.",
                                                              NULL,
                                                              G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY));

       g_object_class_install_property (object_class,
                                         PROP_STATUS,
                                         g_param_spec_string (PROP_STATUS_S,
                                                              "Indicator Status",
                                                              "Whether the indicator is shown or requests attention. Defaults to 'Passive'.",
                                                              NULL,
                                                              G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));

       g_object_class_install_property(object_class,
                                       PROP_ICON_NAME,
                                       g_param_spec_string (PROP_ICON_NAME_S,
                                                            "An icon for the indicator",
                                                            "The default icon that is shown for the indicator.",
                                                            NULL,
                                                            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
       g_object_class_install_property(object_class,
                                       PROP_ICON_DESC,
                                       g_param_spec_string (PROP_ICON_DESC_S,
                                                            "A description of the icon for the indicator",
                                                            "A description of the default icon that is shown for the indicator.",
                                                            NULL,
                                                            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));

       g_object_class_install_property (object_class,
                                         PROP_ATTENTION_ICON_NAME,
                                         g_param_spec_string (PROP_ATTENTION_ICON_NAME_S,
                                                              "An icon to show when the indicator request attention.",
                                                              "If the indicator sets it's status to 'attention' then this icon is shown.",
                                                              NULL,
                                                              G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
       g_object_class_install_property (object_class,
                                        PROP_ATTENTION_ICON_DESC,
                                        g_param_spec_string (PROP_ATTENTION_ICON_DESC_S,
                                                             "A description of the icon to show when the indicator request attention.",
                                                             "When the indicator is an attention mode this should describe the icon shown",
                                                             NULL,
                                                             G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
       g_object_class_install_property(object_class,
                                       PROP_ICON_THEME_PATH,
                                       g_param_spec_string (PROP_ICON_THEME_PATH_S,
                                                             "An additional path for custom icons.",
                                                             "An additional place to look for icon names that may be installed by the application.",
                                                             NULL,
                                                             G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT));
       
       g_object_class_install_property (object_class,
                                         PROP_CONNECTED,
                                         g_param_spec_boolean (PROP_CONNECTED_S,
                                                               "Whether we're conneced to a watcher",
                                                               "Pretty simple, true if we have a reasonable expectation of being displayed through this object.  You should hide your TrayIcon if so.",
                                                               FALSE,
                                                               G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
       g_object_class_install_property(object_class,
                                       PROP_LABEL,
                                       g_param_spec_string (PROP_LABEL_S,
                                                            "A label next to the icon",
                                                            "A label to provide dynamic information.",
                                                            NULL,
                                                            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
       g_object_class_install_property(object_class,
                                       PROP_LABEL_GUIDE,
                                       g_param_spec_string (PROP_LABEL_GUIDE_S,
                                                            "A string to size the space available for the label.",
                                                            "To ensure that the label does not cause the panel to 'jiggle' this string should provide information on how much space it could take.",
                                                            NULL,
                                                            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
       g_object_class_install_property(object_class,
                                       PROP_ORDERING_INDEX,
                                       g_param_spec_uint (PROP_ORDERING_INDEX_S,
                                                          "The location that this app indicator should be in the list.",
                                                          "A way to override the default ordering of the applications by providing a very specific idea of where this entry should be placed.",
                                                          0, G_MAXUINT32, 0,
                                                          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));

       g_object_class_install_property(object_class,
                                       PROP_DBUS_MENU_SERVER,
                                       g_param_spec_object (PROP_DBUS_MENU_SERVER_S,
                                                            "The internal DBusmenu Server",
                                                            "DBusmenu server which is available for testing the application indicators.",
                                                            DBUSMENU_TYPE_SERVER,
                                                            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
       g_object_class_install_property(object_class,
                                       PROP_TITLE,
                                       g_param_spec_string (PROP_TITLE_S,
                                                            "Title of the application indicator",
                                                            "A human readable way to refer to this application indicator in the UI.",
                                                            NULL,
                                                            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));

       /* Signals */

       signals[NEW_ICON] = g_signal_new (APP_INDICATOR_SIGNAL_NEW_ICON,
                                         G_TYPE_FROM_CLASS(klass),
                                         G_SIGNAL_RUN_LAST,
                                         G_STRUCT_OFFSET (AppIndicatorClass, new_icon),
                                         NULL, NULL,
                                         g_cclosure_marshal_VOID__VOID,
                                         G_TYPE_NONE, 0, G_TYPE_NONE);

       signals[NEW_ATTENTION_ICON] = g_signal_new (APP_INDICATOR_SIGNAL_NEW_ATTENTION_ICON,
                                                   G_TYPE_FROM_CLASS(klass),
                                                   G_SIGNAL_RUN_LAST,
                                                   G_STRUCT_OFFSET (AppIndicatorClass, new_attention_icon),
                                                   NULL, NULL,
                                                   g_cclosure_marshal_VOID__VOID,
                                                   G_TYPE_NONE, 0, G_TYPE_NONE);

       signals[NEW_STATUS] = g_signal_new (APP_INDICATOR_SIGNAL_NEW_STATUS,
                                           G_TYPE_FROM_CLASS(klass),
                                           G_SIGNAL_RUN_LAST,
                                           G_STRUCT_OFFSET (AppIndicatorClass, new_status),
                                           NULL, NULL,
                                           g_cclosure_marshal_VOID__STRING,
                                           G_TYPE_NONE, 1,
                                            G_TYPE_STRING);

       signals[NEW_LABEL] = g_signal_new (APP_INDICATOR_SIGNAL_NEW_LABEL,
                                           G_TYPE_FROM_CLASS(klass),
                                           G_SIGNAL_RUN_LAST,
                                           G_STRUCT_OFFSET (AppIndicatorClass, new_label),
                                           NULL, NULL,
                                           _application_service_marshal_VOID__STRING_STRING,
                                           G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);

       signals[CONNECTION_CHANGED] = g_signal_new (APP_INDICATOR_SIGNAL_CONNECTION_CHANGED,
                                                   G_TYPE_FROM_CLASS(klass),
                                                   G_SIGNAL_RUN_LAST,
                                                   G_STRUCT_OFFSET (AppIndicatorClass, connection_changed),
                                                   NULL, NULL,
                                                   g_cclosure_marshal_VOID__BOOLEAN,
                                                   G_TYPE_NONE, 1, G_TYPE_BOOLEAN, G_TYPE_NONE);

       signals[NEW_ICON_THEME_PATH] = g_signal_new (APP_INDICATOR_SIGNAL_NEW_ICON_THEME_PATH,
                                         G_TYPE_FROM_CLASS(klass),
                                         G_SIGNAL_RUN_LAST,
                                         G_STRUCT_OFFSET (AppIndicatorClass, new_icon_theme_path),
                                         NULL, NULL,
                                         g_cclosure_marshal_VOID__STRING,
                                         G_TYPE_NONE, 1, G_TYPE_STRING);

       signals[SCROLL_EVENT] = g_signal_new (APP_INDICATOR_SIGNAL_SCROLL_EVENT,
                                         G_TYPE_FROM_CLASS(klass),
                                         G_SIGNAL_RUN_LAST,
                                         G_STRUCT_OFFSET (AppIndicatorClass, scroll_event),
                                         NULL, NULL,
                                         _application_service_marshal_VOID__INT_UINT,
                                         G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_UINT);

       /* DBus interfaces */
       if (item_node_info == NULL) {
              GError * error = NULL;

              item_node_info = g_dbus_node_info_new_for_xml(_notification_item, &error);
              if (error != NULL) {
                     g_error("Unable to parse Notification Item DBus interface: %s", error->message);
                     g_error_free(error);
              }
       }

       if (item_interface_info == NULL && item_node_info != NULL) {
              item_interface_info = g_dbus_node_info_lookup_interface(item_node_info, NOTIFICATION_ITEM_DBUS_IFACE);

              if (item_interface_info == NULL) {
                     g_error("Unable to find interface '" NOTIFICATION_ITEM_DBUS_IFACE "'");
              }
       }

       if (watcher_node_info == NULL) {
              GError * error = NULL;

              watcher_node_info = g_dbus_node_info_new_for_xml(_notification_watcher, &error);
              if (error != NULL) {
                     g_error("Unable to parse Notification Item DBus interface: %s", error->message);
                     g_error_free(error);
              }
       }

       if (watcher_interface_info == NULL && watcher_node_info != NULL) {
              watcher_interface_info = g_dbus_node_info_lookup_interface(watcher_node_info, NOTIFICATION_WATCHER_DBUS_IFACE);

              if (watcher_interface_info == NULL) {
                     g_error("Unable to find interface '" NOTIFICATION_WATCHER_DBUS_IFACE "'");
              }
       }

       return;
}

Here is the call graph for this function:

static void app_indicator_dispose ( GObject *  object) [static]

Definition at line 629 of file app-indicator.c.

{
       AppIndicator *self = APP_INDICATOR (object);
       AppIndicatorPrivate *priv = self->priv;

       if (priv->shorties != NULL) {
              g_object_unref(G_OBJECT(priv->shorties));
              priv->shorties = NULL;
       }

       if (priv->status != APP_INDICATOR_STATUS_PASSIVE) {
              app_indicator_set_status(self, APP_INDICATOR_STATUS_PASSIVE);
       }

       if (priv->status_icon != NULL) {
              AppIndicatorClass * class = APP_INDICATOR_GET_CLASS(object);
              if (class->unfallback != NULL) {
                     class->unfallback(self, priv->status_icon);
              }
              priv->status_icon = NULL;
       }

       if (priv->fallback_timer != 0) {
              g_source_remove(priv->fallback_timer);
              priv->fallback_timer = 0;
       }

       if (priv->label_change_idle != 0) {
              g_source_remove(priv->label_change_idle);
              priv->label_change_idle = 0;
       }

       if (priv->menu != NULL) {
              g_object_unref(G_OBJECT(priv->menu));
              priv->menu = NULL;
       }

       if (priv->menuservice != NULL) {
              g_object_unref (priv->menuservice);
       }

       if (priv->watcher_proxy != NULL) {
              g_signal_handlers_disconnect_by_func(G_OBJECT(priv->watcher_proxy), watcher_owner_changed, self);
              g_object_unref(G_OBJECT(priv->watcher_proxy));
              priv->watcher_proxy = NULL;

           /* Emit the AppIndicator::connection-changed signal*/
        g_signal_emit (self, signals[CONNECTION_CHANGED], 0, FALSE);
       }

       if (priv->dbus_registration != 0) {
              g_dbus_connection_unregister_object(priv->connection, priv->dbus_registration);
              priv->dbus_registration = 0;
       }

       if (priv->connection != NULL) {
              g_object_unref(G_OBJECT(priv->connection));
              priv->connection = NULL;
       }

       if (priv->sec_activate_target != NULL) {
              g_signal_handlers_disconnect_by_func (priv->sec_activate_target, sec_activate_target_parent_changed, self);
              g_object_unref(G_OBJECT(priv->sec_activate_target));
              priv->sec_activate_target = NULL;
       }

       g_signal_handlers_disconnect_by_func(gtk_icon_theme_get_default(), G_CALLBACK(theme_changed_cb), self);

       G_OBJECT_CLASS (app_indicator_parent_class)->dispose (object);
       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void app_indicator_finalize ( GObject *  object) [static]

Definition at line 704 of file app-indicator.c.

{
       AppIndicator * self = APP_INDICATOR(object);
       AppIndicatorPrivate *priv = self->priv;

       if (priv->status != APP_INDICATOR_STATUS_PASSIVE) {
              g_warning("Finalizing Application Status with the status set to: %d", priv->status);
       }

       if (priv->id != NULL) {
              g_free(priv->id);
              priv->id = NULL;
       }

       if (priv->clean_id != NULL) {
              g_free(priv->clean_id);
              priv->clean_id = NULL;
       }

       if (priv->icon_name != NULL) {
              g_free(priv->icon_name);
              priv->icon_name = NULL;
       }

       if (priv->attention_icon_name != NULL) {
              g_free(priv->attention_icon_name);
              priv->attention_icon_name = NULL;
       }

       if (priv->icon_theme_path != NULL) {
              g_free(priv->icon_theme_path);
              priv->icon_theme_path = NULL;
       }
       
       if (priv->title != NULL) {
              g_free(priv->title);
              priv->title = NULL;
       }

       if (priv->label != NULL) {
              g_free(priv->label);
              priv->label = NULL;
       }

       if (priv->label_guide != NULL) {
              g_free(priv->label_guide);
              priv->label_guide = NULL;
       }

       if (priv->accessible_desc != NULL) {
              g_free(priv->accessible_desc);
              priv->accessible_desc = NULL;
       }

       if (priv->att_accessible_desc != NULL) {
              g_free(priv->att_accessible_desc);
              priv->att_accessible_desc = NULL;
       }

       if (priv->path != NULL) {
              g_free(priv->path);
              priv->path = NULL;
       }

       G_OBJECT_CLASS (app_indicator_parent_class)->finalize (object);
       return;
}

Here is the caller graph for this function:

const gchar* app_indicator_get_attention_icon ( AppIndicator *  self)

app_indicator_get_attention_icon: : The #AppIndicator object to use

Wrapper function for property #AppIndicator:attention-icon-name.

Return value: The current attention icon name.

Definition at line 2339 of file app-indicator.c.

{
  g_return_val_if_fail (IS_APP_INDICATOR (self), NULL);

  return self->priv->attention_icon_name;
}

Here is the caller graph for this function:

const gchar* app_indicator_get_attention_icon_desc ( AppIndicator *  self)

app_indicator_get_attention_icon_desc: : The #AppIndicator object to use

Wrapper function for property #AppIndicator:attention-icon-desc.

Return value: The current attention icon description.

Definition at line 2355 of file app-indicator.c.

{
  g_return_val_if_fail (IS_APP_INDICATOR (self), NULL);

  return self->priv->att_accessible_desc;
}

app_indicator_get_category: : The #AppIndicator object to use

Wrapper function for property #AppIndicator:category.

Return value: The current category.

Definition at line 2259 of file app-indicator.c.

{
  g_return_val_if_fail (IS_APP_INDICATOR (self), APP_INDICATOR_CATEGORY_APPLICATION_STATUS);

  return self->priv->category;
}

Here is the caller graph for this function:

const gchar* app_indicator_get_icon ( AppIndicator *  self)

app_indicator_get_icon: : The #AppIndicator object to use

Wrapper function for property #AppIndicator:icon-name.

Return value: The current icon name.

Definition at line 2291 of file app-indicator.c.

{
  g_return_val_if_fail (IS_APP_INDICATOR (self), NULL);

  return self->priv->icon_name;
}

Here is the caller graph for this function:

const gchar* app_indicator_get_icon_desc ( AppIndicator *  self)

app_indicator_get_icon_desc: : The #AppIndicator object to use

Wrapper function for property #AppIndicator:icon-desc.

Return value: The current icon description.

Definition at line 2307 of file app-indicator.c.

{
  g_return_val_if_fail (IS_APP_INDICATOR (self), NULL);

  return self->priv->accessible_desc;
}
const gchar* app_indicator_get_icon_theme_path ( AppIndicator *  self)

app_indicator_get_icon_theme_path: : The #AppIndicator object to use

Wrapper function for property #AppIndicator:icon-theme-path.

Return value: The current icon theme path.

Definition at line 2323 of file app-indicator.c.

{
  g_return_val_if_fail (IS_APP_INDICATOR (self), NULL);

  return self->priv->icon_theme_path;
}
const gchar* app_indicator_get_id ( AppIndicator *  self)

app_indicator_get_id: : The #AppIndicator object to use

Wrapper function for property #AppIndicator:id.

Return value: The current ID

Definition at line 2243 of file app-indicator.c.

{
  g_return_val_if_fail (IS_APP_INDICATOR (self), NULL);

  return self->priv->id;
}

Here is the caller graph for this function:

const gchar* app_indicator_get_label ( AppIndicator *  self)

app_indicator_get_label: : The #AppIndicator object to use

Wrapper function for property #AppIndicator:label.

Return value: The current label.

Definition at line 2413 of file app-indicator.c.

{
  g_return_val_if_fail (IS_APP_INDICATOR (self), NULL);

  return self->priv->label;
}

Here is the caller graph for this function:

const gchar* app_indicator_get_label_guide ( AppIndicator *  self)

app_indicator_get_label_guide: : The #AppIndicator object to use

Wrapper function for property #AppIndicator:label-guide.

Return value: The current label guide.

Definition at line 2429 of file app-indicator.c.

{
  g_return_val_if_fail (IS_APP_INDICATOR (self), NULL);

  return self->priv->label_guide;
}

Here is the caller graph for this function:

GtkMenu* app_indicator_get_menu ( AppIndicator *  self)

app_indicator_get_menu: : The #AppIndicator object to use

Gets the menu being used for this application indicator. Wrapper function for property #AppIndicator:menu.

Returns: (transfer none): A #GtkMenu object or NULL if one hasn't been set.

Definition at line 2393 of file app-indicator.c.

{
       AppIndicatorPrivate *priv;

       g_return_val_if_fail (IS_APP_INDICATOR (self), NULL);

       priv = self->priv;

       return GTK_MENU(priv->menu);
}

Here is the caller graph for this function:

guint32 app_indicator_get_ordering_index ( AppIndicator *  self)

app_indicator_get_ordering_index: : The #AppIndicator object to use

Wrapper function for property #AppIndicator:ordering-index.

Return value: The current ordering index.

Definition at line 2445 of file app-indicator.c.

{
       g_return_val_if_fail (IS_APP_INDICATOR (self), 0);

       if (self->priv->ordering_index == 0) {
              return _generate_id(self->priv->category, self->priv->id);
       } else {
              return self->priv->ordering_index;
       }
}

Here is the call graph for this function:

static void app_indicator_get_property ( GObject *  object,
guint  prop_id,
GValue *  value,
GParamSpec *  pspec 
) [static]

Definition at line 943 of file app-indicator.c.

{
        AppIndicator *self = APP_INDICATOR (object);
        AppIndicatorPrivate *priv = self->priv;
        GEnumValue *enum_value;

        switch (prop_id) {
        case PROP_ID:
          g_value_set_string (value, priv->id);
          break;

        case PROP_CATEGORY:
          enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_CATEGORY), priv->category);
          g_value_set_string (value, enum_value->value_nick);
          break;

        case PROP_STATUS:
          enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_STATUS), priv->status);
          g_value_set_string (value, enum_value->value_nick);
          break;

        case PROP_ICON_NAME:
          g_value_set_string (value, priv->icon_name);
          break;

        case PROP_ICON_DESC:
          g_value_set_string (value, priv->accessible_desc);
          break;

        case PROP_ATTENTION_ICON_NAME:
          g_value_set_string (value, priv->attention_icon_name);
          break;

        case PROP_ATTENTION_ICON_DESC:
          g_value_set_string (value, priv->att_accessible_desc);
          break;

        case PROP_ICON_THEME_PATH:
          g_value_set_string (value, priv->icon_theme_path);
          break;

              case PROP_CONNECTED: {
                     gboolean connected = FALSE;

                     if (priv->watcher_proxy != NULL) {
                            gchar * name = g_dbus_proxy_get_name_owner(priv->watcher_proxy);
                            if (name != NULL) {
                                   connected = TRUE;
                                   g_free(name);
                            }
                     }

                     g_value_set_boolean (value, connected);
                     break;
              }

        case PROP_LABEL:
          g_value_set_string (value, priv->label);
          break;

        case PROP_LABEL_GUIDE:
          g_value_set_string (value, priv->label_guide);
          break;

              case PROP_ORDERING_INDEX:
                g_value_set_uint(value, priv->ordering_index);
                break;

              case PROP_DBUS_MENU_SERVER:
                     g_value_set_object(value, priv->menuservice);
                     break;

              case PROP_TITLE:
                     g_value_set_string(value, priv->title);
                     break;

        default:
          G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
          break;
        }

       return;
}

Here is the caller graph for this function:

GtkWidget* app_indicator_get_secondary_activate_target ( AppIndicator *  self)

app_indicator_get_secondary_activate_target: : The #AppIndicator object to use

Gets the menuitem being called on secondary-activate event.

Returns: (transfer none): A #GtkWidget object or NULL if none has been set.

Definition at line 2465 of file app-indicator.c.

{
       g_return_val_if_fail (IS_APP_INDICATOR (self), NULL);

       return GTK_WIDGET(self->priv->sec_activate_target);
}
AppIndicatorStatus app_indicator_get_status ( AppIndicator *  self)

app_indicator_get_status: : The #AppIndicator object to use

Wrapper function for property #AppIndicator:status.

Return value: The current status.

Definition at line 2275 of file app-indicator.c.

{
  g_return_val_if_fail (IS_APP_INDICATOR (self), APP_INDICATOR_STATUS_PASSIVE);

  return self->priv->status;
}

Here is the caller graph for this function:

const gchar* app_indicator_get_title ( AppIndicator *  self)

app_indicator_get_title: : The #AppIndicator object to use

Gets the title of the application indicator. See the function app_indicator_set_title() for information on the title.

Return value: The current title.

Since: 0.5

Definition at line 2375 of file app-indicator.c.

{
       g_return_val_if_fail (IS_APP_INDICATOR (self), NULL);

       return self->priv->title;
}

Here is the caller graph for this function:

static void app_indicator_init ( AppIndicator *  self) [static]

Definition at line 582 of file app-indicator.c.

{
       AppIndicatorPrivate * priv = APP_INDICATOR_GET_PRIVATE(self);

       priv->id = NULL;
       priv->clean_id = NULL;
       priv->category = APP_INDICATOR_CATEGORY_OTHER;
       priv->status = APP_INDICATOR_STATUS_PASSIVE;
       priv->icon_name = NULL;
       priv->attention_icon_name = NULL;
       priv->icon_theme_path = NULL;
       priv->menu = NULL;
       priv->menuservice = NULL;
       priv->ordering_index = 0;
       priv->title = NULL;
       priv->label = NULL;
       priv->label_guide = NULL;
       priv->label_change_idle = 0;

       priv->watcher_proxy = NULL;
       priv->connection = NULL;
       priv->dbus_registration = 0;
       priv->path = NULL;

       priv->status_icon = NULL;
       priv->fallback_timer = 0;

       priv->shorties = NULL;

       priv->sec_activate_target = NULL;
       priv->sec_activate_enabled = FALSE;

       /* Start getting the session bus */
       g_object_ref(self); /* ref for the bus creation callback */
       g_bus_get(G_BUS_TYPE_SESSION, NULL, bus_creation, self);

       g_signal_connect(G_OBJECT(gtk_icon_theme_get_default()),
              "changed", G_CALLBACK(theme_changed_cb), self);

       self->priv = priv;

       return;
}

Here is the call graph for this function:

AppIndicator* app_indicator_new ( const gchar *  id,
const gchar *  icon_name,
AppIndicatorCategory  category 
)

Definition at line 1767 of file app-indicator.c.

{
  AppIndicator *indicator = g_object_new (APP_INDICATOR_TYPE,
                                          PROP_ID_S, id,
                                          PROP_CATEGORY_S, category_from_enum (category),
                                          PROP_ICON_NAME_S, icon_name,
                                          NULL);

  return indicator;
}

Here is the call graph for this function:

Here is the caller graph for this function:

AppIndicator* app_indicator_new_with_path ( const gchar *  id,
const gchar *  icon_name,
AppIndicatorCategory  category,
const gchar *  icon_theme_path 
)

Definition at line 1795 of file app-indicator.c.

{
       AppIndicator *indicator = g_object_new (APP_INDICATOR_TYPE,
                                               PROP_ID_S, id,
                                               PROP_CATEGORY_S, category_from_enum (category),
                                               PROP_ICON_NAME_S, icon_name,
                                               PROP_ICON_THEME_PATH_S, icon_theme_path,
                                               NULL);

       return indicator;
}

Here is the call graph for this function:

void app_indicator_set_attention_icon ( AppIndicator *  self,
const gchar *  icon_name 
)

app_indicator_set_attention_icon: : The #AppIndicator object to use : The name of the attention icon to set for this indicator

Wrapper for app_indicator_set_attention_icon_full() with a NULL description.

Deprecated: Use app_indicator_set_attention_icon_full() instead.

Definition at line 1868 of file app-indicator.c.

{
       return app_indicator_set_attention_icon_full(self, icon_name, NULL);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void app_indicator_set_attention_icon_full ( AppIndicator *  self,
const gchar *  icon_name,
const gchar *  icon_desc 
)

app_indicator_set_attention_icon_full: : The #AppIndicator object to use : The name of the attention icon to set for this indicator : A textual description of the icon

Wrapper function for property #AppIndicator:attention-icon-name.

Definition at line 1882 of file app-indicator.c.

{
       g_return_if_fail (IS_APP_INDICATOR (self));
       g_return_if_fail (icon_name != NULL);
       gboolean changed = FALSE;

       if (g_strcmp0 (self->priv->attention_icon_name, icon_name) != 0) {
              if (self->priv->attention_icon_name) {
                     g_free (self->priv->attention_icon_name);
              }

              self->priv->attention_icon_name = g_strdup(icon_name);
              changed = TRUE;
       }

       if (g_strcmp0(self->priv->att_accessible_desc, icon_desc) != 0) {
              if (self->priv->att_accessible_desc) {
                     g_free (self->priv->att_accessible_desc);
              }

              self->priv->att_accessible_desc = g_strdup(icon_name);
              changed = TRUE;
       }

       if (changed) {
              g_signal_emit (self, signals[NEW_ATTENTION_ICON], 0, TRUE);

              if (self->priv->dbus_registration != 0 && self->priv->connection != NULL) {
                     GError * error = NULL;

                     g_dbus_connection_emit_signal(self->priv->connection,
                                                                        NULL,
                                                                        self->priv->path,
                                                                        NOTIFICATION_ITEM_DBUS_IFACE,
                                                                        "NewAttentionIcon",
                                                                        NULL,
                                                                        &error);

                     if (error != NULL) {
                            g_warning("Unable to send signal for NewAttentionIcon: %s", error->message);
                            g_error_free(error);
                     }
              }
       }

       return;
}

Here is the caller graph for this function:

void app_indicator_set_icon ( AppIndicator *  self,
const gchar *  icon_name 
)

app_indicator_set_icon: : The #AppIndicator object to use : The icon name to set.

Wrapper function for app_indicator_set_icon_full() with a NULL description.

Deprecated: Use app_indicator_set_icon_full()

Definition at line 1941 of file app-indicator.c.

{
       return app_indicator_set_icon_full(self, icon_name, NULL);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void app_indicator_set_icon_full ( AppIndicator *  self,
const gchar *  icon_name,
const gchar *  icon_desc 
)

app_indicator_set_icon_full: : The #AppIndicator object to use : The icon name to set.

: A textual description of the icon for accessibility

Sets the default icon to use when the status is active but not set to attention. In most cases, this should be the application icon for the program.

Wrapper function for property #AppIndicator:icon-name and

AppIndicator::icon-desc.

Definition at line 1960 of file app-indicator.c.

{
       g_return_if_fail (IS_APP_INDICATOR (self));
       g_return_if_fail (icon_name != NULL);
       gboolean changed = FALSE;

       if (g_strcmp0 (self->priv->icon_name, icon_name) != 0) {
              if (self->priv->icon_name) {
                     g_free (self->priv->icon_name);
              }

              self->priv->icon_name = g_strdup(icon_name);
              changed = TRUE;
       }

       if (g_strcmp0(self->priv->accessible_desc, icon_desc) != 0) {
              if (self->priv->accessible_desc != NULL) {
                     g_free(self->priv->accessible_desc);
              }

              self->priv->accessible_desc = g_strdup(icon_desc);
              changed = TRUE;
       }

       if (changed) {
              g_signal_emit (self, signals[NEW_ICON], 0, TRUE);

              if (self->priv->dbus_registration != 0 && self->priv->connection != NULL) {
                     GError * error = NULL;

                     g_dbus_connection_emit_signal(self->priv->connection,
                                                                        NULL,
                                                                        self->priv->path,
                                                                        NOTIFICATION_ITEM_DBUS_IFACE,
                                                                        "NewIcon",
                                                                        NULL,
                                                                        &error);

                     if (error != NULL) {
                            g_warning("Unable to send signal for NewIcon: %s", error->message);
                            g_error_free(error);
                     }
              }
       }

       return;
}

Here is the caller graph for this function:

void app_indicator_set_icon_theme_path ( AppIndicator *  self,
const gchar *  icon_theme_path 
)

app_indicator_set_icon_theme_path: : The #AppIndicator object to use : The icon theme path to set.

Sets the path to use when searching for icons.

Definition at line 2041 of file app-indicator.c.

{
       g_return_if_fail (IS_APP_INDICATOR (self));

       if (g_strcmp0 (self->priv->icon_theme_path, icon_theme_path) != 0) {
              if (self->priv->icon_theme_path != NULL)
                     g_free(self->priv->icon_theme_path);

              self->priv->icon_theme_path = g_strdup(icon_theme_path);

              g_signal_emit (self, signals[NEW_ICON_THEME_PATH], 0, self->priv->icon_theme_path, TRUE);

              if (self->priv->dbus_registration != 0 && self->priv->connection != NULL) {
                     GError * error = NULL;

                     g_dbus_connection_emit_signal(self->priv->connection,
                                                                        NULL,
                                                                        self->priv->path,
                                                                        NOTIFICATION_ITEM_DBUS_IFACE,
                                                                        "NewIconThemePath",
                                                                        g_variant_new("(s)", self->priv->icon_theme_path),
                                                                        &error);

                     if (error != NULL) {
                            g_warning("Unable to send signal for NewIconThemePath: %s", error->message);
                            g_error_free(error);
                     }
              }
       }

       return;
}

Here is the caller graph for this function:

void app_indicator_set_label ( AppIndicator *  self,
const gchar *  label,
const gchar *  guide 
)

app_indicator_set_label: : The #AppIndicator object to use : The label to show next to the icon.

: A guide to size the label correctly.

This is a wrapper function for the #AppIndicator:label and

AppIndicator:guide properties. This function can take #NULL

as either or and will clear the entries.

Definition at line 2019 of file app-indicator.c.

{
       g_return_if_fail (IS_APP_INDICATOR (self));
       /* Note: The label can be NULL, it's okay */
       /* Note: The guide can be NULL, it's okay */

       g_object_set(G_OBJECT(self),
                    PROP_LABEL_S,       label == NULL ? "" : label,
                    PROP_LABEL_GUIDE_S, guide == NULL ? "" : guide,
                    NULL);

       return;
}

Here is the caller graph for this function:

void app_indicator_set_menu ( AppIndicator *  self,
GtkMenu *  menu 
)

app_indicator_set_menu: : The #AppIndicator : (allow-none): A #GtkMenu to set

Sets the menu that should be shown when the Application Indicator is clicked on in the panel. An application indicator will not be rendered unless it has a menu.

Wrapper function for property #AppIndicator:menu.

Definition at line 2117 of file app-indicator.c.

{
  AppIndicatorPrivate *priv;

  g_return_if_fail (IS_APP_INDICATOR (self));
  g_return_if_fail (GTK_IS_MENU (menu));
  g_return_if_fail (self->priv->clean_id != NULL);

  priv = self->priv;

  if (priv->menu != NULL)
    {
      g_object_unref (priv->menu);
    }

  priv->menu = GTK_WIDGET (menu);
  g_object_ref_sink (priv->menu);

  setup_dbusmenu (self);

  priv->sec_activate_enabled = widget_is_menu_child (self, priv->sec_activate_target);

  check_connect (self);

  return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void app_indicator_set_ordering_index ( AppIndicator *  self,
guint32  ordering_index 
)

app_indicator_set_ordering_index: : The #AppIndicator : A value for the ordering of this app indicator

Sets the ordering index for the app indicator which effects the placement of it on the panel. For almost all app indicator this is not the function you're looking for.

Wrapper function for property #AppIndicator:ordering-index.

Definition at line 2156 of file app-indicator.c.

{
       g_return_if_fail (IS_APP_INDICATOR (self));

       self->priv->ordering_index = ordering_index;

       return;
}
static void app_indicator_set_property ( GObject *  object,
guint  prop_id,
const GValue *  value,
GParamSpec *  pspec 
) [static]

Definition at line 776 of file app-indicator.c.

{
        AppIndicator *self = APP_INDICATOR (object);
        AppIndicatorPrivate *priv = self->priv;
        GEnumValue *enum_val;

        switch (prop_id) {
        case PROP_ID:
          if (priv->id != NULL) {
            g_warning ("Resetting ID value when I already had a value of: %s", priv->id);
            break;
          }

          priv->id = g_strdup (g_value_get_string (value));

          priv->clean_id = g_strdup(priv->id);
          gchar * cleaner;
          for (cleaner = priv->clean_id; *cleaner != '\0'; cleaner++) {
            if (!g_ascii_isalnum(*cleaner)) {
              *cleaner = '_';
            }
          }

          check_connect (self);
          break;

        case PROP_CATEGORY:
          enum_val = g_enum_get_value_by_nick ((GEnumClass *) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_CATEGORY),
                                               g_value_get_string (value));

          if (priv->category != enum_val->value)
            {
              priv->category = enum_val->value;
            }

          break;

        case PROP_STATUS:
          enum_val = g_enum_get_value_by_nick ((GEnumClass *) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_STATUS),
                                               g_value_get_string (value));

          app_indicator_set_status (APP_INDICATOR (object),
                                    enum_val->value);
          break;

        case PROP_ICON_NAME:
          app_indicator_set_icon_full (APP_INDICATOR (object),
                                       g_value_get_string (value),
                                       priv->accessible_desc);
          check_connect (self);
          break;

        case PROP_ICON_DESC:
          app_indicator_set_icon_full (APP_INDICATOR (object),
                                       priv->icon_name,
                                       g_value_get_string (value));
          check_connect (self);
          break;

        case PROP_ATTENTION_ICON_NAME:
          app_indicator_set_attention_icon_full (APP_INDICATOR (object),
                                                 g_value_get_string (value),
                                                 priv->att_accessible_desc);
          break;

        case PROP_ATTENTION_ICON_DESC:
          app_indicator_set_attention_icon_full (APP_INDICATOR (object),
                                                 priv->attention_icon_name,
                                                 g_value_get_string (value));
          break;

        case PROP_ICON_THEME_PATH:
          app_indicator_set_icon_theme_path (APP_INDICATOR (object),
                                            g_value_get_string (value));
          check_connect (self);
          break;

              case PROP_LABEL: {
                gchar * oldlabel = priv->label;
                priv->label = g_value_dup_string(value);

                if (priv->label != NULL && priv->label[0] == '\0') {
                     g_free(priv->label);
                     priv->label = NULL;
                }

                if (g_strcmp0(oldlabel, priv->label) != 0) {
                  signal_label_change(APP_INDICATOR(object));
                }

                if (oldlabel != NULL) {
                     g_free(oldlabel);
                }
                break;
              }
              case PROP_TITLE: {
                gchar * oldtitle = priv->title;
                priv->title = g_value_dup_string(value);

                if (priv->title != NULL && priv->title[0] == '\0') {
                     g_free(priv->title);
                     priv->title = NULL;
                }

                if (g_strcmp0(oldtitle, priv->title) != 0 && self->priv->connection != NULL) {
                     GError * error = NULL;

                     g_dbus_connection_emit_signal(self->priv->connection,
                                                                        NULL,
                                                                        self->priv->path,
                                                                        NOTIFICATION_ITEM_DBUS_IFACE,
                                                                        "NewTitle",
                                                                        NULL,
                                                                        &error);

                     if (error != NULL) {
                            g_warning("Unable to send signal for NewTitle: %s", error->message);
                            g_error_free(error);
                     }
                }

                if (oldtitle != NULL) {
                     g_free(oldtitle);
                }

                if (priv->status_icon != NULL) {
                     gtk_status_icon_set_title(priv->status_icon, priv->title ? priv->title : "");
                }
                break;
              }
              case PROP_LABEL_GUIDE: {
                gchar * oldguide = priv->label_guide;
                priv->label_guide = g_value_dup_string(value);

                if (g_strcmp0(oldguide, priv->label_guide) != 0) {
                  signal_label_change(APP_INDICATOR(object));
                }

                if (priv->label_guide != NULL && priv->label_guide[0] == '\0') {
                     g_free(priv->label_guide);
                     priv->label_guide = NULL;
                }

                if (oldguide != NULL) {
                     g_free(oldguide);
                }
                break;
              }
              case PROP_ORDERING_INDEX:
                priv->ordering_index = g_value_get_uint(value);
                break;

              case PROP_DBUS_MENU_SERVER:
                     g_clear_object (&priv->menuservice);
                     priv->menuservice = DBUSMENU_SERVER (g_value_dup_object(value));
                     break;

        default:
          G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
          break;
        }

       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void app_indicator_set_secondary_activate_target ( AppIndicator *  self,
GtkWidget *  menuitem 
)

app_indicator_set_secondary_activate_target: : The #AppIndicator : (allow-none): A #GtkWidget to be activated on secondary activation

Set the to be activated when a secondary activation event (i.e. a middle-click) is emitted over the #AppIndicator icon/label.

The can be also a complex #GtkWidget, but to get activated when a secondary activation occurs in the #Appindicator, it must be a visible and active child (or inner-child) of the #AppIndicator:menu.

Setting to NULL causes to disable this feature.

Definition at line 2180 of file app-indicator.c.

{
       g_return_if_fail (IS_APP_INDICATOR (self));
       AppIndicatorPrivate *priv = self->priv;

       if (priv->sec_activate_target) {
              g_signal_handlers_disconnect_by_func (priv->sec_activate_target,
                                                    sec_activate_target_parent_changed,
                                                    self);
              g_object_unref(G_OBJECT(priv->sec_activate_target));
              priv->sec_activate_target = NULL;
       }

       if (menuitem == NULL) {
              return;
       }

       g_return_if_fail (GTK_IS_WIDGET (menuitem));

       priv->sec_activate_target = g_object_ref(G_OBJECT(menuitem));
       priv->sec_activate_enabled = widget_is_menu_child(self, menuitem);
       g_signal_connect(menuitem, "parent-set", G_CALLBACK(sec_activate_target_parent_changed), self);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void app_indicator_set_status ( AppIndicator *  self,
AppIndicatorStatus  status 
)

app_indicator_get_type:

Generates or returns the unique #GType for #AppIndicator.

Return value: A unique #GType for #AppIndicator objects. app_indicator_set_status: : The #AppIndicator object to use : The status to set for this indicator

Wrapper function for property #AppIndicator:status.

Definition at line 1826 of file app-indicator.c.

{
       g_return_if_fail (IS_APP_INDICATOR (self));

       if (self->priv->status != status) {
              GEnumValue *value = g_enum_get_value ((GEnumClass *) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_STATUS), status);

              self->priv->status = status;
              g_signal_emit (self, signals[NEW_STATUS], 0, value->value_nick);

              if (self->priv->dbus_registration != 0 && self->priv->connection != NULL) {
                     GError * error = NULL;

                     g_dbus_connection_emit_signal(self->priv->connection,
                                                                        NULL,
                                                                        self->priv->path,
                                                                        NOTIFICATION_ITEM_DBUS_IFACE,
                                                                        "NewStatus",
                                                                        g_variant_new("(s)", value->value_nick),
                                                                        &error);

                     if (error != NULL) {
                            g_warning("Unable to send signal for NewStatus: %s", error->message);
                            g_error_free(error);
                     }
              }
       }

       return;
}

Here is the caller graph for this function:

void app_indicator_set_title ( AppIndicator *  self,
const gchar *  title 
)

app_indicator_set_title: : The #AppIndicator : (allow-none): Title of the app indicator

Sets the title of the application indicator, or how it should be referred in a human readable form. This string should be UTF-8 and localized as it expected that users will set it.

In the Unity desktop the most prominent place that this is show will be in the HUD. HUD listings for this application indicator will start with the title as the first part of the line for the menu items.

Setting to NULL removes the title.

Since: 0.5

Definition at line 2223 of file app-indicator.c.

{
       g_return_if_fail (IS_APP_INDICATOR (self));

       g_object_set(G_OBJECT(self),
                    PROP_TITLE_S, title == NULL ? "": title,
                    NULL);

       return;
}

Here is the caller graph for this function:

static gchar * append_panel_icon_suffix ( const gchar *  icon_name) [static]

Definition at line 1703 of file app-indicator.c.

{
       gchar * long_name = NULL;

       if (!g_str_has_suffix (icon_name, PANEL_ICON_SUFFIX)) {
              long_name =
                  g_strdup_printf("%s-%s", icon_name, PANEL_ICON_SUFFIX);
        } else {
              long_name = g_strdup (icon_name);
        }

       return long_name;    
}

Here is the caller graph for this function:

static void bus_creation ( GObject *  obj,
GAsyncResult *  res,
gpointer  user_data 
) [static]

Definition at line 1030 of file app-indicator.c.

{
       GError * error = NULL;

       GDBusConnection * connection = g_bus_get_finish(res, &error);
       if (error != NULL) {
              g_warning("Unable to get the session bus: %s", error->message);
              g_error_free(error);
              g_object_unref(G_OBJECT(user_data));
              return;
       }

       AppIndicator * app = APP_INDICATOR(user_data);
       app->priv->connection = connection;

       /* If the connection was blocking the exporting of the
          object this function will export everything. */
       check_connect(app);

       g_object_unref(G_OBJECT(app));

       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static GVariant * bus_get_prop ( GDBusConnection *  connection,
const gchar *  sender,
const gchar *  path,
const gchar *  interface,
const gchar *  property,
GError **  error,
gpointer  user_data 
) [static]

Definition at line 1105 of file app-indicator.c.

{
       g_return_val_if_fail(IS_APP_INDICATOR(user_data), NULL);
       AppIndicator * app = APP_INDICATOR(user_data);
       AppIndicatorPrivate *priv = app->priv;

       if (g_strcmp0(property, "Id") == 0) {
              return g_variant_new_string(app->priv->id ? app->priv->id : "");
       } else if (g_strcmp0(property, "Category") == 0) {
        GEnumValue *enum_value;
              enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_CATEGORY), priv->category);
              return g_variant_new_string(enum_value->value_nick ? enum_value->value_nick : "");
       } else if (g_strcmp0(property, "Status") == 0) {
        GEnumValue *enum_value;
              enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_STATUS), priv->status);
              return g_variant_new_string(enum_value->value_nick ? enum_value->value_nick : "");
       } else if (g_strcmp0(property, "IconName") == 0) {
              return g_variant_new_string(priv->icon_name ? priv->icon_name : "");
       } else if (g_strcmp0(property, "AttentionIconName") == 0) {
              return g_variant_new_string(priv->attention_icon_name ? priv->attention_icon_name : "");
       } else if (g_strcmp0(property, "Title") == 0) {
              const gchar * output = NULL;
              if (priv->title == NULL) {
                     const gchar * name = g_get_application_name();
                     if (name != NULL) {
                            output = name;
                     } else {
                            output = "";
                     }
              } else {
                     output = priv->title;
              }
              return g_variant_new_string(output);
       } else if (g_strcmp0(property, "IconThemePath") == 0) {
              return g_variant_new_string(priv->icon_theme_path ? priv->icon_theme_path : "");
       } else if (g_strcmp0(property, "Menu") == 0) {
              if (priv->menuservice != NULL) {
                     GValue strval = { 0 };
                     g_value_init(&strval, G_TYPE_STRING);
                     g_object_get_property (G_OBJECT (priv->menuservice), DBUSMENU_SERVER_PROP_DBUS_OBJECT, &strval);
                     GVariant * var = g_variant_new("o", g_value_get_string(&strval));
                     g_value_unset(&strval);
                     return var;
              } else {
                     return g_variant_new("o", "/");
              }
       } else if (g_strcmp0(property, "XAyatanaLabel") == 0) {
              return g_variant_new_string(priv->label ? priv->label : "");
       } else if (g_strcmp0(property, "XAyatanaLabelGuide") == 0) {
              return g_variant_new_string(priv->label_guide ? priv->label_guide : "");
       } else if (g_strcmp0(property, "XAyatanaOrderingIndex") == 0) {
              return g_variant_new_uint32(priv->ordering_index);
       } else if (g_strcmp0(property, "IconAccessibleDesc") == 0) {
              return g_variant_new_string(priv->accessible_desc ? priv->accessible_desc : "");
       } else if (g_strcmp0(property, "AttentionAccessibleDesc") == 0) {
              return g_variant_new_string(priv->att_accessible_desc ? priv->att_accessible_desc : "");
       }

       *error = g_error_new(0, 0, "Unknown property: %s", property);
       return NULL;
}
static void bus_method_call ( GDBusConnection *  connection,
const gchar *  sender,
const gchar *  path,
const gchar *  interface,
const gchar *  method,
GVariant *  params,
GDBusMethodInvocation *  invocation,
gpointer  user_data 
) [static]

Definition at line 1055 of file app-indicator.c.

{
       g_return_if_fail(IS_APP_INDICATOR(user_data));

       AppIndicator * app = APP_INDICATOR(user_data);
       AppIndicatorPrivate * priv = app->priv;
       GVariant * retval = NULL;

       if (g_strcmp0(method, "Scroll") == 0) {
              guint direction;
              gint delta;
              const gchar *orientation;

              g_variant_get(params, "(i&s)", &delta, &orientation);

              if (g_strcmp0(orientation, "horizontal") == 0) {
                     direction = (delta >= 0) ? GDK_SCROLL_RIGHT : GDK_SCROLL_LEFT;
              } else if (g_strcmp0(orientation, "vertical") == 0) {
                     direction = (delta >= 0) ? GDK_SCROLL_DOWN : GDK_SCROLL_UP;
              } else {
                     g_dbus_method_invocation_return_value(invocation, retval);
                     return;
              }

              delta = ABS(delta);
              g_signal_emit(app, signals[SCROLL_EVENT], 0, delta, direction);

       } else if (g_strcmp0(method, "SecondaryActivate") == 0 ||
                  g_strcmp0(method, "XAyatanaSecondaryActivate") == 0) {
              GtkWidget *menuitem = priv->sec_activate_target;
              
              if (priv->sec_activate_enabled && menuitem &&
                  gtk_widget_get_visible (menuitem) &&
                  gtk_widget_get_sensitive (menuitem))
              {
                     gtk_widget_activate (menuitem);
              }
       } else {
              g_warning("Calling method '%s' on the app-indicator and it's unknown", method);
       }

       g_dbus_method_invocation_return_value(invocation, retval);
}
static void bus_watcher_ready ( GObject *  obj,
GAsyncResult *  res,
gpointer  user_data 
) [static]

Definition at line 1292 of file app-indicator.c.

{
       GError * error = NULL;

       GDBusProxy * proxy = NULL;
       if (res != NULL) {
              proxy = g_dbus_proxy_new_finish(res, &error);
       }

       if (error != NULL) {
              /* Unable to get proxy, but we're handling that now so
                 it's not a warning anymore. */
              g_error_free(error);

              if (IS_APP_INDICATOR(user_data)) {
                     start_fallback_timer(APP_INDICATOR(user_data), FALSE);
              }

              g_object_unref(G_OBJECT(user_data));
              return;
       }

       AppIndicator * app = APP_INDICATOR(user_data);

       if (res != NULL) {
              app->priv->watcher_proxy = proxy;

              /* Setting up a signal to watch when the unique name
                 changes */
              g_signal_connect(G_OBJECT(app->priv->watcher_proxy), "notify::g-name-owner", G_CALLBACK(watcher_owner_changed), user_data);
       }

       /* Let's insure that someone is on the other side, else we're
          still in a fallback scenario. */
       gchar * name = g_dbus_proxy_get_name_owner(app->priv->watcher_proxy);
       if (name == NULL) {
              start_fallback_timer(APP_INDICATOR(user_data), FALSE);
              g_object_unref(G_OBJECT(user_data));
              return;
       }
       g_free(name);

       /* g_object_unref(G_OBJECT(user_data)); */
       /* Why is this commented out?  Oh, wait, we don't want to
          unref in this case because we need to ref again to do the
          register callback.  Let's not unref to ref again. */

       g_dbus_proxy_call(app->priv->watcher_proxy,
                         "RegisterStatusNotifierItem",
                         g_variant_new("(s)", app->priv->path),
                         G_DBUS_CALL_FLAGS_NONE,
                                     -1,
                         NULL, /* cancelable */
                         register_service_cb,
                         user_data);

       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static const gchar* category_from_enum ( AppIndicatorCategory  category) [static]

Definition at line 1424 of file app-indicator.c.

{
  GEnumValue *value;

  value = g_enum_get_value ((GEnumClass *)g_type_class_ref (APP_INDICATOR_TYPE_INDICATOR_CATEGORY), category);
  return value->value_nick;
}

Here is the caller graph for this function:

static void check_connect ( AppIndicator *  self) [static]

Definition at line 1221 of file app-indicator.c.

{
       AppIndicatorPrivate *priv = self->priv;

       /* Do we have a connection? */
       if (priv->connection == NULL) return;

       /* If we already have a proxy, let's see if it has someone
          implementing it.  If not, we can't do much more than to
          do nothing. */
       if (priv->watcher_proxy != NULL) {
              gchar * name = g_dbus_proxy_get_name_owner(priv->watcher_proxy);
              if (name == NULL) {
                     return;
              }
              g_free(name);
       }

       /* Do we have enough information? */
       if (priv->menu == NULL) return;
       if (priv->icon_name == NULL) return;
       if (priv->id == NULL) return;

       if (priv->path == NULL) {
              priv->path = g_strdup_printf(DEFAULT_ITEM_PATH "/%s", priv->clean_id);
       }

       if (priv->dbus_registration == 0) {
              GError * error = NULL;
              priv->dbus_registration = g_dbus_connection_register_object(priv->connection,
                                                                          priv->path,
                                                                          item_interface_info,
                                                                          &item_interface_table,
                                                                          self,
                                                                          NULL,
                                                                          &error);
              if (error != NULL) {
                     g_warning("Unable to register object on path '%s': %s", priv->path, error->message);
                     g_error_free(error);
                     return;
              }
       }

       /* NOTE: It's really important the order here.  We make sure to *publish*
          the object on the bus and *then* get the proxy.  The reason is that we
          want to ensure all the filters are setup before talking to the watcher
          and that's where the order is important. */

       g_object_ref(G_OBJECT(self)); /* Unref in watcher_ready() */
       if (priv->watcher_proxy == NULL) {
              /* Build Watcher Proxy */
              g_dbus_proxy_new(priv->connection,
                               G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES|
                               G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS, /* We don't use these, don't bother with them */
                               watcher_interface_info,
                               NOTIFICATION_WATCHER_DBUS_ADDR,
                               NOTIFICATION_WATCHER_DBUS_OBJ,
                               NOTIFICATION_WATCHER_DBUS_IFACE,
                               NULL, /* cancellable */
                               bus_watcher_ready,
                               self);
       } else {
              bus_watcher_ready(NULL, NULL, self);
       }

       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static GtkStatusIcon * fallback ( AppIndicator *  self) [static]

Definition at line 1521 of file app-indicator.c.

{
       GtkStatusIcon * icon = gtk_status_icon_new();

       gtk_status_icon_set_name(icon, app_indicator_get_id(self));
       const gchar * title = app_indicator_get_title(self);
       if (title != NULL) {
              gtk_status_icon_set_title(icon, title);
       }
       
       g_signal_connect(G_OBJECT(self), APP_INDICATOR_SIGNAL_NEW_STATUS,
              G_CALLBACK(status_icon_status_wrapper), icon);
       g_signal_connect(G_OBJECT(self), APP_INDICATOR_SIGNAL_NEW_ICON,
              G_CALLBACK(status_icon_changes), icon);
       g_signal_connect(G_OBJECT(self), APP_INDICATOR_SIGNAL_NEW_ATTENTION_ICON,
              G_CALLBACK(status_icon_changes), icon);

       status_icon_changes(self, icon);

       g_signal_connect(G_OBJECT(icon), "activate", G_CALLBACK(status_icon_activate), self);
       g_signal_connect(G_OBJECT(icon), "popup-menu", G_CALLBACK(status_icon_menu_activate), self);
       g_signal_connect(G_OBJECT(icon), "scroll-event", G_CALLBACK(scroll_event_wrapper), self);
       g_signal_connect(G_OBJECT(icon), "button-release-event", G_CALLBACK(middle_click_wrapper), self);

       return icon;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static gboolean fallback_timer_expire ( gpointer  data) [static]

Definition at line 1465 of file app-indicator.c.

{
       g_return_val_if_fail(IS_APP_INDICATOR(data), FALSE);

       AppIndicatorPrivate * priv = APP_INDICATOR(data)->priv;
       AppIndicatorClass * class = APP_INDICATOR_GET_CLASS(data);

       if (priv->status_icon == NULL) {
              if (class->fallback != NULL) {
                     priv->status_icon = class->fallback(APP_INDICATOR(data));
              } 
       } else {
              if (class->unfallback != NULL) {
                     class->unfallback(APP_INDICATOR(data), priv->status_icon);
                     priv->status_icon = NULL;
              } else {
                     g_warning("No 'unfallback' function but the 'fallback' function returned a non-NULL result.");
              }
       }

       priv->fallback_timer = 0;
       return FALSE;
}

Here is the caller graph for this function:

G_DEFINE_TYPE ( AppIndicator  ,
app_indicator  ,
G_TYPE_OBJECT   
)
static gboolean middle_click_wrapper ( GtkWidget *  status_icon,
GdkEventButton *  event,
gpointer  user_data 
) [static]

Definition at line 1569 of file app-indicator.c.

{
       g_return_val_if_fail(IS_APP_INDICATOR(data), FALSE);
       AppIndicator * app = APP_INDICATOR(data);
       AppIndicatorPrivate *priv = app->priv;

       if (event->button == 2 && event->type == GDK_BUTTON_RELEASE) {
              GtkAllocation alloc;
              gint px = event->x;
              gint py = event->y;
              gtk_widget_get_allocation (status_icon, &alloc);
              GtkWidget *menuitem = priv->sec_activate_target;

              if (px >= 0 && px < alloc.width && py >= 0 && py < alloc.height &&
                  priv->sec_activate_enabled && menuitem &&
                  gtk_widget_get_visible (menuitem) &&
                  gtk_widget_get_sensitive (menuitem))
              {
                     gtk_widget_activate (menuitem);
                     return TRUE;
              }
       }

       return FALSE;
}

Here is the caller graph for this function:

static void register_service_cb ( GObject *  obj,
GAsyncResult *  res,
gpointer  user_data 
) [static]

Definition at line 1383 of file app-indicator.c.

{
       GError * error = NULL;
       GVariant * returns = g_dbus_proxy_call_finish(G_DBUS_PROXY(obj), res, &error);

       /* We don't care about any return values */
       if (returns != NULL) {
              g_variant_unref(returns);
       }

       if (error != NULL) {
              /* They didn't respond, ewww.  Not sure what they could
                 be doing */
              g_warning("Unable to connect to the Notification Watcher: %s", error->message);
              start_fallback_timer(APP_INDICATOR(user_data), TRUE);
              g_object_unref(G_OBJECT(user_data));
              return;
       }

       g_return_if_fail(IS_APP_INDICATOR(user_data));
       AppIndicator * app = APP_INDICATOR(user_data);
       AppIndicatorPrivate * priv = app->priv;

       /* Emit the AppIndicator::connection-changed signal*/
    g_signal_emit (app, signals[CONNECTION_CHANGED], 0, TRUE);

       if (priv->status_icon) {
              AppIndicatorClass * class = APP_INDICATOR_GET_CLASS(app);
              if (class->unfallback != NULL) {
                     class->unfallback(app, priv->status_icon);
                     priv->status_icon = NULL;
              } 
       }

       g_object_unref(G_OBJECT(user_data));
       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static gboolean scroll_event_wrapper ( GtkWidget *  status_icon,
GdkEventScroll *  event,
gpointer  user_data 
) [static]

Definition at line 1559 of file app-indicator.c.

{
       g_return_val_if_fail(IS_APP_INDICATOR(data), FALSE);
       AppIndicator * app = APP_INDICATOR(data);
       g_signal_emit(app, signals[SCROLL_EVENT], 0, 1, event->direction);

       return TRUE;
}

Here is the caller graph for this function:

static void sec_activate_target_parent_changed ( GtkWidget *  menuitem,
GtkWidget *  old_parent,
gpointer  user_data 
) [static]

Definition at line 1741 of file app-indicator.c.

{
       g_return_if_fail(IS_APP_INDICATOR(data));
       AppIndicator *self = data;
       self->priv->sec_activate_enabled = widget_is_menu_child(self, menuitem);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void setup_dbusmenu ( AppIndicator *  self) [static]

Definition at line 2078 of file app-indicator.c.

{
       AppIndicatorPrivate *priv;
       DbusmenuMenuitem *root = NULL;

       priv = self->priv;

       if (priv->menu) {
              root = dbusmenu_gtk_parse_menu_structure(priv->menu);
       }

       if (priv->menuservice == NULL) {
              gchar * path = g_strdup_printf(DEFAULT_ITEM_PATH "/%s/Menu", priv->clean_id);
              priv->menuservice = dbusmenu_server_new (path);
              g_free(path);
       }

       dbusmenu_server_set_root (priv->menuservice, root);

       /* Drop our local ref as set_root should get it's own. */
       if (root != NULL) {
              g_object_unref(root);
       }

       return;
}

Here is the caller graph for this function:

static void shorty_activated_cb ( DbusmenuMenuitem *  mi,
guint  timestamp,
gpointer  user_data 
) [static]

Definition at line 2477 of file app-indicator.c.

{
       gchar * nick = g_object_get_data(G_OBJECT(mi), APP_INDICATOR_SHORTY_NICK);
       g_return_if_fail(nick != NULL);

       g_return_if_fail(IS_APP_INDICATOR(user_data));
       AppIndicator * self = APP_INDICATOR(user_data);
       AppIndicatorPrivate *priv = self->priv;

       g_return_if_fail(priv->shorties != NULL);

       indicator_desktop_shortcuts_nick_exec(priv->shorties, nick);

       return;
}

Here is the caller graph for this function:

static void signal_label_change ( AppIndicator *  self) [static]

Definition at line 1204 of file app-indicator.c.

{
       AppIndicatorPrivate *priv = self->priv;

       /* don't set it twice */
       if (priv->label_change_idle != 0) {
              return;
       }

       priv->label_change_idle = g_idle_add(signal_label_change_idle, self);
       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static gboolean signal_label_change_idle ( gpointer  user_data) [static]

Definition at line 1169 of file app-indicator.c.

{
       AppIndicator * self = (AppIndicator *)user_data;
       AppIndicatorPrivate *priv = self->priv;

       gchar * label = priv->label != NULL ? priv->label : "";
       gchar * guide = priv->label_guide != NULL ? priv->label_guide : "";

       g_signal_emit(G_OBJECT(self), signals[NEW_LABEL], 0,
                     label, guide, TRUE);
       if (priv->dbus_registration != 0 && priv->connection != NULL) {
              GError * error = NULL;

              g_dbus_connection_emit_signal(priv->connection,
                                            NULL,
                                            priv->path,
                                            NOTIFICATION_ITEM_DBUS_IFACE,
                                            "XAyatanaNewLabel",
                                            g_variant_new("(ss)", label, guide),
                                            &error);

              if (error != NULL) {
                     g_warning("Unable to send signal for NewIcon: %s", error->message);
                     g_error_free(error);
              }
       }

       priv->label_change_idle = 0;

       return FALSE;
}

Here is the caller graph for this function:

static void start_fallback_timer ( AppIndicator *  self,
gboolean  disable_timeout 
) [static]

Definition at line 1437 of file app-indicator.c.

{
       g_return_if_fail(IS_APP_INDICATOR(self));
       AppIndicatorPrivate * priv = APP_INDICATOR(self)->priv;

       if (priv->fallback_timer != 0) {
              /* The timer is set, let's just be happy with the one
                 we've already got running */
              return;
       }

       if (priv->status_icon != NULL) {
              /* We're already fallen back.  Let's not do it again. */
              return;
       }

       if (disable_timeout) {
              fallback_timer_expire(self);
       } else {
              priv->fallback_timer = g_timeout_add(DEFAULT_FALLBACK_TIMER, fallback_timer_expire, self);
       }

       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void status_icon_activate ( GtkStatusIcon *  icon,
gpointer  data 
) [static]

Definition at line 1661 of file app-indicator.c.

{
       GtkMenu * menu = app_indicator_get_menu(APP_INDICATOR(data));
       if (menu == NULL)
              return;
       
       gtk_menu_popup(menu,
                      NULL, /* Parent Menu */
                      NULL, /* Parent item */
                      gtk_status_icon_position_menu,
                      icon,
                      1, /* Button */
                      gtk_get_current_event_time());

       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void status_icon_changes ( AppIndicator *  self,
gpointer  data 
) [static]

Definition at line 1598 of file app-indicator.c.

{
       GtkStatusIcon * icon = GTK_STATUS_ICON(data);

       /* add the icon_theme_path once if needed */
       GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
       if (self->priv->icon_theme_path != NULL) {
              gchar **path;
              gint n_elements, i;
              gboolean found=FALSE;
              gtk_icon_theme_get_search_path(icon_theme, &path, &n_elements);
              for (i=0; i< n_elements || path[i] == NULL; i++) {
                     if(g_strcmp0(path[i], self->priv->icon_theme_path) == 0) {
                            found=TRUE;
                            break;
                     }
              }
              if(!found) {
                     gtk_icon_theme_append_search_path(icon_theme, self->priv->icon_theme_path);
              }
              g_strfreev (path);
       }

       const gchar * icon_name = NULL;
       switch (app_indicator_get_status(self)) {
       case APP_INDICATOR_STATUS_PASSIVE:
              /* hide first to avoid that the change is visible to the user */
              gtk_status_icon_set_visible(icon, FALSE);
              icon_name = app_indicator_get_icon(self);
              break;
       case APP_INDICATOR_STATUS_ACTIVE:
              icon_name = app_indicator_get_icon(self);
              gtk_status_icon_set_visible(icon, TRUE);
              break;
       case APP_INDICATOR_STATUS_ATTENTION:
              /* get the _attention_ icon here */
              icon_name = app_indicator_get_attention_icon(self);
              gtk_status_icon_set_visible(icon, TRUE);
              break;
       };

       if (icon_name != NULL) {
              if (g_file_test(icon_name, G_FILE_TEST_EXISTS)) {
                     gtk_status_icon_set_from_file(icon, icon_name);
              } else {
                     gchar *longname = append_panel_icon_suffix(icon_name);

                     if (longname != NULL && gtk_icon_theme_has_icon (icon_theme, longname)) {
                            gtk_status_icon_set_from_icon_name(icon, longname);
                     } else {
                            gtk_status_icon_set_from_icon_name(icon, icon_name);
                     }

                     g_free(longname);
              }
       }

       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void status_icon_menu_activate ( GtkStatusIcon *  status_icon,
guint  button,
guint  activate_time,
gpointer  user_data 
) [static]

Definition at line 1681 of file app-indicator.c.

{
       status_icon_activate(status_icon, user_data);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void status_icon_status_wrapper ( AppIndicator *  self,
const gchar *  status,
gpointer  data 
) [static]

Definition at line 1551 of file app-indicator.c.

{
       return status_icon_changes(self, data);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void theme_changed_cb ( GtkIconTheme *  theme,
gpointer  user_data 
) [static]

Definition at line 1491 of file app-indicator.c.

{
       g_signal_emit (user_data, signals[NEW_ICON], 0, TRUE);

       AppIndicator * self = (AppIndicator *)user_data;
       AppIndicatorPrivate *priv = self->priv;

       if (priv->dbus_registration != 0 && priv->connection != NULL) {
              GError * error = NULL;

              g_dbus_connection_emit_signal(priv->connection,
                                            NULL,
                                            priv->path,
                                            NOTIFICATION_ITEM_DBUS_IFACE,
                                            "NewIcon",
                                            NULL,
                                            &error);

              if (error != NULL) {
                     g_warning("Unable to send signal for NewIcon: %s", error->message);
                     g_error_free(error);
              }
       }

       return;
}

Here is the caller graph for this function:

static void unfallback ( AppIndicator *  self,
GtkStatusIcon *  status_icon 
) [static]

Definition at line 1689 of file app-indicator.c.

{
       g_signal_handlers_disconnect_by_func(G_OBJECT(self), status_icon_status_wrapper, status_icon);
       g_signal_handlers_disconnect_by_func(G_OBJECT(self), status_icon_changes, status_icon);
       g_signal_handlers_disconnect_by_func(G_OBJECT(self), scroll_event_wrapper, status_icon);
       g_signal_handlers_disconnect_by_func(G_OBJECT(self), middle_click_wrapper, status_icon);
       gtk_status_icon_set_visible(status_icon, FALSE);
       g_object_unref(G_OBJECT(status_icon));
       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void watcher_owner_changed ( GObject *  obj,
GParamSpec *  pspec,
gpointer  user_data 
) [static]

Definition at line 1354 of file app-indicator.c.

{
       AppIndicator * self = APP_INDICATOR(user_data);
       g_return_if_fail(self != NULL);
       g_return_if_fail(self->priv->watcher_proxy != NULL);

       gchar * name = g_dbus_proxy_get_name_owner(self->priv->watcher_proxy);

       if (name == NULL) {
              /* Emit the AppIndicator::connection-changed signal*/
              g_signal_emit (self, signals[CONNECTION_CHANGED], 0, FALSE);
              
              start_fallback_timer(self, FALSE);
       } else {
              if (self->priv->fallback_timer != 0) {
                     /* Stop the timer */
                     g_source_remove(self->priv->fallback_timer);
                     self->priv->fallback_timer = 0;
              }

              check_connect(self);
       }

       return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

static gboolean widget_is_menu_child ( AppIndicator *  self,
GtkWidget *  child 
) [static]

Definition at line 1718 of file app-indicator.c.

{
       g_return_val_if_fail(IS_APP_INDICATOR(self), FALSE);

       if (!self->priv->menu) return FALSE;
       if (!child) return FALSE;

       GtkWidget *parent;

       while ((parent = gtk_widget_get_parent(child))) {
              if (parent == self->priv->menu)
                     return TRUE;

              if (GTK_IS_MENU(parent))
                     child = gtk_menu_get_attach_widget(GTK_MENU(parent));
              else
                     child = parent;
       }

       return FALSE;
}

Here is the caller graph for this function:


Variable Documentation

GDBusInterfaceInfo* item_interface_info = NULL [static]

Definition at line 163 of file app-indicator.c.

const GDBusInterfaceVTable item_interface_table [static]
Initial value:
 {
       method_call:    bus_method_call,
       get_property:   bus_get_prop,
       set_property:   NULL 
}

Definition at line 198 of file app-indicator.c.

GDBusNodeInfo* item_node_info = NULL [static]

Definition at line 162 of file app-indicator.c.

guint signals[LAST_SIGNAL] = { 0 } [static]

Definition at line 113 of file app-indicator.c.

GDBusInterfaceInfo* watcher_interface_info = NULL [static]

Definition at line 165 of file app-indicator.c.

GDBusNodeInfo* watcher_node_info = NULL [static]

Definition at line 164 of file app-indicator.c.