#include <libosso-abook/osso-abook-temporary-contact-dialog.h>
#include <libosso-abook/osso-abook-account-manager.h>
+#include <telepathy-glib/interfaces.h>
+
#define EL_HOME_APPLET_GET_PRIVATE(obj) ( \
G_TYPE_INSTANCE_GET_PRIVATE (obj, \
EL_TYPE_HOME_APPLET, ELHomeAppletPrivate))
#define BOX_WIDTH 352
-#define BOX_HEIGHT 266
+#define BOX_HEIGHT 276
-#define C_WIDTH (BOX_WIDTH - 2*HILDON_MARGIN_HALF)
-#define C_HEIGHT (BOX_HEIGHT - 2*HILDON_MARGIN_HALF)
-#define C_X HILDON_MARGIN_HALF
-#define C_Y 4*HILDON_MARGIN_HALF
+#define CONTENT_OFFSET_X HILDON_MARGIN_HALF
+#define CONTENT_OFFSET_Y_TOP 4*HILDON_MARGIN_HALF
+#define CONTENT_OFFSET_Y_BOTTOM HILDON_MARGIN_HALF
+#define C_WIDTH (BOX_WIDTH - 2*CONTENT_OFFSET_X)
+#define C_HEIGHT (BOX_HEIGHT - (CONTENT_OFFSET_Y_TOP + CONTENT_OFFSET_Y_BOTTOM))
#define HEADER_HEIGHT 48
#define MESSAGE_HEIGHT (C_HEIGHT - HEADER_HEIGHT)
#define SCROLL_PERIOD 100 /* ms */
#define SCROLL_STEP 1 /* pixel */
+#define TEXT_Y_OFFSET (HEADER_HEIGHT + HILDON_MARGIN_HALF)
+
+#define NOTIFICATION_UI_DBUS_NAME "org.freedesktop.Telepathy.Client.NotificationUI"
+#define NOTIFICATION_UI_DBUS_PATH "/org/freedesktop/Telepathy/Client/NotificationUI"
+#define NOTIFICATION_UI_DBUS_IFACE "com.nokia.RtcomNotificationUi"
struct _ELHomeAppletPrivate
{
cairo_set_line_width (cr, 3.0f);
rounded_rectangle (cr,
- C_X,
- C_Y,
- BOX_WIDTH - 2*C_X,
- BOX_HEIGHT - 2*C_Y,
+ CONTENT_OFFSET_X,
+ CONTENT_OFFSET_Y_TOP,
+ BOX_WIDTH - 2*CONTENT_OFFSET_X,
+ BOX_HEIGHT - (CONTENT_OFFSET_Y_TOP + CONTENT_OFFSET_Y_BOTTOM),
BOX_RADIOUS);
cairo_close_path (cr);
/* draw header */
cairo_set_line_width (cr, 1.0f);
- cairo_translate (cr, C_X, C_Y);
+ cairo_translate (cr, CONTENT_OFFSET_X, CONTENT_OFFSET_Y_TOP);
cairo_move_to (cr, 0, HEADER_HEIGHT);
cairo_line_to (cr, 0, BOX_RADIOUS);
cairo_curve_to (cr, 0, 0, 0, 0, BOX_RADIOUS, 0);
cairo_fill (cr);
/* cairo_set_source_rgba (cr, red, green, blue, 1.0f); */
- /* cairo_translate (cr, -C_X, -C_Y); */
+ /* cairo_translate (cr, -CONTENT_OFFSET_X, -C_Y); */
/* rounded_rectangle (cr, */
- /* C_X, */
+ /* CONTENT_OFFSET_X, */
/* C_Y, */
- /* BOX_WIDTH - 2*C_X, */
+ /* BOX_WIDTH - 2*CONTENT_OFFSET_X, */
/* BOX_HEIGHT - 2*C_Y, */
/* BOX_RADIOUS); */
/* cairo_close_path (cr); */
}
cairo_rectangle (cr,
- 2*C_X,
- HEADER_HEIGHT,
+ 2*CONTENT_OFFSET_X,
+ TEXT_Y_OFFSET,
MESSAGE_WIDTH,
message_height);
cairo_clip (cr);
cairo_set_source_surface (cr,
priv->message_surface,
- 2*C_X,
- HEADER_HEIGHT - priv->scroll_offset);
+ 2*CONTENT_OFFSET_X,
+ TEXT_Y_OFFSET - priv->scroll_offset);
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
cairo_paint (cr);
g_warning (G_STRFUNC);
gchar *remote = NULL;
gchar *received = NULL;
- const gchar *icon_name = NULL;
+ /* const gchar *icon_name = NULL; */
if (it && rtcom_el_iter_first (it)) {
rtcom_el_iter_dup_string (it, "free-text", &priv->message);
if (priv->message) {
- const gchar *service;
+ /* const gchar *service; */
time_t received_t;
rtcom_el_iter_get_int (it, "id", &priv->event_id);
if (rtcom_el_iter_get_int (it, "start-time", (gint*)&received_t))
received = format_time (received_t);
- rtcom_el_iter_dup_string (it, "remote-uid", &priv->remote_id);
- if (!rtcom_el_iter_dup_string (it, "remote-name", &remote))
- remote = g_strdup (priv->remote_id);
-
- rtcom_el_iter_dup_string (it, "remote-ebook-uid", &priv->contact_id);
- rtcom_el_iter_dup_string (it, "local-uid", &priv->local_id);
- g_warning ("abook uid %s", priv->contact_id);
+ if (rtcom_el_iter_dup_string (it, "remote-uid", &priv->remote_id)) {
+ if (priv->remote_id && priv->remote_id[0]) {
+ if (!rtcom_el_iter_dup_string (it, "remote-name", &remote))
+ remote = g_strdup (priv->remote_id);
+
+ rtcom_el_iter_dup_string (it, "remote-ebook-uid", &priv->contact_id);
+ rtcom_el_iter_dup_string (it, "local-uid", &priv->local_id);
+ g_warning ("abook uid %s", priv->contact_id);
+ }
+ else if (priv->remote_id) {
+ g_free (priv->remote_id);
+ priv->remote_id = NULL;
+ }
+ }
+#if 0
service = rtcom_el_iter_get_service (it);
if (!g_strcmp0 (service, "RTCOM_EL_SERVICE_SMS"))
icon_name = "chat_unread_sms";
else if (!g_strcmp0 (service, "RTCOM_EL_SERVICE_CHAT"))
icon_name = "chat_unread_chat";
+#endif
}
}
else {
if (priv->message) {
gtk_widget_hide (priv->empty);
- /* TODO: don's show avatar at all, fix layout */
- gtk_widget_show (priv->avatar);
- gtk_image_set_from_icon_name (GTK_IMAGE (priv->avatar),
- "general_default_avatar",
- HILDON_ICON_SIZE_THUMB);
}
else {
gtk_widget_show (priv->empty);
}
static void
+remove_notification (ELHomeApplet *self)
+{
+ ELHomeAppletPrivate *priv = self->priv;
+
+ DBusGConnection* conn;
+ GError *error;
+ DBusGProxy *proxy;
+ GPtrArray *conv_structs;
+ GType conv_structs_type;
+ GValueArray *account_info;
+ GValue value = {0, };
+ DBusGProxyCall *call;
+
+ if (!(priv->remote_id && priv->local_id))
+ return;
+
+ conn = hd_home_plugin_item_get_dbus_g_connection (HD_HOME_PLUGIN_ITEM (self),
+ DBUS_BUS_SESSION,
+ &error);
+ if (!conn) {
+ g_error ("Failed get dbus g connection %s", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ proxy = dbus_g_proxy_new_for_name (conn,
+ NOTIFICATION_UI_DBUS_NAME,
+ NOTIFICATION_UI_DBUS_PATH,
+ NOTIFICATION_UI_DBUS_IFACE);
+
+ conv_structs = g_ptr_array_sized_new (1);
+ account_info = g_value_array_new (2);
+
+ g_value_init (&value, G_TYPE_STRING);
+ g_value_set_string (&value, priv->local_id);
+ g_value_array_append (account_info, &value);
+ g_value_unset (&value);
+
+ g_value_init (&value, G_TYPE_STRING);
+ g_value_set_string (&value, priv->remote_id);
+ g_value_array_append (account_info, &value);
+ g_value_unset (&value);
+
+ g_ptr_array_add (conv_structs, account_info);
+
+ conv_structs_type = dbus_g_type_get_collection
+ ("GPtrArray",
+ dbus_g_type_get_struct ("GValueArray",
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_INVALID));
+
+ call = dbus_g_proxy_begin_call (proxy,
+ "ClearConversationNotifications",
+ NULL, NULL, NULL,
+ conv_structs_type,
+ conv_structs,
+ G_TYPE_INVALID);
+
+ g_value_array_free (account_info);
+ g_ptr_array_free (conv_structs, TRUE);
+
+ g_object_unref (proxy);
+}
+
+static void
mark_as_read (ELHomeApplet *self)
{
ELHomeAppletPrivate *priv = self->priv;
priv->event_id,
TRUE,
NULL);
+ remove_notification (self);
}
}
+static void
+open_conversation (ELHomeApplet *self)
+{
+ ELHomeAppletPrivate *priv = self->priv;
+ McAccount *account;
+ McAccountChannelrequestData request;
+
+ if (!(priv->remote_id && priv->local_id))
+ return;
+
+ account = osso_abook_account_manager_lookup_by_name (NULL,
+ priv->local_id);
+ if (!account)
+ return;
+
+ MC_ACCOUNT_CRD_INIT (&request);
+ MC_ACCOUNT_CRD_SET (&request, channel_type, TP_IFACE_QUARK_CHANNEL_TYPE_TEXT);
+ MC_ACCOUNT_CRD_SET (&request, target_handle_type, TP_HANDLE_TYPE_CONTACT);
+ MC_ACCOUNT_CRD_SET (&request, target_id, priv->remote_id);
+
+ mc_account_channelrequest (
+ account,
+ &request,
+ time (NULL),
+ NULL, /* handler */
+ MC_ACCOUNT_CR_FLAG_USE_EXISTING,
+ NULL, NULL, NULL, NULL);
+}
+
static gboolean
read_new_event (ELHomeApplet *self)
{
priv->scroll_offset += SCROLL_STEP;
gtk_widget_queue_draw_area (GTK_WIDGET (self),
- 3*C_X,
- HEADER_HEIGHT + C_Y,
+ 3*CONTENT_OFFSET_X,
+ HEADER_HEIGHT + CONTENT_OFFSET_Y_TOP,
MESSAGE_WIDTH,
C_HEIGHT - priv->received->allocation.height - HEADER_HEIGHT);
ELHomeAppletPrivate *priv = self->priv;
if (priv->event_id > 0) {
- if (event->y < C_Y + HEADER_HEIGHT) {
+ if (event->y < CONTENT_OFFSET_Y_TOP + HEADER_HEIGHT) {
if (priv->aggregator &&
osso_abook_waitable_is_ready
(OSSO_ABOOK_WAITABLE (priv->aggregator), NULL))
}
else {
#ifndef DEBUG_LAYOUT
- mark_as_read (self);
+ /* mark_as_read (self); */
+ open_conversation (self);
#endif
}
priv->sender = gtk_label_new ("asdf asdf asdf asdf asdf");
gtk_misc_set_alignment (GTK_MISC (priv->sender),
0.5f,
- 0.5f);
+ 0.55f);
gtk_label_set_ellipsize (GTK_LABEL (priv->sender),
PANGO_ELLIPSIZE_END);
gtk_widget_set_name (priv->sender, "hildon-shadow-label");
hildon_helper_set_logical_font (priv->sender, "SystemFont");
+ gtk_widget_set_size_request (priv->sender,
+ -1,
+ HILDON_ICON_PIXEL_SIZE_THUMB);
priv->message = g_strdup ("One two three four five six seven eight nine ten");
GTK_WIDGET_SET_FLAGS (priv->cut_message, GTK_NO_SHOW_ALL);
hbox = gtk_hbox_new (FALSE, 0);
- /* gtk_box_pack_start (GTK_BOX (hbox), priv->unread, FALSE, FALSE, 0); */
/* gtk_box_pack_start (GTK_BOX (hbox), priv->icon, FALSE, FALSE, 0); */
- gtk_box_pack_start (GTK_BOX (hbox), priv->avatar, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), priv->sender, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), priv->avatar, FALSE, FALSE, 0);
footer = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (footer), priv->unread, FALSE, FALSE, 0);