]> git.0d.be Git - empathy.git/blobdiff - src/empathy-ft-manager.c
Merge branch 'irc-dialog-579800'
[empathy.git] / src / empathy-ft-manager.c
index ed2228d16426504e2a49dddd8781b1df34b37787..98e58d4f318ce7d632b2bd1cb3938eef56182e06 100644 (file)
@@ -110,8 +110,10 @@ ft_manager_format_interval (gint interval)
   secs = interval;
 
   if (hours > 0)
+    /* Translators: time left, when it is more than one hour */
     return g_strdup_printf (_("%u:%02u.%02u"), hours, mins, secs);
   else
+    /* Translators: time left, when is is less than one hour */
     return g_strdup_printf (_("%02u.%02u"), mins, secs);
 }
 
@@ -249,7 +251,7 @@ ft_manager_update_ft_row (EmpathyFTManager *ft_manager,
 
           }
         else
-          second_line = g_strdup (_("Waiting the other participant's response"));
+          second_line = g_strdup (_("Waiting for the other participant's response"));
 
       remaining = empathy_tp_file_get_remaining_time (tp_file);
       break;
@@ -482,51 +484,6 @@ ft_manager_state_changed_cb (EmpathyTpFile *tp_file,
     ft_manager_update_ft_row (ft_manager, tp_file);
 }
 
