forwarded 361114 http://bugzilla.gnome.org/show_bug.cgi?id=324426
tag 361114 patch
thanks

This bug has already been reported upstream as 361114.  I verified
that the patch attached to the upstream bug report fixes this bug, so
I'm attaching the patch here and tagging the bug appropriately.

-- 
Matt
diff -ru gnome-terminal-2.14.0-orig/ChangeLog gnome-terminal-2.14.0/ChangeLog
--- gnome-terminal-2.14.0-orig/ChangeLog        2006-04-10 15:06:09.000000000 
-0700
+++ gnome-terminal-2.14.0/ChangeLog     2006-04-10 15:07:08.000000000 -0700
@@ -1,3 +1,8 @@
+2006-02-20  Tony Tsui  <[EMAIL PROTECTED]>
+
+       * src/terminal-window.c: Resize the terminal window after a tab is
+         removed. Closes bug #324426.
+
 2006-03-12  Guilherme de S. Pastore  <[EMAIL PROTECTED]>
 
        * NEWS: updated.
diff -ru gnome-terminal-2.14.0-orig/src/terminal-notebook.c 
gnome-terminal-2.14.0/src/terminal-notebook.c
--- gnome-terminal-2.14.0-orig/src/terminal-notebook.c  2006-04-10 
15:06:09.000000000 -0700
+++ gnome-terminal-2.14.0/src/terminal-notebook.c       2006-04-10 
15:06:45.000000000 -0700
@@ -120,6 +120,16 @@
                   G_TYPE_NONE,
                   1,
                   TERMINAL_TYPE_SCREEN);
+  signals[TAB_DELETE] =
+    g_signal_new ("tab_delete",
+                  G_OBJECT_CLASS_TYPE (object_class),
+                  G_SIGNAL_RUN_FIRST,
+                  G_STRUCT_OFFSET (TerminalNotebookClass, tab_delete),
+                  NULL, NULL,
+                  g_cclosure_marshal_VOID__OBJECT,
+                  G_TYPE_NONE,
+                  1,
+                  TERMINAL_TYPE_SCREEN);
   signals[TAB_REMOVED] =
     g_signal_new ("tab_removed",
                   G_OBJECT_CLASS_TYPE (object_class),
@@ -837,6 +847,8 @@
    */
   g_object_ref (screen);
 
+  g_signal_emit (G_OBJECT (nb), signals[TAB_DELETE], 0, screen);
+
   gtk_notebook_remove_page (GTK_NOTEBOOK (nb), position);
 
   update_tabs_visibility (nb, FALSE);
diff -ru gnome-terminal-2.14.0-orig/src/terminal-window.c 
gnome-terminal-2.14.0/src/terminal-window.c
--- gnome-terminal-2.14.0-orig/src/terminal-window.c    2006-04-10 
15:06:09.000000000 -0700
+++ gnome-terminal-2.14.0/src/terminal-window.c 2006-04-10 15:06:45.000000000 
-0700
@@ -71,6 +71,8 @@
   GtkClipboard *clipboard;
   int old_char_width;
   int old_char_height;
+  int old_grid_width;
+  int old_grid_height;
   void *old_geometry_widget; /* only used for pointer value as it may be freed 
*/
   GConfClient *conf;
   guint notify_id;
@@ -124,6 +126,10 @@
                                              TerminalScreen  *screen,
                                              TerminalWindow  *window);
 
+static void notebook_tab_delete_callback   (GtkWidget       *notebook,
+                                            TerminalScreen  *screen,
+                                            TerminalWindow  *window);
+
 static void notebook_tab_removed_callback   (GtkWidget       *notebook,
                                              TerminalScreen  *screen,
                                              TerminalWindow  *window);
@@ -820,6 +826,11 @@
                           window);
 
   g_signal_connect_after (G_OBJECT (window->priv->notebook),
+                          "tab_delete",
+                          G_CALLBACK (notebook_tab_delete_callback),
+                          window);
+  
+  g_signal_connect_after (G_OBJECT (window->priv->notebook),
                           "tab_removed",
                           G_CALLBACK (notebook_tab_removed_callback),
                           window);
@@ -1433,10 +1444,6 @@
 {
   g_return_if_fail (terminal_screen_get_window (screen) == window);
 
-  window->priv->terms = g_list_remove (window->priv->terms, screen);
-  
-  terminal_screen_set_window (screen, NULL);
-  
   terminal_notebook_remove_tab (TERMINAL_NOTEBOOK (window->priv->notebook),
                                 screen);
 }
@@ -1811,17 +1818,40 @@
 }
 
 static void
+notebook_tab_delete_callback (GtkWidget       *notebook,
+                               TerminalScreen  *screen,
+                               TerminalWindow  *window)
+{  
+  /* If we are going to delete the active tab we need to record its grid width
+   * and height so the terminal window will be resized correctly after the tab
+   * has been removed. The cases when this is important is when the window
+   * size will change because:
+   *  - tabs will be hidden because only one terminal remain
+   *  - the tab being deleted has been zoomed in/out
+   */
+  if (window->priv->active_term == screen)
+    {
+      GtkWidget *old_active_widget;
+      
+      old_active_widget = terminal_screen_get_widget (screen);
+      terminal_widget_get_size (old_active_widget,
+                                &window->priv->old_grid_width,
+                                &window->priv->old_grid_height);
+    }
+  else
+    {
+      window->priv->old_grid_width = -1;
+      window->priv->old_grid_width = -1;
+    }
+}
+
+static void
 notebook_tab_removed_callback (GtkWidget       *notebook,
                                TerminalScreen  *screen,
                                TerminalWindow  *window)
 {  
-  /* Called from terminal_notebook_move_tab() */
-  if (find_screen (window, screen) != NULL) {
-    g_assert (terminal_screen_get_window (screen) == window);
-  
-    window->priv->terms = g_list_remove (window->priv->terms, screen);
-    terminal_screen_set_window (screen, NULL);
-  }
+  window->priv->terms = g_list_remove (window->priv->terms, screen);
+  terminal_screen_set_window (screen, NULL);
   
   g_signal_handlers_disconnect_by_func (G_OBJECT (screen),
                                         G_CALLBACK (profile_set_callback),
@@ -1848,7 +1878,17 @@
 
   /* Close window if no more terminals */
   if (window->priv->terms == NULL)
-    gtk_widget_destroy (GTK_WIDGET (window));
+    {
+      gtk_widget_destroy (GTK_WIDGET (window));
+      return;
+    }    
+
+#ifdef DEBUG_GEOMETRY
+    g_print ("setting size with forced grid after removing a terminal\n");
+#endif
+    terminal_window_set_size_force_grid (window, window->priv->active_term,
+                                         TRUE, window->priv->old_grid_width,
+                                         window->priv->old_grid_height);
 }
 
 static void

Attachment: signature.asc
Description: Digital signature

Reply via email to