diff --git a/sflphone-client-gnome/debian/changelog b/sflphone-client-gnome/debian/changelog index 90d5988947d4b35fefa0f024293cfb0eb2714e23..55d1fd7d23f8a7c4383b1c22ff66fce77650b2f6 100644 --- a/sflphone-client-gnome/debian/changelog +++ b/sflphone-client-gnome/debian/changelog @@ -1,63 +1,3 @@ -sflphone-client-gnome (0.9.5-0ubuntu1~4.gbpc11c5a) SYSTEM; urgency=low - - ** SNAPSHOT build @c11c5adbc5d4bbe5ee225dd85d6be59f03feaaeb ** - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~rc1 - - [ Emmanuel Milou ] - * [#1402] Build the daemon with the local pjsip library (vs the - installed one) - * [#1402] Add info message after configure - - [ Sflphone Project ] - - [ jerome ] - * Bug #1404: Fix strings in preferences panel. - * Bug #1405: Fix strings as requested. - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-08 - - [ Sflphone Project ] - - [ Alexandre Savard ] - * [#1314] Add some return values to audio init functions - * Add debug messages in debus calls concerning account - * [#1314] Refactoring of pulselayer to test conect/disconnect - * [#1314] Refactoring pulseaudio stream to test connect disconnect - * [#1314] Add mutex to pulse layer audio streams - * [#1009] Fix Codec Sampling Rate set to zeros - * [#1314] Test pulse audio and audio streams connect and disconnect - * Add python dbus test suite - * Test client dbus connection to a fixed owner - * [#1407] Add a scenario to pick_up action - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-09 - - [ Alexandre Savard ] - * [#1407] Some print info - * Add codec debug tests in pysflphone - * Dbus with fixed owner does not automatically start the deamon - * [#1404] IF the first notification option disable the second - notification - * [#1404] Gnome -> Preferences -> Address Book - * [#1404] Call History - * [#1404] Gnome -> Preferences -> Recordings - - [ Sflphone Project ] - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-12 - - [ Sflphone Project ] - - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Wed, 13 May 2009 00:01:59 -0400 - sflphone-client-gnome (0.9.5-0ubuntu1~rc1) SYSTEM; urgency=low [ SFLphone Project ] @@ -87,145 +27,6 @@ sflphone-client-gnome (0.9.5-0ubuntu1~rc1) SYSTEM; urgency=low -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Tue, 05 May 2009 19:16:13 -0400 -sflphone-client-gnome (0.9.5-0ubuntu1~6.gbpdfcd86) SYSTEM; urgency=low - - ** SNAPSHOT build @dfcd86f7fdabcc0462e8e5aef3a21ada929e077b ** - - [ Emmanuel Milou ] - * [#1220] Add Conflicts: sflphone in debian control files - * [#1179] Add liblog4c3 runtime dependency - * [#1212] FIx typo error in dependency list for itnrepid - * [#1212] FIx .desktop file to point on the right exec - * [#1212] Modify changelog replacing tag - - [ Sflphone Project ] - * "[#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta" - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-27 - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-28 - - [ Emmanuel Milou ] - * [#1212] Restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-28 - - [ Julien Bonjean ] - * [#1262]Introduced dynamic version setting - - [ Sflphone Project ] - - [ Alexandre Savard ] - * [#1143] Add celtcodec.cpp - * [#1143] add configure and make stuffs - * [#1143] add frame size into each codecs - * [#1143] Take timestamp's step size from codec - * [#1143] RTP thread at 11 ms - * [#1143] Dynamic RTP thread sleep parameter - * [#1143] Fix dynamic thread sleep time calculation - - [ Emmanuel Milou ] - * [#1262] sflphone-client-gnome uses changelog version number - - [ Alexandre Savard ] - * [#1143] Some cleanup - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-29 - - [ Emmanuel Milou ] - * [#1262] Update changelogs - * [#1262] Update rules - * [#1143] Build celt codec only if version >= 0.5.1 is detected - * [1143] Restore rules files - do not need to specify --without-celt - * [#1336] Change SFLphone logo - * [#1331] Fix searchbar problems - * [#1332] Fix unexplicit labels - * [#1334] Fix unexplicit label - * [#1329] Fix recordings config panel - - [ Sflphone Project ] - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-30 - - [ Emmanuel Milou ] - * [#1336] Add new logo - * [#1335] Enable/disable address book, change option name - * [#1324] Add more insightful status bar message - * [#1330] Fix behaviour if no addressbook are active - - [ Sflphone Project ] - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-01 - - [ Julien Bonjean ] - * [#1161] Added build system scripts - - [ Emmanuel Milou ] - * [#1215] Redesign current account computing - * [#1333] Remove default voicemail number - * [#1333] Voicemail icon update if current account has no voicemail - number + unit tests - * [#1333] Remove default voicemail number in assistant; update status - bar message - * [#1333] Add voicemail number field in wizard - * [#1342] Make config panels more GNOME compliant - - [ Sflphone Project ] - - [ Alexandre Savard ] - * [#1143] Fixed auio record after celt refactoring - * [#1327] Alsa display unappropriate info - * [#1328] Unappropriate label in audio preferences panel - * [#1316] Forgot 's' to RFC3969 'sip:' URI when calling in unicast - mode - * [#1316] #define IP_TO_IP_PATTERN "sip:" - * [#1316] 'sip:' subtitution to 4 char - * [#1321] Startup wizard password display is inconsistent - * [#1325] Error window in preferences shows formatting error - * [#1325] Proposed Implementation - * [#1325] Add title to window - * [#1343] Moved key stroke signal from call tree to main window - * [#1343] Dialing on key strike disabled when either history or - contact selected - * [#1343] Cannot dial when focus not on white frame - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-02 - - [ Emmanuel Milou ] - * [#1331] Fix clear default message bug - * [#936] Remove old codecs from repository - - [ Sflphone Project ] - - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Tue, 05 May 2009 00:02:19 -0400 - sflphone-client-gnome (0.9.5-0ubuntu1~beta) SYSTEM; urgency=low [ Julien Bonjean ] diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 3d56e847c0483f16566b5077ac6c2177dbc599a3..01d6d6960dceda42824aebb60085a45ebf541662 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -25,6 +25,12 @@ #include <toolbar.h> #include <mainwindow.h> + +GtkWidget *sw; +GtkCellRenderer *rend; +GtkTreeViewColumn *col; +GtkTreeSelection *sel; + /** * Show popup menu */ @@ -141,6 +147,7 @@ button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUS return FALSE; } + static gboolean on_key_released (GtkWidget *widget UNUSED, GdkEventKey *event, @@ -175,13 +182,27 @@ calltree_reset (calltab_t* tab) gtk_list_store_clear (tab->store); } +void +focus_on_calltree_out(){ + DEBUG("set_focus_on_calltree_out \n"); + // gtk_widget_grab_focus(GTK_WIDGET(sw)); + focus_is_on_calltree = FALSE; +} + +void +focus_on_calltree_in(){ + DEBUG("set_focus_on_calltree_in \n"); + // gtk_widget_grab_focus(GTK_WIDGET(sw)); + focus_is_on_calltree = TRUE; +} + void calltree_create (calltab_t* tab, gchar* searchbar_type) { - GtkWidget *sw; - GtkCellRenderer *rend; - GtkTreeViewColumn *col; - GtkTreeSelection *sel; + // GtkWidget *sw; + // GtkCellRenderer *rend; + // GtkTreeViewColumn *col; + // GtkTreeSelection *sel; tab->tree = gtk_vbox_new(FALSE, 10); @@ -207,7 +228,8 @@ calltree_create (calltab_t* tab, gchar* searchbar_type) G_CALLBACK (row_activated), NULL); - // GTK_WIDGET_SET_FLAGS (GTK_WIDGET(sw),GTK_CAN_FOCUS); + GTK_WIDGET_SET_FLAGS (GTK_WIDGET(sw),GTK_CAN_FOCUS); + gtk_widget_grab_focus (GTK_WIDGET(sw)); // Connect the popup menu g_signal_connect (G_OBJECT (tab->view), "popup-menu", @@ -217,9 +239,15 @@ calltree_create (calltab_t* tab, gchar* searchbar_type) G_CALLBACK (button_pressed), NULL); - g_signal_connect (G_OBJECT (sw), "key-release-event", - G_CALLBACK (on_key_released), NULL); + // g_signal_connect (G_OBJECT (sw), "key-release-event", + // G_CALLBACK (on_key_released), NULL); + + g_signal_connect_after (G_OBJECT (tab->view), "focus-in-event", + G_CALLBACK (focus_on_calltree_in), NULL); + g_signal_connect_after (G_OBJECT (tab->view), "focus-out-event", + G_CALLBACK (focus_on_calltree_out), NULL); + gtk_widget_grab_focus(GTK_WIDGET(tab->view)); rend = gtk_cell_renderer_pixbuf_new(); col = gtk_tree_view_column_new_with_attributes ("Icon", diff --git a/sflphone-client-gnome/src/contacts/calltree.h b/sflphone-client-gnome/src/contacts/calltree.h index 1dd57d2d282a4b5b48d0d7f6859ed55bf512cff4..09d5ad6887eed8e64af16c9c801ae1c26d9d5538 100644 --- a/sflphone-client-gnome/src/contacts/calltree.h +++ b/sflphone-client-gnome/src/contacts/calltree.h @@ -23,7 +23,7 @@ #include <gtk/gtk.h> #include <calltab.h> #include <timestamp.h> - +#include <mainwindow.h> /** @file calltree.h * @brief The GtkTreeView that list calls in the main window. diff --git a/sflphone-client-gnome/src/contacts/searchbar.c b/sflphone-client-gnome/src/contacts/searchbar.c index f83d72381a909a6c2d78837ba42ac3b03f8576d9..4d4a133182b12d0b339c84e89beccc8e8e3ceb11 100644 --- a/sflphone-client-gnome/src/contacts/searchbar.c +++ b/sflphone-client-gnome/src/contacts/searchbar.c @@ -26,6 +26,7 @@ const GdkColor BLACK_COLOR = { 0, 0, 0, 0 }; const GdkColor GRAY_COLOR = { 0, 30000, 30000, 30000 }; +GtkWidget * searchbox; void searchbar_entry_changed (GtkEntry* entry, gchar* arg1 UNUSED, gpointer data UNUSED) { // gtk_widget_grab_focus (GTK_WIDGET(searchbox)); @@ -39,17 +40,40 @@ void searchbar_entry_changed (GtkEntry* entry, gchar* arg1 UNUSED, gpointer data } +// static void +// focus_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer data) +// { + +// } + + void searchbar_clear_entry_if_default (GtkWidget* widget, gpointer user_data UNUSED) { + DEBUG("searchbar_clear_entry_if_default\n"); gtk_widget_modify_text(widget, GTK_STATE_NORMAL, &BLACK_COLOR); if(g_ascii_strncasecmp(gtk_entry_get_text(GTK_ENTRY(widget)), "Search history", 14) == 0 || g_ascii_strncasecmp(gtk_entry_get_text(GTK_ENTRY(widget)), "Search contact", 14) == 0 ) gtk_entry_set_text(GTK_ENTRY(widget), ""); - // gtk_widget_grab_focus (GTK_WIDGET(searchbox)); + // gtk_widget_grab_focus (GTK_WIDGET(searchbox));1 } +void +focus_on_searchbar_out(){ + DEBUG("set_focus_on_searchbar_out \n"); + // gtk_widget_grab_focus(GTK_WIDGET(sw)); + focus_is_on_searchbar = FALSE; +} + +void +focus_on_searchbar_in(){ + DEBUG("set_focus_on_searchbar_in \n"); + // gtk_widget_grab_focus(GTK_WIDGET(sw)); + focus_is_on_searchbar = TRUE; +} + + void searchbar_init(calltab_t *tab) { @@ -63,7 +87,7 @@ searchbar_init(calltab_t *tab) GtkWidget* searchbar_new(gchar* searchbar_type) { - GtkWidget * searchbox; + // GtkWidget * searchbox; GtkWidget* image; GtkWidget* ret = gtk_hbox_new(FALSE, 0); @@ -84,8 +108,13 @@ GtkWidget* searchbar_new(gchar* searchbar_type) { gtk_widget_modify_text(searchbox, GTK_STATE_NORMAL, &GRAY_COLOR); gtk_entry_set_text(GTK_ENTRY(searchbox), _("Search contact")); - g_signal_connect(GTK_ENTRY(searchbox), "changed", G_CALLBACK(searchbar_entry_changed), NULL); - g_signal_connect(GTK_ENTRY(searchbox), "grab-focus", G_CALLBACK(searchbar_clear_entry_if_default), NULL); + g_signal_connect_after(GTK_ENTRY(searchbox), "changed", G_CALLBACK(searchbar_entry_changed), NULL); + g_signal_connect_after(GTK_ENTRY(searchbox), "grab-focus", G_CALLBACK(searchbar_clear_entry_if_default), NULL); + + g_signal_connect_after (G_OBJECT (searchbox), "focus-in-event", + G_CALLBACK (focus_on_searchbar_in), NULL); + g_signal_connect_after (G_OBJECT (searchbox), "focus-out-event", + G_CALLBACK (focus_on_searchbar_out), NULL); gtk_box_pack_start(GTK_BOX(ret), searchbox, TRUE, TRUE, 0); diff --git a/sflphone-client-gnome/src/contacts/searchbar.h b/sflphone-client-gnome/src/contacts/searchbar.h index aabe3ea4113a06c6ba2ce156af4d09fe5b234fa1..f7ed3035200642cb71612d6322e2ce8793ca436b 100644 --- a/sflphone-client-gnome/src/contacts/searchbar.h +++ b/sflphone-client-gnome/src/contacts/searchbar.h @@ -30,6 +30,7 @@ #include <calllist.h> #include <gtk/gtk.h> +#include <mainwindow.h> // From version 2.16, gtk provides the functionalities libsexy used to provide #if GTK_CHECK_VERSION(2,16,0) diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index 92678547cdeef9af36fcc0917f2b05109eff5abe..6c17fed77ecfbe75640778cb8f1853575bb62ff6 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -237,6 +237,7 @@ dbus_connect () DEBUG ("DBus connected to Instance"); + callManagerProxy = dbus_g_proxy_new_for_name (connection, "org.sflphone.SFLphone", "/org/sflphone/SFLphone/CallManager", diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c index c4a28e6d7b3f3c2acbaec6201e21f087885699d5..1db50d7282e3881c999dc9c0207c794428097cda 100644 --- a/sflphone-client-gnome/src/mainwindow.c +++ b/sflphone-client-gnome/src/mainwindow.c @@ -98,25 +98,14 @@ main_window_ask_quit(){ } -/* + static gboolean -on_key_released (GtkWidget *widget, - GdkEventKey *event, - gpointer user_data UNUSED) +on_key_released (GtkWidget *widget, GdkEventKey *event, gpointer user_data UNUSED) { - printf("On key released from Main Window : %s\n", gtk_widget_get_name(widget)); + DEBUG("On key released from Main Window : %s\n", gtk_widget_get_name(widget)); - // if ((active_calltree != contacts) && (active_calltree != history)) { - if (gtk_widget_is_focus(window)){ - printf("Focus is on main window \n"); - } - if (!GTK_WIDGET_CAN_FOCUS(widget)){ - printf("Widget can't focus \n"); - gtk_widget_grab_focus(GTK_WIDGET(window)); - } - - if (gtk_widget_is_focus (window)) { + if (focus_is_on_searchbar == FALSE) { // If a modifier key is pressed, it's a shortcut, pass along if(event->state & GDK_CONTROL_MASK || event->state & GDK_MOD1_MASK || @@ -131,24 +120,34 @@ on_key_released (GtkWidget *widget, return FALSE; else sflphone_keypad(event->keyval, event->string); - } + } + return TRUE; } +void +focus_on_mainwindow_out(){ + DEBUG("focus_on_mainwindow_out \n"); + // gtk_widget_grab_focus(GTK_WIDGET(window)); + +} void -set_focus_on_mainwindow(){ - DEBUG("set_focus_on_mainwindow \n"); - gtk_widget_grab_focus(GTK_WIDGET(window)); +focus_on_mainwindow_in(){ + DEBUG("focus_on_mainwindow_in \n"); + // gtk_widget_grab_focus(GTK_WIDGET(window)); } -*/ + void create_main_window () { GtkWidget *widget; + focus_is_on_calltree = FALSE; + focus_is_on_searchbar = FALSE; + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 0); gtk_window_set_title (GTK_WINDOW (window), PACKAGE); @@ -161,17 +160,21 @@ create_main_window () // gtk_widget_grab_focus (GTK_WIDGET(window)); /* Connect the destroy event of the window with our on_destroy function - * When the window is about to be destroyed we get a notificaiton and - * stop the main GTK loop - */ + * When the window is about to be destroyed we get a notificaiton and + * stop the main GTK loop + */ g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (on_delete), NULL); - // g_signal_connect (G_OBJECT (window), "key-release-event", - // G_CALLBACK (on_key_released), NULL); + g_signal_connect (G_OBJECT (window), "key-release-event", + G_CALLBACK (on_key_released), NULL); + + g_signal_connect_after (G_OBJECT (window), "focus-in-event", + G_CALLBACK (focus_on_mainwindow_in), NULL); - // g_signal_connect (G_OBJECT (window), "client-event", - // G_CALLBACK (set_focus_on_mainwindow), NULL); + g_signal_connect_after (G_OBJECT (window), "focus-out-event", + G_CALLBACK (focus_on_mainwindow_out), NULL); + gtk_widget_set_name (window, "mainwindow"); diff --git a/sflphone-client-gnome/src/mainwindow.h b/sflphone-client-gnome/src/mainwindow.h index 956f982c0c8549f1c592eee721be1bcac870c334..bdf3c0af125353ceb8ffa9ba4f7894805b004746 100644 --- a/sflphone-client-gnome/src/mainwindow.h +++ b/sflphone-client-gnome/src/mainwindow.h @@ -21,6 +21,7 @@ #define __MAINWINDOW_H__ #include <calllist.h> +#include <calltree.h> /** @file mainwindow.h * @brief The main window of the client. @@ -91,5 +92,13 @@ void statusbar_pop_message( guint id ); void main_window_searchbar( gboolean *state ); +//static gboolean +//on_key_released (GtkWidget *widget, GdkEventKey *event, +// gpointer user_data); // void set_focus_on_mainwindow(); + +gboolean focus_is_on_calltree; + +gboolean focus_is_on_searchbar; + #endif diff --git a/sflphone-common/debian/changelog b/sflphone-common/debian/changelog index 383506dd8a2ca1c7d8ca3ae41d5d09164c3b4e3b..88b8e4367280db0d36866c4595c44f72a0b4d6fb 100644 --- a/sflphone-common/debian/changelog +++ b/sflphone-common/debian/changelog @@ -1,63 +1,3 @@ -sflphone-common (0.9.5-0ubuntu1~4.gbpc11c5a) SYSTEM; urgency=low - - ** SNAPSHOT build @c11c5adbc5d4bbe5ee225dd85d6be59f03feaaeb ** - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~rc1 - - [ Emmanuel Milou ] - * [#1402] Build the daemon with the local pjsip library (vs the - installed one) - * [#1402] Add info message after configure - - [ Sflphone Project ] - - [ jerome ] - * Bug #1404: Fix strings in preferences panel. - * Bug #1405: Fix strings as requested. - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-08 - - [ Sflphone Project ] - - [ Alexandre Savard ] - * [#1314] Add some return values to audio init functions - * Add debug messages in debus calls concerning account - * [#1314] Refactoring of pulselayer to test conect/disconnect - * [#1314] Refactoring pulseaudio stream to test connect disconnect - * [#1314] Add mutex to pulse layer audio streams - * [#1009] Fix Codec Sampling Rate set to zeros - * [#1314] Test pulse audio and audio streams connect and disconnect - * Add python dbus test suite - * Test client dbus connection to a fixed owner - * [#1407] Add a scenario to pick_up action - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-09 - - [ Alexandre Savard ] - * [#1407] Some print info - * Add codec debug tests in pysflphone - * Dbus with fixed owner does not automatically start the deamon - * [#1404] IF the first notification option disable the second - notification - * [#1404] Gnome -> Preferences -> Address Book - * [#1404] Call History - * [#1404] Gnome -> Preferences -> Recordings - - [ Sflphone Project ] - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-12 - - [ Sflphone Project ] - - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Wed, 13 May 2009 00:01:58 -0400 - sflphone-common (0.9.5-0ubuntu1~rc1) SYSTEM; urgency=low [ SFLphone Project ] @@ -87,145 +27,6 @@ sflphone-common (0.9.5-0ubuntu1~rc1) SYSTEM; urgency=low -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Tue, 05 May 2009 19:16:09 -0400 -sflphone-common (0.9.5-0ubuntu1~6.gbpdfcd86) SYSTEM; urgency=low - - ** SNAPSHOT build @dfcd86f7fdabcc0462e8e5aef3a21ada929e077b ** - - [ Emmanuel Milou ] - * [#1220] Add Conflicts: sflphone in debian control files - * [#1179] Add liblog4c3 runtime dependency - * [#1212] FIx typo error in dependency list for itnrepid - * [#1212] FIx .desktop file to point on the right exec - * [#1212] Modify changelog replacing tag - - [ Sflphone Project ] - * "[#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta" - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-27 - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta - - [ Emmanuel Milou ] - * [#1212] restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1~beta - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-28 - - [ Emmanuel Milou ] - * [#1212] Restore changelogs - - [ Sflphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-28 - - [ Julien Bonjean ] - * [#1262]Introduced dynamic version setting - - [ Sflphone Project ] - - [ Alexandre Savard ] - * [#1143] Add celtcodec.cpp - * [#1143] add configure and make stuffs - * [#1143] add frame size into each codecs - * [#1143] Take timestamp's step size from codec - * [#1143] RTP thread at 11 ms - * [#1143] Dynamic RTP thread sleep parameter - * [#1143] Fix dynamic thread sleep time calculation - - [ Emmanuel Milou ] - * [#1262] sflphone-client-gnome uses changelog version number - - [ Alexandre Savard ] - * [#1143] Some cleanup - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-29 - - [ Emmanuel Milou ] - * [#1262] Update changelogs - * [#1262] Update rules - * [#1143] Build celt codec only if version >= 0.5.1 is detected - * [1143] Restore rules files - do not need to specify --without-celt - * [#1336] Change SFLphone logo - * [#1331] Fix searchbar problems - * [#1332] Fix unexplicit labels - * [#1334] Fix unexplicit label - * [#1329] Fix recordings config panel - - [ Sflphone Project ] - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 04-30 - - [ Emmanuel Milou ] - * [#1336] Add new logo - * [#1335] Enable/disable address book, change option name - * [#1324] Add more insightful status bar message - * [#1330] Fix behaviour if no addressbook are active - - [ Sflphone Project ] - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-01 - - [ Julien Bonjean ] - * [#1161] Added build system scripts - - [ Emmanuel Milou ] - * [#1215] Redesign current account computing - * [#1333] Remove default voicemail number - * [#1333] Voicemail icon update if current account has no voicemail - number + unit tests - * [#1333] Remove default voicemail number in assistant; update status - bar message - * [#1333] Add voicemail number field in wizard - * [#1342] Make config panels more GNOME compliant - - [ Sflphone Project ] - - [ Alexandre Savard ] - * [#1143] Fixed auio record after celt refactoring - * [#1327] Alsa display unappropriate info - * [#1328] Unappropriate label in audio preferences panel - * [#1316] Forgot 's' to RFC3969 'sip:' URI when calling in unicast - mode - * [#1316] #define IP_TO_IP_PATTERN "sip:" - * [#1316] 'sip:' subtitution to 4 char - * [#1321] Startup wizard password display is inconsistent - * [#1325] Error window in preferences shows formatting error - * [#1325] Proposed Implementation - * [#1325] Add title to window - * [#1343] Moved key stroke signal from call tree to main window - * [#1343] Dialing on key strike disabled when either history or - contact selected - * [#1343] Cannot dial when focus not on white frame - - [ SFLphone Project ] - * [#1262] Updated changelogs for version 0.9.5-0ubuntu1 Snapshot 2009- - 05-02 - - [ Emmanuel Milou ] - * [#1331] Fix clear default message bug - * [#936] Remove old codecs from repository - - [ Sflphone Project ] - - -- Sflphone Project <sflphone@mtl.savoirfairelinux.net> Tue, 05 May 2009 00:02:13 -0400 - sflphone-common (0.9.5-0ubuntu1~beta) SYSTEM; urgency=low [ Julien Bonjean ] diff --git a/tools/pysflphone/sflphonectrlsimple.py b/tools/pysflphone/sflphonectrlsimple.py index a11a9597672693e8956add6ce8a88db34f510f88..a7d0a5ee2a7bad04adcb6f09b80ff6d4fadae411 100755 --- a/tools/pysflphone/sflphonectrlsimple.py +++ b/tools/pysflphone/sflphonectrlsimple.py @@ -100,9 +100,7 @@ class SflPhoneCtrlSimple(object): except dbus.DBusException, e: - raise SPdbusError("Unable to bind to sflphoned api, - ask core-dev team to implement getVersion method and - start to pray.") + raise SPdbusError("Unable to bind to sflphoned api, ask core-dev team to implement getVersion method and start to pray.") try: self.instance.Register(os.getpid(), self.name) @@ -137,374 +135,378 @@ class SflPhoneCtrlSimple(object): # Signal handling # - # On incoming call event, add the call to the list of active calls - def onIncomingCall(self, account, callid, to): - print "Incoming call: " + account + ", " + callid + ", " + to - self.activeCalls[callid] = {'Account': account, 'To': to, 'State': '' } - - # On call state changed event, set the values for new calls, or delete the call from the list of active calls - def onCallStateChanged(self, callid, state): - print "Call state changed: " + callid + ", " + state - if state == "HUNGUP": - try: - del self.activeCalls[callid] - except KeyError: - print "Call " + callid + " didn't exist. Cannot delete." - elif state in [ "RINGING", "CURRENT", "INCOMING", "HOLD" ]: - try: - self.activeCalls[callid]['State'] = state - except KeyError, e: - print "This call didn't exist!: " + callid + ". Adding it to the list." - callDetails = self.getCallDetails(callid) - self.activeCalls[callid] = {'Account': callDetails['ACCOUNTID'], 'To': callDetails['PEER_NUMBER'], 'State': state } - elif state in [ "BUSY", "FAILURE" ]: - try: - del self.activeCalls[callid] - except KeyError, e: - print "This call didn't exist!: " + callid + # On incoming call event, add the call to the list of active calls + def onIncomingCall(self, account, callid, to): + print "Incoming call: " + account + ", " + callid + ", " + to + self.activeCalls[callid] = {'Account': account, 'To': to, 'State': '' } + + # On call state changed event, set the values for new calls, + # or delete the call from the list of active calls + def onCallStateChanged(self, callid, state): + print "Call state changed: " + callid + ", " + state + if state == "HUNGUP": + try: + del self.activeCalls[callid] + except KeyError: + print "Call " + callid + " didn't exist. Cannot delete." + + elif state in [ "RINGING", "CURRENT", "INCOMING", "HOLD" ]: + try: + self.activeCalls[callid]['State'] = state + except KeyError, e: + print "This call didn't exist!: " + callid + ". Adding it to the list." + callDetails = self.getCallDetails(callid) + self.activeCalls[callid] = {'Account': callDetails['ACCOUNTID'], 'To': callDetails['PEER_NUMBER'], 'State': state } + elif state in [ "BUSY", "FAILURE" ]: + try: + del self.activeCalls[callid] + except KeyError, e: + print "This call didn't exist!: " + callid # elif state == "UNHOLD_CURRENT": # self.activeCalls[callid]['State'] = "UNHOLD_CURRENT" - # - # Account management - # - def getAllAccounts(self): - """ Return a list with all accounts""" - return self.configurationmanager.getAccountList() + # + # Account management + # + def getAllAccounts(self): + """ Return a list with all accounts""" + return self.configurationmanager.getAccountList() - def getAllEnabledAccounts(self): - """ Return a list with all enabled accounts""" - accounts = self.getAllAccounts() - activeaccounts = [] - for testedaccount in accounts: - if self.isAccountEnable(testedaccount): - activeaccounts.append(testedaccount) - return activeaccounts + def getAllEnabledAccounts(self): + """ Return a list with all enabled accounts""" + accounts = self.getAllAccounts() + activeaccounts = [] + for testedaccount in accounts: + if self.isAccountEnable(testedaccount): + activeaccounts.append(testedaccount) + return activeaccounts - def getAccountDetails(self, account=None): - """Return a list of string. If no account is provided, active account is used""" + def getAccountDetails(self, account=None): + """Return a list of string. If no account is provided, active account is used""" - if account is None: - if self.account is None: - raise SflPhoneError("No provided or current account !") - if checkAccountExists(self.account): - return self.configurationmanager.getAccountDetails(self.account) - else: - if self.checkAccountExists(account): - return self.configurationmanager.getAccountDetails(account) + if account is None: + if self.account is None: + raise SflPhoneError("No provided or current account !") + if checkAccountExists(self.account): + return self.configurationmanager.getAccountDetails(self.account) + else: + if self.checkAccountExists(account): + return self.configurationmanager.getAccountDetails(account) - def setAccountByAlias(self, alias): - """Define as active the first account who match with the alias""" - for testedaccount in self.getAllAccounts(): - details = self.getAccountDetails(testedaccount) - if ( details['Account.enable'] == "TRUE" and details['Account.alias'] == alias ): - self.account = testedaccount - return - raise SPaccountError("No enabled account matched with alias") + def setAccountByAlias(self, alias): + """Define as active the first account who match with the alias""" + for testedaccount in self.getAllAccounts(): + details = self.getAccountDetails(testedaccount) + if ( details['Account.enable'] == "TRUE" and + details['Account.alias'] == alias ): + self.account = testedaccount + return + raise SPaccountError("No enabled account matched with alias") - def getAccountByAlias(self, alias): - """Get account name having its alias""" - for account in self.getAllAccounts(): - details = self.getAccountDetails(account) - if details['Account.alias'] == alias: - return account - raise SPaccountError("No account matched with alias") + def getAccountByAlias(self, alias): + """Get account name having its alias""" - def setAccount(self, account): - """Define the active account""" + for account in self.getAllAccounts(): + details = self.getAccountDetails(account) + if details['Account.alias'] == alias: + return account - if account in self.getAllAccounts(): - self.account = account - else: - raise SflPhoneError("Not a valid account") + raise SPaccountError("No account matched with alias") - def setFirstRegisteredAccount(self): - """Find the first enabled account and define it as active""" + def setAccount(self, account): + """Define the active account""" - rAccounts = self.getAllRegisteredAccounts() - if 0 == len(rAccounts): - raise SflPhoneError("No registered account !") - self.account = rAccounts[0] + if account in self.getAllAccounts(): + self.account = account + else: + raise SflPhoneError("Not a valid account") - def setFirstActiveAccount(self): - """Find the first enabled account and define it as active""" + def setFirstRegisteredAccount(self): + """Find the first enabled account and define it as active""" - aAccounts = self.getAllEnabledAccounts() - if 0 == len(aAccounts): - raise SflPhoneError("No active account !") - self.account = aAccounts[0] + rAccounts = self.getAllRegisteredAccounts() + if 0 == len(rAccounts): + raise SflPhoneError("No registered account !") + self.account = rAccounts[0] + def setFirstActiveAccount(self): + """Find the first enabled account and define it as active""" - def getAccount(self): - """Return the active account""" + aAccounts = self.getAllEnabledAccounts() + if 0 == len(aAccounts): + raise SflPhoneError("No active account !") + self.account = aAccounts[0] - return self.account + def getAccount(self): + """Return the active account""" - def isAccountRegistered(self, account=None): - """Return True if the account is registered. If no account is provided, active account is used""" + return self.account - if account is None: - if self.account is None: - raise SflPhoneError("No provided or current account !") - account = self.account - return self.getAccountDetails(account)['Status'] == "REGISTERED" + def isAccountRegistered(self, account=None): + """Return True if the account is registered. If no account is provided, active account is used""" - def isAccountEnable(self, account=None): - """Return True if the account is enabled. If no account is provided, active account is used""" + if account is None: + if self.account is None: + raise SflPhoneError("No provided or current account !") + account = self.account + return self.getAccountDetails(account)['Status'] == "REGISTERED" - if account is None: - if self.account is None: - raise SflPhoneError("No provided or current account !") - account = self.account - return self.getAccountDetails(account)['Account.enable'] == "TRUE" - - def setAccountEnable(self, account=None, enable=False): - """Set account enabled""" - if account is None: - if self.account is None: - raise SflPhoneError("No provided or current account !") - account = self.account - if enable == True: - details = self.getAccountDetails(account) - details['Account.enable'] = "TRUE" - self.configurationmanager.setAccountDetails(account, details) - else: - details = self.getAccountDetails(account) - details['Account.enable'] = "FALSE" - self.configurationmanager.setAccountDetails(account, details) + def isAccountEnable(self, account=None): + """Return True if the account is enabled. If no account is provided, active account is used""" - def checkAccountExists(self, account=None): - """ Checks if the account exists """ - if account is None: - raise SflPhoneError("No provided or current account !") - return account in self.getAllAccounts() - - def getAllRegisteredAccounts(self): - """Return a list of registered accounts""" + if account is None: + if self.account is None: + raise SflPhoneError("No provided or current account !") + account = self.account + return self.getAccountDetails(account)['Account.enable'] == "TRUE" - registeredAccountsList = [] - for account in self.getAllAccounts(): - if self.isAccountRegistered(account): - registeredAccountsList.append(account) + def setAccountEnable(self, account=None, enable=False): + """Set account enabled""" + if account is None: + if self.account is None: + raise SflPhoneError("No provided or current account !") + account = self.account + + if enable == True: + details = self.getAccountDetails(account) + details['Account.enable'] = "TRUE" + self.configurationmanager.setAccountDetails(account, details) + else: + details = self.getAccountDetails(account) + details['Account.enable'] = "FALSE" + self.configurationmanager.setAccountDetails(account, details) + + def checkAccountExists(self, account=None): + """ Checks if the account exists """ + if account is None: + raise SflPhoneError("No provided or current account !") + return account in self.getAllAccounts() + + def getAllRegisteredAccounts(self): + """Return a list of registered accounts""" - return registeredAccountsList + registeredAccountsList = [] + for account in self.getAllAccounts(): + if self.isAccountRegistered(account): + registeredAccountsList.append(account) - def getAllEnabledAccounts(self): - """Return a list of enabled accounts""" + return registeredAccountsList - enabledAccountsList = [] - for accountName in self.getAllAccounts(): - if self.getAccountDetails(accountName)['Account.enable'] == "TRUE": - enabledAccountsList.append(accountName) + def getAllEnabledAccounts(self): + """Return a list of enabled accounts""" - return enabledAccountsList + enabledAccountsList = [] + for accountName in self.getAllAccounts(): + if self.getAccountDetails(accountName)['Account.enable'] == "TRUE": + enabledAccountsList.append(accountName) - def getAllSipAccounts(self): - """Return a list of SIP accounts""" + return enabledAccountsList - sipAccountsList = [] - for accountName in self.getAllAccounts(): - if self.getAccountDetails(accountName)['Account.type'] == "SIP": - sipAccountsList.append(accountName) + def getAllSipAccounts(self): + """Return a list of SIP accounts""" - return sipAccountsList + sipAccountsList = [] + for accountName in self.getAllAccounts(): + if self.getAccountDetails(accountName)['Account.type'] == "SIP": + sipAccountsList.append(accountName) - def getAllIaxAccounts(self): - """Return a list of IAX accounts""" + return sipAccountsList - iaxAccountsList = [] - for accountName in self.getAllAccounts(): - if self.getAccountDetails(accountName)['Account.type'] == "IAX": - iaxAccountsList.append(accountName) + def getAllIaxAccounts(self): + """Return a list of IAX accounts""" - return iaxAccountsList + iaxAccountsList = [] + for accountName in self.getAllAccounts(): + if self.getAccountDetails(accountName)['Account.type'] == "IAX": + iaxAccountsList.append(accountName) - def setAccountRegistered(self, account=None, register=False): - """ Tries to register the account """ + return iaxAccountsList - if account is None: - if self.account is None: - raise SflPhoneError("No provided or current account !") - account = self.account + def setAccountRegistered(self, account=None, register=False): + """ Tries to register the account """ - try: - if register: - self.configurationmanager.sendRegister(account, int(1)) - #self.setAccount(account) - else: - self.configurationmanager.sendRegister(account, int(0)) - #self.setFirstRegisteredAccount() + if account is None: + if self.account is None: + raise SflPhoneError("No provided or current account !") + account = self.account - except SflPhoneError, e: - print e + try: + if register: + self.configurationmanager.sendRegister(account, int(1)) + #self.setAccount(account) + else: + self.configurationmanager.sendRegister(account, int(0)) + #self.setFirstRegisteredAccount() + except SflPhoneError, e: + print e - # - # Codec manager - # + # + # Codec manager + # - def getCodecList(self): - """ Return the codec list """ - return self.configurationmanager.getCodecList() + def getCodecList(self): + """ Return the codec list """ + return self.configurationmanager.getCodecList() - def getActiveCodecList(self): - """ Return the active codec list """ - return self.configurationmanager.getActiveCodecList() + def getActiveCodecList(self): + """ Return the active codec list """ + return self.configurationmanager.getActiveCodecList() - # - # Call management - # + # + # Call management + # - def getCurrentCallID(self): - """Return the callID of the current call if any""" + def getCurrentCallID(self): + """Return the callID of the current call if any""" - return self.callmanager.getCurrentCallID() + return self.callmanager.getCurrentCallID() - def getCurrentCallDetails(self): - """Return informations on the current call if any""" + def getCurrentCallDetails(self): + """Return informations on the current call if any""" - return self.callmanager.getCallDetails(self.getCurrentCallID()) + return self.callmanager.getCallDetails(self.getCurrentCallID()) - def getCallDetails(self, callid): - """Return informations on this call if exists""" + def getCallDetails(self, callid): + """Return informations on this call if exists""" - return self.callmanager.getCallDetails(callid) + return self.callmanager.getCallDetails(callid) - def printClientCallList(self): - print "Client active call list:" - print "------------------------" - for call in self.activeCalls: - print "\t" + call + def printClientCallList(self): + print "Client active call list:" + print "------------------------" + for call in self.activeCalls: + print "\t" + call - # - # Action - # - def Call(self, dest): - """Start a call and return a CallID""" - if not self.account: - self.setFirstRegisteredAccount() + # + # Action + # + def Call(self, dest): + """Start a call and return a CallID""" + if not self.account: + self.setFirstRegisteredAccount() - if not self.isAccountRegistered(): - raise SflPhoneError("Can't place a call without a registered account") + if not self.isAccountRegistered(): + raise SflPhoneError("Can't place a call without a registered account") - if dest is None or dest == "": - raise SflPhoneError("Invalid call destination") + if dest is None or dest == "": + raise SflPhoneError("Invalid call destination") -# callid = str(random.randrange(2**32-1)) - t = long( time.time() * 1000 ) - r = long( random.random()*100000000000000000L ) - data = str(t) + str(r) - callid = md5.md5(data).hexdigest() + # callid = str(random.randrange(2**32-1)) + t = long( time.time() * 1000 ) + r = long( random.random()*100000000000000000L ) + data = str(t) + str(r) + callid = md5.md5(data).hexdigest() - # Add the call to the list of active calls and set status to SENT - self.activeCalls[callid] = {'Account': self.account, 'To': dest, 'State': 'SENT' } - # Send the request to the CallManager - self.callmanager.placeCall(self.account, callid, dest) + # Add the call to the list of active calls and set status to SENT + self.activeCalls[callid] = {'Account': self.account, 'To': dest, 'State': 'SENT' } + # Send the request to the CallManager + self.callmanager.placeCall(self.account, callid, dest) - return callid + return callid - def HangUp(self, callid): - """End a call identified by a CallID""" - if not self.account: - self.setFirstRegisteredAccount() + def HangUp(self, callid): + """End a call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() - if not self.isAccountRegistered(): - raise SflPhoneError("Can't hangup a call without a registered account") + if not self.isAccountRegistered(): + raise SflPhoneError("Can't hangup a call without a registered account") - if callid is None or callid == "": - pass # just to see - #raise SflPhoneError("Invalid callID") + if callid is None or callid == "": + pass # just to see + #raise SflPhoneError("Invalid callID") - self.callmanager.hangUp(callid) + self.callmanager.hangUp(callid) - def Transfert(self, callid, to): - """Transfert a call identified by a CallID""" - if not self.account: - self.setFirstRegisteredAccount() + def Transfert(self, callid, to): + """Transfert a call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() - if not self.isAccountRegistered(): - raise SflPhoneError("Can't transfert a call without a registered account") + if not self.isAccountRegistered(): + raise SflPhoneError("Can't transfert a call without a registered account") - if callid is None or callid == "": - raise SflPhoneError("Invalid callID") + if callid is None or callid == "": + raise SflPhoneError("Invalid callID") - self.callmanager.transfert(callid, to) + self.callmanager.transfert(callid, to) - def Refuse(self, callid): - """Refuse an incoming call identified by a CallID""" - if not self.account: - self.setFirstRegisteredAccount() + def Refuse(self, callid): + """Refuse an incoming call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() - if not self.isAccountRegistered(): - raise SflPhoneError("Can't refuse a call without a registered account") + if not self.isAccountRegistered(): + raise SflPhoneError("Can't refuse a call without a registered account") - if callid is None or callid == "": - raise SflPhoneError("Invalid callID") + if callid is None or callid == "": + raise SflPhoneError("Invalid callID") - self.callmanager.refuse(callid) + self.callmanager.refuse(callid) - def Accept(self, callid): - """Accept an incoming call identified by a CallID""" - if not self.account: - self.setFirstRegisteredAccount() + def Accept(self, callid): + """Accept an incoming call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() - if not self.isAccountRegistered(): - raise SflPhoneError("Can't accept a call without a registered account") + if not self.isAccountRegistered(): + raise SflPhoneError("Can't accept a call without a registered account") - if callid is None or callid == "": - raise SflPhoneError("Invalid callID") + if callid is None or callid == "": + raise SflPhoneError("Invalid callID") - self.callmanager.accept(callid) + self.callmanager.accept(callid) - def Hold(self, callid): - """Hold a call identified by a CallID""" - if not self.account: - self.setFirstRegisteredAccount() + def Hold(self, callid): + """Hold a call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() - if not self.isAccountRegistered(): - raise SflPhoneError("Can't hold a call without a registered account") + if not self.isAccountRegistered(): + raise SflPhoneError("Can't hold a call without a registered account") - if callid is None or callid == "": - raise SflPhoneError("Invalid callID") + if callid is None or callid == "": + raise SflPhoneError("Invalid callID") - self.callmanager.hold(callid) + self.callmanager.hold(callid) - def UnHold(self, callid): - """Unhold an incoming call identified by a CallID""" - if not self.account: - self.setFirstRegisteredAccount() + def UnHold(self, callid): + """Unhold an incoming call identified by a CallID""" + if not self.account: + self.setFirstRegisteredAccount() - if not self.isAccountRegistered(): - raise SflPhoneError("Can't unhold a call without a registered account") + if not self.isAccountRegistered(): + raise SflPhoneError("Can't unhold a call without a registered account") - if callid is None or callid == "": - raise SflPhoneError("Invalid callID") + if callid is None or callid == "": + raise SflPhoneError("Invalid callID") - self.callmanager.unhold(callid) + self.callmanager.unhold(callid) - def Dtmf(self, key): - """Send a DTMF""" - self.callmanager.playDTMF(key) + def Dtmf(self, key): + """Send a DTMF""" + self.callmanager.playDTMF(key)