[ekiga/ds-gtk-application] Action: Added support for templates.



commit 34ab0176eb77dcc4f139507f87ec5bc372ecb922
Author: Damien Sandras <dsandras beip be>
Date:   Sun Apr 6 16:42:12 2014 +0200

    Action: Added support for templates.
    
    We are supposed to use DataActions with Presentities, Contacts, ... That
    is why the old ContactAction/ContactActor classes were renamed and
    templatized.

 lib/Makefile.am                                    |   22 ++-
 lib/engine/{framework => action}/action.cpp        |    0
 lib/engine/{framework => action}/action.h          |    0
 lib/engine/{framework => action}/actor.cpp         |    0
 lib/engine/{framework => action}/actor.h           |    0
 lib/engine/action/data-action.h                    |  217 ++++++++++++++++++++
 .../contact-actor.h => action/data-actor.h}        |   50 +++--
 lib/engine/addressbook/contact-action.cpp          |  106 ----------
 lib/engine/addressbook/contact-action.h            |  138 -------------
 lib/engine/addressbook/contact-actor.cpp           |   69 ------
 lib/engine/addressbook/contact-core.h              |    7 +-
 .../components/local-roster/local-cluster.cpp      |    8 +-
 lib/engine/gui/gtk-core/actor-menu.cpp             |   20 +--
 lib/engine/gui/gtk-core/actor-menu.h               |   26 ++-
 .../gui/gtk-frontend/call-history-view-gtk.cpp     |    7 +-
 lib/engine/gui/gtk-frontend/main_window.cpp        |    4 +-
 lib/engine/protocol/call-core.cpp                  |   20 +-
 plugins/evolution/Makefile.am                      |    1 +
 plugins/ldap/Makefile.am                           |    1 +
 plugins/libnotify/Makefile.am                      |    1 +
 src/Makefile.am                                    |    1 +
 21 files changed, 311 insertions(+), 387 deletions(-)
---
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 30d4f11..bca9d93 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -21,6 +21,7 @@ AM_CPPFLAGS = \
        -I$(top_srcdir)/lib/settings \
        -I$(top_srcdir)/lib/engine \
        -I$(top_srcdir)/lib/engine/account \
+       -I$(top_srcdir)/lib/engine/action \
        -I$(top_srcdir)/lib/engine/addressbook \
        -I$(top_srcdir)/lib/engine/audioinput \
        -I$(top_srcdir)/lib/engine/audiooutput \
@@ -163,12 +164,9 @@ libekiga_la_SOURCES += \
 ##
 
 libekiga_la_SOURCES += \
-       engine/framework/action.h \
-       engine/framework/action.cpp \
-       engine/framework/actor.h \
-       engine/framework/actor.cpp \
        engine/framework/boost-exceptions.cpp \
        engine/framework/services.h \
+       engine/framework/null-deleter.h \
        engine/framework/map-key-iterator.h \
        engine/framework/map-key-const-iterator.h \
        engine/framework/reflister.h \
@@ -226,6 +224,18 @@ libekiga_la_SOURCES += \
        engine/account/account-core.cpp
 
 ##
+# Actions
+##
+
+libekiga_la_SOURCES += \
+       engine/action/action.h \
+       engine/action/action.cpp \
+       engine/action/actor.h \
+       engine/action/actor.cpp \
+       engine/action/data-action.h \
+       engine/action/data-actor.h
+
+##
 #  Sources of the addressbook stack
 ##
 
@@ -235,10 +245,6 @@ libekiga_la_SOURCES += \
        engine/addressbook/book-impl.h \
        engine/addressbook/source.h \
        engine/addressbook/source-impl.h \
-       engine/addressbook/contact-action.h \
-       engine/addressbook/contact-action.cpp \
-       engine/addressbook/contact-actor.h \
-       engine/addressbook/contact-actor.cpp \
        engine/addressbook/contact-core.h \
        engine/addressbook/contact-core.cpp
 
