diff options
Diffstat (limited to 'libindicate')
-rw-r--r-- | libindicate/interests.h | 2 | ||||
-rw-r--r-- | libindicate/server.c | 62 |
2 files changed, 63 insertions, 1 deletions
diff --git a/libindicate/interests.h b/libindicate/interests.h index 5733199..70c52d9 100644 --- a/libindicate/interests.h +++ b/libindicate/interests.h @@ -42,7 +42,7 @@ enum _IndicateInterests { INDICATE_INTEREST_INDICATOR_DISPLAY, /**< Displays indicators to the user */ INDICATE_INTEREST_INDICATOR_SIGNAL, /**< Will return signals based on individual indicators being responded to */ INDICATE_INTEREST_INDICATOR_COUNT, /**< Only displays a count of the indicators */ - INDICATE_INTEREST_INDICATOR_LAST /**< Makes merges and counting easier */ + INDICATE_INTEREST_LAST /**< Makes merges and counting easier */ }; G_END_DECLS diff --git a/libindicate/server.c b/libindicate/server.c index e560ba8..3a8907c 100644 --- a/libindicate/server.c +++ b/libindicate/server.c @@ -88,11 +88,20 @@ struct _IndicateServerPrivate // TODO: Should have a more robust way to track this, but this'll work for now guint num_hidden; + + gboolean interests[INDICATE_INTEREST_LAST]; + GList * interestedfolks; }; #define INDICATE_SERVER_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), INDICATE_TYPE_SERVER, IndicateServerPrivate)) +typedef struct _IndicateServerInterestedFolk IndicateServerInterestedFolk; +struct _IndicateServerInterestedFolk { + gchar * sender; + gboolean interests[INDICATE_INTEREST_LAST]; +}; + /* Define Type */ G_DEFINE_TYPE (IndicateServer, indicate_server, G_TYPE_OBJECT); @@ -113,6 +122,10 @@ static void get_property (GObject * obj, guint id, GValue * value, GParamSpec * static gboolean show_interest (IndicateServer * server, gchar * sender, IndicateInterests interest); static gboolean remove_interest (IndicateServer * server, gchar * sender, IndicateInterests interest); static gboolean check_interest (IndicateServer * server, IndicateInterests intrest); +static gint indicate_server_interested_folks_equal (gconstpointer a, gconstpointer b); +static void indicate_server_interested_folks_init (IndicateServerInterestedFolk * folk); +static void indicate_server_interested_folks_set (IndicateServerInterestedFolk * folk, IndicateInterests interest, gboolean value); +static void indicate_server_interested_folks_copy (IndicateServerInterestedFolk * folk, gboolean * interests); /* DBus API */ gboolean indicate_server_get_indicator_count (IndicateServer * server, guint * count, GError **error); @@ -247,6 +260,13 @@ indicate_server_init (IndicateServer * server) priv->type = NULL; priv->desktop = NULL; + guint i; + for (i = INDICATE_INTEREST_NONE; i < INDICATE_INTEREST_LAST; i++) { + priv->interests[i] = FALSE; + } + priv->interestedfolks = NULL; + + return; } @@ -1060,3 +1080,45 @@ indicate_server_emit_server_display (IndicateServer *server) g_signal_emit(server, signals[SERVER_DISPLAY], 0, TRUE); } + +/* *** Folks stuff *** */ + +static gint +indicate_server_interested_folks_equal (gconstpointer a, gconstpointer b) +{ + return g_strcmp0(((IndicateServerInterestedFolk *)a)->sender,((IndicateServerInterestedFolk *)b)->sender); +} + +static void +indicate_server_interested_folks_init (IndicateServerInterestedFolk * folk) +{ + folk->sender = NULL; + + guint i; + for (i = INDICATE_INTEREST_NONE; i < INDICATE_INTEREST_LAST; i++) { + folk->interests[i] = FALSE; + } + + return; +} + +static void +indicate_server_interested_folks_set (IndicateServerInterestedFolk * folk, IndicateInterests interest, gboolean value) +{ + folk->interests[interest] = value; + return; +} + +static void +indicate_server_interested_folks_copy (IndicateServerInterestedFolk * folk, gboolean * interests) +{ + guint i; + for (i = INDICATE_INTEREST_NONE; i < INDICATE_INTEREST_LAST; i++) { + if (folk->interests[i]) { + interests[i] = TRUE; + } + } + + return; +} +/* *** End Folks *** */ |