[ekiga/ds-gtk-application] ActorMenu: Improved code.
- From: Damien Sandras <dsandras src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ekiga/ds-gtk-application] ActorMenu: Improved code.
- Date: Sun, 16 Mar 2014 17:09:06 +0000 (UTC)
commit 75cf3d0fce06bdb7e8170fdc6c2ef0616901d11e
Author: Damien Sandras <dsandras beip be>
Date: Sun Mar 16 18:08:32 2014 +0100
ActorMenu: Improved code.
lib/engine/gui/gtk-core/actor-menu.cpp | 94 +++++++++++++++-----------------
lib/engine/gui/gtk-core/actor-menu.h | 2 +
2 files changed, 46 insertions(+), 50 deletions(-)
---
diff --git a/lib/engine/gui/gtk-core/actor-menu.cpp b/lib/engine/gui/gtk-core/actor-menu.cpp
index ae9e5c0..b30de9c 100644
--- a/lib/engine/gui/gtk-core/actor-menu.cpp
+++ b/lib/engine/gui/gtk-core/actor-menu.cpp
@@ -77,7 +77,6 @@ Ekiga::ActorMenu::~ActorMenu ()
void
Ekiga::ActorMenu::add_gio_actions ()
{
- GSimpleAction *action = NULL;
ActionMap::const_iterator it;
for (it = obj.actions.begin(); it != obj.actions.end(); ++it) {
@@ -85,14 +84,8 @@ Ekiga::ActorMenu::add_gio_actions ()
if (!g_action_map_lookup_action (G_ACTION_MAP (g_application_get_default ()),
it->first.c_str ())) {
- action = g_simple_action_new (it->first.c_str (), NULL);
- g_object_set_data (G_OBJECT (action), "action", it->second.get ());
- g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()),
- G_ACTION (action));
- g_signal_connect (action, "activate",
- G_CALLBACK (action_activated),
- (gpointer) this);
- g_object_unref (action);
+ Ekiga::Action *a = dynamic_cast<Ekiga::Action *> (it->second.get ());
+ add_action (a);
}
}
}
@@ -101,7 +94,6 @@ Ekiga::ActorMenu::add_gio_actions ()
void
Ekiga::ActorMenu::add_gio_action (const std::string & name)
{
- GSimpleAction *action = NULL;
ActionMap::const_iterator it;
it = obj.actions.find (name);
@@ -110,19 +102,29 @@ Ekiga::ActorMenu::add_gio_action (const std::string & name)
&& !g_action_map_lookup_action (G_ACTION_MAP (g_application_get_default ()),
it->first.c_str ())) {
- action = g_simple_action_new (it->first.c_str (), NULL);
- g_object_set_data (G_OBJECT (action), "action", it->second.get ());
- g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()),
- G_ACTION (action));
- g_signal_connect (action, "activate",
- G_CALLBACK (action_activated),
- (gpointer) this);
- g_object_unref (action);
+ Ekiga::Action *a = dynamic_cast<Ekiga::Action *> (it->second.get ());
+ add_action (a);
}
}
void
+Ekiga::ActorMenu::add_action (Ekiga::Action *a)
+{
+ GSimpleAction *action = NULL;
+
+ action = g_simple_action_new (a->get_name ().c_str (), NULL);
+ g_object_set_data (G_OBJECT (action), "action", a);
+ g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()),
+ G_ACTION (action));
+ g_signal_connect (action, "activate",
+ G_CALLBACK (action_activated),
+ (gpointer) this);
+ g_object_unref (action);
+}
+
+
+void
Ekiga::ActorMenu::remove_gio_action (const std::string & name)
{
g_action_map_remove_action (G_ACTION_MAP (g_application_get_default ()),
@@ -196,28 +198,12 @@ Ekiga::ContactActorMenu::ContactActorMenu (Ekiga::Actor & _obj) : ActorMenu (_ob
void
Ekiga::ContactActorMenu::add_gio_actions ()
{
- GSimpleAction *action = NULL;
ActionMap::const_iterator it;
for (it = obj.actions.begin(); it != obj.actions.end(); ++it) {
Ekiga::ContactAction *a = dynamic_cast<Ekiga::ContactAction *> (it->second.get ());
-
- if (!a || !a->can_run_with_data (contact, uri)) {
- g_action_map_remove_action (G_ACTION_MAP (g_application_get_default ()),
- it->first.c_str ());
- }
- else if (a && a->can_run_with_data (contact, uri)) {
-
- action = g_simple_action_new (it->first.c_str (), NULL);
- g_object_set_data (G_OBJECT (action), "action", it->second.get ());
- g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()),
- G_ACTION (action));
- g_signal_connect (action, "activate",
- G_CALLBACK (action_activated),
- (gpointer) this);
- g_object_unref (action);
- }
+ add_action (a);
}
}
@@ -225,7 +211,6 @@ Ekiga::ContactActorMenu::add_gio_actions ()
void
Ekiga::ContactActorMenu::add_gio_action (const std::string & name)
{
- GSimpleAction *action = NULL;
ActionMap::const_iterator it;
it = obj.actions.find (name);
@@ -235,21 +220,30 @@ Ekiga::ContactActorMenu::add_gio_action (const std::string & name)
it->first.c_str ())) {
Ekiga::ContactAction *a = dynamic_cast<Ekiga::ContactAction *> (it->second.get ());
+ add_action (a);
+ }
+}
- if (!a || !a->can_run_with_data (contact, uri)) {
- g_action_map_remove_action (G_ACTION_MAP (g_application_get_default ()),
- it->first.c_str ());
- }
- else if (a && a->can_run_with_data (contact, uri)) {
- action = g_simple_action_new (it->first.c_str (), NULL);
- g_object_set_data (G_OBJECT (action), "action", it->second.get ());
- g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()),
- G_ACTION (action));
- g_signal_connect (action, "activate",
- G_CALLBACK (action_activated),
- (gpointer) this);
- g_object_unref (action);
- }
+
+void
+Ekiga::ContactActorMenu::add_action (Ekiga::Action *_action)
+{
+ GSimpleAction *action = NULL;
+ Ekiga::ContactAction *a = dynamic_cast<Ekiga::ContactAction *> (_action);
+
+ if (!a || !a->can_run_with_data (contact, uri)) {
+ g_action_map_remove_action (G_ACTION_MAP (g_application_get_default ()),
+ a->get_name ().c_str ());
+ }
+ else if (a && a->can_run_with_data (contact, uri)) {
+ action = g_simple_action_new (a->get_name ().c_str (), NULL);
+ g_object_set_data (G_OBJECT (action), "action", a);
+ g_action_map_add_action (G_ACTION_MAP (g_application_get_default ()),
+ G_ACTION (action));
+ g_signal_connect (action, "activate",
+ G_CALLBACK (action_activated),
+ (gpointer) this);
+ g_object_unref (action);
}
}
diff --git a/lib/engine/gui/gtk-core/actor-menu.h b/lib/engine/gui/gtk-core/actor-menu.h
index dd5caa0..04b4686 100644
--- a/lib/engine/gui/gtk-core/actor-menu.h
+++ b/lib/engine/gui/gtk-core/actor-menu.h
@@ -75,6 +75,7 @@ namespace Ekiga {
ActorMenu (Actor & obj);
virtual void add_gio_actions ();
virtual void add_gio_action (const std::string & name);
+ virtual void add_action (Action *a);
virtual void remove_gio_action (const std::string & name);
Actor & obj;
@@ -95,6 +96,7 @@ namespace Ekiga {
ContactActorMenu (Actor & obj);
void add_gio_actions ();
void add_gio_action (const std::string & name);
+ void add_action (Action *a);
ContactPtr contact;
std::string uri;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]