diff --git a/lib/engine/framework/action.cpp b/lib/engine/action/action.cpp
similarity index 100%
rename from lib/engine/framework/action.cpp
rename to lib/engine/action/action.cpp
diff --git a/lib/engine/framework/action.h b/lib/engine/action/action.h
similarity index 100%
rename from lib/engine/framework/action.h
rename to lib/engine/action/action.h
diff --git a/lib/engine/framework/actor.cpp b/lib/engine/action/actor.cpp
similarity index 100%
rename from lib/engine/framework/actor.cpp
rename to lib/engine/action/actor.cpp
diff --git a/lib/engine/framework/actor.h b/lib/engine/action/actor.h
similarity index 100%
rename from lib/engine/framework/actor.h
rename to lib/engine/action/actor.h
diff --git a/lib/engine/action/data-action.h b/lib/engine/action/data-action.h
new file mode 100644
index 0000000..d29a8c1
--- /dev/null
+++ b/lib/engine/action/data-action.h
@@ -0,0 +1,217 @@
+
+/* Ekiga -- A VoIP and Video-Conferencing application
+ * Copyright (C) 2000-2014 Damien Sandras <dsandras seconix com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ *
+ * Ekiga is licensed under the GPL license and as a special exception,
+ * you have permission to link or otherwise combine this program with the
+ * programs OPAL, OpenH323 and PWLIB, and distribute the combination,
+ * without applying the requirements of the GNU GPL to the OPAL, OpenH323
+ * and PWLIB programs, as long as you do follow the requirements of the
+ * GNU GPL for all the rest of the software thus combined.
+ */
+
+
+/*
+ *                         data-action.h  -  description
+ *                         --------------------------------
+ *   begin                : written in February 2014 by Damien Sandras
+ *   copyright            : (c) 2014 by Damien Sandras
+ *   description          : An engine action.
+ *
+ */
+
+#ifndef __CONTACT_ACTION_H__
+#define __CONTACT_ACTION_H__
+
+#include "contact.h"
+#include "action.h"
+
+#include <list>
+
+namespace Ekiga {
+
+
+
+  /**
+   * @defgroup contacts Address Book
+   * @{
+   */
+
+  /* A DataAction is an action which is available or not depending on
+   * the data it should act on.
+   *
+   * The main difference between an Action and a DataAction is the fact
+   * that a DataAction is executed for a given (Data, string) tuple
+   * iff the (Data, s) tuple is valid for the given action.
+   */
+  template < class T >
+  class DataAction : public Action
+  {
+
+  public:
+    typedef boost::function2< void, T, const std::string & > Callback;
+    typedef boost::function2< bool, T, const std::string & > Tester;
+    typedef std::list< Tester > TesterList;
+
+
+    /** Create an Action given a name, a description, a callback and
+     * a validity tester.
+     * @param the Action name (please read 'CONVENTION' in action.h).
+     * @param the Action description. Can be used as description in menus
+     *        implementing Actions.
+     * @param the callback to executed when the DataAction is activated by
+     *        the user (from a menu or from the code itself) for the
+     *        given data.
+     * @param the tester checking if the DataAction can be executed for
+     *        the given tuple.
+     */
+    DataAction (const std::string & _name,
+                const std::string & _description,
+                Callback _callback,
+                Tester _tester);
+
+
+    /** Create an Action given a name, a description, a callback and
+     * a validity tester.
+     * @param the Action name (please read 'CONVENTION' in action.h).
+     * @param the Action description. Can be used as description in menus
+     *        implementing Actions.
+     * @param the callback to executed when the DataAction is activated by
+     *        the user (from a menu or from the code itself) for the
+     *        given data.
+     * @param a list of testers to check if the DataAction can be executed for
+     *        the given tuple.
+     */
+    DataAction (const std::string & _name,
+                const std::string & _description,
+                Callback _callback,
+                const TesterList & _testers);
+
+
+    /** Set the (Data, string) tuple on which the DataAction should be run.
+     * They must stay valid until the DataAction is activated.
+     * The Action is enabled/disabled following the parameters validity.
+     * @param the contact part of the tuple.
+     * @param the s part of the tuple.
+     */
+    void set_data (T _t = T (),
+                   const std::string & _s = "");
+
+
+    /** Checks if the DataAction can be run on the (Data, string) tuple given
+     * as argument.
+     * @param the contact part of the tuple.
+     * @param the s part of the tuple.
+     * @return true of the action can be run, false otherwise.
+     */
+    bool can_run_with_data (T _t,
+                            const std::string & _s);
+
+
+  private:
+
+    void on_activated ();
+
+    Callback callback;
+    TesterList testers;
+
+    T t;
+    std::string s;
+  };
+
+
+  /**
+   * @}
+   */
+};
+
+
+template <  class T  >
+Ekiga::DataAction< T >::DataAction (const std::string & _name,
+                                    const std::string & _description,
+                                    Callback _callback,
+                                    Tester _tester) :
+    Action (_name, _description)
+{
+  callback = _callback;
+  testers.push_back (_tester);
+
+  /* DataAction< T > objects should be disabled until data is set */
+  set_data ();
+}
+
+
+template < class T >
+Ekiga::DataAction< T >::DataAction (const std::string & _name,
+                                    const std::string & _description,
+                                    Callback _callback,
+                                    const TesterList & _testers) :
+    Action (_name, _description)
+{
+  callback = _callback;
+  testers = _testers;
+
+  /* DataAction< T > objects should be disabled until data is set */
+  set_data ();
+}
+
+
+template < class T >
+void
+Ekiga::DataAction< T >::set_data (T _t,
+                                  const std::string & _s)
+{
+  if (can_run_with_data (t, s)) {
+    t = _t;
+    s = _s;
+    enable ();
+  }
+  else {
+    t = T ();
+    s = "";
+    disable ();
+  }
+}
+
+
+template < class T >
+void
+Ekiga::DataAction< T >::on_activated ()
+{
+  if (is_enabled ())
+    callback (t, s);
+}
+
+
+template < class T >
+bool
+Ekiga::DataAction< T >::can_run_with_data (T _t,
+                                           const std::string & _s)
+{
+  if (!testers.empty ()) {
+    for (typename TesterList::const_iterator it = testers.begin ();
+         it != testers.end ();
+         ++it) {
+      if (!(*it) (_t, _s))
+        return false;
+    }
+    return true;
+  }
+  return false;
+}
+#endif
diff --git a/lib/engine/addressbook/contact-actor.h b/lib/engine/action/data-actor.h
similarity index 66%
rename from lib/engine/addressbook/contact-actor.h
rename to lib/engine/action/data-actor.h
index f06b272..be37a76 100644
--- a/lib/engine/addressbook/contact-actor.h
+++ b/lib/engine/action/data-actor.h
@@ -27,7 +27,7 @@
 
 
 /*
- *                         contact-actor.h  -  description
+ *                         data-actor.h  -  description
  *                         -------------------------------
  *   begin                : written in March 2014 by Damien Sandras
  *   copyright            : (c) 2014 by Damien Sandras
@@ -40,13 +40,13 @@
 
 #include <string>
 
-#include "contact-action.h"
+#include "data-action.h"
 #include "actor.h"
 
 namespace Ekiga {
 
   /**
-   * @defgroup actions ContactActor
+   * @defgroup actions DataActor
    * @{
    */
 
