Mercurial > vim
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 |