[ekiga] Call window: Added video menu.
- From: Damien Sandras <dsandras src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ekiga] Call window: Added video menu.
- Date: Sun, 8 Jan 2012 17:40:16 +0000 (UTC)
commit 68a61e82f4ee2ea934d98c5455dc0881e80d56bc
Author: Damien Sandras <dsandras beip be>
Date: Sun Jan 8 15:14:48 2012 +0100
Call window: Added video menu.
src/gui/call_window.cpp | 302 +++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 293 insertions(+), 9 deletions(-)
---
diff --git a/src/gui/call_window.cpp b/src/gui/call_window.cpp
index 16152a4..9ae3874 100644
--- a/src/gui/call_window.cpp
+++ b/src/gui/call_window.cpp
@@ -120,6 +120,8 @@ struct _EkigaCallWindowPrivate
boost::shared_ptr<Ekiga::Call> current_call;
unsigned calling_state;
+ GtkWidget *main_menu;
+
GtkWidget *call_panel_frame;
GtkWidget *video_frame;
GtkWidget *main_video_image;
@@ -219,6 +221,24 @@ static bool account_completion_helper (Ekiga::AccountPtr acc,
const gchar* text,
EkigaCallWindow* cw);
+static void window_closed_from_menu_cb (GtkWidget *widget,
+ gpointer data);
+
+static void zoom_in_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
+ gpointer data);
+
+static void zoom_out_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
+ gpointer data);
+
+static void zoom_normal_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
+ gpointer data);
+
+static void display_changed_cb (GtkWidget *widget,
+ gpointer data);
+
+static void fullscreen_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
+ G_GNUC_UNUSED gpointer data);
+
static void stay_on_top_changed_nt (G_GNUC_UNUSED gpointer id,
GmConfEntry *entry,
gpointer data);
@@ -410,8 +430,10 @@ static GtkWidget* ekiga_call_window_call_button_new (EkigaCallWindow *cw);
static void ekiga_call_window_update_logo (EkigaCallWindow *cw);
-static void ekiga_call_window_call_button_set_connected (EkigaCallWindow *cw,
- gboolean state);
+static void ekiga_call_window_toggle_fullscreen (Ekiga::VideoOutputFSToggle toggle);
+
+static void ekiga_call_window_call_button_set_connected (EkigaCallWindow *cw,
+ gboolean state);
static gboolean ekiga_call_window_transfer_dialog_run (EkigaCallWindow *cw,
GtkWidget *parent_window,
@@ -461,6 +483,111 @@ account_completion_helper (Ekiga::AccountPtr acc,
}
static void
+window_closed_from_menu_cb (GtkWidget *widget,
+ gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (data));
+}
+
+static void
+zoom_in_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
+ gpointer data)
+{
+ GtkWidget *call_window = GnomeMeeting::Process ()->GetCallWindow ();
+ g_return_if_fail (call_window != NULL);
+
+ g_return_if_fail (data != NULL);
+
+ Ekiga::DisplayInfo display_info;
+
+ display_info.zoom = gm_conf_get_int ((char *) data);
+
+ if (display_info.zoom < 200)
+ display_info.zoom = display_info.zoom * 2;
+
+ gm_conf_set_int ((char *) data, display_info.zoom);
+ // FIXME ekiga_call_window_zooms_menu_update_sensitivity (EKIGA_call_window (call_window), display_info.zoom);
+}
+
+static void
+zoom_out_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
+ gpointer data)
+{
+ GtkWidget *call_window = GnomeMeeting::Process ()->GetCallWindow ();
+ g_return_if_fail (call_window != NULL);
+
+ g_return_if_fail (data != NULL);
+
+ Ekiga::DisplayInfo display_info;
+
+ display_info.zoom = gm_conf_get_int ((char *) data);
+
+ if (display_info.zoom > 50)
+ display_info.zoom = (unsigned int) (display_info.zoom / 2);
+
+ gm_conf_set_int ((char *) data, display_info.zoom);
+//FIXME ekiga_call_window_zooms_menu_update_sensitivity (EKIGA_call_window (call_window), display_info.zoom);
+}
+
+static void
+zoom_normal_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
+ gpointer data)
+{
+ GtkWidget *call_window = GnomeMeeting::Process ()->GetCallWindow ();
+ g_return_if_fail (call_window != NULL);
+
+ g_return_if_fail (data != NULL);
+
+ Ekiga::DisplayInfo display_info;
+
+ display_info.zoom = 100;
+
+ gm_conf_set_int ((char *) data, display_info.zoom);
+//FIXME ekiga_call_window_zooms_menu_update_sensitivity (EKIGA_call_window (call_window), display_info.zoom);
+}
+
+static void
+display_changed_cb (GtkWidget *widget,
+ gpointer data)
+{
+ GtkWidget *call_window = GnomeMeeting::Process ()->GetCallWindow ();
+ g_return_if_fail (call_window != NULL);
+ g_return_if_fail (data != NULL);
+
+ GSList *group = NULL;
+ int group_last_pos = 0;
+ int active = 0;
+
+ group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (widget));
+ group_last_pos = g_slist_length (group) - 1; /* If length 1, last pos is 0 */
+
+ /* Only do something when a new CHECK_MENU_ITEM becomes active,
+ not when it becomes inactive */
+ if (GTK_CHECK_MENU_ITEM (widget)->active) {
+
+ while (group) {
+ if (group->data == widget)
+ break;
+
+ active++;
+ group = g_slist_next (group);
+ }
+
+ if (!EKIGA_CALL_WINDOW(call_window)->priv->changing_back_to_local_after_a_call)
+ gm_conf_set_int ((gchar *) data, group_last_pos - active);
+ }
+}
+
+static void
+fullscreen_changed_cb (G_GNUC_UNUSED GtkWidget *widget,
+ G_GNUC_UNUSED gpointer data)
+{
+ GtkWidget* call_window = GnomeMeeting::Process()->GetCallWindow ();
+ g_return_if_fail (call_window != NULL);
+ ekiga_call_window_toggle_fullscreen (Ekiga::VO_FS_TOGGLE);
+}
+
+static void
url_changed_cb (GtkEditable *e,
gpointer data)
{
@@ -767,9 +894,9 @@ on_videooutput_device_error_cb (Ekiga::VideoOutputManager & /* manager */,
}
static void
-on_fullscreen_mode_changed_cb (Ekiga::VideoOutputManager & /* manager */, Ekiga::VideoOutputFSToggle toggle, gpointer self)
+on_fullscreen_mode_changed_cb (Ekiga::VideoOutputManager & /* manager */, Ekiga::VideoOutputFSToggle toggle, gpointer self)
{
- //FIXME gm_call_window_toggle_fullscreen (toggle, GTK_WIDGET (self));
+ ekiga_call_window_toggle_fullscreen (toggle);
}
static void
@@ -1851,6 +1978,45 @@ ekiga_call_window_call_button_set_connected (EkigaCallWindow *cw,
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 void
+ekiga_call_window_toggle_fullscreen (Ekiga::VideoOutputFSToggle toggle)
+{
+ Ekiga::VideoOutputMode videooutput_mode;
+
+ switch (toggle) {
+ case Ekiga::VO_FS_OFF:
+ if (gm_conf_get_int (VIDEO_DISPLAY_KEY "video_view") == Ekiga::VO_MODE_FULLSCREEN) {
+
+ videooutput_mode = (Ekiga::VideoOutputMode) gm_conf_get_int (VIDEO_DISPLAY_KEY "video_view_before_fullscreen");
+ gm_conf_set_int (VIDEO_DISPLAY_KEY "video_view", videooutput_mode);
+ }
+ break;
+ case Ekiga::VO_FS_ON:
+ if (gm_conf_get_int (VIDEO_DISPLAY_KEY "video_view") != Ekiga::VO_MODE_FULLSCREEN) {
+
+ videooutput_mode = (Ekiga::VideoOutputMode) gm_conf_get_int (VIDEO_DISPLAY_KEY "video_view");
+ gm_conf_set_int (VIDEO_DISPLAY_KEY "video_view_before_fullscreen", videooutput_mode);
+ gm_conf_set_int (VIDEO_DISPLAY_KEY "video_view", Ekiga::VO_MODE_FULLSCREEN);
+ }
+ break;
+
+ case Ekiga::VO_FS_TOGGLE:
+ default:
+ if (gm_conf_get_int (VIDEO_DISPLAY_KEY "video_view") == Ekiga::VO_MODE_FULLSCREEN) {
+
+ videooutput_mode = (Ekiga::VideoOutputMode) gm_conf_get_int (VIDEO_DISPLAY_KEY "video_view_before_fullscreen");
+ gm_conf_set_int (VIDEO_DISPLAY_KEY "video_view", videooutput_mode);
+ }
+ else {
+
+ videooutput_mode = (Ekiga::VideoOutputMode) gm_conf_get_int (VIDEO_DISPLAY_KEY "video_view");
+ gm_conf_set_int (VIDEO_DISPLAY_KEY "video_view_before_fullscreen", videooutput_mode);
+ gm_conf_set_int (VIDEO_DISPLAY_KEY "video_view", Ekiga::VO_MODE_FULLSCREEN);
+ }
+ break;
+ }
+}
+
static gboolean
ekiga_call_window_transfer_dialog_run (EkigaCallWindow *cw,
GtkWidget *parent_window,
@@ -2008,6 +2174,116 @@ ekiga_call_window_connect_engine_signals (EkigaCallWindow *cw)
}
static void
+ekiga_call_window_init_menu (EkigaCallWindow *cw)
+{
+ g_return_if_fail (cw != NULL);
+
+ cw->priv->main_menu = gtk_menu_bar_new ();
+
+ static MenuEntry gnomemeeting_menu [] =
+ {
+ GTK_MENU_NEW (_("_Chat")),
+
+ GTK_MENU_ENTRY("connect", _("Ca_ll"), _("Place a new call"),
+ GM_STOCK_PHONE_PICK_UP_16, 'o',
+ G_CALLBACK (show_window_cb), NULL, TRUE),
+
+ GTK_MENU_ENTRY("disconnect", _("_Hangup"), _("Hangup the current call"),
+ GM_STOCK_PHONE_PICK_UP_16, 'o',
+ G_CALLBACK (show_window_cb), NULL, TRUE),
+
+ GTK_MENU_SEPARATOR,
+
+ GTK_MENU_ENTRY("hold_call", _("H_old Call"), _("Hold the current call"),
+ NULL, GDK_h,
+ G_CALLBACK (hold_current_call_cb), cw,
+ FALSE),
+ GTK_MENU_ENTRY("transfer_call", _("_Transfer Call"),
+ _("Transfer the current call"),
+ NULL, GDK_t,
+ G_CALLBACK (transfer_current_call_cb), cw,
+ FALSE),
+
+ GTK_MENU_SEPARATOR,
+
+ GTK_MENU_ENTRY("suspend_audio", _("Suspend _Audio"),
+ _("Suspend or resume the audio transmission"),
+ NULL, GDK_m,
+ G_CALLBACK (toggle_audio_stream_pause_cb),
+ cw, FALSE),
+ GTK_MENU_ENTRY("suspend_video", _("Suspend _Video"),
+ _("Suspend or resume the video transmission"),
+ NULL, GDK_p,
+ G_CALLBACK (toggle_video_stream_pause_cb),
+ cw, FALSE),
+
+ GTK_MENU_SEPARATOR,
+
+ GTK_MENU_ENTRY("close", NULL, _("Close the call window"),
+ GTK_STOCK_CLOSE, 'W',
+ G_CALLBACK (window_closed_from_menu_cb),
+ (gpointer) cw, TRUE),
+
+ GTK_MENU_SEPARATOR,
+
+ GTK_MENU_NEW(_("_View")),
+
+ GTK_MENU_RADIO_ENTRY("local_video", _("_Local Video"),
+ _("Local video image"),
+ NULL, '1',
+ G_CALLBACK (display_changed_cb),
+ (gpointer) VIDEO_DISPLAY_KEY "video_view",
+ TRUE, FALSE),
+ GTK_MENU_RADIO_ENTRY("remote_video", _("_Remote Video"),
+ _("Remote video image"),
+ NULL, '2',
+ G_CALLBACK (display_changed_cb),
+ (gpointer) VIDEO_DISPLAY_KEY "video_view",
+ FALSE, FALSE),
+ GTK_MENU_RADIO_ENTRY("both_incrusted", _("_Picture-in-Picture"),
+ _("Both video images"),
+ NULL, '3',
+ G_CALLBACK (display_changed_cb),
+ (gpointer) VIDEO_DISPLAY_KEY "video_view",
+ FALSE, FALSE),
+ GTK_MENU_RADIO_ENTRY("both_incrusted_window", _("Picture-in-Picture in Separate _Window"),
+ _("Both video images"),
+ NULL, '4',
+ G_CALLBACK (display_changed_cb),
+ (gpointer) VIDEO_DISPLAY_KEY "video_view",
+ FALSE, FALSE),
+ GTK_MENU_SEPARATOR,
+
+ GTK_MENU_ENTRY("zoom_in", NULL, _("Zoom in"),
+ GTK_STOCK_ZOOM_IN, '+',
+ G_CALLBACK (zoom_in_changed_cb),
+ (gpointer) VIDEO_DISPLAY_KEY "zoom", FALSE),
+ GTK_MENU_ENTRY("zoom_out", NULL, _("Zoom out"),
+ GTK_STOCK_ZOOM_OUT, '-',
+ G_CALLBACK (zoom_out_changed_cb),
+ (gpointer) VIDEO_DISPLAY_KEY "zoom", FALSE),
+ GTK_MENU_ENTRY("normal_size", NULL, _("Normal size"),
+ GTK_STOCK_ZOOM_100, '0',
+ G_CALLBACK (zoom_normal_changed_cb),
+ (gpointer) VIDEO_DISPLAY_KEY "zoom", FALSE),
+ GTK_MENU_ENTRY("fullscreen", _("_Fullscreen"), _("Switch to fullscreen"),
+ GTK_STOCK_ZOOM_IN, GDK_F11,
+ G_CALLBACK (fullscreen_changed_cb),
+ (gpointer) cw, FALSE),
+
+ GTK_MENU_END
+ };
+
+
+ gtk_build_menu (cw->priv->main_menu,
+ gnomemeeting_menu,
+ cw->priv->accel,
+ cw->priv->statusbar);
+
+ gtk_widget_show_all (GTK_WIDGET (cw->priv->main_menu));
+}
+
+static void
ekiga_call_window_init_gui (EkigaCallWindow *cw)
{
GtkWidget *frame = NULL;
@@ -2029,11 +2305,19 @@ ekiga_call_window_init_gui (EkigaCallWindow *cw)
cw->priv->call_panel_frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (cw->priv->call_panel_frame), GTK_SHADOW_NONE);
event_box = gtk_event_box_new ();
- table = gtk_table_new (3, 5, FALSE);
+ table = gtk_table_new (4, 5, FALSE);
gtk_container_add (GTK_CONTAINER (event_box), table);
gtk_container_add (GTK_CONTAINER (cw->priv->call_panel_frame), event_box);
gtk_container_add (GTK_CONTAINER (cw), cw->priv->call_panel_frame);
+ /* Menu */
+ ekiga_call_window_init_menu (cw);
+ gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (cw->priv->main_menu),
+ 0, 4, 0, 1,
+ (GtkAttachOptions) GTK_EXPAND,
+ (GtkAttachOptions) GTK_EXPAND,
+ 0, 0);
+
/* The widgets toolbar */
cw->priv->call_panel_toolbar = gtk_toolbar_new ();
gtk_toolbar_set_style (GTK_TOOLBAR (cw->priv->call_panel_toolbar), GTK_TOOLBAR_ICONS);
@@ -2042,7 +2326,7 @@ ekiga_call_window_init_gui (EkigaCallWindow *cw)
alignment = gtk_alignment_new (0.0, 0.0, 1.0, 0.0);
gtk_container_add (GTK_CONTAINER (alignment), cw->priv->call_panel_toolbar);
gtk_table_attach (GTK_TABLE (table), alignment,
- 0, 4, 0, 1,
+ 0, 4, 1, 2,
(GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
(GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
0, 0);
@@ -2056,7 +2340,7 @@ ekiga_call_window_init_gui (EkigaCallWindow *cw)
gtk_container_set_border_width (GTK_CONTAINER (cw->priv->video_frame), 0);
gtk_container_add (GTK_CONTAINER (cw->priv->video_frame), cw->priv->main_video_image);
gtk_table_attach (GTK_TABLE (table), GTK_WIDGET (cw->priv->video_frame),
- 0, 4, 1, 2,
+ 0, 4, 2, 3,
(GtkAttachOptions) GTK_EXPAND,
(GtkAttachOptions) GTK_EXPAND,
4, 24);
@@ -2208,7 +2492,7 @@ ekiga_call_window_init_gui (EkigaCallWindow *cw)
alignment = gtk_alignment_new (0.0, 0.0, 1.0, 0.0);
gtk_container_add (GTK_CONTAINER (alignment), cw->priv->main_toolbar);
gtk_table_attach (GTK_TABLE (table), alignment,
- 0, 4, 3, 4,
+ 0, 4, 4, 5,
(GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
(GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
0, 0);
@@ -2231,7 +2515,7 @@ ekiga_call_window_init_gui (EkigaCallWindow *cw)
gtk_container_add (GTK_CONTAINER (cw->priv->statusbar_ebox), cw->priv->statusbar);
gtk_table_attach (GTK_TABLE (table), cw->priv->statusbar_ebox,
- 0, 4, 4, 5,
+ 0, 4, 5, 6,
(GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
(GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
0, 0);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]