]> git.0d.be Git - empathy.git/commitdiff
Simplify empaty_window_present, empathy_window_iconify and empathy_window_is_visible...
authorXavier Claessens <xclaesse@src.gnome.org>
Thu, 20 Dec 2007 13:39:37 +0000 (13:39 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Thu, 20 Dec 2007 13:39:37 +0000 (13:39 +0000)
svn path=/trunk/; revision=491

libempathy-gtk/empathy-chat-window.c
libempathy-gtk/empathy-new-message-dialog.c
libempathy-gtk/empathy-status-icon.c
libempathy-gtk/empathy-ui-utils.c

index 3d1608df18a6711575182b6ff4d918f77371e95a..d1fb7906f806e55646dee1be06907c7914b3f046 100644 (file)
@@ -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;
                }
index 908f8f16ee2ab6f7027eec85ea0dab4111f9e156..7a3fd9731ed143872c8caf95f537e6c401432528 100644 (file)
@@ -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,12 +80,45 @@ 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;
index 98c60ff64559d95d25d948c1e0e3f70da91cd129..0fd6c0d67e4459c26749e7080c7e693823228f0f 100644 (file)
@@ -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);
index 16f0116dee43139e8601eea23577a9a637efabf7..6f1b5a857716db32ade22564657bd381eb38ce54 100644 (file)
@@ -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 *