@@ -56,36 +56,52 @@ namespace Ekiga {
    * Actor can register actions through the add_action method.
    * acting.
    */
-  class ContactActor : public Actor
+  template < class T >
+  class DataActor : public Actor
   {
-    friend class ContactActorMenu;
 
   public:
+    typedef boost::shared_ptr< DataAction< T > > DataActionPtr;
 
-    /** Register an action on the given ContactActor.
+    /** Register an action on the given DataActor.
      *
      * Actions that are not "added" using this method will not be usable
      * from menus.
      *
-     * @param A ContactAction.
+     * @param A DataAction.
      */
-    void add_action (ActionPtr action);
+    void add_action (DataActionPtr action)
+    {
+      Actor::add_action (action);
+      action->set_data (t, s);
+    }
 
 
-    /** Set the (Contact, uri) tuple on which the ContactActions should be run.
-     * They must stay valid until the ContactAction is activated.
+
+    /** Set the (Data, s) tuple on which the DataActions should be run.
+     * They must stay valid until the DataAction is activated.
      * Actions are enabled/disabled following the parameters validity.
-     * @param the contact part of the tuple.
-     * @param the uri part of the tuple.
+     * @param the Data part of the tuple.
+     * @param the s part of the tuple.
      */
-    void set_data (ContactPtr _contact = ContactPtr (),
-                   const std::string & _uri = "");
-
+    void set_data (T _t = T (),
+                   const std::string & _s = "")
+    {
+      ActionMap::iterator it;
+      t = _t;
+      s = _s;
+
+      for (it = actions.begin(); it != actions.end(); ++it) {
+        boost::shared_ptr < DataAction < T > > a = boost::dynamic_pointer_cast< DataAction < T > > 
(it->second);
+        if (a)
+          a->set_data (t, s);
+      }
+    }
 
   private:
 
-    ContactPtr contact;
-    std::string uri;
+    T t;
+    std::string s;
   };
 
   /**
diff --git a/lib/engine/addressbook/contact-core.h b/lib/engine/addressbook/contact-core.h
index 581b964..ddd8e6a 100644
--- a/lib/engine/addressbook/contact-core.h
+++ b/lib/engine/addressbook/contact-core.h
@@ -37,7 +37,7 @@
 #define __CONTACT_CORE_H__
 
 #include "services.h"
-#include "contact-actor.h"
+#include "data-actor.h"
 #include "source.h"
 #include "scoped-connections.h"
 
@@ -50,6 +50,11 @@ namespace Ekiga
  * @{
  */
 
+  /* DataActor stuff */
+  typedef DataActor< ContactPtr > ContactActor;
+  typedef DataAction< ContactPtr > ContactAction;
+  typedef boost::shared_ptr< ContactAction > ContactActionPtr;
+
   class ContactDecorator
   {
   public:
diff --git a/lib/engine/components/local-roster/local-cluster.cpp 
b/lib/engine/components/local-roster/local-cluster.cpp
index 106c681..0526984 100644
--- a/lib/engine/components/local-roster/local-cluster.cpp
+++ b/lib/engine/components/local-roster/local-cluster.cpp
@@ -92,18 +92,20 @@ void Local::Cluster::on_status_received (std::string uri,
 
 void Local::Cluster::register_actions (boost::shared_ptr<Ekiga::ContactCore> contact_core)
 {
-  Ekiga::TesterList testers;
+  /*
+  Ekiga::ContactAction::TesterList testers;
   testers.push_back (boost::bind (&Local::Cluster::is_supported_uri, this, _2));
   testers.push_back (boost::bind (&Local::Heap::has_no_presentity_with_uri, heap, _2));
   Ekiga::ActionPtr add (new Ekiga::ContactAction ("local-cluster-add", _("Add to Contact List"),
                                                   boost::bind (static_cast<void (Local::Heap::*)(const 
Ekiga::ContactPtr&, const std::string&)>(&Local::Heap::new_presentity), heap, _1, _2),
                                                   testers));
   contact_core->add_action (add);
+  */
 }
 
 void Local::Cluster::register_actions ()
 {
   /* Add Actor actions */
-  add_action (Ekiga::ActionPtr (new Ekiga::Action ("local-cluster-new", _("New Contact"),
-                                                   boost::bind (static_cast<void (Local::Heap::*)(const 
std::string&, const std::string&)>(&Local::Heap::new_presentity), heap, "", ""))));
+ // add_action (Ekiga::ActionPtr (new Ekiga::Action ("local-cluster-new", _("New Contact"),
+   //                                                boost::bind (static_cast<void (Local::Heap::*)(const 
std::string&, const std::string&)>(&Local::Heap::new_presentity), heap, "", ""))));
 }
