[ekiga/ds-gtk-application] Actions: Fixed behavior to be conform with the rest of Ekiga.



commit 07b8d0cc71dfc3939fefabd53708205163b31295
Author: Damien Sandras <dsandras seconix com>
Date:   Sun Nov 30 18:11:50 2014 +0100

    Actions: Fixed behavior to be conform with the rest of Ekiga.
    
    When a contact is selected in the roster, the actions_changed signal is
    emitted with all possible Contact and Heap actions.
    
    This is common to all Ekiga subcomponents: actions_changed always
    carries all available Actions for the selected item (including parent
    actions). However, right-click menus only present the specific actions
    for the selected item.

 lib/engine/gui/gtk-frontend/roster-view-gtk.cpp |   43 +++++++++-------------
 1 files changed, 18 insertions(+), 25 deletions(-)
---
diff --git a/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp b/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp
index 61d417b..3f6c508 100644
--- a/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp
+++ b/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp
@@ -39,6 +39,7 @@
 #include <ctime>
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
+#include <boost/assign/ptr_list_of.hpp>
 
 #include "ekiga-settings.h"
 
@@ -704,32 +705,23 @@ on_selection_changed (GtkTreeSelection* selection,
     self->priv->presentity_menu.reset ();
     self->priv->heap_menu.reset ();
 
-    switch (column_type) {
-
-    case TYPE_HEAP:
-
-      if (heap != NULL) {
-        self->priv->heap_menu = Ekiga::GActorMenuPtr (new Ekiga::GActorMenu (*heap));
-        g_signal_emit (self, signals[ACTIONS_CHANGED_SIGNAL], 0,
-                       self->priv->heap_menu->get_model ());
-      }
-      break;
-    case TYPE_GROUP:
-        g_signal_emit (self, signals[ACTIONS_CHANGED_SIGNAL], 0, NULL);
-      break;
-    case TYPE_PRESENTITY:
+    if (heap != NULL)
+      self->priv->heap_menu = Ekiga::GActorMenuPtr (new Ekiga::GActorMenu (*heap, heap->get_name ()));
+    if (presentity != NULL)
+      self->priv->presentity_menu = Ekiga::GActorMenuPtr (new Ekiga::GActorMenu (*presentity, 
presentity->get_name ()));
+
+    if (heap && presentity)
+      g_signal_emit (self, signals[ACTIONS_CHANGED_SIGNAL], 0,
+                     self->priv->presentity_menu->get_model (boost::assign::list_of 
(self->priv->heap_menu)));
+    else if (heap)
+      g_signal_emit (self, signals[ACTIONS_CHANGED_SIGNAL], 0,
+                     self->priv->heap_menu->get_model ());
+    else if (presentity)
+      g_signal_emit (self, signals[ACTIONS_CHANGED_SIGNAL], 0,
+                     self->priv->presentity_menu->get_model ());
+    else
+      g_signal_emit (self, signals[ACTIONS_CHANGED_SIGNAL], 0, NULL);
 
-      if (presentity != NULL) {
-        self->priv->presentity_menu = Ekiga::GActorMenuPtr (new Ekiga::GActorMenu (*presentity));
-        g_signal_emit (self, signals[ACTIONS_CHANGED_SIGNAL], 0,
-                       self->priv->presentity_menu->get_model ());
-      }
-      break;
-    default:
-
-      g_assert_not_reached ();
-      break; // shouldn't happen
-    }
     g_free (group_name);
     g_free (name);
   }
@@ -737,6 +729,7 @@ on_selection_changed (GtkTreeSelection* selection,
     g_signal_emit (self, signals[ACTIONS_CHANGED_SIGNAL], 0, NULL);
 }
 
+
 static gint
 on_view_event_after (GtkWidget *tree_view,
                     GdkEventButton *event,


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