diff options
-rw-r--r-- | libempathy-gtk/empathy-chat-window.c | 14 | ||||
-rw-r--r-- | libempathy-gtk/empathy-new-message-dialog.c | 65 | ||||
-rw-r--r-- | libempathy-gtk/empathy-status-icon.c | 7 | ||||
-rw-r--r-- | libempathy-gtk/empathy-ui-utils.c | 48 |
4 files changed, 80 insertions, 54 deletions
diff --git a/libempathy-gtk/empathy-chat-window.c b/libempathy-gtk/empathy-chat-window.c index 3d1608df1..d1fb7906f 100644 --- a/libempathy-gtk/empathy-chat-window.c +++ b/libempathy-gtk/empathy-chat-window.c @@ -476,22 +476,12 @@ empathy_chat_window_get_default (void) for (l = chat_windows; l; l = l->next) { EmpathyChatWindow *chat_window; - GtkWidget *dialog; - GdkWindow *window; - gboolean visible; + GtkWidget *dialog; chat_window = l->data; dialog = empathy_chat_window_get_dialog (chat_window); - window = dialog->window; - - g_object_get (dialog, - "visible", &visible, - NULL); - - visible = visible && !(gdk_window_get_state (window) & GDK_WINDOW_STATE_ICONIFIED); - - if (visible) { + if (empathy_window_get_is_visible (GTK_WINDOW (GTK_WINDOW (dialog)))) { /* Found a visible window on this desktop */ return chat_window; } diff --git a/libempathy-gtk/empathy-new-message-dialog.c b/libempathy-gtk/empathy-new-message-dialog.c index 908f8f16e..7a3fd9731 100644 --- a/libempathy-gtk/empathy-new-message-dialog.c +++ b/libempathy-gtk/empathy-new-message-dialog.c @@ -31,6 +31,7 @@ #include <libmissioncontrol/mc-account.h> #include <libmissioncontrol/mission-control.h> +#include <libempathy/empathy-contact-factory.h> #include <libempathy/empathy-debug.h> #include <libempathy/empathy-utils.h> @@ -46,23 +47,32 @@ typedef struct { GtkWidget *table_contact; GtkWidget *account_chooser; GtkWidget *entry_id; + GtkWidget *button_validate; + GtkWidget *button_voip; } EmpathyNewMessageDialog; - static void new_message_dialog_response_cb (GtkWidget *widget, - gint response, + gint response, EmpathyNewMessageDialog *dialog) { + McAccount *account; + const gchar *id; + + account = empathy_account_chooser_get_account (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser)); + id = gtk_entry_get_text (GTK_ENTRY (dialog->entry_id)); + if (!account || G_STR_EMPTY (id)) { + if (account) { + g_object_unref (account); + } + gtk_widget_destroy (widget); + return; + } + if (response == GTK_RESPONSE_OK) { MissionControl *mc; - McAccount *account; - const gchar *id; - account = empathy_account_chooser_get_account (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser)); - id = gtk_entry_get_text (GTK_ENTRY (dialog->entry_id)); mc = empathy_mission_control_new (); - mission_control_request_channel_with_string_handle (mc, account, TP_IFACE_CHANNEL_TYPE_TEXT, @@ -70,13 +80,46 @@ new_message_dialog_response_cb (GtkWidget *widget, TP_HANDLE_TYPE_CONTACT, NULL, NULL); g_object_unref (mc); - g_object_unref (account); + } + else if (response == 3) { + EmpathyContactFactory *factory; + EmpathyContact *contact = NULL; + + factory = empathy_contact_factory_new (); + contact = empathy_contact_factory_get_from_id (factory, + account, + id); + if (contact) { + empathy_call_contact (contact); + } else { + empathy_debug (DEBUG_DOMAIN, + "Contact ID %s does not exists", + id); + } + + g_object_unref (contact); + g_object_unref (factory); } + g_object_unref (account); gtk_widget_destroy (widget); } static void +new_message_change_state_button_cb (GtkEditable *editable, + EmpathyNewMessageDialog *dialog) +{ + const gchar *id; + gboolean sensitive; + + id = gtk_entry_get_text (GTK_ENTRY (editable)); + sensitive = !G_STR_EMPTY (id); + + gtk_widget_set_sensitive(dialog->button_validate, sensitive); + gtk_widget_set_sensitive(dialog->button_voip, sensitive); +} + +static void new_message_dialog_destroy_cb (GtkWidget *widget, EmpathyNewMessageDialog *dialog) { @@ -102,12 +145,15 @@ empathy_new_message_dialog_show (GtkWindow *parent) "new_message_dialog", &dialog->dialog, "table_contact", &dialog->table_contact, "entry_id", &dialog->entry_id, + "button_validate", &dialog->button_validate, + "button_voip",&dialog->button_voip, NULL); empathy_glade_connect (glade, dialog, "new_message_dialog", "destroy", new_message_dialog_destroy_cb, "new_message_dialog", "response", new_message_dialog_response_cb, + "entry_id", "changed", new_message_change_state_button_cb, NULL); g_object_add_weak_pointer (G_OBJECT (dialog->dialog), (gpointer) &dialog); @@ -129,6 +175,9 @@ empathy_new_message_dialog_show (GtkWindow *parent) GTK_WINDOW (parent)); } + gtk_widget_set_sensitive(dialog->button_validate, FALSE); + gtk_widget_set_sensitive(dialog->button_voip, FALSE); + gtk_widget_show (dialog->dialog); return dialog->dialog; diff --git a/libempathy-gtk/empathy-status-icon.c b/libempathy-gtk/empathy-status-icon.c index 98c60ff64..0fd6c0d67 100644 --- a/libempathy-gtk/empathy-status-icon.c +++ b/libempathy-gtk/empathy-status-icon.c @@ -422,16 +422,15 @@ status_icon_set_visibility (EmpathyStatusIcon *icon, priv = GET_PRIV (icon); + empathy_conf_set_bool (empathy_conf_get (), + EMPATHY_PREFS_UI_MAIN_WINDOW_HIDDEN, !visible); + if (!visible) { empathy_window_iconify (priv->window, priv->icon); - empathy_conf_set_bool (empathy_conf_get (), - EMPATHY_PREFS_UI_MAIN_WINDOW_HIDDEN, TRUE); } else { GList *accounts; empathy_window_present (GTK_WINDOW (priv->window), TRUE); - empathy_conf_set_bool (empathy_conf_get (), - EMPATHY_PREFS_UI_MAIN_WINDOW_HIDDEN, FALSE); /* Show the accounts dialog if there is no enabled accounts */ accounts = mc_accounts_list_by_enabled (TRUE); diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c index 16f0116de..6f1b5a857 100644 --- a/libempathy-gtk/empathy-ui-utils.c +++ b/libempathy-gtk/empathy-ui-utils.c @@ -1215,28 +1215,25 @@ empathy_text_iter_backward_search (const GtkTextIter *iter, return retval; } -static gboolean -window_get_is_on_current_workspace (GtkWindow *window) +gboolean +empathy_window_get_is_visible (GtkWindow *window) { - GdkWindow *gdk_window; + GdkWindowState state; + GdkWindow *gdk_window; + + g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE); gdk_window = GTK_WIDGET (window)->window; - if (gdk_window) { - return !(gdk_window_get_state (gdk_window) & - GDK_WINDOW_STATE_ICONIFIED); - } else { + if (!gdk_window) { return FALSE; } -} -/* Checks if the window is visible as in visible on the current workspace. */ -gboolean -empathy_window_get_is_visible (GtkWindow *window) -{ - g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE); + state = gdk_window_get_state (gdk_window); + if (state & (GDK_WINDOW_STATE_WITHDRAWN | GDK_WINDOW_STATE_ICONIFIED)) { + return FALSE; + } - return GTK_WIDGET_VISIBLE (GTK_WIDGET (window)) && - window_get_is_on_current_workspace (window); + return TRUE; } void @@ -1265,38 +1262,29 @@ empathy_window_iconify (GtkWindow *window, GtkStatusIcon *status_icon) gtk_window_set_skip_taskbar_hint (window, TRUE); gtk_window_iconify (window); - } /* Takes care of moving the window to the current workspace. */ void empathy_window_present (GtkWindow *window, - gboolean steal_focus) + gboolean steal_focus) { - gboolean on_current; - guint32 timestamp; + guint32 timestamp; - g_return_if_fail (window != NULL); + g_return_if_fail (GTK_IS_WINDOW (window)); /* There are three cases: hidden, visible, visible on another * workspace. */ - on_current = window_get_is_on_current_workspace (window); - - if ( GTK_WIDGET_VISIBLE (GTK_WIDGET (window)) && !on_current) { + if (!empathy_window_get_is_visible (window)) { /* Hide it so present brings it to the current workspace. */ gtk_widget_hide (GTK_WIDGET (window)); } - gtk_window_set_skip_taskbar_hint (window, FALSE); - timestamp = gtk_get_current_event_time (); - if (steal_focus && timestamp != GDK_CURRENT_TIME) { - gtk_window_present_with_time (window, timestamp); - } else { - gtk_window_present (window); - } + gtk_window_set_skip_taskbar_hint (window, FALSE); + gtk_window_present_with_time (window, timestamp); } GtkWindow * |