Hi,

Here is a patch that improves a bit notebook tabs with GTK2. It:
 - Groups the creation of tab labels into one function (the code was
duplicated at two places before)
 - Adds a file icon in front of the label

Here are some screenshots:

http://www.silent-blade.org/misc/gvim-notebook-before.png
http://www.silent-blade.org/misc/gvim-notebook-after.png

Comments are welcome :-)

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

--- Vim_orig/vim/src/gui_gtk_x11.c	2008-03-29 14:30:03.000000000 +0100
+++ Vim/vim/src/gui_gtk_x11.c	2008-04-30 19:56:10.000000000 +0200
@@ -3308,13 +3308,50 @@
 }
 
 /*
+ * Create a new label for the tabline
+ */
+    GtkWidget*
+gui_mch_create_label(void)
+{
+    GtkWidget	    *tab_box;
+    GtkWidget	    *label;
+
+#ifdef HAVE_GTK2
+    GtkWidget	    *icon;
+
+    tab_box = gtk_hbox_new(FALSE, 4);
+    gtk_widget_show(tab_box);
+
+    icon = gtk_image_new_from_stock(GTK_STOCK_FILE, GTK_ICON_SIZE_MENU);
+    gtk_widget_show(icon);
+    gtk_misc_set_padding(GTK_MISC(icon), 0, 2);
+    gtk_box_pack_start(GTK_BOX(tab_box), icon, FALSE, FALSE, 2);
+
+    label = gtk_label_new("-Empty-");
+    gtk_widget_show(label);
+    gtk_misc_set_padding(GTK_MISC(label), 0, 2);
+    gtk_box_pack_start(GTK_BOX(tab_box), label, TRUE, TRUE, 2);
+#else
+    tab_box = gtk_event_box_new();
+    gtk_widget_show(tab_box);
+    label = gtk_label_new("-Empty-");
+    gtk_misc_set_padding(GTK_MISC(label), 2, 2);
+    gtk_container_add(GTK_CONTAINER(tab_box), label);
+    gtk_widget_show(label);
+#endif
+
+    return tab_box;
+}
+
+
+/*
  * Update the labels of the tabline.
  */
     void
 gui_mch_update_tabline(void)
 {
     GtkWidget	    *page;
-    GtkWidget	    *event_box;
+    GtkWidget	    *tab_box;
     GtkWidget	    *label;
     tabpage_T	    *tp;
     int		    nr = 0;
@@ -3341,21 +3378,29 @@
 	    /* Add notebook page */
 	    page = gtk_vbox_new(FALSE, 0);
 	    gtk_widget_show(page);
-	    event_box = gtk_event_box_new();
-	    gtk_widget_show(event_box);
-	    label = gtk_label_new("-Empty-");
-	    gtk_misc_set_padding(GTK_MISC(label), 2, 2);
-	    gtk_container_add(GTK_CONTAINER(event_box), label);
-	    gtk_widget_show(label);
+	    tab_box = gui_mch_create_label();
 	    gtk_notebook_insert_page(GTK_NOTEBOOK(gui.tabline),
 		    page,
-		    event_box,
+		    tab_box,
 		    nr++);
 	}
 
-	event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gui.tabline), page);
-	gtk_object_set_user_data(GTK_OBJECT(event_box), (gpointer)tab_num);
-	label = GTK_BIN(event_box)->child;
+	tab_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gui.tabline), page);
+	gtk_object_set_user_data(GTK_OBJECT(tab_box), (gpointer)tab_num);
+
+#ifdef HAVE_GTK2
+        {
+            GList	    *children;
+
+            children = gtk_container_get_children(GTK_CONTAINER(tab_box));
+            label = g_list_nth_data(children, 1);
+            g_list_free(children);
+        }
+#else
+        label = GTK_BIN(event_box)->child;
+#endif
+
+
 	get_tabline_label(tp, FALSE);
 	labeltext = CONVERT_TO_UTF8(NameBuff);
 	gtk_label_set_text(GTK_LABEL(label), (const char *)labeltext);
@@ -3363,7 +3408,7 @@
 
 	get_tabline_label(tp, TRUE);
 	labeltext = CONVERT_TO_UTF8(NameBuff);
-	gtk_tooltips_set_tip(GTK_TOOLTIPS(tabline_tooltip), event_box,
+	gtk_tooltips_set_tip(GTK_TOOLTIPS(tabline_tooltip), tab_box,
 			     (const char *)labeltext, NULL);
 	CONVERT_TO_UTF8_FREE(labeltext);
     }
@@ -3701,20 +3746,16 @@
     gtk_tooltips_enable(GTK_TOOLTIPS(tabline_tooltip));
 
     {
-	GtkWidget *page, *label, *event_box;
+	GtkWidget *page, *tab_box;
 
 	/* Add the first tab. */
 	page = gtk_vbox_new(FALSE, 0);
 	gtk_widget_show(page);
+        tab_box = gui_mch_create_label();
+
 	gtk_container_add(GTK_CONTAINER(gui.tabline), page);
-	label = gtk_label_new("-Empty-");
-	gtk_widget_show(label);
-	event_box = gtk_event_box_new();
-	gtk_widget_show(event_box);
-	gtk_object_set_user_data(GTK_OBJECT(event_box), (gpointer)1);
-	gtk_misc_set_padding(GTK_MISC(label), 2, 2);
-	gtk_container_add(GTK_CONTAINER(event_box), label);
-	gtk_notebook_set_tab_label(GTK_NOTEBOOK(gui.tabline), page, event_box);
+	gtk_object_set_user_data(GTK_OBJECT(tab_box), (gpointer)1);
+	gtk_notebook_set_tab_label(GTK_NOTEBOOK(gui.tabline), page, tab_box);
     }
 
     gtk_signal_connect(GTK_OBJECT(gui.tabline), "switch_page",

Raspunde prin e-mail lui