-static void
-ft_manager_add_tp_file_to_list (EmpathyFTManager *ft_manager,
-                                EmpathyTpFile *tp_file)
-{
-  GtkTreeRowReference *row_ref;
-  GtkTreeIter iter;
-  GtkTreeSelection *selection;
-  GtkTreePath *path;
-  GIcon *icon;
-  const gchar *content_type;
-
-  /* Get the icon name from the mime-type of the file. */
-  content_type = empathy_tp_file_get_content_type (tp_file);
-  icon = g_content_type_get_icon (content_type);
-
-  /* Append the ft in the store */
-  gtk_list_store_insert_with_values (GTK_LIST_STORE (ft_manager->priv->model),
-      &iter, G_MAXINT, COL_FT_OBJECT, tp_file, COL_ICON, icon, -1);
-
-  g_object_unref (icon);
-
-  /* Insert the new row_ref in the hash table  */
-  path = gtk_tree_model_get_path (GTK_TREE_MODEL (ft_manager->priv->model),
-      &iter);
-  row_ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (
-      ft_manager->priv->model), path);
-  gtk_tree_path_free (path);
-  g_hash_table_insert (ft_manager->priv->tp_file_to_row_ref,
-      g_object_ref (tp_file), row_ref);
-
-  /* Select the new row */
-  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (
-      ft_manager->priv->treeview));
-  gtk_tree_selection_select_iter (selection, &iter);
-
-  /* Update the row with the initial values, and keep track of changes */
-  ft_manager_update_ft_row (ft_manager, tp_file);
-  g_signal_connect (tp_file, "notify::state",
-      G_CALLBACK (ft_manager_state_changed_cb), ft_manager);
-  g_signal_connect (tp_file, "notify::transferred-bytes",
-      G_CALLBACK (ft_manager_transferred_bytes_changed_cb), ft_manager);
-
-  gtk_window_present (GTK_WINDOW (ft_manager->priv->window));
-}
-
 static void
 ft_manager_clear (EmpathyFTManager *ft_manager)
 {
@@ -624,13 +581,16 @@ static void
 ft_manager_destroy_cb (GtkWidget *widget,
                        EmpathyFTManager *ft_manager)
 {
-  g_object_unref (ft_manager);
+  ft_manager->priv->window = NULL;
+  if (ft_manager->priv->save_geometry_id != 0)
+    g_source_remove (ft_manager->priv->save_geometry_id);
+  g_hash_table_remove_all (ft_manager->priv->tp_file_to_row_ref);
 }
 
 static void
 ft_manager_build_ui (EmpathyFTManager *ft_manager)
 {
-  GladeXML *glade;
+  GtkBuilder *gui;
   gint x, y, w, h;
   GtkTreeView *view;
   GtkListStore *liststore;
@@ -639,9 +599,11 @@ ft_manager_build_ui (EmpathyFTManager *ft_manager)
   GtkTreeSelection *selection;
   gchar *filename;
 
-  filename = empathy_file_lookup ("empathy-ft-manager.glade", "src");
-  glade = empathy_glade_get_file (filename,
-      "ft_manager_dialog", NULL,
+  if (ft_manager->priv->window != NULL)
+    return;
+
+  filename = empathy_file_lookup ("empathy-ft-manager.ui", "src");
+  gui = empathy_builder_get_file (filename,
       "ft_manager_dialog", &ft_manager->priv->window,
       "ft_list", &ft_manager->priv->treeview,
       "open_button", &ft_manager->priv->open_button,
@@ -649,14 +611,14 @@ ft_manager_build_ui (EmpathyFTManager *ft_manager)
       NULL);
   g_free (filename);
 
-  empathy_glade_connect (glade, ft_manager,
+  empathy_builder_connect (gui, ft_manager,
       "ft_manager_dialog", "destroy", ft_manager_destroy_cb,
       "ft_manager_dialog", "response", ft_manager_response_cb,
       "ft_manager_dialog", "delete-event", ft_manager_delete_event_cb,
       "ft_manager_dialog", "configure-event", ft_manager_configure_event_cb,
       NULL);
 
-  g_object_unref (glade);
+  g_object_unref (gui);
 
   /* Window geometry. */
   empathy_geometry_load ("ft-manager", &x, &y, &w, &h);
@@ -670,7 +632,7 @@ ft_manager_build_ui (EmpathyFTManager *ft_manager)
 
   if (w > 0 && h > 0)
     {
-      /* Use the defaults from the glade file if we don't have
+      /* Use the defaults from the ui file if we don't have
        * good w, h geometry. */
       gtk_window_resize (GTK_WINDOW (ft_manager->priv->window), w, h);
     }
@@ -749,10 +711,10 @@ empathy_ft_manager_finalize (GObject *object)
 
   DEBUG ("%p", object);
 
-  g_hash_table_destroy (ft_manager->priv->tp_file_to_row_ref);
+  if (ft_manager->priv->window)
+    gtk_widget_destroy (ft_manager->priv->window);
 
-  if (ft_manager->priv->save_geometry_id != 0)
-    g_source_remove (ft_manager->priv->save_geometry_id);
+  g_hash_table_destroy (ft_manager->priv->tp_file_to_row_ref);
 
   G_OBJECT_CLASS (empathy_ft_manager_parent_class)->finalize (object);
 }
@@ -770,8 +732,6 @@ empathy_ft_manager_init (EmpathyFTManager *ft_manager)
   priv->tp_file_to_row_ref = g_hash_table_new_full (g_direct_hash,
       g_direct_equal, (GDestroyNotify) g_object_unref,
       (GDestroyNotify) gtk_tree_row_reference_free);
-
-  ft_manager_build_ui (ft_manager);
 }
 
 static GObject *
@@ -834,9 +794,58 @@ empathy_ft_manager_get_dialog (EmpathyFTManager *ft_manager)
 {
   g_return_val_if_fail (EMPATHY_IS_FT_MANAGER (ft_manager), NULL);
 
+  ft_manager_build_ui (ft_manager);
+
   return ft_manager->priv->window;
 }
 
+static void
+ft_manager_add_tp_file_to_list (EmpathyFTManager *ft_manager,
+                                EmpathyTpFile *tp_file)
+{
+  GtkTreeRowReference *row_ref;
+  GtkTreeIter iter;
+  GtkTreeSelection *selection;
+  GtkTreePath *path;
+  GIcon *icon;
+  const gchar *content_type;
+
+  ft_manager_build_ui (ft_manager);
+
+  /* Get the icon name from the mime-type of the file. */
+  content_type = empathy_tp_file_get_content_type (tp_file);
+  icon = g_content_type_get_icon (content_type);
+
+  /* Append the ft in the store */
+  gtk_list_store_insert_with_values (GTK_LIST_STORE (ft_manager->priv->model),
+      &iter, G_MAXINT, COL_FT_OBJECT, tp_file, COL_ICON, icon, -1);
+
+  g_object_unref (icon);
+
+  /* Insert the new row_ref in the hash table  */
+  path = gtk_tree_model_get_path (GTK_TREE_MODEL (ft_manager->priv->model),
+      &iter);
+  row_ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (
+      ft_manager->priv->model), path);
+  gtk_tree_path_free (path);
+  g_hash_table_insert (ft_manager->priv->tp_file_to_row_ref,
+      g_object_ref (tp_file), row_ref);
+
+  /* Select the new row */
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (
+      ft_manager->priv->treeview));
+  gtk_tree_selection_select_iter (selection, &iter);
+
+  /* Update the row with the initial values, and keep track of changes */
+  ft_manager_update_ft_row (ft_manager, tp_file);
+  g_signal_connect (tp_file, "notify::state",
+      G_CALLBACK (ft_manager_state_changed_cb), ft_manager);
+  g_signal_connect (tp_file, "notify::transferred-bytes",
+      G_CALLBACK (ft_manager_transferred_bytes_changed_cb), ft_manager);
+
+  gtk_window_present (GTK_WINDOW (ft_manager->priv->window));
+}
+
 typedef struct {
   EmpathyFTManager *ft_manager;
   EmpathyTpFile *tp_file;
@@ -1009,6 +1018,7 @@ ft_manager_display_accept_dialog (EmpathyFTManager *ft_manager,
 
   gtk_message_dialog_format_secondary_text
       (GTK_MESSAGE_DIALOG (dialog),
+       /* Translators: the first %s is the file name, the second %s is the file size */
        _("Do you want to accept the file \"%s\" (%s)?"),
        filename, size_str);