ekiga r6490 - trunk/lib/engine/gui/gtk-frontend
- From: jpuydt svn gnome org
- To: svn-commits-list gnome org
- Subject: ekiga r6490 - trunk/lib/engine/gui/gtk-frontend
- Date: Thu, 24 Jul 2008 13:43:30 +0000 (UTC)
Author: jpuydt
Date: Thu Jul 24 13:43:30 2008
New Revision: 6490
URL: http://svn.gnome.org/viewvc/ekiga?rev=6490&view=rev
Log:
Made ChatWindow count the unread messages for each page, thus showing how many unread there are for each of them
Modified:
trunk/lib/engine/gui/gtk-frontend/chat-window.cpp
Modified: trunk/lib/engine/gui/gtk-frontend/chat-window.cpp
==============================================================================
--- trunk/lib/engine/gui/gtk-frontend/chat-window.cpp (original)
+++ trunk/lib/engine/gui/gtk-frontend/chat-window.cpp Thu Jul 24 13:43:30 2008
@@ -56,6 +56,18 @@
/* signal callbacks (declarations) */
+static void on_switch_page (GtkNotebook* notebook,
+ GtkNotebookPage* page,
+ guint num,
+ gpointer data);
+
+static gboolean on_focus_in_event (GtkWidget* widget,
+ GdkEventFocus* event,
+ gpointer data);
+
+static void on_message_notice_event (GtkWidget* page,
+ gpointer data);
+
static bool on_dialect_added (ChatWindow* self,
Ekiga::Dialect& dialect);
static bool on_simple_chat_added (ChatWindow* self,
@@ -67,6 +79,92 @@
/* signal callbacks (implementations) */
+static void
+on_switch_page (G_GNUC_UNUSED GtkNotebook* notebook,
+ G_GNUC_UNUSED GtkNotebookPage* page_,
+ guint num,
+ gpointer data)
+{
+ ChatWindow* self = (ChatWindow*)data;
+ GtkWidget* page = NULL;
+ GtkWidget* label = NULL;
+
+ page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (self->priv->notebook), num);
+ label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (self->priv->notebook),
+ page);
+ gtk_label_set_text (GTK_LABEL (label),
+ (const gchar*)g_object_get_data (G_OBJECT (label),
+ "base-title"));
+ g_object_set_data (G_OBJECT (label), "unread-count",
+ GUINT_TO_POINTER (0));
+}
+
+static gboolean
+on_focus_in_event (G_GNUC_UNUSED GtkWidget* widget,
+ G_GNUC_UNUSED GdkEventFocus* event,
+ gpointer data)
+{
+ ChatWindow* self = (ChatWindow*)data;
+ gint num;
+ GtkWidget* page = NULL;
+ GtkWidget* label = NULL;
+
+ num = gtk_notebook_get_current_page (GTK_NOTEBOOK (self->priv->notebook));
+ page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (self->priv->notebook), num);
+ label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (self->priv->notebook),
+ page);
+ gtk_label_set_text (GTK_LABEL (label),
+ (const gchar*)g_object_get_data (G_OBJECT (label),
+ "base-title"));
+ g_object_set_data (G_OBJECT (label), "unread-count",
+ GUINT_TO_POINTER (0));
+
+ return FALSE;
+}
+
+static void
+on_message_notice_event (GtkWidget* page,
+ gpointer data)
+{
+ ChatWindow* self = (ChatWindow*)data;
+ gint num = -1;
+
+ for (gint ii = 0;
+ ii < gtk_notebook_get_n_pages (GTK_NOTEBOOK (self->priv->notebook)) ;
+ ii++) {
+
+ if (page == gtk_notebook_get_nth_page (GTK_NOTEBOOK (self->priv->notebook),
+ ii)) {
+
+ num = ii;
+ break;
+ }
+ }
+
+ if (num
+ != gtk_notebook_get_current_page (GTK_NOTEBOOK (self->priv->notebook))) {
+
+ GtkWidget* label = NULL;
+ guint unread_count = 0;
+ const gchar* base_title = NULL;
+ gchar* txt = NULL;
+
+ label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (self->priv->notebook),
+ page);
+ base_title = (const gchar*)g_object_get_data (G_OBJECT (label),
+ "base-title");
+ unread_count = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (label),
+ "unread-count"));
+ unread_count = unread_count + 1;
+ g_object_set_data (G_OBJECT (label), "unread-count",
+ GUINT_TO_POINTER (unread_count));
+
+ txt = g_strdup_printf ("[%d] %s", unread_count, base_title);
+ gtk_label_set_text (GTK_LABEL (label), txt);
+ g_free (txt);
+ }
+}
+
static bool
on_dialect_added (ChatWindow* self,
Ekiga::Dialect& dialect)
@@ -92,9 +190,15 @@
page = simple_chat_page_new (chat);
label = gtk_label_new (chat.get_title ().c_str ());
+ g_object_set_data_full (G_OBJECT (label), "base-title",
+ g_strdup (chat.get_title ().c_str ()),
+ g_free);
+
num = gtk_notebook_append_page (GTK_NOTEBOOK (self->priv->notebook),
page, label);
gtk_widget_show (page);
+ g_signal_connect (page, "message-notice-event",
+ G_CALLBACK (on_message_notice_event), self);
if (on_user_request) {
@@ -228,8 +332,8 @@
ChatWindow* result = NULL;
result = (ChatWindow*)g_object_new (CHAT_WINDOW_TYPE,
- "key", key.c_str (),
- NULL);
+ "key", key.c_str (),
+ NULL);
result->priv = new ChatWindowPrivate (core);
@@ -237,6 +341,11 @@
gtk_container_add (GTK_CONTAINER (result), result->priv->notebook);
gtk_widget_show (result->priv->notebook);
+ g_signal_connect (result, "focus-in-event",
+ G_CALLBACK (on_focus_in_event), result);
+ g_signal_connect (result->priv->notebook, "switch-page",
+ G_CALLBACK (on_switch_page), result);
+
result->priv->dialect_added_connection = core.dialect_added.connect (sigc::hide_return(sigc::bind<0>(sigc::ptr_fun (on_dialect_added), result)));
core.visit_dialects (sigc::bind<0>(sigc::ptr_fun (on_dialect_added), result));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]