comparison 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
comparison
equal deleted inserted replaced
850:0b3caba588fe 851:e73f2978bd40
3136 3136
3137 if (gtk_main_level() > 0) 3137 if (gtk_main_level() > 0)
3138 gtk_main_quit(); 3138 gtk_main_quit();
3139 } 3139 }
3140 3140
3141 /* 3141 static void
3142 * Create a menu for the tab line. 3142 add_tabline_menu_item(GtkWidget *menu, char_u *text, int resp)
3143 */ 3143 {
3144 static GtkWidget * 3144 GtkWidget *item;
3145 create_tabline_menu(void) 3145 char_u *utf_text;
3146 { 3146
3147 GtkWidget *menu, *item; 3147 utf_text = CONVERT_TO_UTF8(text);
3148 3148 item = gtk_menu_item_new_with_label((const char *)utf_text);
3149 menu = gtk_menu_new();
3150
3151 item = gtk_menu_item_new_with_label(_("Close"));
3152 gtk_widget_show(item); 3149 gtk_widget_show(item);
3150 CONVERT_TO_UTF8_FREE(utf_text);
3151
3153 gtk_container_add(GTK_CONTAINER(menu), item); 3152 gtk_container_add(GTK_CONTAINER(menu), item);
3154 gtk_signal_connect(GTK_OBJECT(item), "activate", 3153 gtk_signal_connect(GTK_OBJECT(item), "activate",
3155 GTK_SIGNAL_FUNC(tabline_menu_handler), 3154 GTK_SIGNAL_FUNC(tabline_menu_handler),
3156 (gpointer)TABLINE_MENU_CLOSE); 3155 (gpointer)resp);
3157 3156 }
3158 item = gtk_menu_item_new_with_label(_("New tab")); 3157
3159 gtk_widget_show(item); 3158 /*
3160 gtk_container_add(GTK_CONTAINER(menu), item); 3159 * Create a menu for the tab line.
3161 gtk_signal_connect(GTK_OBJECT(item), "activate", 3160 */
3162 GTK_SIGNAL_FUNC(tabline_menu_handler), 3161 static GtkWidget *
3163 (gpointer)TABLINE_MENU_NEW); 3162 create_tabline_menu(void)
3164 3163 {
3165 item = gtk_menu_item_new_with_label(_("Open Tab...")); 3164 GtkWidget *menu;
3166 gtk_widget_show(item); 3165
3167 gtk_container_add(GTK_CONTAINER(menu), item); 3166 menu = gtk_menu_new();
3168 gtk_signal_connect(GTK_OBJECT(item), "activate", 3167 add_tabline_menu_item(menu, (char_u *)_("Close"), TABLINE_MENU_CLOSE);
3169 GTK_SIGNAL_FUNC(tabline_menu_handler), 3168 add_tabline_menu_item(menu, (char_u *)_("New tab"), TABLINE_MENU_NEW);
3170 (gpointer)TABLINE_MENU_OPEN); 3169 add_tabline_menu_item(menu, (char_u *)_("Open Tab..."), TABLINE_MENU_OPEN);
3171 3170
3172 return menu; 3171 return menu;
3173 } 3172 }
3174 3173
3175 static gboolean 3174 static gboolean
3178 /* Was this button press event ? */ 3177 /* Was this button press event ? */
3179 if (event->type == GDK_BUTTON_PRESS) 3178 if (event->type == GDK_BUTTON_PRESS)
3180 { 3179 {
3181 GdkEventButton *bevent = (GdkEventButton *)event; 3180 GdkEventButton *bevent = (GdkEventButton *)event;
3182 int x = bevent->x; 3181 int x = bevent->x;
3183 GtkWidget *page; 3182 int y = bevent->y;
3184 GtkWidget *label; 3183 GtkWidget *tabwidget;
3184 GdkWindow *tabwin;
3185 3185
3186 /* When ignoring events return TRUE so that the selected page doesn't 3186 /* When ignoring events return TRUE so that the selected page doesn't
3187 * change. */ 3187 * change. */
3188 if (hold_gui_events 3188 if (hold_gui_events
3189 # ifdef FEAT_CMDWIN 3189 # ifdef FEAT_CMDWIN
3190 || cmdwin_type != 0 3190 || cmdwin_type != 0
3191 # endif 3191 # endif
3192 ) 3192 )
3193 return TRUE; 3193 return TRUE;
3194 3194
3195 /* Find out where the click was. */ 3195 tabwin = gdk_window_at_pointer(&x, &y);
3196 for (clicked_page = 1; ; ++clicked_page) 3196 gdk_window_get_user_data(tabwin, (gpointer)&tabwidget);
3197 { 3197 clicked_page = (int)(long)gtk_object_get_user_data(
3198 page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gui.tabline), 3198 GTK_OBJECT(tabwidget));
3199 clicked_page - 1);
3200 if (page == NULL)
3201 {
3202 /* Past all the labels, return zero. */
3203 clicked_page = 0;
3204 break;
3205 }
3206 label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gui.tabline), page);
3207
3208 /* The label size apparently doesn't include the spacing, estimate
3209 * it by the page position. */
3210 if (page->allocation.x * 2 + label->allocation.x
3211 + label->allocation.width + 1 >= x)
3212 break;
3213 }
3214 3199
3215 /* If the event was generated for 3rd button popup the menu. */ 3200 /* If the event was generated for 3rd button popup the menu. */
3216 if (bevent->button == 3) 3201 if (bevent->button == 3)
3217 { 3202 {
3218 gtk_menu_popup(GTK_MENU(widget), NULL, NULL, NULL, NULL, 3203 gtk_menu_popup(GTK_MENU(widget), NULL, NULL, NULL, NULL,
3304 GtkWidget *page; 3289 GtkWidget *page;
3305 GtkWidget *event_box; 3290 GtkWidget *event_box;
3306 GtkWidget *label; 3291 GtkWidget *label;
3307 tabpage_T *tp; 3292 tabpage_T *tp;
3308 int nr = 0; 3293 int nr = 0;
3294 int tab_num;
3309 int curtabidx = 0; 3295 int curtabidx = 0;
3310 char_u *labeltext; 3296 char_u *labeltext;
3311 3297
3312 if (gui.tabline == NULL) 3298 if (gui.tabline == NULL)
3313 return; 3299 return;
3317 /* Add a label for each tab page. They all contain the same text area. */ 3303 /* Add a label for each tab page. They all contain the same text area. */
3318 for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, ++nr) 3304 for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, ++nr)
3319 { 3305 {
3320 if (tp == curtab) 3306 if (tp == curtab)
3321 curtabidx = nr; 3307 curtabidx = nr;
3308
3309 tab_num = nr + 1;
3322 3310
3323 page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gui.tabline), nr); 3311 page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gui.tabline), nr);
3324 if (page == NULL) 3312 if (page == NULL)
3325 { 3313 {
3326 /* Add notebook page */ 3314 /* Add notebook page */
3327 page = gtk_vbox_new(FALSE, 0); 3315 page = gtk_vbox_new(FALSE, 0);
3328 gtk_widget_show(page); 3316 gtk_widget_show(page);
3329 event_box = gtk_event_box_new(); 3317 event_box = gtk_event_box_new();
3330 gtk_widget_show(event_box); 3318 gtk_widget_show(event_box);
3331 label = gtk_label_new("-Empty-"); 3319 label = gtk_label_new("-Empty-");
3332 #ifdef TABLINE_TOOLTIP 3320 gtk_misc_set_padding(GTK_MISC(label), 2, 2);
3333 gtk_container_add(GTK_CONTAINER(event_box), label); 3321 gtk_container_add(GTK_CONTAINER(event_box), label);
3334 #else
3335 event_box = label;
3336 #endif
3337 gtk_widget_show(label); 3322 gtk_widget_show(label);
3338 gtk_notebook_insert_page(GTK_NOTEBOOK(gui.tabline), 3323 gtk_notebook_insert_page(GTK_NOTEBOOK(gui.tabline),
3339 page, 3324 page,
3340 event_box, 3325 event_box,
3341 nr++); 3326 nr++);
3342 } 3327 }
3343 3328
3344 event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gui.tabline), page); 3329 event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gui.tabline), page);
3345 #ifdef TABLINE_TOOLTIP 3330 gtk_object_set_user_data(GTK_OBJECT(event_box), (gpointer)tab_num);
3346 label = GTK_BIN(event_box)->child; 3331 label = GTK_BIN(event_box)->child;
3347 #else
3348 label = event_box;
3349 #endif
3350 get_tabline_label(tp, FALSE); 3332 get_tabline_label(tp, FALSE);
3351 labeltext = CONVERT_TO_UTF8(NameBuff); 3333 labeltext = CONVERT_TO_UTF8(NameBuff);
3352 gtk_label_set_text(GTK_LABEL(label), (const char *)labeltext); 3334 gtk_label_set_text(GTK_LABEL(label), (const char *)labeltext);
3353 CONVERT_TO_UTF8_FREE(labeltext); 3335 CONVERT_TO_UTF8_FREE(labeltext);
3354 3336
3355 #ifdef TABLINE_TOOLTIP
3356 get_tabline_label(tp, TRUE); 3337 get_tabline_label(tp, TRUE);
3357 labeltext = CONVERT_TO_UTF8(NameBuff); 3338 labeltext = CONVERT_TO_UTF8(NameBuff);
3358 gtk_tooltips_set_tip(GTK_TOOLTIPS(tabline_tooltip), event_box, 3339 gtk_tooltips_set_tip(GTK_TOOLTIPS(tabline_tooltip), event_box,
3359 (const char *)labeltext, NULL); 3340 (const char *)labeltext, NULL);
3360 CONVERT_TO_UTF8_FREE(labeltext); 3341 CONVERT_TO_UTF8_FREE(labeltext);
3361 #endif
3362 } 3342 }
3363 3343
3364 /* Remove any old labels. */ 3344 /* Remove any old labels. */
3365 while (gtk_notebook_get_nth_page(GTK_NOTEBOOK(gui.tabline), nr) != NULL) 3345 while (gtk_notebook_get_nth_page(GTK_NOTEBOOK(gui.tabline), nr) != NULL)
3366 gtk_notebook_remove_page(GTK_NOTEBOOK(gui.tabline), nr); 3346 gtk_notebook_remove_page(GTK_NOTEBOOK(gui.tabline), nr);
3367 3347
3368 if (gtk_notebook_current_page(GTK_NOTEBOOK(gui.tabline)) != curtabidx) 3348 if (gtk_notebook_current_page(GTK_NOTEBOOK(gui.tabline)) != curtabidx)
3369 gtk_notebook_set_page(GTK_NOTEBOOK(gui.tabline), curtabidx); 3349 gtk_notebook_set_page(GTK_NOTEBOOK(gui.tabline), curtabidx);
3350
3351 /* Make sure everything is in place before drawing text. */
3352 gui_mch_update();
3370 3353
3371 ignore_tabline_evt = FALSE; 3354 ignore_tabline_evt = FALSE;
3372 } 3355 }
3373 3356
3374 /* 3357 /*
3683 gtk_widget_show(gui.tabline); 3666 gtk_widget_show(gui.tabline);
3684 gtk_box_pack_start(GTK_BOX(vbox), gui.tabline, FALSE, FALSE, 0); 3667 gtk_box_pack_start(GTK_BOX(vbox), gui.tabline, FALSE, FALSE, 0);
3685 gtk_notebook_set_show_border(GTK_NOTEBOOK(gui.tabline), FALSE); 3668 gtk_notebook_set_show_border(GTK_NOTEBOOK(gui.tabline), FALSE);
3686 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gui.tabline), FALSE); 3669 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gui.tabline), FALSE);
3687 gtk_notebook_set_scrollable(GTK_NOTEBOOK(gui.tabline), TRUE); 3670 gtk_notebook_set_scrollable(GTK_NOTEBOOK(gui.tabline), TRUE);
3671 # ifdef HAVE_GTK2
3672 g_object_set(GTK_OBJECT(gui.tabline), "tab-border", 0, NULL);
3673 # endif
3688 3674
3689 tabline_tooltip = gtk_tooltips_new(); 3675 tabline_tooltip = gtk_tooltips_new();
3690 gtk_tooltips_enable(GTK_TOOLTIPS(tabline_tooltip)); 3676 gtk_tooltips_enable(GTK_TOOLTIPS(tabline_tooltip));
3691 3677
3692 { 3678 {
3696 page = gtk_vbox_new(FALSE, 0); 3682 page = gtk_vbox_new(FALSE, 0);
3697 gtk_widget_show(page); 3683 gtk_widget_show(page);
3698 gtk_container_add(GTK_CONTAINER(gui.tabline), page); 3684 gtk_container_add(GTK_CONTAINER(gui.tabline), page);
3699 label = gtk_label_new("-Empty-"); 3685 label = gtk_label_new("-Empty-");
3700 gtk_widget_show(label); 3686 gtk_widget_show(label);
3701 #ifdef TABLINE_TOOLTIP
3702 event_box = gtk_event_box_new(); 3687 event_box = gtk_event_box_new();
3703 gtk_widget_show(event_box); 3688 gtk_widget_show(event_box);
3689 gtk_object_set_user_data(GTK_OBJECT(event_box), (gpointer)1);
3690 gtk_misc_set_padding(GTK_MISC(label), 2, 2);
3704 gtk_container_add(GTK_CONTAINER(event_box), label); 3691 gtk_container_add(GTK_CONTAINER(event_box), label);
3705 #else
3706 event_box = label;
3707 #endif
3708 gtk_notebook_set_tab_label(GTK_NOTEBOOK(gui.tabline), page, event_box); 3692 gtk_notebook_set_tab_label(GTK_NOTEBOOK(gui.tabline), page, event_box);
3709 } 3693 }
3710 gtk_signal_connect(GTK_OBJECT(gui.tabline), "switch_page", 3694 gtk_signal_connect(GTK_OBJECT(gui.tabline), "switch_page",
3711 GTK_SIGNAL_FUNC(on_select_tab), NULL); 3695 GTK_SIGNAL_FUNC(on_select_tab), NULL);
3712 3696