From b1ea9c8f93d831dfb0557425c0fe16f45bedcc2a Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 11 Nov 2009 17:35:54 -0500
Subject: [PATCH] [#2407] Fixes dialpad

---
 .../src/dbus/configurationmanager-introspec.xml       |  1 +
 sflphone-client-gnome/src/dbus/dbus.c                 |  4 ++--
 sflphone-client-gnome/src/dbus/dbus.h                 |  2 +-
 sflphone-client-gnome/src/mainwindow.c                |  6 ++++--
 sflphone-client-gnome/src/uimanager.c                 |  6 ++++--
 .../src/dbus/configurationmanager-introspec.xml       |  1 +
 sflphone-common/src/dbus/configurationmanager.cpp     |  4 ++--
 sflphone-common/src/dbus/configurationmanager.h       |  2 +-
 sflphone-common/src/managerimpl.cpp                   | 11 +++++++++--
 sflphone-common/src/managerimpl.h                     |  2 +-
 10 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
index 7f5eac2ad6..14ab67581a 100644
--- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
@@ -243,6 +243,7 @@
     </method>
 
     <method name="setDialpad">
+      <arg type="b" name="display" direction="in"/>
     </method>
 
     <method name="getSearchbar">
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index 73543bd328..4b5cfdbfb9 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -1627,13 +1627,13 @@ dbus_get_dialpad()
     return state;
 }
 
-    void
-dbus_set_dialpad(  )
+void dbus_set_dialpad (gboolean display)
 {
     
     GError* error = NULL;
     org_sflphone_SFLphone_ConfigurationManager_set_dialpad(
             configurationManagerProxy,
+			display,
             &error);
     if(error)
     {
diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h
index 12ef975ff4..96404da971 100644
--- a/sflphone-client-gnome/src/dbus/dbus.h
+++ b/sflphone-client-gnome/src/dbus/dbus.h
@@ -363,7 +363,7 @@ void dbus_set_ringtone_choice( const gchar* tone );
 /**
  * ConfigurationManager - Set the dialpad visible or not
  */
-void dbus_set_dialpad(  );
+void dbus_set_dialpad (gboolean display);
 
 /**
  * ConfigurationManager - Tells if the user wants to display the dialpad or not
diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c
index adf556f326..d8607eb30f 100644
--- a/sflphone-client-gnome/src/mainwindow.c
+++ b/sflphone-client-gnome/src/mainwindow.c
@@ -315,8 +315,10 @@ main_window_info_message(gchar * markup){
 	main_window_message(GTK_MESSAGE_INFO, markup);
 }
 
-void
-main_window_dialpad( gboolean state ){
+void main_window_dialpad (gboolean state){
+
+	g_print ("main_window_dialpad\n");
+
 	if(state) {
 		dialpad = create_dialpad();
 		gtk_box_pack_end (GTK_BOX (subvbox), dialpad, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c
index 4e782bb4d5..9d6d3ca97d 100644
--- a/sflphone-client-gnome/src/uimanager.c
+++ b/sflphone-client-gnome/src/uimanager.c
@@ -245,7 +245,6 @@ void update_voicemail_status (void)
 static void volume_bar_cb (GtkToggleAction *togglemenuitem, gpointer user_data)
 {
 	gboolean toggled = gtk_toggle_action_get_active (togglemenuitem);
-	// DEBUG("%i\n", toggled);
 	main_window_volume_controls(toggled);
 	if (toggled || SHOW_VOLUME)
 		dbus_set_volume_controls(toggled);
@@ -254,7 +253,10 @@ static void volume_bar_cb (GtkToggleAction *togglemenuitem, gpointer user_data)
 static void dialpad_bar_cb (GtkToggleAction *togglemenuitem, gpointer user_data)
 {
 	gboolean toggled = gtk_toggle_action_get_active (togglemenuitem);
-	main_window_dialpad(toggled);
+	if (toggled == SHOW_DIALPAD)
+		return;
+	main_window_dialpad (toggled);
+	g_print ("dialpad_bar_cb - state: %i", toggled);
 	if (toggled || SHOW_DIALPAD)
 		dbus_set_dialpad(toggled);
 }
diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index 7f5eac2ad6..14ab67581a 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -243,6 +243,7 @@
     </method>
 
     <method name="setDialpad">
+      <arg type="b" name="display" direction="in"/>
     </method>
 
     <method name="getSearchbar">
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index d9f284cb9d..280b9b4c16 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -590,9 +590,9 @@ ConfigurationManager::getDialpad (void)
 }
 
 void
-ConfigurationManager::setDialpad (void)
+ConfigurationManager::setDialpad (const bool& display)
 {
-    Manager::instance().setDialpad();
+    Manager::instance().setDialpad (display);
 }
 
 int32_t
diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h
index 1592709cb1..ba4371fd90 100644
--- a/sflphone-common/src/dbus/configurationmanager.h
+++ b/sflphone-common/src/dbus/configurationmanager.h
@@ -92,7 +92,7 @@ public:
     std::string getRecordPath( void );
     void setRecordPath(const std::string& recPath );
     int32_t getDialpad( void );
-    void setDialpad( void );
+    void setDialpad (const bool& display);
     int32_t getSearchbar( void );
     
     void setSearchbar( void );
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index e7f04c586a..d816cf69cb 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2809,9 +2809,16 @@ ManagerImpl::getDialpad (void)
 }
 
 void
-ManagerImpl::setDialpad (void)
+ManagerImpl::setDialpad (bool display)
 {
-    (getConfigString (PREFERENCES, CONFIG_DIALPAD) == TRUE_STR) ? setConfig (PREFERENCES, CONFIG_DIALPAD, FALSE_STR) : setConfig (PREFERENCES, CONFIG_DIALPAD, TRUE_STR);
+	std::string set;
+
+	display ? set = TRUE_STR : set = FALSE_STR;
+	// If the value we received is different from the one saved in the config file, save the new value
+	// Else do nothing
+	if ((display && (getConfigString (PREFERENCES, CONFIG_DIALPAD) != TRUE_STR)) || 
+		(!display && (getConfigString (PREFERENCES, CONFIG_DIALPAD) != FALSE_STR)))
+			setConfig (PREFERENCES, CONFIG_DIALPAD, set);
 }
 
 int
diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h
index 40ed90c089..23db39ed14 100644
--- a/sflphone-common/src/managerimpl.h
+++ b/sflphone-common/src/managerimpl.h
@@ -661,7 +661,7 @@ class ManagerImpl {
     /**
      * Set the dialpad visible or not
      */
-    void setDialpad( void );
+    void setDialpad (bool display);
 
     /**
      * Tells if the user wants to display the volume controls or not
-- 
GitLab