summaryrefslogtreecommitdiff
path: root/services
diff options
authorMichal Hruby <michal.mhr@gmail.com>2011-11-17 10:46:00 +0100
committerMichal Hruby <michal.mhr@gmail.com>2011-11-17 10:46:00 +0100
commitaf3311cc6dc512142b672d2fbaf3d7124486ce23 (patch)
tree1176c154b75eff38046e8fbb11e997e75bf7e02f /services
parentd0893df53cb0c1e41269c24e2217e5c1272943ab (diff)
Let's not waste precious CPU cycles
(bzr r1735.3.2)
Diffstat (limited to 'services')
-rw-r--r--services/panel-service.c60
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,