aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy-gtk/empathy-chat-window.c14
-rw-r--r--libempathy-gtk/empathy-new-message-dialog.c65
-rw-r--r--libempathy-gtk/empathy-status-icon.c7
-rw-r--r--libempathy-gtk/empathy-ui-utils.c48
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 *