diff --git a/sflphone-gtk/src/actions.c b/sflphone-gtk/src/actions.c index bc89d83343781535e1f7735886b1d017217d30b4..e29310cd159edddb3bbf9c30733bbebf18e42021 100644 --- a/sflphone-gtk/src/actions.c +++ b/sflphone-gtk/src/actions.c @@ -17,18 +17,18 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <gtk/gtk.h> -#include <string.h> -#include <glib/gprintf.h> -#include <stdlib.h> - +#include <accountlist.h> #include <actions.h> -#include <mainwindow.h> #include <calltree.h> -#include <screen.h> #include <dbus.h> -#include <accountlist.h> +#include <mainwindow.h> +#include <screen.h> +#include <statusicon.h> +#include <gtk/gtk.h> +#include <string.h> +#include <glib/gprintf.h> +#include <stdlib.h> gboolean sflphone_quit () @@ -167,6 +167,7 @@ void sflphone_incoming_call (call_t * c) { call_list_add ( c ); + status_icon_unminimize(); update_call_tree_add(c); } diff --git a/sflphone-gtk/src/statusicon.c b/sflphone-gtk/src/statusicon.c index 1f04479a98ee42b2ff872355b301b1b3a045050d..509dd2a8d04526aa8322b8c9a21e419dd47e1cf3 100644 --- a/sflphone-gtk/src/statusicon.c +++ b/sflphone-gtk/src/statusicon.c @@ -17,14 +17,15 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - #include <gtk/gtk.h> #include <actions.h> #include <mainwindow.h> #include <statusicon.h> GtkStatusIcon* status; +GtkWidget * show_menu_item; gboolean minimized = FALSE; + void status_quit ( void * foo) { @@ -32,7 +33,15 @@ status_quit ( void * foo) } void -activate (GtkStatusIcon *status_icon, void * foo) +status_icon_unminimize() +{ + gtk_widget_show(GTK_WIDGET(get_main_window())); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), FALSE); + minimized = FALSE; +} + +void +show_hide (GtkStatusIcon *status_icon, void * foo) { if(minimized) { @@ -50,7 +59,8 @@ void menu (GtkStatusIcon *status_icon, guint activate_time, GtkWidget * menu) { - gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, button, activate_time); + gtk_menu_popup(GTK_MENU(menu), NULL, NULL, gtk_status_icon_position_menu, + status_icon, button, activate_time); } GtkWidget * @@ -61,12 +71,23 @@ create_menu() menu = gtk_menu_new (); + show_menu_item = gtk_check_menu_item_new_with_mnemonic ("_Show main window"); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), TRUE); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), show_menu_item); + g_signal_connect(G_OBJECT (show_menu_item), "toggled", + G_CALLBACK (show_hide), + NULL); + + menu_items = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_QUIT, get_accel_group()); g_signal_connect_swapped (G_OBJECT (menu_items), "activate", G_CALLBACK (status_quit), NULL); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); - gtk_widget_show (menu_items); + + gtk_widget_show_all (menu); return menu; } @@ -76,7 +97,7 @@ show_status_icon() { status = gtk_status_icon_new_from_file(ICON_DIR "/sflphone.png"); g_signal_connect (G_OBJECT (status), "activate", - G_CALLBACK (activate), + G_CALLBACK (show_hide), NULL); g_signal_connect (G_OBJECT (status), "popup-menu", G_CALLBACK (menu), diff --git a/sflphone-gtk/src/statusicon.h b/sflphone-gtk/src/statusicon.h index 36589153f21400c0b9ff86db7031f473e8cb3ec9..04fea7a67fa08eb7b9015caaf7c7fb9782051bbf 100644 --- a/sflphone-gtk/src/statusicon.h +++ b/sflphone-gtk/src/statusicon.h @@ -25,5 +25,7 @@ * @brief The status icon. */ void show_status_icon(); +void status_icon_unminimize(); + #endif