diff options
| author | Michal Hruby <michal.mhr@gmail.com> | 2011-11-17 10:46:00 +0100 |
|---|---|---|
| committer | Michal Hruby <michal.mhr@gmail.com> | 2011-11-17 10:46:00 +0100 |
| commit | af3311cc6dc512142b672d2fbaf3d7124486ce23 (patch) | |
| tree | 1176c154b75eff38046e8fbb11e997e75bf7e02f /services | |
| parent | d0893df53cb0c1e41269c24e2217e5c1272943ab (diff) | |
Let's not waste precious CPU cycles
(bzr r1735.3.2)
Diffstat (limited to 'services')
| -rw-r--r-- | services/panel-service.c | 60 |
1 files changed, 36 insertions, 24 deletions
diff --git a/services/panel-service.c b/services/panel-service.c index 8c004764f..c38111616 100644 --- a/services/panel-service.c +++ b/services/panel-service.c @@ -325,23 +325,30 @@ get_entry_at (PanelService *self, gint x, gint y) return NULL; } -static IndicatorObjectEntry * -panel_service_get_entry_by_id (PanelService *self, const gchar *entry_id) +static void +panel_service_get_indicator_entry_by_id (PanelService *self, + const gchar *entry_id, + IndicatorObjectEntry **entry, + IndicatorObject **object) { - IndicatorObjectEntry *entry; + IndicatorObject *indicator; + IndicatorObjectEntry *probably_entry; PanelServicePrivate *priv = self->priv; - + /* FIXME: eeek, why do we even do this? */ - if (sscanf (entry_id, "%p", &entry) == 1) + if (sscanf (entry_id, "%p", &probably_entry) == 1) { /* check that there really is such IndicatorObjectEntry */ - if (g_hash_table_lookup (priv->entry2indicator_hash, entry) != NULL) - { - return entry; - } + indicator = g_hash_table_lookup (priv->entry2indicator_hash, + probably_entry); + if (object) *object = indicator; + if (entry) *entry = indicator != NULL ? probably_entry : NULL; + } + else + { + if (object) *object = NULL; + if (entry) *entry = NULL; } - - return NULL; } static gboolean @@ -1140,9 +1147,11 @@ panel_service_sync_geometry (PanelService *self, gint width, gint height) { - PanelServicePrivate *priv = self->priv; - IndicatorObjectEntry *entry = panel_service_get_entry_by_id (self, entry_id); - IndicatorObject *object = g_hash_table_lookup (priv->entry2indicator_hash, entry); + IndicatorObject *object; + IndicatorObjectEntry *entry; + PanelServicePrivate *priv = self->priv; + + panel_service_get_indicator_entry_by_id (self, entry_id, &entry, &object); if (entry) { @@ -1365,10 +1374,12 @@ panel_service_show_entry (PanelService *self, gint32 y, gint32 button) { - PanelServicePrivate *priv = self->priv; - IndicatorObjectEntry *entry = panel_service_get_entry_by_id (self, entry_id); - IndicatorObject *object = g_hash_table_lookup (priv->entry2indicator_hash, entry); + IndicatorObject *object; + IndicatorObjectEntry *entry; GtkWidget *last_menu; + PanelServicePrivate *priv = self->priv; + + panel_service_get_indicator_entry_by_id (self, entry_id, &entry, &object); g_return_if_fail (entry); @@ -1458,11 +1469,11 @@ panel_service_secondary_activate_entry (PanelService *self, const gchar *entry_id, guint32 timestamp) { - PanelServicePrivate *priv = self->priv; - IndicatorObjectEntry *entry = panel_service_get_entry_by_id (self, entry_id); - g_return_if_fail (entry); + IndicatorObject *object; + IndicatorObjectEntry *entry; - IndicatorObject *object = g_hash_table_lookup (priv->entry2indicator_hash, entry); + panel_service_get_indicator_entry_by_id (self, entry_id, &entry, &object); + g_return_if_fail (entry); g_signal_emit_by_name(object, INDICATOR_OBJECT_SIGNAL_SECONDARY_ACTIVATE, entry, timestamp); @@ -1473,11 +1484,12 @@ panel_service_scroll_entry (PanelService *self, const gchar *entry_id, gint32 delta) { - PanelServicePrivate *priv = self->priv; - IndicatorObjectEntry *entry = panel_service_get_entry_by_id (self, entry_id); + IndicatorObject *object; + IndicatorObjectEntry *entry; + + panel_service_get_indicator_entry_by_id (self, entry_id, &entry, &object); g_return_if_fail (entry); - IndicatorObject *object = g_hash_table_lookup (priv->entry2indicator_hash, entry); GdkScrollDirection direction = delta < 0 ? GDK_SCROLL_DOWN : GDK_SCROLL_UP; g_signal_emit_by_name(object, INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED, entry, |
