diff src/gui_gtk_x11.c @ 851:e73f2978bd40 v7.0f04

updated for version 7.0f04
author vimboss
date Fri, 28 Apr 2006 22:41:43 +0000
parents db44f7b81373
children 8cd729851562
line wrap: on
line diff
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -3138,36 +3138,35 @@ tabline_menu_handler(GtkMenuItem *item, 
 	gtk_main_quit();
 }
 
+    static void
+add_tabline_menu_item(GtkWidget *menu, char_u *text, int resp)
+{
+    GtkWidget	*item;
+    char_u	*utf_text;
+
+    utf_text = CONVERT_TO_UTF8(text);
+    item = gtk_menu_item_new_with_label((const char *)utf_text);
+    gtk_widget_show(item);
+    CONVERT_TO_UTF8_FREE(utf_text);
+
+    gtk_container_add(GTK_CONTAINER(menu), item);
+    gtk_signal_connect(GTK_OBJECT(item), "activate",
+	    GTK_SIGNAL_FUNC(tabline_menu_handler),
+	    (gpointer)resp);
+}
+
 /*
  * Create a menu for the tab line.
  */
     static GtkWidget *
 create_tabline_menu(void)
 {
-    GtkWidget *menu, *item;
+    GtkWidget *menu;
 
     menu = gtk_menu_new();
-
-    item = gtk_menu_item_new_with_label(_("Close"));
-    gtk_widget_show(item);
-    gtk_container_add(GTK_CONTAINER(menu), item);
-    gtk_signal_connect(GTK_OBJECT(item), "activate",
-	    GTK_SIGNAL_FUNC(tabline_menu_handler),
-	    (gpointer)TABLINE_MENU_CLOSE);
-
-    item = gtk_menu_item_new_with_label(_("New tab"));
-    gtk_widget_show(item);
-    gtk_container_add(GTK_CONTAINER(menu), item);
-    gtk_signal_connect(GTK_OBJECT(item), "activate",
-	    GTK_SIGNAL_FUNC(tabline_menu_handler),
-	    (gpointer)TABLINE_MENU_NEW);
-
-    item = gtk_menu_item_new_with_label(_("Open Tab..."));
-    gtk_widget_show(item);
-    gtk_container_add(GTK_CONTAINER(menu), item);
-    gtk_signal_connect(GTK_OBJECT(item), "activate",
-	    GTK_SIGNAL_FUNC(tabline_menu_handler),
-	    (gpointer)TABLINE_MENU_OPEN);
+    add_tabline_menu_item(menu, (char_u *)_("Close"), TABLINE_MENU_CLOSE);
+    add_tabline_menu_item(menu, (char_u *)_("New tab"), TABLINE_MENU_NEW);
+    add_tabline_menu_item(menu, (char_u *)_("Open Tab..."), TABLINE_MENU_OPEN);
 
     return menu;
 }
@@ -3180,8 +3179,9 @@ on_tabline_menu(GtkWidget *widget, GdkEv
     {
 	GdkEventButton *bevent = (GdkEventButton *)event;
 	int		x = bevent->x;
-	GtkWidget	*page;
-	GtkWidget	*label;
+	int		y = bevent->y;
+	GtkWidget	*tabwidget;
+	GdkWindow	*tabwin;
 
 	/* When ignoring events return TRUE so that the selected page doesn't
 	 * change. */
@@ -3192,25 +3192,10 @@ on_tabline_menu(GtkWidget *widget, GdkEv
 	   )
 	    return TRUE;
 
-	/* Find out where the click was. */
-	for (clicked_page = 1;  ; ++clicked_page)
-	{
-	    page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gui.tabline),
-							    clicked_page - 1);
-	    if (page == NULL)
-	    {
-		/* Past all the labels, return zero. */
-		clicked_page = 0;
-		break;
-	    }
-	    label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gui.tabline), page);
-
-	    /* The label size apparently doesn't include the spacing, estimate
-	     * it by the page position. */
-	    if (page->allocation.x * 2 + label->allocation.x
-					   + label->allocation.width + 1 >= x)
-		break;
-	}
+	tabwin = gdk_window_at_pointer(&x, &y);
+	gdk_window_get_user_data(tabwin, (gpointer)&tabwidget);
+	clicked_page = (int)(long)gtk_object_get_user_data(
+						       GTK_OBJECT(tabwidget));
 
 	/* If the event was generated for 3rd button popup the menu. */
 	if (bevent->button == 3)