diff --git a/lib/engine/gui/gtk-core/actor-menu.cpp b/lib/engine/gui/gtk-core/actor-menu.cpp
index 50fa12a..e03bf55 100644
--- a/lib/engine/gui/gtk-core/actor-menu.cpp
+++ b/lib/engine/gui/gtk-core/actor-menu.cpp
@@ -40,7 +40,7 @@
 
 #include "action.h"
 #include "contact-core.h"
-#include "contact-actor.h"
+#include "data-actor.h"
 #include "actor-menu.h"
 
 
@@ -216,21 +216,3 @@ Ekiga::ActorMenu::build ()
 
   return "<?xml_content version=\"1.0\"?><interface>" + xml_content + "</interface>";
 }
-
-
-
-Ekiga::ContactActorMenu::ContactActorMenu (Ekiga::Actor & _obj) : ActorMenu (_obj)
-{
-}
-
-
-void
-Ekiga::ContactActorMenu::set_data (Ekiga::ContactPtr _contact,
-                                   const std::string & _uri)
-{
-  Ekiga::ContactActor *actor = dynamic_cast <Ekiga::ContactActor *> (&obj);
-  if (actor)
-    actor->set_data (_contact, _uri);
-
-  sync_gio_actions ();
-}
diff --git a/lib/engine/gui/gtk-core/actor-menu.h b/lib/engine/gui/gtk-core/actor-menu.h
index 1f71b1d..84ad237 100644
--- a/lib/engine/gui/gtk-core/actor-menu.h
+++ b/lib/engine/gui/gtk-core/actor-menu.h
@@ -39,7 +39,8 @@
 #define __LIVE_OBJECT_MENU_H__
 
 #include "action.h"
