diff --git a/sflphone-gtk/src/menus.c b/sflphone-gtk/src/menus.c index f0adf554d67d4f734a1065a49bdb493b4b074d11..3f94ec72d77375df21ee887532cbf09ff8b2a3ac 100644 --- a/sflphone-gtk/src/menus.c +++ b/sflphone-gtk/src/menus.c @@ -165,6 +165,13 @@ call_quit ( void * foo) sflphone_quit(); } +static void +call_minimize ( void * foo) +{ + gtk_widget_hide(GTK_WIDGET( get_main_window() )); + set_minimized( !MAIN_WINDOW_SHOW ); +} + static void call_hold (void* foo) { @@ -240,9 +247,23 @@ create_call_menu() NULL); gtk_widget_show (menu_items); + // Separator menu_items = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + // Close menu to minimize the main window to the system tray + menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_CLOSE, get_accel_group()); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect_swapped (G_OBJECT (menu_items), "activate", + G_CALLBACK (call_minimize), + NULL); + gtk_widget_show (menu_items); + + // Separator + menu_items = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + + // Quit Menu - quit SFLphone menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_QUIT, get_accel_group()); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); g_signal_connect_swapped (G_OBJECT (menu_items), "activate", diff --git a/sflphone-gtk/src/statusicon.c b/sflphone-gtk/src/statusicon.c index e72c807da36763c5765eabe3818715ce4b99ee01..490673d421e6c2253f1fb68664fe2ced77c8ed75 100644 --- a/sflphone-gtk/src/statusicon.c +++ b/sflphone-gtk/src/statusicon.c @@ -25,7 +25,7 @@ GtkStatusIcon* status; GtkWidget * show_menu_item; -gboolean minimized = FALSE; +gboolean __minimized = MAIN_WINDOW_SHOW; void status_quit ( void * foo) @@ -39,16 +39,33 @@ status_icon_unminimize() gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), TRUE); } +gboolean +main_widget_minimized() +{ + return __minimized; +} + void -show_hide (GtkWidget *menu, void * foo) +show_hide (void) { - if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(show_menu_item))) + /*if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(show_menu_item))) { gtk_widget_show(GTK_WIDGET(get_main_window())); } else { gtk_widget_hide(GTK_WIDGET(get_main_window())); + }*/ + + if( main_widget_minimized() ) + { + gtk_widget_show(GTK_WIDGET(get_main_window())); + set_minimized(MAIN_WINDOW_SHOW) ; + } + else + { + gtk_widget_hide(GTK_WIDGET(get_main_window())); + set_minimized(!MAIN_WINDOW_SHOW) ; } } @@ -126,3 +143,9 @@ get_status_icon( void ) { return status; } + +void +set_minimized( gboolean state) +{ + __minimized = state ; +} diff --git a/sflphone-gtk/src/statusicon.h b/sflphone-gtk/src/statusicon.h index 7d21df2231fa3591bfebaa747af05580fb94ca2f..78964048e4b2b6705c794a8785e3ae4b0aa29c4e 100644 --- a/sflphone-gtk/src/statusicon.h +++ b/sflphone-gtk/src/statusicon.h @@ -20,12 +20,17 @@ #ifndef __STATUSICON_H__ #define __STATUSICON_H__ +#define MAIN_WINDOW_SHOW TRUE + #include <gtk/gtk.h> /** @file statusicon.h * @brief The status icon. */ + void show_status_icon(); void status_icon_unminimize(); +gboolean main_widget_minimized(); +void set_minimized( gboolean state ); void status_tray_icon_blink( gboolean active ); GtkStatusIcon* get_status_icon( void );