@@ -3306,6 +3291,7 @@ gui_mch_update_tabline(void)
     GtkWidget	    *label;
     tabpage_T	    *tp;
     int		    nr = 0;
+    int		    tab_num;
     int		    curtabidx = 0;
     char_u	    *labeltext;
 
@@ -3320,6 +3306,8 @@ gui_mch_update_tabline(void)
 	if (tp == curtab)
 	    curtabidx = nr;
 
+	tab_num = nr + 1;
+
 	page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gui.tabline), nr);
 	if (page == NULL)
 	{
@@ -3329,11 +3317,8 @@ gui_mch_update_tabline(void)
 	    event_box = gtk_event_box_new();
 	    gtk_widget_show(event_box);
 	    label = gtk_label_new("-Empty-");
-#ifdef TABLINE_TOOLTIP
+	    gtk_misc_set_padding(GTK_MISC(label), 2, 2);
 	    gtk_container_add(GTK_CONTAINER(event_box), label);
-#else
-	    event_box = label;
-#endif
 	    gtk_widget_show(label);
 	    gtk_notebook_insert_page(GTK_NOTEBOOK(gui.tabline),
 		    page,
@@ -3342,23 +3327,18 @@ gui_mch_update_tabline(void)
 	}
 
 	event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gui.tabline), page);
-#ifdef TABLINE_TOOLTIP
+	gtk_object_set_user_data(GTK_OBJECT(event_box), (gpointer)tab_num);
 	label = GTK_BIN(event_box)->child;
-#else
-	label = event_box;
-#endif
 	get_tabline_label(tp, FALSE);
 	labeltext = CONVERT_TO_UTF8(NameBuff);
 	gtk_label_set_text(GTK_LABEL(label), (const char *)labeltext);
 	CONVERT_TO_UTF8_FREE(labeltext);
 
-#ifdef TABLINE_TOOLTIP
 	get_tabline_label(tp, TRUE);
 	labeltext = CONVERT_TO_UTF8(NameBuff);
 	gtk_tooltips_set_tip(GTK_TOOLTIPS(tabline_tooltip), event_box,
 			     (const char *)labeltext, NULL);
 	CONVERT_TO_UTF8_FREE(labeltext);
-#endif
     }
 
     /* Remove any old labels. */
@@ -3368,6 +3348,9 @@ gui_mch_update_tabline(void)
     if (gtk_notebook_current_page(GTK_NOTEBOOK(gui.tabline)) != curtabidx)
         gtk_notebook_set_page(GTK_NOTEBOOK(gui.tabline), curtabidx);
 
+    /* Make sure everything is in place before drawing text. */
+    gui_mch_update();
+
     ignore_tabline_evt = FALSE;
 }
 
@@ -3685,6 +3668,9 @@ gui_mch_init(void)
     gtk_notebook_set_show_border(GTK_NOTEBOOK(gui.tabline), FALSE);
     gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gui.tabline), FALSE);
     gtk_notebook_set_scrollable(GTK_NOTEBOOK(gui.tabline), TRUE);
+# ifdef HAVE_GTK2
+    g_object_set(GTK_OBJECT(gui.tabline), "tab-border", 0, NULL);
+# endif
 
     tabline_tooltip = gtk_tooltips_new();
     gtk_tooltips_enable(GTK_TOOLTIPS(tabline_tooltip));
@@ -3698,13 +3684,11 @@ gui_mch_init(void)
 	gtk_container_add(GTK_CONTAINER(gui.tabline), page);
 	label = gtk_label_new("-Empty-");
 	gtk_widget_show(label);
-#ifdef TABLINE_TOOLTIP
 	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);
-#else
-	event_box = label;
-#endif
 	gtk_notebook_set_tab_label(GTK_NOTEBOOK(gui.tabline), page, event_box);
     }
     gtk_signal_connect(GTK_OBJECT(gui.tabline), "switch_page",