ekiga r6902 - in trunk: . src src/gui
- From: dsandras svn gnome org
- To: svn-commits-list gnome org
- Subject: ekiga r6902 - in trunk: . src src/gui
- Date: Tue, 9 Sep 2008 21:28:00 +0000 (UTC)
Author: dsandras
Date: Tue Sep 9 21:28:00 2008
New Revision: 6902
URL: http://svn.gnome.org/viewvc/ekiga?rev=6902&view=rev
Log:
Added libnotify support for a nice notification of incoming calls in
the tray. If somebody can fix things so that the icon is displayed,
please do not hesitate doing it!
Modified:
trunk/ChangeLog
trunk/configure.ac
trunk/src/Makefile.am
trunk/src/gui/main.cpp
trunk/src/gui/main.h
Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac (original)
+++ trunk/configure.ac Tue Sep 9 21:28:00 2008
@@ -271,6 +271,26 @@
dnl ###############################
+dnl NOTIFY support
+dnl ###############################
+NOTIFY="disabled"
+
+if test "x${gm_platform}" != "xmingw" ; then
+ AC_ARG_ENABLE(notify, [ --disable-notify Disable libnotify support],,enable_notify=yes)
+
+ if test "x$enable_notify" = "xyes"; then
+ PKG_CHECK_MODULES([NOTIFY], [libnotify], [found_notify=yes])
+ AC_SUBST(NOTIFY_CFLAGS)
+ AC_SUBST(NOTIFY_LIBS)
+ NOTIFY="enabled"
+ AC_DEFINE(HAVE_NOTIFY,1,[NOTIFY support])
+ fi
+fi
+
+AM_CONDITIONAL(HAVE_NOTIFY, test "x$found_notify" = "xyes")
+
+
+dnl ###############################
dnl LDAP support
dnl ###############################
LDAP="disabled"
@@ -657,6 +677,7 @@
echo " GNOME support : $GNOME"
echo " GConf support : $GCONF"
echo " Evolution-Data-Server support : $EDS"
+echo " NOTIFY support : $NOTIFY"
fi
echo " LDAP support : $LDAP"
echo ""
Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am (original)
+++ trunk/src/Makefile.am Tue Sep 9 21:28:00 2008
@@ -160,8 +160,8 @@
endif
-AM_CXXFLAGS = $(GTK_CFLAGS) $(GLIB_CFLAGS) $(GNOME_CFLAGS) $(DBUS_CFLAGS) $(BONOBO_CFLAGS) $(OPAL_CFLAGS) $(PTLIB_CFLAGS) $(SIGC_CFLAGS) $(XML_CFLAGS)
-AM_LIBS = $(GTK_LIBS) $(GLIB_LIBS) $(GNOME_LIBS) $(DBUS_LIBS) $(BONOBO_LIBS) $(OPAL_LIBS) $(PTLIB_LIBS) $(SIGC_LIBS) $(XML_LIBS)
+AM_CXXFLAGS = $(GTK_CFLAGS) $(GLIB_CFLAGS) $(GNOME_CFLAGS) $(DBUS_CFLAGS) $(BONOBO_CFLAGS) $(OPAL_CFLAGS) $(PTLIB_CFLAGS) $(SIGC_CFLAGS) $(XML_CFLAGS) $(NOTIFY_CFLAGS)
+AM_LIBS = $(GTK_LIBS) $(GLIB_LIBS) $(GNOME_LIBS) $(DBUS_LIBS) $(BONOBO_LIBS) $(OPAL_LIBS) $(PTLIB_LIBS) $(SIGC_LIBS) $(XML_LIBS) $(NOTIFY_LIBS)
ekiga_LDADD = \
$(top_builddir)/lib/libekiga.la $(top_builddir)/lib/engine/libekiga_engine.la $(AM_LIBS)
Modified: trunk/src/gui/main.cpp
==============================================================================
--- trunk/src/gui/main.cpp (original)
+++ trunk/src/gui/main.cpp Tue Sep 9 21:28:00 2008
@@ -83,6 +83,10 @@
#include <gnome.h>
#endif
+#ifdef HAVE_NOTIFY
+#include <libnotify/notify.h>
+#endif
+
#if defined(P_FREEBSD) || defined (P_MACOSX)
#include <libintl.h>
#endif
@@ -301,6 +305,14 @@
void gm_main_window_selected_presentity_build_menu (GtkWidget *main_window);
+void gm_main_window_incoming_call_dialog_show (GtkWidget *main_window,
+ Ekiga::Call & call);
+
+#ifdef HAVE_NOTIFY
+void gm_main_window_incoming_call_notify (GtkWidget *main_window,
+ Ekiga::Call & call);
+#endif
+
/* Callbacks */
/* DESCRIPTION : This callback is called when the user selects a presentity
@@ -606,7 +618,11 @@
if (!call.is_outgoing ()) {
audiooutput_core->start_play_event("incoming_call_sound", 6000, 256);
+#ifdef HAVE_NOTIFY
+ gm_main_window_incoming_call_notify (GTK_WIDGET (self), call);
+#else
gm_main_window_incoming_call_dialog_show (GTK_WIDGET (self), call);
+#endif
}
else {
gm_main_window_update_calling_state (GTK_WIDGET (self), Calling);
@@ -797,19 +813,27 @@
audiooutput_core->stop_play_event("incoming_call_sound");
audiooutput_core->stop_play_event("ring_tone_sound");
+#ifdef HAVE_NOTIFY
+ notify_notification_close (NOTIFY_NOTIFICATION (self), NULL);
+#else
gtk_widget_destroy (GTK_WIDGET (self));
+#endif
}
static void on_missed_incoming_call_cb (gpointer self)
{
+#ifdef HAVE_NOTIFY
+ notify_notification_close (NOTIFY_NOTIFICATION (self), NULL);
+#else
gtk_widget_destroy (GTK_WIDGET (self));
+#endif
}
-void
-gm_main_window_add_device_dialog_show (GtkWidget *main_window,
- const Ekiga::Device & device,
- DeviceType deviceType);
+
+void gm_main_window_add_device_dialog_show (GtkWidget *main_window,
+ const Ekiga::Device & device,
+ DeviceType deviceType);
static void on_held_call_cb (Ekiga::CallManager & /*manager*/,
Ekiga::Call & /*call*/,
@@ -3485,6 +3509,199 @@
}
}
+
+void gm_main_window_incoming_call_dialog_show (GtkWidget *main_window,
+ Ekiga::Call & call)
+{
+ GmMainWindow *mw = NULL;
+
+ GdkPixbuf *pixbuf = NULL;
+
+ GtkWidget *label = NULL;
+ GtkWidget *vbox = NULL;
+ GtkWidget *b1 = NULL;
+ GtkWidget *b2 = NULL;
+ GtkWidget *incoming_call_popup = NULL;
+
+ gchar *msg = NULL;
+
+ // FIXME could the call become invalid ?
+ const char *utf8_name = call.get_remote_party_name ().c_str ();
+ const char *utf8_app = call.get_remote_application ().c_str ();
+ const char *utf8_url = call.get_remote_uri ().c_str ();
+ const char *utf8_local = call.get_local_party_name ().c_str ();
+
+ g_return_if_fail (main_window);
+
+ mw = gm_mw_get_mw (main_window);
+
+ g_return_if_fail (mw != NULL);
+
+ incoming_call_popup = gtk_dialog_new ();
+ b2 = gtk_dialog_add_button (GTK_DIALOG (incoming_call_popup),
+ _("Reject"), 0);
+ b1 = gtk_dialog_add_button (GTK_DIALOG (incoming_call_popup),
+ _("Accept"), 2);
+
+ gtk_dialog_set_default_response (GTK_DIALOG (incoming_call_popup), 2);
+
+ vbox = GTK_DIALOG (incoming_call_popup)->vbox;
+
+ msg = g_strdup_printf ("%s <i>%s</i>", _("Incoming call from"), (const char*) utf8_name);
+ label = gtk_label_new (NULL);
+ gtk_label_set_markup (GTK_LABEL (label), msg);
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 10);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.0);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ g_free (msg);
+
+ pixbuf = gtk_widget_render_icon (GTK_WIDGET (incoming_call_popup),
+ GM_STOCK_PHONE_PICK_UP_16,
+ GTK_ICON_SIZE_MENU, NULL);
+ gtk_window_set_icon (GTK_WINDOW (incoming_call_popup), pixbuf);
+ g_object_unref (pixbuf);
+
+ if (utf8_url) {
+
+ label = gtk_label_new (NULL);
+ msg = g_strdup_printf ("<b>%s</b> <span foreground=\"blue\"><u>%s</u></span>",
+ _("Remote URI:"), utf8_url);
+ gtk_label_set_markup (GTK_LABEL (label), msg);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
+ g_free (msg);
+ }
+
+ if (utf8_app) {
+
+ label = gtk_label_new (NULL);
+ msg = g_strdup_printf ("<b>%s</b> %s",
+ _("Remote Application:"), utf8_app);
+ gtk_label_set_markup (GTK_LABEL (label), msg);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
+ g_free (msg);
+ }
+
+ if (utf8_local) {
+
+ label = gtk_label_new (NULL);
+ msg =
+ g_strdup_printf ("<b>%s</b> %s",
+ _("Account ID:"), utf8_local);
+ gtk_label_set_markup (GTK_LABEL (label), msg);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
+ g_free (msg);
+ }
+
+ msg = g_strdup_printf (_("Call from %s"), (const char*) utf8_name);
+ gtk_window_set_title (GTK_WINDOW (incoming_call_popup), msg);
+ g_free (msg);
+ gtk_window_set_modal (GTK_WINDOW (incoming_call_popup), TRUE);
+ gtk_window_set_keep_above (GTK_WINDOW (incoming_call_popup), TRUE);
+ gtk_window_set_urgency_hint (GTK_WINDOW (main_window), TRUE);
+ gtk_window_set_transient_for (GTK_WINDOW (incoming_call_popup),
+ GTK_WINDOW (main_window));
+
+ gtk_widget_show_all (incoming_call_popup);
+
+ g_signal_connect (G_OBJECT (incoming_call_popup), "delete_event",
+ G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+ g_signal_connect (G_OBJECT (incoming_call_popup), "response",
+ GTK_SIGNAL_FUNC (incoming_call_response_cb), &call);
+
+ call.cleared.connect (sigc::bind (sigc::ptr_fun (on_cleared_incoming_call_cb),
+ (gpointer) incoming_call_popup));
+ call.missed.connect (sigc::bind (sigc::ptr_fun (on_missed_incoming_call_cb),
+ (gpointer) incoming_call_popup));
+}
+
+
+#ifdef HAVE_NOTIFY
+static void
+notify_action_cb (NotifyNotification *notification,
+ gchar *action,
+ gpointer data)
+{
+ Ekiga::Call *call = (Ekiga::Call *) data;
+
+ notify_notification_close (notification, NULL);
+
+ if (call) {
+
+ if (!strcmp (action, "accept"))
+ call->answer ();
+ else
+ call->hangup ();
+ }
+}
+
+
+void gm_main_window_incoming_call_notify (GtkWidget *main_window,
+ Ekiga::Call & call)
+{
+ NotifyNotification *notify = NULL;
+
+ GtkStatusIcon *statusicon = NULL;
+ GdkPixbuf *pixbuf = NULL;
+
+ gchar *uri = NULL;
+ gchar *app = NULL;
+ gchar *account = NULL;
+ gchar *body = NULL;
+ gchar *title = NULL;
+
+ statusicon = GTK_STATUS_ICON (GnomeMeeting::Process ()->GetStatusicon ());
+
+ // FIXME could the call become invalid ?
+ const char *utf8_name = call.get_remote_party_name ().c_str ();
+ const char *utf8_app = call.get_remote_application ().c_str ();
+ const char *utf8_url = call.get_remote_uri ().c_str ();
+ const char *utf8_local = call.get_local_party_name ().c_str ();
+
+ title = g_strdup_printf ("%s %s", _("Incoming call from"), (const char*) utf8_name);
+
+ if (utf8_url)
+ uri = g_strdup_printf ("<b>%s</b> %s", _("Remote URI:"), utf8_url);
+ if (utf8_app)
+ app = g_strdup_printf ("<b>%s</b> %s", _("Remote Application:"), utf8_app);
+ if (utf8_local)
+ account = g_strdup_printf ("<b>%s</b> %s", _("Account ID:"), utf8_local);
+
+ body = g_strdup_printf ("%s\n%s\n%s", uri, app, account);
+
+ notify = notify_notification_new (title, body, NULL, NULL);
+ pixbuf = gtk_widget_render_icon (GTK_WIDGET (main_window),
+ GM_STOCK_PHONE_PICK_UP_24,
+ GTK_ICON_SIZE_SMALL_TOOLBAR, NULL);
+ notify_notification_add_action (notify, "accept", _("Accept"), notify_action_cb, &call, NULL);
+ notify_notification_add_action (notify, "reject", _("Reject"), notify_action_cb, &call, NULL);
+ notify_notification_set_timeout (notify, NOTIFY_EXPIRES_NEVER);
+ notify_notification_set_icon_from_pixbuf (notify, pixbuf);
+ notify_notification_attach_to_status_icon (notify, statusicon);
+ if (!notify_notification_show (notify, NULL))
+ gm_main_window_incoming_call_dialog_show (main_window, call);
+ else {
+ call.cleared.connect (sigc::bind (sigc::ptr_fun (on_cleared_incoming_call_cb),
+ (gpointer) notify));
+ call.missed.connect (sigc::bind (sigc::ptr_fun (on_missed_incoming_call_cb),
+ (gpointer) notify));
+ }
+
+ g_object_unref (pixbuf);
+
+ g_free (uri);
+ g_free (app);
+ g_free (account);
+ g_free (title);
+ g_free (body);
+}
+#endif
+
void
gm_main_window_set_panel_section (GtkWidget *main_window,
int section)
@@ -3699,118 +3916,6 @@
void
-gm_main_window_incoming_call_dialog_show (GtkWidget *main_window,
- Ekiga::Call & call)
-{
- GmMainWindow *mw = NULL;
-
- GdkPixbuf *pixbuf = NULL;
-
- GtkWidget *label = NULL;
- GtkWidget *vbox = NULL;
- GtkWidget *b1 = NULL;
- GtkWidget *b2 = NULL;
- GtkWidget *incoming_call_popup = NULL;
-
- gchar *msg = NULL;
- // FIXME the call could be come invalid
- const char *utf8_name = call.get_remote_party_name ().c_str ();
- const char *utf8_app = call.get_remote_application ().c_str ();
- const char *utf8_url = call.get_remote_uri ().c_str ();
- const char *utf8_local = call.get_local_party_name ().c_str ();
-
- g_return_if_fail (main_window);
-
- mw = gm_mw_get_mw (main_window);
-
- g_return_if_fail (mw != NULL);
-
- incoming_call_popup = gtk_dialog_new ();
- b2 = gtk_dialog_add_button (GTK_DIALOG (incoming_call_popup),
- _("Reject"), 0);
- b1 = gtk_dialog_add_button (GTK_DIALOG (incoming_call_popup),
- _("Accept"), 2);
-
- gtk_dialog_set_default_response (GTK_DIALOG (incoming_call_popup), 2);
-
- vbox = GTK_DIALOG (incoming_call_popup)->vbox;
-
- msg = g_strdup_printf ("%s <i>%s</i>",
- _("Incoming call from"), (const char*) utf8_name);
- label = gtk_label_new (NULL);
- gtk_label_set_markup (GTK_LABEL (label), msg);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 10);
- gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.0);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- g_free (msg);
-
- pixbuf = gtk_widget_render_icon (GTK_WIDGET (incoming_call_popup),
- GM_STOCK_PHONE_PICK_UP_16,
- GTK_ICON_SIZE_MENU, NULL);
- gtk_window_set_icon (GTK_WINDOW (incoming_call_popup), pixbuf);
- g_object_unref (pixbuf);
-
- if (utf8_url) {
-
- label = gtk_label_new (NULL);
- msg =
- g_strdup_printf ("<b>%s</b> <span foreground=\"blue\"><u>%s</u></span>",
- _("Remote URI:"), utf8_url);
- gtk_label_set_markup (GTK_LABEL (label), msg);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
- g_free (msg);
- }
-
- if (utf8_app) {
-
- label = gtk_label_new (NULL);
- msg = g_strdup_printf ("<b>%s</b> %s",
- _("Remote Application:"), utf8_app);
- gtk_label_set_markup (GTK_LABEL (label), msg);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
- g_free (msg);
- }
-
- if (utf8_local) {
-
- label = gtk_label_new (NULL);
- msg =
- g_strdup_printf ("<b>%s</b> %s",
- _("Account ID:"), utf8_local);
- gtk_label_set_markup (GTK_LABEL (label), msg);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
- g_free (msg);
- }
-
- msg = g_strdup_printf (_("Call from %s"), (const char*) utf8_name);
- gtk_window_set_title (GTK_WINDOW (incoming_call_popup), msg);
- g_free (msg);
- gtk_window_set_modal (GTK_WINDOW (incoming_call_popup), TRUE);
- gtk_window_set_keep_above (GTK_WINDOW (incoming_call_popup), TRUE);
- gtk_window_set_urgency_hint (GTK_WINDOW (main_window), TRUE);
- gtk_window_set_transient_for (GTK_WINDOW (incoming_call_popup),
- GTK_WINDOW (main_window));
-
- gtk_widget_show_all (incoming_call_popup);
-
- g_signal_connect (G_OBJECT (incoming_call_popup), "delete_event",
- G_CALLBACK (gtk_widget_hide_on_delete), NULL);
- g_signal_connect (G_OBJECT (incoming_call_popup), "response",
- GTK_SIGNAL_FUNC (incoming_call_response_cb), &call);
-
- call.cleared.connect (sigc::bind (sigc::ptr_fun (on_cleared_incoming_call_cb),
- (gpointer) incoming_call_popup));
- call.missed.connect (sigc::bind (sigc::ptr_fun (on_missed_incoming_call_cb),
- (gpointer) incoming_call_popup));
-}
-
-void
gm_main_window_add_device_dialog_show (GtkWidget *main_window,
const Ekiga::Device & device,
DeviceType deviceType)
@@ -4563,6 +4668,10 @@
g_option_context_free (context);
#endif
+#ifdef HAVE_NOTIFY
+ notify_init (PACKAGE_NAME);
+#endif
+
#ifndef WIN32
char* text_label = g_strdup_printf ("%d", debug_level);
setenv ("PTLIB_TRACE_CODECS", text_label, TRUE);
@@ -4715,6 +4824,10 @@
/* deinitialize platform-specific code */
gm_platform_shutdown ();
+#ifdef HAVE_NOTIFY
+ notify_uninit ();
+#endif
+
return 0;
}
Modified: trunk/src/gui/main.h
==============================================================================
--- trunk/src/gui/main.h (original)
+++ trunk/src/gui/main.h Tue Sep 9 21:28:00 2008
@@ -263,15 +263,6 @@
const char *u);
-/* DESCRIPTION : /
- * BEHAVIOR : Creates a new incoming call popup and show it
- * as modal dialog.
- * PRE : The main window GMObject and the incoming call.
- */
-void gm_main_window_incoming_call_dialog_show (GtkWidget *main_window,
- Ekiga::Call & call);
-
-
/* DESCRIPTION : /
* BEHAVIOR : Builds the main window and adds the popup to the image.
* PRE : Accels.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]