Skip to content
Snippets Groups Projects
Commit 18f27b18 authored by areversat's avatar areversat
Browse files

Add code to manage call history tabs.

- Change callist to handle multiple lists
- Change calltree to handle multiple trees
parent a3cdbffa
Branches
Tags
No related merge requests found
......@@ -25,6 +25,7 @@
#include <menus.h>
#include <screen.h>
#include <statusicon.h>
#include <notebook.h>
#include <gtk/gtk.h>
#include <string.h>
......@@ -100,7 +101,7 @@ status_bar_display_account( call_t* c)
sflphone_quit ()
{
gboolean quit = FALSE;
guint count = call_list_get_size();
guint count = call_list_get_size(tabs[TAB_CALL]);
if(count > 0){
quit = main_window_ask_quit();
}
......@@ -123,7 +124,7 @@ sflphone_quit ()
sflphone_hold(call_t * c )
{
c->state = CALL_STATE_HOLD;
update_call_tree(c);
update_call_tree(tabs[TAB_CALL],c);
update_menus();
}
......@@ -131,15 +132,15 @@ sflphone_hold(call_t * c )
sflphone_ringing(call_t * c )
{
c->state = CALL_STATE_RINGING;
update_call_tree(c);
update_call_tree(tabs[TAB_CALL],c);
update_menus();
}
void
sflphone_hung_up( call_t * c)
{
call_list_remove( c->callID);
update_call_tree_remove(c);
call_list_remove( tabs[TAB_CALL], c->callID);
update_call_tree_remove(tabs[TAB_CALL], c);
update_menus();
status_tray_icon_blink( FALSE );
}
......@@ -191,18 +192,23 @@ sflphone_fill_account_list()
}
toolbar_update_buttons();
printf("Updating buttons\n");
//toolbar_update_buttons();
}
gboolean
sflphone_init()
{
call_list_init ();
int i;
for (i=0; i < NR_TABS; i++){
tabs[i] = calltab_init();
call_list_init (tabs[i]);
}
account_list_init ();
codec_list_init();
if(!dbus_connect ())
{
if(!dbus_connect ()){
main_window_error_message(_("Unable to connect to the SFLphone server.\nMake sure the daemon is running."));
return FALSE;
}
......@@ -219,7 +225,7 @@ sflphone_init()
void
sflphone_hang_up()
{
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(tabs[TAB_CALL]);
if(selectedCall)
{
switch(selectedCall->state)
......@@ -249,7 +255,7 @@ sflphone_hang_up()
void
sflphone_pick_up()
{
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(tabs[TAB_CALL]);
if(selectedCall)
{
switch(selectedCall->state)
......@@ -282,7 +288,7 @@ sflphone_pick_up()
void
sflphone_on_hold ()
{
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(tabs[TAB_CALL]);
if(selectedCall)
{
switch(selectedCall->state)
......@@ -300,7 +306,7 @@ sflphone_on_hold ()
void
sflphone_off_hold ()
{
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(tabs[TAB_CALL]);
if(selectedCall)
{
switch(selectedCall->state)
......@@ -320,7 +326,7 @@ sflphone_off_hold ()
sflphone_fail( call_t * c )
{
c->state = CALL_STATE_FAILURE;
update_call_tree(c);
update_call_tree(tabs[TAB_CALL],c);
update_menus();
}
......@@ -328,7 +334,7 @@ sflphone_fail( call_t * c )
sflphone_busy( call_t * c )
{
c->state = CALL_STATE_BUSY;
update_call_tree(c);
update_call_tree(tabs[TAB_CALL], c);
update_menus();
}
......@@ -336,19 +342,19 @@ sflphone_busy( call_t * c )
sflphone_current( call_t * c )
{
c->state = CALL_STATE_CURRENT;
update_call_tree(c);
update_call_tree(tabs[TAB_CALL],c);
update_menus();
}
void
sflphone_set_transfert()
{
call_t * c = call_get_selected();
call_t * c = call_get_selected(tabs[TAB_CALL]);
if(c)
{
c->state = CALL_STATE_TRANSFERT;
c->to = g_strdup("");
update_call_tree(c);
update_call_tree(tabs[TAB_CALL],c);
update_menus();
}
toolbar_update_buttons();
......@@ -357,12 +363,12 @@ sflphone_set_transfert()
void
sflphone_unset_transfert()
{
call_t * c = call_get_selected();
call_t * c = call_get_selected(tabs[TAB_CALL]);
if(c)
{
c->state = CALL_STATE_CURRENT;
c->to = g_strdup("");
update_call_tree(c);
update_call_tree(tabs[TAB_CALL],c);
update_menus();
}
toolbar_update_buttons();
......@@ -371,9 +377,9 @@ sflphone_unset_transfert()
void
sflphone_incoming_call (call_t * c)
{
call_list_add ( c );
call_list_add ( tabs[TAB_CALL],c );
//status_icon_unminimize();
update_call_tree_add(c);
update_call_tree_add(tabs[TAB_CALL],c);
update_menus();
}
......@@ -406,7 +412,7 @@ void process_dialing(call_t * c, guint keyval, gchar * key)
g_free(c->from);
c->from = g_strconcat("\"\" <", c->to, ">", NULL);
}
update_call_tree(c);
update_call_tree(tabs[TAB_CALL],c);
}
else if(strlen(c->to) == 0)
{
......@@ -434,7 +440,7 @@ void process_dialing(call_t * c, guint keyval, gchar * key)
g_free(c->from);
c->from = g_strconcat("\"\" <", c->to, ">", NULL);
}
update_call_tree(c);
update_call_tree(tabs[TAB_CALL],c);
}
break;
}
......@@ -445,7 +451,7 @@ void process_dialing(call_t * c, guint keyval, gchar * key)
call_t * sflphone_new_call()
{
// Play a tone when creating a new call
if( call_list_get_size() == 0 )
if( call_list_get_size(tabs[TAB_CALL]) == 0 )
dbus_start_tone( TRUE , ( voice_mails > 0 )? TONE_WITH_MESSAGE : TONE_WITHOUT_MESSAGE) ;
call_t * c = g_new0 (call_t, 1);
......@@ -457,17 +463,18 @@ call_t * sflphone_new_call()
c->to = g_strdup("");
call_list_add(c);
update_call_tree_add(c);
call_list_add(tabs[TAB_CALL],c);
update_call_tree_add(tabs[TAB_CALL],c);
update_menus();
return c;
}
void
sflphone_keypad( guint keyval, gchar * key)
{
call_t * c = call_get_selected();
sflphone_keypad( guint keyval, gchar * key){
call_t * c = call_get_selected(current_tab);
if(c)
{
......@@ -492,7 +499,7 @@ sflphone_keypad( guint keyval, gchar * key)
c->from = g_strconcat("\"",call_get_name(c) ,"\" <", temp, ">", NULL);
g_free(before);
g_free(temp);
//update_call_tree(c);
//update_call_tree(tabs[TAB_CALL],c);
}
break;
}
......@@ -594,6 +601,7 @@ sflphone_place_call ( call_t * c )
{
c->accountID = default_account;
dbus_place_call(c);
update_call_tree_add(tabs[TAB_CALLED], c);
}
else
{
......@@ -607,6 +615,7 @@ sflphone_place_call ( call_t * c )
{
c->accountID = account->accountID;
dbus_place_call(c);
update_call_tree_add(tabs[TAB_CALLED], c);
}
else
{
......
......@@ -21,8 +21,10 @@
#include <string.h>
GQueue * callQueue = NULL;
call_t * selectedCall = NULL;
/*
* GQueue * callQueue = NULL;
* call_t * selectedCall = NULL;
*/
/* GCompareFunc to compare a callID (gchar* and a call_t) */
gint
......@@ -55,39 +57,40 @@ get_state_callstruct ( gconstpointer a, gconstpointer b)
}
void
call_list_init ()
call_list_init (calltab_t* tab)
{
callQueue = g_queue_new ();
tab->callQueue = g_queue_new ();
tab->selectedCall = NULL;
}
void
call_list_clean ()
call_list_clean (calltab_t* tab)
{
g_queue_free (callQueue);
g_queue_free (tab->callQueue);
}
void
call_list_add (call_t * c)
call_list_add (calltab_t* tab, call_t * c)
{
g_queue_push_tail (callQueue, (gpointer *) c);
g_queue_push_tail (tab->callQueue, (gpointer *) c);
}
void
call_list_remove (const gchar * callID)
call_list_remove (calltab_t* tab, const gchar * callID)
{
call_t * c = call_list_get(callID);
call_t * c = call_list_get(tab, callID);
if (c)
{
g_queue_remove(callQueue, c);
g_queue_remove(tab->callQueue, c);
}
}
call_t *
call_list_get_by_state (call_state_t state )
call_list_get_by_state (calltab_t* tab, call_state_t state )
{
GList * c = g_queue_find_custom (callQueue, &state, get_state_callstruct);
GList * c = g_queue_find_custom (tab->callQueue, &state, get_state_callstruct);
if (c)
{
return (call_t *)c->data;
......@@ -100,15 +103,15 @@ call_list_get_by_state (call_state_t state )
}
guint
call_list_get_size ( )
call_list_get_size (calltab_t* tab)
{
return g_queue_get_length (callQueue);
return g_queue_get_length (tab->callQueue);
}
call_t *
call_list_get_nth ( guint n )
call_list_get_nth (calltab_t* tab, guint n )
{
return g_queue_peek_nth (callQueue, n);
return g_queue_peek_nth (tab->callQueue, n);
}
gchar *
......@@ -134,9 +137,9 @@ call_get_number (const call_t * c)
call_t *
call_list_get ( const gchar * callID )
call_list_get (calltab_t* tab, const gchar * callID )
{
GList * c = g_queue_find_custom (callQueue, callID, is_callID_callstruct);
GList * c = g_queue_find_custom (tab->callQueue, callID, is_callID_callstruct);
if (c)
{
return (call_t *)c->data;
......@@ -148,14 +151,14 @@ call_list_get ( const gchar * callID )
}
void
call_select ( call_t * c )
call_select (calltab_t* tab, call_t * c )
{
selectedCall = c;
tab->selectedCall = c;
}
call_t *
call_get_selected ()
call_get_selected (calltab_t* tab)
{
return selectedCall;
return tab->selectedCall;
}
......@@ -68,40 +68,50 @@ typedef struct {
call_state_t state;
} call_t;
/** This function initialize the call list. */
void call_list_init ();
typedef struct {
GtkListStore* store;
GtkWidget* view;
GtkWidget* tree;
// Calllist vars
GQueue* callQueue;
call_t* selectedCall;
} calltab_t;
/** This function initialize a call list. */
void call_list_init (calltab_t* tab);
/** This function empty and free the call list. */
void call_list_clean ();
void call_list_clean (calltab_t* tab);
/** This function append a call to list.
* @param c The call you want to add */
void call_list_add (call_t * c);
void call_list_add (calltab_t* tab, call_t * c);
/** This function remove a call from list.
* @param callID The callID of the call you want to remove
*/
void call_list_remove (const gchar * callID);
void call_list_remove (calltab_t* tab, const gchar * callID);
/** Return the first call that corresponds to the state.
* This is usefull for unique states as DIALING and CURRENT.
* @param state The state
* @return A call or NULL */
call_t * call_list_get_by_state ( call_state_t state);
call_t * call_list_get_by_state (calltab_t* tab, call_state_t state);
/** Return the number of calls in the list
* @return The number of calls in the list */
guint call_list_get_size ( );
guint call_list_get_size (calltab_t* tab);
/** Return the call at the nth position in the list
* @param n The position of the call you want
* @return A call or NULL */
call_t * call_list_get_nth ( guint n );
call_t * call_list_get_nth (calltab_t* tab, guint n );
/** Return the call corresponding to the callID
* @param n The callID of the call you want
* @return A call or NULL */
call_t * call_list_get ( const gchar * callID );
call_t * call_list_get (calltab_t* tab, const gchar * callID );
/** This function parse the call_t.from field to return the name
* @param c The call
......@@ -116,9 +126,9 @@ gchar * call_get_number (const call_t * c);
/** Mark a call as selected. There can be only one selected call. This call
* is the currently highlighted one in the list.
* @param c The call */
void call_select ( call_t * c );
void call_select (calltab_t* tab, call_t * c );
/** Return the selected call.
* @return The number of the caller */
call_t * call_get_selected ();
call_t * call_get_selected (calltab_t* tab);
#endif
......@@ -18,6 +18,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdlib.h>
#include <gtk/gtk.h>
#include <actions.h>
#include <calltree.h>
......@@ -25,8 +26,6 @@
#include <menus.h>
#include <dbus.h>
GtkListStore * store;
GtkWidget *view;
GtkWidget * toolbar;
......@@ -66,7 +65,7 @@ button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data)
static void
call_button( GtkWidget *widget, gpointer data )
{
if(call_list_get_size()>0)
if(call_list_get_size(current_tab)>0)
sflphone_pick_up();
else
sflphone_new_call();
......@@ -142,7 +141,7 @@ toolbar_update_buttons ()
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(transfertButton), FALSE);
gtk_signal_handler_unblock(transfertButton, transfertButtonConnId);
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(current_tab);
if (selectedCall)
{
switch(selectedCall->state)
......@@ -211,10 +210,11 @@ toolbar_update_buttons ()
}
/* Call back when the user click on a call in the list */
static void
selected(GtkTreeSelection *sel, GtkTreeModel *model)
selected(GtkTreeSelection *sel, void* data)
{
GtkTreeIter iter;
GValue val;
GtkTreeModel *model = (GtkTreeModel*)current_tab->store;
if (! gtk_tree_selection_get_selected (sel, &model, &iter))
return;
......@@ -222,7 +222,7 @@ selected(GtkTreeSelection *sel, GtkTreeModel *model)
val.g_type = 0;
gtk_tree_model_get_value (model, &iter, 2, &val);
call_select((call_t*) g_value_get_pointer(&val));
call_select(current_tab, (call_t*) g_value_get_pointer(&val));
g_value_unset(&val);
toolbar_update_buttons();
......@@ -232,9 +232,9 @@ selected(GtkTreeSelection *sel, GtkTreeModel *model)
void row_activated(GtkTreeView *tree_view,
GtkTreePath *path,
GtkTreeViewColumn *column,
void * foo)
void * data)
{
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(current_tab);
if (selectedCall)
{
switch(selectedCall->state)
......@@ -325,38 +325,38 @@ create_toolbar (){
}
GtkWidget *
create_call_tree (){
GtkWidget *ret;
void
create_call_tree (calltab_t* tab){
GtkWidget *sw;
GtkCellRenderer *rend;
GtkTreeViewColumn *col;
GtkTreeSelection *sel;
ret = gtk_vbox_new(FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (ret), 0);
tab->tree = gtk_vbox_new(FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (tab->tree), 0);
sw = gtk_scrolled_window_new( NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN);
store = gtk_list_store_new (3,
tab->store = gtk_list_store_new (3,
GDK_TYPE_PIXBUF,// Icon
G_TYPE_STRING, // Description
G_TYPE_POINTER // Pointer to the Object
);
view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE);
g_signal_connect (G_OBJECT (view), "row-activated",
tab->view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(tab->store));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(tab->view), FALSE);
g_signal_connect (G_OBJECT (tab->view), "row-activated",
G_CALLBACK (row_activated),
NULL);
// Connect the popup menu
g_signal_connect (G_OBJECT (view), "popup-menu",
g_signal_connect (G_OBJECT (tab->view), "popup-menu",
G_CALLBACK (popup_menu),
NULL);
g_signal_connect (G_OBJECT (view), "button-press-event",
g_signal_connect (G_OBJECT (tab->view), "button-press-event",
G_CALLBACK (button_pressed),
NULL);
......@@ -365,38 +365,38 @@ create_call_tree (){
rend,
"pixbuf", 0,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);
gtk_tree_view_append_column (GTK_TREE_VIEW(tab->view), col);
rend = gtk_cell_renderer_text_new();
col = gtk_tree_view_column_new_with_attributes ("Description",
rend,
"markup", 1,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);
g_object_unref(G_OBJECT(store));
gtk_container_add(GTK_CONTAINER(sw), view);
gtk_tree_view_append_column (GTK_TREE_VIEW(tab->view), col);
g_object_unref(G_OBJECT(tab->store));
gtk_container_add(GTK_CONTAINER(sw), tab->view);
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tab->view));
g_signal_connect (G_OBJECT (sel), "changed",
G_CALLBACK (selected),
store);
gtk_box_pack_start(GTK_BOX(ret), sw, TRUE, TRUE, 0);
NULL);
gtk_widget_show(ret);
gtk_box_pack_start(GTK_BOX(tab->tree), sw, TRUE, TRUE, 0);
toolbar_update_buttons();
gtk_widget_show(tab->tree);
return ret;
//toolbar_update_buttons();
}
void
update_call_tree_remove (call_t * c)
update_call_tree_remove (calltab_t* tab, call_t * c)
{
GtkTreeIter iter;
GValue val;
call_t * iterCall;
GtkListStore* store = tab->store;
GtkWidget* view = tab->view;
int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL);
int i;
......@@ -416,19 +416,21 @@ update_call_tree_remove (call_t * c)
}
}
}
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(tab);
if(selectedCall == c)
call_select(NULL);
call_select(tab, NULL);
toolbar_update_buttons();
}
void
update_call_tree (call_t * c)
update_call_tree (calltab_t* tab, call_t * c)
{
GdkPixbuf *pixbuf;
GtkTreeIter iter;
GValue val;
call_t * iterCall;
GtkListStore* store = tab->store;
GtkWidget* view = tab->view;
int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL);
int i;
......@@ -513,11 +515,13 @@ update_call_tree (call_t * c)
}
void
update_call_tree_add (call_t * c)
update_call_tree_add (calltab_t* tab, call_t * c)
{
GdkPixbuf *pixbuf;
GtkTreeIter iter;
GtkTreeSelection* sel;
//GtkListStore* store = tab->store;
//GtkWidget* view = tab->view;
// New call in the list
gchar * markup;
......@@ -526,7 +530,7 @@ update_call_tree_add (call_t * c)
call_get_name(c),
call_get_number(c));
gtk_list_store_append (store, &iter);
gtk_list_store_append (tab->store, &iter);
switch(c->state)
{
......@@ -551,7 +555,7 @@ update_call_tree_add (call_t * c)
pixbuf = gdk_pixbuf_scale_simple(pixbuf, 32, 32, GDK_INTERP_BILINEAR);
}
}
gtk_list_store_set(store, &iter,
gtk_list_store_set(tab->store, &iter,
0, pixbuf, // Icon
1, markup, // Description
2, c, // Pointer
......@@ -560,7 +564,7 @@ update_call_tree_add (call_t * c)
if (pixbuf != NULL)
g_object_unref(G_OBJECT(pixbuf));
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tab->view));
gtk_tree_selection_select_iter(GTK_TREE_SELECTION(sel), &iter);
toolbar_update_buttons();
}
......@@ -22,17 +22,19 @@
#include <gtk/gtk.h>
#include <calllist.h>
#include <notebook.h>
/** @file calltree.h
* @brief The GtkTreeView that list calls in the main window.
*/
GtkWidget * create_call_tree();
void create_call_tree(calltab_t* tab);
void toolbar_update_buttons();
void update_call_tree_add (call_t * c);
void update_call_tree (call_t * c);
void update_call_tree_remove (call_t * c);
void update_call_tree_add (calltab_t* ct, call_t * c);
void update_call_tree (calltab_t* ct, call_t * c);
void update_call_tree_remove (calltab_t* ct, call_t * c);
GtkWidget * create_toolbar();
......
......@@ -21,6 +21,7 @@
#include <accountlist.h>
#include <calllist.h>
#include <notebook.h>
#include <callmanager-glue.h>
#include <configurationmanager-glue.h>
#include <instance-glue.h>
......@@ -97,7 +98,7 @@ call_state_cb (DBusGProxy *proxy,
void * foo )
{
g_print ("Call %s state %s\n",callID, state);
call_t * c = call_list_get(callID);
call_t * c = call_list_get(tabs[TAB_CALL], callID);
if(c)
{
if ( strcmp(state, "HUNGUP") == 0 )
......
......@@ -54,7 +54,7 @@ on_delete (GtkWidget * widget, gpointer data)
/** Ask the user if he wants to hangup current calls */
gboolean
main_window_ask_quit(){
guint count = call_list_get_size();
guint count = call_list_get_size(tabs[TAB_CALL]);
GtkWidget * dialog;
guint response;
gchar * question;
......
......@@ -26,6 +26,7 @@
#include <dbus.h>
#include <mainwindow.h>
#include <screen.h>
#include <notebook.h>
#include <gtk/gtk.h>
#include <string.h> // for strlen
......@@ -50,7 +51,7 @@ void update_menus()
gtk_widget_set_sensitive( GTK_WIDGET(copyMenu), FALSE);
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(holdMenu), FALSE);
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(current_tab);
if (selectedCall)
{
gtk_widget_set_sensitive( GTK_WIDGET(copyMenu), TRUE);
......@@ -176,7 +177,7 @@ call_minimize ( void * foo)
static void
call_hold (void* foo)
{
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(tabs[TAB_CALL]);
if(selectedCall)
{
......@@ -297,7 +298,7 @@ static void
edit_copy ( void * foo)
{
GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(current_tab);
gchar * no = NULL;
if(selectedCall)
......@@ -329,7 +330,7 @@ static void
edit_paste ( void * foo)
{
GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(current_tab);
gchar * no = gtk_clipboard_wait_for_text (clip);
if(no && selectedCall)
......@@ -351,7 +352,7 @@ edit_paste ( void * foo)
selectedCall->from = g_strconcat("\"\" <", selectedCall->to, ">", NULL);
}
screen_set_call(selectedCall);
update_call_tree(selectedCall);
update_call_tree(tabs[TAB_CALL], selectedCall);
}
break;
case CALL_STATE_RINGING:
......@@ -371,7 +372,7 @@ edit_paste ( void * foo)
selectedCall->from = g_strconcat("\"\" <", selectedCall->to, ">", NULL);
screen_set_call(selectedCall);
update_call_tree(selectedCall);
update_call_tree(tabs[TAB_CALL], selectedCall);
}
break;
case CALL_STATE_CURRENT:
......@@ -390,7 +391,7 @@ edit_paste ( void * foo)
g_free(before);
g_free(temp);
screen_set_call(selectedCall);
update_call_tree(selectedCall);
update_call_tree(tabs[TAB_CALL], selectedCall);
}
}
......@@ -411,7 +412,7 @@ edit_paste ( void * foo)
selectedCall->from = g_strconcat("\"\" <", selectedCall->to, ">", NULL);
screen_set_call(selectedCall);
update_call_tree(selectedCall);
update_call_tree(tabs[TAB_CALL], selectedCall);
}
}
......@@ -544,7 +545,7 @@ show_popup_menu (GtkWidget *my_widget, GdkEventButton *event)
gboolean pickup = FALSE, hangup = FALSE, hold = FALSE, copy = FALSE;
call_t * selectedCall = call_get_selected();
call_t * selectedCall = call_get_selected(current_tab);
if (selectedCall)
{
copy = TRUE;
......
/*
* Copyright (C) 2007 Savoir-Faire Linux inc.
* Author: Antoine Reversat <antoine.reversat@savoirfairelinux.net>
* Author: Antoine Reversat <antoine.reversat@savoirfairelinux.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
......@@ -18,24 +18,47 @@
*/
#include <gtk/gtk.h>
#include <stdlib.h>
#include <calltree.h>
#include <calllist.h>
#include <notebook.h>
calltab_t* calltab_init(){
calltab_t* ret;
ret = malloc(sizeof(calltab_t));
ret->store = NULL;
ret->view = NULL;
ret->tree = NULL;
ret->callQueue = NULL;
ret->selectedCall = NULL;
return ret;
}
void*
calltab_change(GtkNotebook* notebook,
GtkNotebookPage* page,
guint page_num,
gpointer data){
current_tab = tabs[page_num];
}
GtkWidget*
create_call_notebook(){
GtkWidget* notebook;
GtkWidget* call_tab;
GtkWidget* called_tab;
GtkWidget* rcvd_tab;
GtkWidget* missed_tab;
int i;
notebook = gtk_notebook_new();
call_tab = create_call_tree();
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), call_tab, gtk_label_new("Call"));
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), called_tab, gtk_label_new("Called"));
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), rcvd_tab, gtk_label_new("Received"));
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), missed_tab, gtk_label_new("Missed"));
for(i=0; i < NR_TABS; i++){
create_call_tree(tabs[i]);
}
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tabs[TAB_CALL]->tree, gtk_label_new("Call"));
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tabs[TAB_CALLED]->tree, gtk_label_new("Called"));
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tabs[TAB_RCVD]->tree, gtk_label_new("Received"));
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tabs[TAB_MISSED]->tree, gtk_label_new("Missed"));
current_tab = tabs[TAB_CALL];
g_signal_connect(notebook, "switch-page", G_CALLBACK(calltab_change), NULL);
return notebook;
}
......@@ -20,7 +20,23 @@
#ifndef __NOTEBOOK_H__
#define __NOTEBOOK_H__
#include <calllist.h>
#include <gtk/gtk.h>
enum {
TAB_CALL,
TAB_CALLED,
TAB_RCVD,
TAB_MISSED
};
#define NR_TABS 4
calltab_t* calltab_init();
GtkWidget* create_call_notebook();
calltab_t* tabs[NR_TABS];
//calltab_t* call_tab, *called_tab, *rcvd_tab, *missed_tab;
calltab_t* current_tab;
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment