diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c index 917132613..7d763d752 100644 --- a/sflphone-client-gnome/src/statusicon.c +++ b/sflphone-client-gnome/src/statusicon.c @@ -25,11 +25,10 @@ #include #if GTK_CHECK_VERSION(2,10,0) -GtkStatusIcon* status; -GtkWidget * show_menu_item; +GtkStatusIcon *status; +GtkWidget *show_menu_item, *hangup_menu_item; gboolean __minimized = MINIMIZED; - void popup_main_window (void) { if (__POPUP_WINDOW) @@ -40,18 +39,39 @@ void popup_main_window (void) } } +void show_status_hangup_icon() { + + DEBUG("Show Hangup in Systray"); + gtk_widget_show(GTK_WIDGET(hangup_menu_item)); + +} + +void hide_status_hangup_icon() { + + DEBUG("Hide Hangup in Systray"); + gtk_widget_hide(GTK_WIDGET(hangup_menu_item)); +} + + void status_quit ( void * foo UNUSED) { sflphone_quit(); } +void +status_hangup () +{ + sflphone_hang_up(); +} + void status_icon_unminimize() { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), TRUE); } + gboolean main_widget_minimized() { return __minimized; @@ -92,6 +112,7 @@ GtkWidget* create_menu() { GtkWidget * menu; GtkWidget * menu_items; + GtkWidget * image; menu = gtk_menu_new (); @@ -101,10 +122,18 @@ GtkWidget* create_menu() g_signal_connect(G_OBJECT (show_menu_item), "toggled", G_CALLBACK (show_hide), NULL); - + + hangup_menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Hang up")); + image = gtk_image_new_from_file( ICONS_DIR "/icon_hangup.svg"); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(hangup_menu_item), image); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), hangup_menu_item); + g_signal_connect(G_OBJECT (hangup_menu_item), "activate", + G_CALLBACK (status_hangup), + NULL); + menu_items = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - + menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_QUIT, get_accel_group()); g_signal_connect_swapped (G_OBJECT (menu_items), "activate", G_CALLBACK (status_quit), diff --git a/sflphone-client-gnome/src/statusicon.h b/sflphone-client-gnome/src/statusicon.h index 4a841c4ea..f976c9ad1 100644 --- a/sflphone-client-gnome/src/statusicon.h +++ b/sflphone-client-gnome/src/statusicon.h @@ -45,6 +45,19 @@ void show_status_icon(); */ void status_icon_unminimize(); +/** + * Show hangup icon + */ +void show_status_hangup_icon(); + + +/** + * Show hangup icon + */ +void hide_status_hangup_icon(); + + + /** * Tells if the main window if minimized or not * @return gboolean TRUE if the main window is minimized diff --git a/sflphone-client-gnome/src/ui.xml b/sflphone-client-gnome/src/ui.xml index 6d3fe1f77..449e67b0b 100644 --- a/sflphone-client-gnome/src/ui.xml +++ b/sflphone-client-gnome/src/ui.xml @@ -25,15 +25,15 @@ - + - - + + @@ -41,25 +41,25 @@ - + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - + + + + + diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c index 1a4632c58..966b6311b 100644 --- a/sflphone-client-gnome/src/uimanager.c +++ b/sflphone-client-gnome/src/uimanager.c @@ -27,6 +27,7 @@ #include #include #include +#include static GtkWidget *toolbar; static GtkWidget *toolbarWindows; @@ -147,7 +148,9 @@ void update_actions() if (selectedCall) { - // DEBUG("------------------------- selected call ---------------------------\n"); + // update icon in systray + show_status_hangup_icon(); + gtk_action_set_sensitive (GTK_ACTION (copyAction), TRUE); switch(selectedCall->_state) @@ -225,7 +228,8 @@ void update_actions() } else if (selectedConf){ - // DEBUG("------------------------- selected conf ---------------------------\n"); + // update icon in systray + show_status_hangup_icon(); switch(selectedConf->_state) { @@ -265,6 +269,10 @@ void update_actions() } else { + + // update icon in systray + hide_status_hangup_icon(); + if( account_list_get_size() > 0 && current_account_has_mailbox ()) { gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (voicemailToolbar), -2); diff --git a/sflphone-common/src/audio/audiolayer.h b/sflphone-common/src/audio/audiolayer.h index 580c064e5..46dc81533 100644 --- a/sflphone-common/src/audio/audiolayer.h +++ b/sflphone-common/src/audio/audiolayer.h @@ -58,7 +58,7 @@ class AudioLayer { */ AudioLayer( ManagerImpl* manager , int type ) : _defaultVolume(100) - , _layerType( type ) + , _layerType( type ) , _manager(manager) , _urgentRingBuffer( SIZEBUF, default_id ) , _indexIn ( 0 ) diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp index 0187585c2..ac51fa0d5 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp +++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp @@ -24,20 +24,19 @@ static pa_channel_map channel_map; -AudioStream::AudioStream (PulseLayerType * driver) +AudioStream::AudioStream (PulseLayerType * driver, int smplrate) : _audiostream (NULL), _context (driver->context), _streamType (driver->type), _streamDescription (driver->description), _volume(), - flag (PA_STREAM_AUTO_TIMING_UPDATE), - sample_spec(), + _flag (PA_STREAM_AUTO_TIMING_UPDATE), + _sample_spec(), _mainloop (driver->mainloop) { - sample_spec.format = PA_SAMPLE_S16LE; - // sample_spec.format = PA_SAMPLE_FLOAT32LE; - sample_spec.rate = 44100; - sample_spec.channels = 1; + _sample_spec.format = PA_SAMPLE_S16LE; // PA_SAMPLE_FLOAT32LE; + _sample_spec.rate = smplrate; + _sample_spec.channels = 1; channel_map.channels = 1; pa_cvolume_set (&_volume , 1 , PA_VOLUME_NORM) ; // * vol / 100 ; } @@ -178,20 +177,13 @@ AudioStream::createStream (pa_context* c) ost::MutexLock guard (_mutex); pa_stream* s; - //pa_cvolume cv; - // pa_sample_spec ss; - // ss.format = PA_SAMPLE_S16LE; - // ss.rate = 44100; - // ss.channels = 1; - - - assert (pa_sample_spec_valid (&sample_spec)); + assert (pa_sample_spec_valid (&_sample_spec)); assert (pa_channel_map_valid (&channel_map)); pa_buffer_attr* attributes = (pa_buffer_attr*) malloc (sizeof (pa_buffer_attr)); - if (! (s = pa_stream_new (c, _streamDescription.c_str() , &sample_spec, &channel_map))) + if (! (s = pa_stream_new (c, _streamDescription.c_str() , &_sample_spec, &channel_map))) _debug ("%s: pa_stream_new() failed : %s" , _streamDescription.c_str(), pa_strerror (pa_context_errno (c))); assert (s); @@ -202,7 +194,7 @@ AudioStream::createStream (pa_context* c) // 20 ms framesize TODO: take framesize value from config attributes->maxlength = (uint32_t) -1; - attributes->tlength = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &sample_spec); + attributes->tlength = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &_sample_spec); attributes->prebuf = 0; attributes->minreq = (uint32_t) -1; attributes->fragsize = (uint32_t) -1; @@ -215,7 +207,7 @@ AudioStream::createStream (pa_context* c) attributes->tlength = (uint32_t) -1; attributes->prebuf = (uint32_t) -1; attributes->minreq = (uint32_t) -1; - attributes->fragsize = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &sample_spec); + attributes->fragsize = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec); diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.h b/sflphone-common/src/audio/pulseaudio/audiostream.h index 1d860ebc1..75705f18d 100644 --- a/sflphone-common/src/audio/pulseaudio/audiostream.h +++ b/sflphone-common/src/audio/pulseaudio/audiostream.h @@ -54,7 +54,7 @@ class AudioStream { * Constructor * @param context The PulseLayerType structure containing various information. */ - AudioStream(PulseLayerType * driver); + AudioStream(PulseLayerType * driver, int smplrate); /** * Destructor @@ -175,8 +175,8 @@ class AudioStream { * Streams parameters */ pa_cvolume _volume; - pa_stream_flags_t flag; - pa_sample_spec sample_spec ; + pa_stream_flags_t _flag; + pa_sample_spec _sample_spec ; pa_threaded_mainloop * _mainloop; diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp index 773956df5..c1db2e2e3 100644 --- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp +++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp @@ -243,7 +243,7 @@ bool PulseLayer::createStreams (pa_context* c) playbackParam->volume = _manager->getSpkrVolume(); playbackParam->mainloop = m; - playback = new AudioStream (playbackParam); + playback = new AudioStream (playbackParam, _audioSampleRate); playback->connectStream(); pa_stream_set_write_callback (playback->pulseStream(), playback_callback, this); pa_stream_set_overflow_callback (playback->pulseStream(), playback_overflow_callback, this); @@ -259,7 +259,7 @@ bool PulseLayer::createStreams (pa_context* c) recordParam->volume = _manager->getMicVolume(); recordParam->mainloop = m; - record = new AudioStream (recordParam); + record = new AudioStream (recordParam, _audioSampleRate); record->connectStream(); pa_stream_set_read_callback (record->pulseStream() , capture_callback, this); // pa_stream_set_suspended_callback(record->pulseStream(), stream_suspended_callback, this); diff --git a/sflphone-common/src/audio/samplerateconverter.cpp b/sflphone-common/src/audio/samplerateconverter.cpp index 8d115a255..9a2ace32e 100644 --- a/sflphone-common/src/audio/samplerateconverter.cpp +++ b/sflphone-common/src/audio/samplerateconverter.cpp @@ -20,7 +20,7 @@ #include "manager.h" SamplerateConverter::SamplerateConverter (void) - : _frequence (Manager::instance().getConfigInt (AUDIO , ALSA_SAMPLE_RATE)) //44100 + : _frequence (Manager::instance().getConfigInt (AUDIO , AUDIO_SAMPLE_RATE)) //44100 , _framesize (Manager::instance().getConfigInt (AUDIO , ALSA_FRAME_SIZE)) , _floatBufferDownMic (NULL) , _floatBufferUpMic (NULL) diff --git a/sflphone-common/src/dbus/callmanager.cpp b/sflphone-common/src/dbus/callmanager.cpp index 346894449..1c30ef975 100644 --- a/sflphone-common/src/dbus/callmanager.cpp +++ b/sflphone-common/src/dbus/callmanager.cpp @@ -40,8 +40,7 @@ void CallManager::placeCall (const std::string& accountID, const std::string& callID, const std::string& to) -{ - // Check if a destination number is available +{ // Check if a destination number is available if (to == "") _debug ("No number entered - Call stopped"); else Manager::instance().outgoingCall (accountID, callID, to); diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml index fa1433399..33f0192c2 100644 --- a/sflphone-common/src/dbus/configurationmanager-introspec.xml +++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml @@ -162,6 +162,8 @@