-#include "contact-action.h"
+#include "data-action.h"
+#include "null-deleter.h"
 
 #include <gtk/gtk.h>
 
@@ -113,23 +114,26 @@ namespace Ekiga {
     GtkBuilder *builder;
   };
 
-  class ContactActorMenu : public ActorMenu
+  template < class T >
+  class DataActorMenu : public ActorMenu
   {
   public:
 
-    ContactActorMenu (Actor & obj);
+    DataActorMenu (DataActor< T > & _obj) : ActorMenu (_obj) {};
 
-    /** Set the data usable by the ContactActorMenu.
+    /** Set the (data, string) tuple usable by the DataActorMenu.
      *  Available actions will depend on the data being set.
-     * @param a ContactPtr (if any).
-     * @param an uri (if any).
+     * @param the Data part of the tuple.
+     * @param the s part of the tuple.
      */
-    void set_data (ContactPtr _contact = ContactPtr (),
-                   const std::string & _uri = "");
+    void set_data (T _t = T (),
+                   const std::string & _s = "")
+    {
+      boost::shared_ptr< DataActor< T > > a = boost::dynamic_pointer_cast< DataActor< T > > 
(boost::shared_ptr< Actor > (&obj, null_deleter2 ()));
+      if (a) a->set_data (_t, _s);
+      sync_gio_actions ();
+    };
   };
-
   typedef boost::shared_ptr<ActorMenu> ActorMenuPtr;
-  typedef boost::shared_ptr<ContactActorMenu> ContactActorMenuPtr;
 }
-
 #endif
diff --git a/lib/engine/gui/gtk-frontend/call-history-view-gtk.cpp 
b/lib/engine/gui/gtk-frontend/call-history-view-gtk.cpp
index 53bf113..3fb17f4 100644
--- a/lib/engine/gui/gtk-frontend/call-history-view-gtk.cpp
+++ b/lib/engine/gui/gtk-frontend/call-history-view-gtk.cpp
@@ -62,7 +62,7 @@ struct _CallHistoryViewGtkPrivate
 
   boost::shared_ptr<History::Book> book;
   boost::shared_ptr<Ekiga::ActorMenu> menu;
