[ekiga] Call Window: Move the URI toolbar to the dialpad.
- From: Damien Sandras <dsandras src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ekiga] Call Window: Move the URI toolbar to the dialpad.
- Date: Sun, 29 Jan 2012 17:14:35 +0000 (UTC)
commit b14596ef60bc67c1c5fe8a9d7e39a86b8f366836
Author: Damien Sandras <dsandras beip be>
Date: Sun Jan 29 17:44:28 2012 +0100
Call Window: Move the URI toolbar to the dialpad.
It is the most logical place to put the URI toolbar if people do not use
the roster.
src/gui/call_window.cpp | 298 -----------------------------------------------
src/gui/main_window.cpp | 215 ++++++++++++++++++++++++++++++----
2 files changed, 191 insertions(+), 322 deletions(-)
---
diff --git a/src/gui/call_window.cpp b/src/gui/call_window.cpp
index df2c79a..fa43267 100644
--- a/src/gui/call_window.cpp
+++ b/src/gui/call_window.cpp
@@ -129,7 +129,6 @@ struct _EkigaCallWindowPrivate
GtkTextTag *bandwidth_tag;
GtkWidget *main_menu;
- GtkWidget *main_toolbar;
GtkWidget *call_panel_toolbar;
GtkWidget *preview_button;
GtkWidget *hold_button;
@@ -200,11 +199,6 @@ struct _EkigaCallWindowPrivate
*/
bool changing_back_to_local_after_a_call;
- GtkWidget *entry;
- GtkListStore *completion;
- GtkWidget *call_button;
- gboolean ekiga_call_window_call_button_connected;
-
GtkWidget *transfer_call_popup;
std::vector<boost::signals::connection> connections;
@@ -224,9 +218,6 @@ enum {
CHANNEL_LAST
};
-static bool account_completion_helper (Ekiga::AccountPtr acc,
- const gchar* text,
- EkigaCallWindow* cw);
static void zoom_in_changed_cb (GtkWidget *widget,
gpointer data);
@@ -247,18 +238,9 @@ static void stay_on_top_changed_nt (gpointer id,
GmConfEntry *entry,
gpointer data);
-static void url_changed_cb (GtkEditable *e,
- gpointer data);
-
static void toolbar_toggle_button_changed_cb (GtkWidget *widget,
gpointer data);
-static void place_call_cb (GtkWidget * /*widget*/,
- gpointer data);
-
-static void toggle_call_cb (GtkWidget *widget,
- gpointer data);
-
static void hangup_call_cb (GtkWidget * /*widget*/,
gpointer data);
@@ -458,31 +440,16 @@ static void ekiga_call_window_set_channel_pause (EkigaCallWindow *cw,
gboolean pause,
gboolean is_video);
-static void ekiga_call_window_set_call_url (EkigaCallWindow *cw,
- const char *url);
-
-G_GNUC_UNUSED static void ekiga_call_window_append_call_url (EkigaCallWindow *cw,
- const char *url);
-
-static const std::string ekiga_call_window_get_call_url (EkigaCallWindow *cw);
-
static void ekiga_call_window_init_menu (EkigaCallWindow *cw);
-static void ekiga_call_window_init_uri_toolbar (EkigaCallWindow *cw);
-
static GtkWidget * gm_cw_audio_settings_window_new (EkigaCallWindow *cw);
static GtkWidget *gm_cw_video_settings_window_new (EkigaCallWindow *cw);
-static GtkWidget* ekiga_call_window_call_button_new (EkigaCallWindow *cw);
-
static void ekiga_call_window_update_logo (EkigaCallWindow *cw);
static void ekiga_call_window_toggle_fullscreen (Ekiga::VideoOutputFSToggle toggle);
-static void ekiga_call_window_call_button_set_connected (EkigaCallWindow *cw,
- gboolean state);
-
static void ekiga_call_window_zooms_menu_update_sensitivity (EkigaCallWindow *cw,
unsigned int zoom);
@@ -516,27 +483,6 @@ stay_on_top_changed_nt (G_GNUC_UNUSED gpointer id,
}
}
-static bool
-account_completion_helper (Ekiga::AccountPtr acc,
- const gchar* text,
- EkigaCallWindow* cw)
-{
- Opal::AccountPtr account = boost::dynamic_pointer_cast<Opal::Account>(acc);
- if (account && account->is_enabled ()) {
-
- if (g_ascii_strncasecmp (text, "sip:", 4) == 0 && account->get_protocol_name () == "SIP") {
-
- GtkTreeIter iter;
- gchar* entry = NULL;
-
- entry = g_strdup_printf ("%s %s", text, account->get_host ().c_str ());
- gtk_list_store_append (cw->priv->completion, &iter);
- gtk_list_store_set (cw->priv->completion, &iter, 0, entry, -1);
- g_free (entry);
- }
- }
- return true;
-}
static void
zoom_in_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
@@ -640,26 +586,6 @@ fullscreen_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
}
static void
-url_changed_cb (GtkEditable *e,
- gpointer data)
-{
- EkigaCallWindow *cw = EKIGA_CALL_WINDOW (data);
- const char *tip_text = NULL;
-
- tip_text = gtk_entry_get_text (GTK_ENTRY (e));
-
- if (g_strrstr (tip_text, "@") == NULL) {
- boost::shared_ptr<Opal::Bank> bank = cw->priv->core->get<Opal::Bank> ("opal-account-store");
- if (bank) {
- gtk_list_store_clear (cw->priv->completion);
- bank->visit_accounts (boost::bind (&account_completion_helper, _1, tip_text, cw));
- }
- }
-
- gtk_widget_set_tooltip_text (GTK_WIDGET (e), tip_text);
-}
-
-static void
toolbar_toggle_button_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
gpointer data)
{
@@ -669,69 +595,6 @@ toolbar_toggle_button_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
}
static void
-place_call_cb (GtkWidget * /*widget*/,
- gpointer data)
-{
- std::string uri;
- EkigaCallWindow *cw = NULL;
-
- g_return_if_fail (EKIGA_IS_CALL_WINDOW (data));
-
- cw = EKIGA_CALL_WINDOW (data);
-
- if (cw->priv->calling_state == Standby && !cw->priv->current_call) {
-
- size_t pos;
-
- // Check for empty uri
- uri = ekiga_call_window_get_call_url (cw);
- pos = uri.find (":");
- if (pos != std::string::npos)
- if (uri.substr (++pos).empty ())
- return;
-
- ekiga_call_window_update_calling_state (cw, Calling);
- boost::shared_ptr<Ekiga::CallCore> call_core = cw->priv->core->get<Ekiga::CallCore> ("call-core");
-
- // Remove appended spaces
- pos = uri.find_first_of (' ');
- if (pos != std::string::npos)
- uri = uri.substr (0, pos);
-
- // Dial
- if (call_core->dial (uri)) {
-
- // nothing special
-
- } else {
-
- //FIXME
- gm_statusbar_flash_message (GM_STATUSBAR (cw->priv->statusbar), _("Could not connect to remote host"));
- ekiga_call_window_update_calling_state (cw, Standby);
- }
- }
- else if (cw->priv->calling_state == Called && cw->priv->current_call)
- cw->priv->current_call->answer ();
-}
-
-// FIXME ??? Useless ?
-static void
-toggle_call_cb (GtkWidget *widget,
- gpointer data)
-{
- EkigaCallWindow *cw = EKIGA_CALL_WINDOW (data);
-
- if (cw->priv->ekiga_call_window_call_button_connected)
- hangup_call_cb (widget, data);
- else {
- if (!cw->priv->current_call)
- place_call_cb (widget, data);
- else
- cw->priv->current_call->answer ();
- }
-}
-
-static void
hangup_call_cb (GtkWidget * /*widget*/,
gpointer data)
{
@@ -1235,8 +1098,6 @@ on_established_call_cb (boost::shared_ptr<Ekiga::CallManager> /*manager*/,
info = g_strdup_printf (_("Connected with %s"),
call->get_remote_party_name ().c_str ());
- if (!call->get_remote_uri ().empty ())
- ekiga_call_window_set_call_url (cw, call->get_remote_uri ().c_str());
if (gm_conf_get_bool (VIDEO_DISPLAY_KEY "stay_on_top"))
ekiga_call_window_set_stay_on_top (cw, TRUE);
ekiga_call_window_set_status (cw, info);
@@ -1264,7 +1125,6 @@ on_cleared_call_cb (G_GNUC_UNUSED boost::shared_ptr<Ekiga::CallManager> manager,
ekiga_call_window_set_stay_on_top (cw, FALSE);
ekiga_call_window_update_calling_state (cw, Standby);
ekiga_call_window_set_status (cw, _("Standby"));
- ekiga_call_window_set_call_url (cw, "sip:");
ekiga_call_window_set_call_duration (cw, NULL);
ekiga_call_window_set_bandwidth (cw, 0.0, 0.0, 0.0, 0.0, 0, 0);
ekiga_call_window_set_call_info (cw, NULL, NULL, NULL, NULL);
@@ -1470,9 +1330,6 @@ ekiga_call_window_update_calling_state (EkigaCallWindow *cw,
gtk_widget_set_sensitive (GTK_WIDGET (cw->priv->hold_button), FALSE);
gtk_widget_set_sensitive (GTK_WIDGET (cw->priv->preview_button), TRUE);
- /* Update the connect button */
- ekiga_call_window_call_button_set_connected (cw, FALSE);
-
/* Destroy the transfer call popup */
if (cw->priv->transfer_call_popup)
gtk_dialog_response (GTK_DIALOG (cw->priv->transfer_call_popup),
@@ -1485,9 +1342,6 @@ ekiga_call_window_update_calling_state (EkigaCallWindow *cw,
/* Update the menus and toolbar items */
gtk_menu_set_sensitive (cw->priv->main_menu, "disconnect", TRUE);
gtk_widget_set_sensitive (GTK_WIDGET (cw->priv->preview_button), FALSE);
-
- /* Update the connect button */
- ekiga_call_window_call_button_set_connected (cw, TRUE);
break;
@@ -1498,9 +1352,6 @@ ekiga_call_window_update_calling_state (EkigaCallWindow *cw,
gtk_menu_section_set_sensitive (cw->priv->main_menu, "hold_call", TRUE);
gtk_widget_set_sensitive (GTK_WIDGET (cw->priv->hold_button), TRUE);
gtk_widget_set_sensitive (GTK_WIDGET (cw->priv->preview_button), FALSE);
-
- /* Update the connect button */
- ekiga_call_window_call_button_set_connected (cw, TRUE);
break;
@@ -1508,9 +1359,6 @@ ekiga_call_window_update_calling_state (EkigaCallWindow *cw,
/* Update the menus and toolbar items */
gtk_menu_set_sensitive (cw->priv->main_menu, "disconnect", TRUE);
-
- /* Update the connect button */
- ekiga_call_window_call_button_set_connected (cw, TRUE);
break;
default:
@@ -1832,53 +1680,6 @@ ekiga_call_window_set_channel_pause (EkigaCallWindow *cw,
gtk_label_set_text_with_mnemonic (GTK_LABEL (child), msg);
}
-static void
-ekiga_call_window_set_call_url (EkigaCallWindow *cw,
- const char *url)
-{
- g_return_if_fail (cw != NULL && url != NULL);
-
- gtk_entry_set_text (GTK_ENTRY (cw->priv->entry), url);
- gtk_editable_set_position (GTK_EDITABLE (cw->priv->entry), -1);
- gtk_widget_grab_focus (GTK_WIDGET (cw->priv->entry));
- gtk_editable_select_region (GTK_EDITABLE (cw->priv->entry), -1, -1);
-}
-
-static void
-ekiga_call_window_append_call_url (EkigaCallWindow *cw,
- const char *url)
-{
- int pos = -1;
- GtkEditable *entry;
-
- g_return_if_fail (EKIGA_IS_CALL_WINDOW (cw));
- g_return_if_fail (url != NULL);
-
- entry = GTK_EDITABLE (cw->priv->entry);
-
- if (gtk_editable_get_selection_bounds (entry, NULL, NULL))
- gtk_editable_delete_selection (entry);
-
- pos = gtk_editable_get_position (entry);
- gtk_editable_insert_text (entry, url, strlen (url), &pos);
- gtk_editable_select_region (entry, -1, -1);
- gtk_editable_set_position (entry, pos);
-}
-
-
-static const std::string
-ekiga_call_window_get_call_url (EkigaCallWindow *cw)
-{
- g_return_val_if_fail (EKIGA_IS_CALL_WINDOW (cw), NULL);
-
- const gchar* entry_text = gtk_entry_get_text (GTK_ENTRY (cw->priv->entry));
-
- if (entry_text != NULL)
- return entry_text;
- else
- return "";
-}
-
static GtkWidget *
gm_cw_video_settings_window_new (EkigaCallWindow *cw)
{
@@ -2219,86 +2020,6 @@ ekiga_call_window_init_menu (EkigaCallWindow *cw)
}
static void
-ekiga_call_window_init_uri_toolbar (EkigaCallWindow *cw)
-{
- GtkToolItem *item = NULL;
- GtkEntryCompletion *completion = NULL;
-
- g_return_if_fail (EKIGA_IS_CALL_WINDOW (cw));
-
- /* The call horizontal toolbar */
- cw->priv->main_toolbar = gtk_toolbar_new ();
- gtk_toolbar_set_style (GTK_TOOLBAR (cw->priv->main_toolbar), GTK_TOOLBAR_ICONS);
- gtk_toolbar_set_show_arrow (GTK_TOOLBAR (cw->priv->main_toolbar), FALSE);
-
- /* URL bar */
- /* Entry */
- item = gtk_tool_item_new ();
- cw->priv->entry = gtk_entry_new ();
- cw->priv->completion = gtk_list_store_new (1, G_TYPE_STRING);
- completion = gtk_entry_completion_new ();
- gtk_entry_completion_set_model (GTK_ENTRY_COMPLETION (completion), GTK_TREE_MODEL (cw->priv->completion));
- gtk_entry_set_completion (GTK_ENTRY (cw->priv->entry), completion);
- gtk_entry_completion_set_inline_completion (GTK_ENTRY_COMPLETION (completion), false);
- gtk_entry_completion_set_popup_completion (GTK_ENTRY_COMPLETION (completion), true);
- gtk_entry_completion_set_text_column (GTK_ENTRY_COMPLETION (completion), 0);
-
- gtk_container_add (GTK_CONTAINER (item), cw->priv->entry);
- gtk_container_set_border_width (GTK_CONTAINER (item), 0);
- gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), true);
-
- ekiga_call_window_set_call_url (cw, "sip:");
-
- // activate Ctrl-L to get the entry focus
- gtk_widget_add_accelerator (cw->priv->entry, "grab-focus",
- cw->priv->accel, GDK_L,
- (GdkModifierType) GDK_CONTROL_MASK,
- (GtkAccelFlags) 0);
-
- gtk_editable_set_position (GTK_EDITABLE (cw->priv->entry), -1);
-
- g_signal_connect (cw->priv->entry, "changed",
- G_CALLBACK (url_changed_cb), cw);
- g_signal_connect (cw->priv->entry, "activate",
- G_CALLBACK (place_call_cb), cw);
-
- gtk_toolbar_insert (GTK_TOOLBAR (cw->priv->main_toolbar), item, 0);
-
- /* The connect button */
- item = gtk_tool_item_new ();
- cw->priv->call_button = ekiga_call_window_call_button_new (cw);
- gtk_container_add (GTK_CONTAINER (item), cw->priv->call_button);
- gtk_container_set_border_width (GTK_CONTAINER (cw->priv->call_button), 0);
- gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), FALSE);
-
- gtk_widget_set_tooltip_text (GTK_WIDGET (cw->priv->call_button),
- _("Enter a URI on the left, and click this button to place a call or to hangup"));
-
- gtk_toolbar_insert (GTK_TOOLBAR (cw->priv->main_toolbar), item, -1);
-
- g_signal_connect (cw->priv->call_button, "clicked",
- G_CALLBACK (toggle_call_cb),
- cw);
-
- gtk_widget_show_all (GTK_WIDGET (cw->priv->main_toolbar));
-}
-
-static GtkWidget*
-ekiga_call_window_call_button_new (EkigaCallWindow *cw)
-{
- GtkButton *button;
- GtkWidget* image;
-
- button = (GtkButton*) gtk_button_new ();
- image = gtk_image_new_from_stock (GM_STOCK_PHONE_PICK_UP_24, GTK_ICON_SIZE_LARGE_TOOLBAR);
- gtk_button_set_image (button, image);
- gtk_button_set_relief (button, GTK_RELIEF_NONE);
- cw->priv->ekiga_call_window_call_button_connected = FALSE;
-
- return GTK_WIDGET (button);
-}
-
-static void
ekiga_call_window_update_logo (EkigaCallWindow *cw)
{
g_return_if_fail (EKIGA_IS_CALL_WINDOW (cw));
@@ -2384,18 +2105,6 @@ ekiga_call_window_channels_menu_update_sensitivity (EkigaCallWindow *cw,
}
}
-static void
-ekiga_call_window_call_button_set_connected (EkigaCallWindow *cw,
- gboolean state)
-{
- GtkWidget* image;
-
- cw->priv->ekiga_call_window_call_button_connected = state;
- image = gtk_button_get_image (GTK_BUTTON (cw->priv->call_button));
- gtk_image_set_from_stock (GTK_IMAGE (image), state ? GM_STOCK_PHONE_HANG_UP_24 : GM_STOCK_PHONE_PICK_UP_24,
- GTK_ICON_SIZE_LARGE_TOOLBAR);
-}
-
static gboolean
ekiga_call_window_transfer_dialog_run (EkigaCallWindow *cw,
GtkWidget *parent_window,
@@ -2731,13 +2440,6 @@ ekiga_call_window_init_gui (EkigaCallWindow *cw)
G_CALLBACK (hold_current_call_cb), cw);
gtk_widget_realize (cw->priv->main_video_image);
- /* The URI toolbar */
- ekiga_call_window_init_uri_toolbar (cw);
- alignment = gtk_alignment_new (0.0, 0.0, 1.0, 0.0);
- gtk_container_add (GTK_CONTAINER (alignment), cw->priv->main_toolbar);
- gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (alignment), FALSE, FALSE, 0);
- gtk_widget_show_all (frame);
-
/* The statusbar */
cw->priv->statusbar = gm_statusbar_new ();
gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (cw->priv->statusbar), TRUE);
diff --git a/src/gui/main_window.cpp b/src/gui/main_window.cpp
index ae62e2b..346a22c 100644
--- a/src/gui/main_window.cpp
+++ b/src/gui/main_window.cpp
@@ -122,6 +122,11 @@ struct _EkigaMainWindowPrivate
GtkWidget *main_notebook;
GtkWidget *hpaned;
+ /* Dialpad uri toolbar */
+ GtkWidget *uri_toolbar;
+ GtkWidget *entry;
+ GtkListStore *completion;
+
/* notebook pages
* (we store the numbers so we know where we are)
*/
@@ -201,18 +206,19 @@ private:
static void on_some_core_updated (EkigaMainWindow* self);
/* GUI Functions */
+static bool account_completion_helper_cb (Ekiga::AccountPtr acc,
+ const gchar* text,
+ EkigaMainWindow* mw);
+
+static void place_call_cb (GtkWidget * /*widget*/,
+ gpointer data);
+
+static void url_changed_cb (GtkEditable *e,
+ gpointer data);
-/* DESCRIPTION : /
- * BEHAVIOR : Shows a window
- * PRE : The given data pointer should be a GMWindow (Gobject based)
- */
static void show_window_cb (GtkWidget *widget,
gpointer data);
-/* DESCRIPTION : /
- * BEHAVIOR : Shows a window
- * PRE : The given data pointer should be a GMWindow (non Gobject)
- */
static void show_gm_window_cb (GtkWidget *widget,
gpointer data);
@@ -220,6 +226,8 @@ static void show_gm_window_cb (GtkWidget *widget,
static void ekiga_main_window_incoming_call_dialog_show (EkigaMainWindow *mw,
boost::shared_ptr<Ekiga::Call> call);
+static const std::string ekiga_main_window_get_call_url (EkigaMainWindow *mw);
+
#ifdef HAVE_NOTIFY
static void ekiga_main_window_incoming_call_notify (EkigaMainWindow *mw,
boost::shared_ptr<Ekiga::Call> call);
@@ -319,6 +327,7 @@ static gboolean statusbar_clicked_cb (GtkWidget *,
GdkEventButton *,
gpointer);
+static void ekiga_main_window_init_uri_toolbar (EkigaMainWindow *mw);
static void ekiga_main_window_add_device_dialog_show (EkigaMainWindow *main_window,
const Ekiga::Device & device,
@@ -485,8 +494,87 @@ name_from_uri_helper::on_visit_presentities (Ekiga::PresentityPtr presentity,
}
/*
- * Engine Callbacks
+ * Callbacks
*/
+static bool
+account_completion_helper_cb (Ekiga::AccountPtr acc,
+ const gchar* text,
+ EkigaMainWindow* mw)
+{
+ Opal::AccountPtr account = boost::dynamic_pointer_cast<Opal::Account>(acc);
+ if (account && account->is_enabled ()) {
+
+ if (g_ascii_strncasecmp (text, "sip:", 4) == 0 && account->get_protocol_name () == "SIP") {
+
+ GtkTreeIter iter;
+ gchar* entry = NULL;
+
+ entry = g_strdup_printf ("%s %s", text, account->get_host ().c_str ());
+ gtk_list_store_append (mw->priv->completion, &iter);
+ gtk_list_store_set (mw->priv->completion, &iter, 0, entry, -1);
+ g_free (entry);
+ }
+ }
+ return true;
+}
+
+static void
+place_call_cb (GtkWidget * /*widget*/,
+ gpointer data)
+{
+ std::string uri;
+ EkigaMainWindow *mw = NULL;
+
+ g_return_if_fail (EKIGA_IS_MAIN_WINDOW (data));
+
+ mw = EKIGA_MAIN_WINDOW (data);
+
+ if (mw->priv->calling_state == Standby) {
+
+ size_t pos;
+
+ // Check for empty uri
+ uri = ekiga_main_window_get_call_url (mw);
+ pos = uri.find (":");
+ if (pos != std::string::npos)
+ if (uri.substr (++pos).empty ())
+ return;
+
+ boost::shared_ptr<Ekiga::CallCore> call_core = mw->priv->core->get<Ekiga::CallCore> ("call-core");
+
+ // Remove appended spaces
+ pos = uri.find_first_of (' ');
+ if (pos != std::string::npos)
+ uri = uri.substr (0, pos);
+
+ // Dial
+ if (!call_core->dial (uri)) {
+
+ gm_statusbar_flash_message (GM_STATUSBAR (mw->priv->statusbar), _("Could not connect to remote host"));
+ }
+ }
+}
+
+static void
+url_changed_cb (GtkEditable *e,
+ gpointer data)
+{
+ EkigaMainWindow *mw = EKIGA_MAIN_WINDOW (data);
+ const char *tip_text = NULL;
+
+ tip_text = gtk_entry_get_text (GTK_ENTRY (e));
+
+ if (g_strrstr (tip_text, "@") == NULL) {
+ boost::shared_ptr<Opal::Bank> bank = mw->priv->core->get<Opal::Bank> ("opal-account-store");
+ if (bank) {
+ gtk_list_store_clear (mw->priv->completion);
+ bank->visit_accounts (boost::bind (&account_completion_helper_cb, _1, tip_text, mw));
+ }
+ }
+
+ gtk_widget_set_tooltip_text (GTK_WIDGET (e), tip_text);
+}
+
static void
show_window_cb (G_GNUC_UNUSED GtkWidget *widget,
gpointer data)
@@ -1196,9 +1284,8 @@ notify_action_cb (NotifyNotification *notification,
}
}
-
static void
-closed_cb (NotifyNotification* /*notify*/,
+closed_cb (NotifyNotification* /*notify*/,
gpointer main_window)
{
EkigaMainWindow *mw;
@@ -1208,10 +1295,23 @@ closed_cb (NotifyNotification* /*notify*/,
mw = EKIGA_MAIN_WINDOW (main_window);
boost::shared_ptr<Ekiga::AudioOutputCore> audiooutput_core = mw->priv->core->get<Ekiga::AudioOutputCore> ("audiooutput-core");
- if (audiooutput_core)
+ if (audiooutput_core)
audiooutput_core->stop_play_event ("incoming_call_sound");
}
+static const std::string
+ekiga_main_window_get_call_url (EkigaMainWindow *mw)
+{
+ g_return_val_if_fail (EKIGA_IS_MAIN_WINDOW (mw), NULL);
+
+ const gchar* entry_text = gtk_entry_get_text (GTK_ENTRY (mw->priv->entry));
+
+ if (entry_text != NULL)
+ return entry_text;
+ else
+ return "";
+}
+
static void
ekiga_main_window_incoming_call_notify (EkigaMainWindow *mw,
boost::shared_ptr<Ekiga::Call> call)
@@ -1328,7 +1428,7 @@ ekiga_main_window_add_device_dialog_show (EkigaMainWindow *mw,
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
-
+
msg = "<b>" + device.GetString() + "</b>";
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label), msg.c_str());
@@ -1352,30 +1452,91 @@ ekiga_main_window_add_device_dialog_show (EkigaMainWindow *mw,
gtk_widget_show_all (add_device_popup);
-
-// g_signal_connect (add_device_popup, "delete_event",
-// G_CALLBACK (gtk_widget_hide_on_delete), NULL);
-// g_signal_connect (add_device_popup, "response",
-// G_CALLBACK (add_device_response_cb), &device);
-
deviceStruct* device_struct = g_new(deviceStruct, 1);
snprintf (device_struct->name, sizeof (device_struct->name), "%s", (device.GetString()).c_str());
device_struct->deviceType = device_type;
g_signal_connect_data (add_device_popup, "delete_event",
- G_CALLBACK (gtk_widget_hide_on_delete),
+ G_CALLBACK (gtk_widget_hide_on_delete),
(gpointer) device_struct,
(GClosureNotify) g_free,
(GConnectFlags) 0);
g_signal_connect_data (add_device_popup, "response",
- G_CALLBACK (add_device_response_cb),
+ G_CALLBACK (add_device_response_cb),
(gpointer) device_struct,
(GClosureNotify) g_free,
(GConnectFlags) 0);
}
static void
+ekiga_main_window_init_uri_toolbar (EkigaMainWindow *mw)
+{
+ GtkWidget *call_button = NULL;
+ GtkWidget *image = NULL;
+ GtkToolItem *item = NULL;
+ GtkEntryCompletion *completion = NULL;
+
+ g_return_if_fail (EKIGA_IS_MAIN_WINDOW (mw));
+
+ /* The call horizontal toolbar */
+ mw->priv->uri_toolbar = gtk_toolbar_new ();
+ gtk_toolbar_set_style (GTK_TOOLBAR (mw->priv->uri_toolbar), GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_show_arrow (GTK_TOOLBAR (mw->priv->uri_toolbar), FALSE);
+
+ /* URL bar */
+ /* Entry */
+ item = gtk_tool_item_new ();
+ mw->priv->entry = gtk_entry_new ();
+ mw->priv->completion = gtk_list_store_new (1, G_TYPE_STRING);
+ completion = gtk_entry_completion_new ();
+ gtk_entry_completion_set_model (GTK_ENTRY_COMPLETION (completion), GTK_TREE_MODEL (mw->priv->completion));
+ gtk_entry_set_completion (GTK_ENTRY (mw->priv->entry), completion);
+ gtk_entry_set_text (GTK_ENTRY (mw->priv->entry), "sip:");
+ gtk_entry_completion_set_inline_completion (GTK_ENTRY_COMPLETION (completion), false);
+ gtk_entry_completion_set_popup_completion (GTK_ENTRY_COMPLETION (completion), true);
+ gtk_entry_completion_set_text_column (GTK_ENTRY_COMPLETION (completion), 0);
+
+ gtk_container_add (GTK_CONTAINER (item), mw->priv->entry);
+ gtk_container_set_border_width (GTK_CONTAINER (item), 0);
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), true);
+
+ // activate Ctrl-L to get the entry focus
+ gtk_widget_add_accelerator (mw->priv->entry, "grab-focus",
+ mw->priv->accel, GDK_L,
+ (GdkModifierType) GDK_CONTROL_MASK,
+ (GtkAccelFlags) 0);
+
+ gtk_editable_set_position (GTK_EDITABLE (mw->priv->entry), -1);
+
+ g_signal_connect (mw->priv->entry, "changed",
+ G_CALLBACK (url_changed_cb), mw);
+ g_signal_connect (mw->priv->entry, "activate",
+ G_CALLBACK (place_call_cb), mw);
+
+ gtk_toolbar_insert (GTK_TOOLBAR (mw->priv->uri_toolbar), item, 0);
+
+ /* The call button */
+ item = gtk_tool_item_new ();
+ call_button = gtk_button_new ();
+ image = gtk_image_new_from_stock (GM_STOCK_PHONE_PICK_UP_24, GTK_ICON_SIZE_LARGE_TOOLBAR);
+ gtk_button_set_image (GTK_BUTTON (call_button), image);
+ gtk_button_set_relief (GTK_BUTTON (call_button), GTK_RELIEF_NONE);
+ gtk_container_add (GTK_CONTAINER (item), call_button);
+ gtk_container_set_border_width (GTK_CONTAINER (call_button), 0);
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (item), FALSE);
+
+ gtk_widget_set_tooltip_text (GTK_WIDGET (call_button),
+ _("Enter a URI on the left, and click this button to place a call or to hangup"));
+
+ gtk_toolbar_insert (GTK_TOOLBAR (mw->priv->uri_toolbar), item, -1);
+
+ g_signal_connect (call_button, "clicked",
+ G_CALLBACK (place_call_cb),
+ mw);
+}
+
+static void
ekiga_main_window_init_menu (EkigaMainWindow *mw)
{
GtkWidget *addressbook_window = NULL;
@@ -1566,22 +1727,28 @@ ekiga_main_window_init_contact_list (EkigaMainWindow *mw)
}
-static void
+static void
ekiga_main_window_init_dialpad (EkigaMainWindow *mw)
{
GtkWidget *dialpad = NULL;
GtkWidget *alignment = NULL;
GtkWidget *label = NULL;
+ GtkWidget *vbox = NULL;
+ vbox = gtk_vbox_new (false, 0);
dialpad = ekiga_dialpad_new (mw->priv->accel);
g_signal_connect (dialpad, "button-clicked",
G_CALLBACK (dialpad_button_clicked_cb), mw);
alignment = gtk_alignment_new (0.5, 0.5, 0.2, 0.2);
gtk_container_add (GTK_CONTAINER (alignment), dialpad);
+ gtk_box_pack_start (GTK_BOX (vbox), alignment, true, true, 0);
+
+ ekiga_main_window_init_uri_toolbar (mw);
+ gtk_box_pack_start (GTK_BOX (vbox), mw->priv->uri_toolbar, false, false, 0);
label = gtk_label_new (_("Dialpad"));
- mw->priv->dialpad_page_number = gtk_notebook_append_page (GTK_NOTEBOOK (mw->priv->main_notebook), alignment, label);
+ mw->priv->dialpad_page_number = gtk_notebook_append_page (GTK_NOTEBOOK (mw->priv->main_notebook), vbox, label);
g_signal_connect (mw, "key-press-event",
G_CALLBACK (key_press_event_cb), mw);
@@ -1595,7 +1762,7 @@ ekiga_main_window_init_history (EkigaMainWindow *mw)
boost::shared_ptr<History::Source> history_source = mw->priv->core->get<History::Source> ("call-history-store");
boost::shared_ptr<History::Book> history_book = history_source->get_book ();
-
+
mw->priv->call_history_view = call_history_view_gtk_new (history_book);
label = gtk_label_new (_("Call history"));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]