From 50fc8ce24ffa90eecd61eafe6fd65cd681ce9a7d Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Fri, 13 Nov 2009 15:02:53 -0500 Subject: [PATCH] [#2431] Popup main window on incoming if applicable --- sflphone-client-gnome/pixmaps/Makefile.am | 1 + .../src/config/preferencesdialog.c | 15 +++--- sflphone-client-gnome/src/dbus/dbus.c | 3 +- sflphone-client-gnome/src/sflphone_const.h | 1 + sflphone-client-gnome/src/statusicon.c | 52 +++++++++++-------- sflphone-client-gnome/src/statusicon.h | 5 ++ 6 files changed, 47 insertions(+), 30 deletions(-) diff --git a/sflphone-client-gnome/pixmaps/Makefile.am b/sflphone-client-gnome/pixmaps/Makefile.am index 33dc526e3f..56a6e20755 100644 --- a/sflphone-client-gnome/pixmaps/Makefile.am +++ b/sflphone-client-gnome/pixmaps/Makefile.am @@ -25,6 +25,7 @@ buttons_DATA = current.svg \ busy.svg \ sflphone.svg \ sflphone_small.svg \ + sflphone_notif.svg \ stock_person.svg \ icon_rec.svg \ rec_call.svg \ diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index b472887b6d..d804865fa4 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -87,10 +87,10 @@ start_hidden( void ) dbus_start_hidden(); } -static void -set_popup_mode( void ) +static void set_popup_mode (GtkWidget *widget, gpointer *userdata) { - dbus_switch_popup_mode(); + if (dbus_popup_mode () || gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + dbus_switch_popup_mode (); } @@ -452,14 +452,15 @@ create_general_settings () gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); GtkWidget* trayItem1 = gtk_radio_button_new_with_mnemonic(NULL, _("_Popup main window on incoming call")); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(trayItem1), dbus_popup_mode() ); - g_signal_connect(G_OBJECT( trayItem1 ), "clicked", G_CALLBACK( set_popup_mode ) , NULL); + g_signal_connect(G_OBJECT (trayItem1), "toggled", G_CALLBACK (set_popup_mode), NULL); gtk_table_attach( GTK_TABLE(table), trayItem1, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - trayItem = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(trayItem1), _("Ne_ver popup main window")); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(trayItem), !dbus_popup_mode() ); + trayItem = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON(trayItem1), _("Ne_ver popup main window")); gtk_table_attach( GTK_TABLE(table), trayItem, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + // Toggle according to the user configuration + dbus_popup_mode () ? gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (trayItem1), TRUE) : gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (trayItem), TRUE); + trayItem = gtk_check_button_new_with_mnemonic(_("Hide SFLphone window on _startup")); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(trayItem), dbus_is_start_hidden() ); g_signal_connect(G_OBJECT( trayItem ) , "clicked" , G_CALLBACK( start_hidden ) , NULL); diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c index 557351e807..7f9f0f7329 100644 --- a/sflphone-client-gnome/src/dbus/dbus.c +++ b/sflphone-client-gnome/src/dbus/dbus.c @@ -64,7 +64,8 @@ incoming_call_cb (DBusGProxy *proxy UNUSED, create_new_call (CALL, CALL_STATE_INCOMING, g_strdup(callID), g_strdup(accountID), peer_name, peer_number, &c); #if GTK_CHECK_VERSION(2,10,0) - status_tray_icon_blink( TRUE ); + status_tray_icon_blink (TRUE); + popup_main_window (); #endif set_timestamp (&c->_time_start); diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h index 89fa9d3b2a..d76373fd71 100644 --- a/sflphone-client-gnome/src/sflphone_const.h +++ b/sflphone-client-gnome/src/sflphone_const.h @@ -29,6 +29,7 @@ */ #define LOGO ICONS_DIR "/sflphone.svg" +#define LOGO_NOTIF ICONS_DIR "/sflphone_notif.svg" #define LOGO_SMALL ICONS_DIR "/sflphone_small.svg" #define CURRENT_CALLS "current_calls" diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c index 9757996a6a..99b8dcc2c6 100644 --- a/sflphone-client-gnome/src/statusicon.c +++ b/sflphone-client-gnome/src/statusicon.c @@ -29,6 +29,16 @@ GtkStatusIcon* status; GtkWidget * show_menu_item; gboolean __minimized = MINIMIZED; + +void popup_main_window (void) +{ + if (__POPUP_WINDOW) + { + gtk_widget_show (get_main_window ()); + set_minimized (FALSE); + } +} + void status_quit ( void * foo UNUSED) { @@ -41,31 +51,27 @@ status_icon_unminimize() gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), TRUE); } -gboolean -main_widget_minimized() +gboolean main_widget_minimized() { return __minimized; } -void -show_hide (void) +void show_hide (void) { - if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(show_menu_item))) - { - gtk_widget_show(GTK_WIDGET(get_main_window())); - set_minimized( !MINIMIZED ); - } - else - { - gtk_widget_hide(GTK_WIDGET(get_main_window())); - set_minimized( MINIMIZED ); - } - + if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(show_menu_item))) + { + gtk_widget_show(GTK_WIDGET(get_main_window())); + set_minimized( !MINIMIZED ); + } + else + { + gtk_widget_hide(GTK_WIDGET(get_main_window())); + set_minimized( MINIMIZED ); + } } -void -status_click (GtkStatusIcon *status_icon UNUSED, void * foo UNUSED) +void status_click (GtkStatusIcon *status_icon UNUSED, void * foo UNUSED) { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(show_menu_item))); @@ -80,8 +86,7 @@ void menu (GtkStatusIcon *status_icon, status_icon, button, activate_time); } -GtkWidget * -create_menu() +GtkWidget* create_menu() { GtkWidget * menu; GtkWidget * menu_items; @@ -129,10 +134,13 @@ show_status_icon() g_free(tip); } -void -status_tray_icon_blink( gboolean active ) +void status_tray_icon_blink (gboolean active) { - gtk_status_icon_set_blinking( status , active ); + // Set a different icon to notify of an event + active ? gtk_status_icon_set_from_file (status, LOGO_NOTIF) : gtk_status_icon_set_from_file (status, LOGO); + // Do not blink anymore ... + // gtk_status_icon_set_blinking (status, active); + } GtkStatusIcon* diff --git a/sflphone-client-gnome/src/statusicon.h b/sflphone-client-gnome/src/statusicon.h index a269bde64d..4a841c4ea0 100644 --- a/sflphone-client-gnome/src/statusicon.h +++ b/sflphone-client-gnome/src/statusicon.h @@ -30,6 +30,11 @@ * @brief The status icon in the system tray. */ +/** + * Popup the main window. Used on incoming calls + */ +void popup_main_window (void); + /** * Create the status icon */ -- GitLab