-  boost::shared_ptr<Ekiga::ContactActorMenu> contact_menu;
+  boost::shared_ptr<Ekiga::DataActorMenu < Ekiga::ContactPtr > > contact_menu;
   GtkListStore* store;
   GtkTreeView* tree;
   boost::signals2::scoped_connection connection;
@@ -213,7 +213,7 @@ on_selection_changed (G_GNUC_UNUSED GtkTreeSelection* selection,
   call_history_view_gtk_get_selected (self, &contact);
 
   if (contact == NULL)
-    self->priv->contact_menu->set_data ();
+    self->priv->contact_menu->set_data (Ekiga::ContactPtr (), "");
   else
     self->priv->contact_menu->set_data (Ekiga::ContactPtr (contact, null_deleter ()),
                                         contact->get_uri ());
@@ -363,7 +363,8 @@ call_history_view_gtk_new (boost::shared_ptr<History::Book> book,
 
   /* register book actions */
   self->priv->menu = Ekiga::ActorMenuPtr (new Ekiga::ActorMenu (*book));
-  self->priv->contact_menu = Ekiga::ContactActorMenuPtr (new Ekiga::ContactActorMenu (*ccore));
+  self->priv->contact_menu =
+    boost::shared_ptr< Ekiga::DataActorMenu < Ekiga::ContactPtr> > (new Ekiga::DataActorMenu< 
Ekiga::ContactPtr > (*ccore));
 
   return GTK_WIDGET (self);
 }
diff --git a/lib/engine/gui/gtk-frontend/main_window.cpp b/lib/engine/gui/gtk-frontend/main_window.cpp
index c07914c..f1aa86f 100644
--- a/lib/engine/gui/gtk-frontend/main_window.cpp
+++ b/lib/engine/gui/gtk-frontend/main_window.cpp
@@ -156,7 +156,7 @@ struct _EkigaMainWindowPrivate
   Ekiga::scoped_connections connections;
 
   /* Menu */
-  boost::shared_ptr<Ekiga::ContactActorMenu> contact_menu;
+  boost::shared_ptr<Ekiga::DataActorMenu < Ekiga::ContactPtr > > contact_menu;
 
   /* GSettings */
   boost::shared_ptr<Ekiga::Settings> user_interface_settings;
@@ -1244,7 +1244,7 @@ gm_main_window_new (GmApplication *app)
     = core->get<History::Source> ("call-history-store");
 
   mw->priv->contact_menu =
-    Ekiga::ContactActorMenuPtr (new Ekiga::ContactActorMenu (*mw->priv->contact_core));
+    boost::shared_ptr< Ekiga::DataActorMenu < Ekiga::ContactPtr> > (new Ekiga::DataActorMenu< 
Ekiga::ContactPtr > (*mw->priv->contact_core));
 
   ekiga_main_window_connect_engine_signals (mw);
 
diff --git a/lib/engine/protocol/call-core.cpp b/lib/engine/protocol/call-core.cpp
index bdfc1e7..0abcdcb 100644
--- a/lib/engine/protocol/call-core.cpp
+++ b/lib/engine/protocol/call-core.cpp
@@ -42,7 +42,7 @@
 
 
 #include "call-manager.h"
-#include "contact-action.h"
+#include "data-action.h"
 
 
 using namespace Ekiga;
@@ -152,15 +152,15 @@ bool CallCore::is_supported_uri (const std::string & uri)
 void CallCore::register_actions (boost::shared_ptr<ContactCore> _contact_core)
 {
   contact_core = _contact_core;
-  ActionPtr call (new ContactAction ("call", _("Call"),
-                                     boost::bind (&CallCore::dial, this, _2),
-                                     boost::bind (&CallCore::can_call, this, _2)));
-  ActionPtr xfer (new ContactAction ("transfer", _("Transfer"),
-                                     boost::bind (&CallCore::transfer, this, _2, false),
-                                     boost::bind (&CallCore::can_transfer, this, _2)));
-  ActionPtr msg (new ContactAction ("message", _("Message"),
-                                    boost::bind (&CallCore::message, this, _1, _2),
-                                    boost::bind (&CallCore::is_supported_uri, this, _2)));
+  ContactActionPtr call (new ContactAction ("call", _("Call"),
+                                            boost::bind (&CallCore::dial, this, _2),
+                                            boost::bind (&CallCore::can_call, this, _2)));
+  ContactActionPtr xfer (new ContactAction ("transfer", _("Transfer"),
+                                            boost::bind (&CallCore::transfer, this, _2, false),
+                                            boost::bind (&CallCore::can_transfer, this, _2)));
+  ContactActionPtr msg (new ContactAction ("message", _("Message"),
+                                           boost::bind (&CallCore::message, this, _1, _2),
+                                           boost::bind (&CallCore::is_supported_uri, this, _2)));
   contact_core->add_action (call);
   contact_core->add_action (xfer);
   contact_core->add_action (msg);
diff --git a/plugins/evolution/Makefile.am b/plugins/evolution/Makefile.am
index aa253fd..2c386ee 100644
--- a/plugins/evolution/Makefile.am
+++ b/plugins/evolution/Makefile.am
@@ -2,6 +2,7 @@ plugin_LTLIBRARIES = libgmevolution.la
 
 AM_CXXFLAGS = \
        $(BOOST_CPPFLAGS) $(EDS_CFLAGS) $(GLIB_CFLAGS) \
+       -I$(top_srcdir)/lib/engine/action \
        -I$(top_srcdir)/lib/engine/framework \
        -I$(top_srcdir)/lib/engine/addressbook
 
diff --git a/plugins/ldap/Makefile.am b/plugins/ldap/Makefile.am
index c9154c9..8074f01 100644
--- a/plugins/ldap/Makefile.am
+++ b/plugins/ldap/Makefile.am
@@ -4,6 +4,7 @@ AM_CPPFLAGS = \
        $(LDAP_CFLAGS) $(BOOST_CPPFLAGS) $(GLIB_CFLAGS) $(XML_CFLAGS) \
        -I$(top_srcdir)/lib/                    \
        -I$(top_srcdir)/lib/settings            \
+       -I$(top_srcdir)/lib/engine/action       \
        -I$(top_srcdir)/lib/engine/framework    \
        -I$(top_srcdir)/lib/engine/addressbook
 
diff --git a/plugins/libnotify/Makefile.am b/plugins/libnotify/Makefile.am
index 5592f8f..69996d5 100644
--- a/plugins/libnotify/Makefile.am
+++ b/plugins/libnotify/Makefile.am
@@ -4,6 +4,7 @@ AM_CXXFLAGS = \
        $(BOOST_CPPFLAGS) $(NOTIFY_CFLAGS) \
        -I$(top_srcdir)/lib/engine/framework \
        -I$(top_srcdir)/lib/engine/notification \
+       -I$(top_srcdir)/lib/engine/action       \
        -I$(top_srcdir)/lib/engine/addressbook \
        -I$(top_srcdir)/lib/engine/protocol
 
diff --git a/src/Makefile.am b/src/Makefile.am
index e225ec7..6fb54f4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -9,6 +9,7 @@ AM_CPPFLAGS = \
        -I$(top_srcdir)/lib/engine/gui/gtk-frontend     \
        -I$(top_srcdir)/lib/engine/components/call-history \
        -I$(top_srcdir)/lib/engine/account              \
+       -I$(top_srcdir)/lib/engine/action               \
        -I$(top_srcdir)/lib/engine/addressbook  \
        -I$(top_srcdir)/lib/engine/chat         \
        -I$(top_srcdir)/lib/engine/notification \


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]