From 198fa066b2ec011e91012c1a3d85a73df7b93f31 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2018 21:20:26 +0200 Subject: [PATCH 1/7] patch 8.1.0402: the DiffUpdate event isn't triggered for :diffput Problem: The DiffUpdate event isn't triggered for :diffput. Solution: Also trigger DiffUpdate for :diffget and :diffput. --- src/diff.c | 39 +++++++++++++++++++++++++-------------- src/version.c | 2 ++ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/diff.c b/src/diff.c index d523e7743a..d63bd9373f 100644 --- a/src/diff.c +++ b/src/diff.c @@ -295,7 +295,7 @@ diff_mark_adjust_tp( if (diff_internal()) { - // Will udpate diffs before redrawing. Set _invalid to update the + // Will update diffs before redrawing. Set _invalid to update the // diffs themselves, set _update to also update folds properly just // before redrawing. tp->tp_diff_invalid = TRUE; @@ -908,6 +908,7 @@ ex_diffupdate(exarg_T *eap) // "eap" can be NULL int idx_orig; int idx_new; diffio_T diffio; + int had_diffs = curtab->tp_first_diff != NULL; if (diff_busy) { @@ -924,14 +925,14 @@ ex_diffupdate(exarg_T *eap) // "eap" can be NULL if (curtab->tp_diffbuf[idx_orig] != NULL) break; if (idx_orig == DB_COUNT) - return; + goto theend; // Only need to do something when there is another buffer. for (idx_new = idx_orig + 1; idx_new < DB_COUNT; ++idx_new) if (curtab->tp_diffbuf[idx_new] != NULL) break; if (idx_new == DB_COUNT) - return; + goto theend; // Only use the internal method if it did not fail for one of the buffers. vim_memset(&diffio, 0, sizeof(diffio)); @@ -948,9 +949,14 @@ ex_diffupdate(exarg_T *eap) // "eap" can be NULL // force updating cursor position on screen curwin->w_valid_cursor.lnum = 0; - diff_redraw(TRUE); - - apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf); +theend: + // A redraw is needed if there were diffs and they were cleared, or there + // are diffs now, which means they got updated. + if (had_diffs || curtab->tp_first_diff != NULL) + { + diff_redraw(TRUE); + apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf); + } } /* @@ -2272,7 +2278,8 @@ diffopt_changed(void) if ((diff_flags_new & DIFF_HORIZONTAL) && (diff_flags_new & DIFF_VERTICAL)) return FAIL; - /* If "icase" or "iwhite" was added or removed, need to update the diff. */ + // If flags were added or removed, or the algorithm was changed, need to + // update the diff. if (diff_flags != diff_flags_new || diff_algorithm != diff_algorithm_new) FOR_ALL_TABPAGES(tp) tp->tp_diff_invalid = TRUE; @@ -2845,14 +2852,18 @@ theend: diff_need_update = FALSE; ex_diffupdate(NULL); } + else + { + // Check that the cursor is on a valid character and update it's + // position. When there were filler lines the topline has become + // invalid. + check_cursor(); + changed_line_abv_curs(); - /* Check that the cursor is on a valid character and update it's position. - * When there were filler lines the topline has become invalid. */ - check_cursor(); - changed_line_abv_curs(); - - /* Also need to redraw the other buffers. */ - diff_redraw(FALSE); + // Also need to redraw the other buffers. + diff_redraw(FALSE); + apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf); + } } #ifdef FEAT_FOLDING diff --git a/src/version.c b/src/version.c index 8195858c46..a8be96c4b3 100644 --- a/src/version.c +++ b/src/version.c @@ -794,6 +794,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 402, /**/ 401, /**/ From cc3a997746d97980374fcc9094651a5f82a6c63d Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2018 21:41:47 +0200 Subject: [PATCH 2/7] patch 8.1.0403: header file missing from distribution Problem: Header file missing from distribution. Solution: Add src/protodef.h. --- Filelist | 1 + src/version.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Filelist b/Filelist index 59415d3d23..5fe085e15b 100644 --- a/Filelist +++ b/Filelist @@ -141,6 +141,7 @@ SRC_ALL = \ src/testdir/if_ver*.vim \ src/testdir/color_ramp.vim \ src/proto.h \ + src/protodef.h \ src/proto/arabic.pro \ src/proto/beval.pro \ src/proto/blowfish.pro \ diff --git a/src/version.c b/src/version.c index a8be96c4b3..30b79de151 100644 --- a/src/version.c +++ b/src/version.c @@ -794,6 +794,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 403, /**/ 402, /**/ From e961cba3cb8281c47f1dc2c2bc031b07504f17d4 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2018 21:51:47 +0200 Subject: [PATCH 3/7] patch 8.1.0404: accessing invalid memory with long argument name Problem: Accessing invalid memory with long argument name. Solution: Use item_count instead of checking for a terminating NULL. (Dominique Pelle, closes #3444) --- src/testdir/test_arglist.vim | 7 +++++++ src/version.c | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/testdir/test_arglist.vim b/src/testdir/test_arglist.vim index a6c71c9f5f..c558aab7d5 100644 --- a/src/testdir/test_arglist.vim +++ b/src/testdir/test_arglist.vim @@ -411,3 +411,10 @@ func Test_arg_all_expand() call assert_equal('notexist Xx\ x runtest.vim', expand('##')) call delete('Xx x') endfunc + +func Test_large_arg() + " Argument longer or equal to the number of columns used to cause + " access to invalid memory. + exe 'argadd ' .repeat('x', &columns) + args +endfunc diff --git a/src/version.c b/src/version.c index 30b79de151..ec76b99de4 100644 --- a/src/version.c +++ b/src/version.c @@ -794,6 +794,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 404, /**/ 403, /**/ @@ -1725,7 +1727,7 @@ list_in_columns(char_u **items, int size, int current) if (Columns < width) { /* Not enough screen columns - show one per line */ - for (i = 0; items[i] != NULL; ++i) + for (i = 0; i < item_count; ++i) { version_msg_wrap(items[i], i == current); if (msg_col > 0) From 664323e7c82c35eabb9056efca0df6cc8d6cfd60 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2018 22:30:07 +0200 Subject: [PATCH 4/7] patch 8.1.0405: too many #ifdefs for GTK Problem: Too many #ifdefs for GTK. Solution: Define macros instead of using #ifdef. (Ken Takata, closes #3436) --- src/gui_beval.c | 44 ------ src/gui_gtk.c | 180 +---------------------- src/gui_gtk_f.c | 180 +++-------------------- src/gui_gtk_x11.c | 360 ++-------------------------------------------- src/version.c | 2 + src/vim.h | 49 +++++++ 6 files changed, 89 insertions(+), 726 deletions(-) diff --git a/src/gui_beval.c b/src/gui_beval.c index 99651da5d9..8b90362d79 100644 --- a/src/gui_beval.c +++ b/src/gui_beval.c @@ -244,16 +244,9 @@ addEventHandler(GtkWidget *target, BalloonEval *beval) * This allows us to catch events independently of the signal handlers * in gui_gtk_x11.c. */ -# if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(target), "event", G_CALLBACK(target_event_cb), beval); -# else - /* Should use GTK_OBJECT() here, but that causes a lint warning... */ - gtk_signal_connect((GtkObject*)(target), "event", - GTK_SIGNAL_FUNC(target_event_cb), - beval); -# endif /* * Nasty: Key press events go to the main window thus the drawing area * will never see them. This means we have to connect to the main window @@ -262,45 +255,25 @@ addEventHandler(GtkWidget *target, BalloonEval *beval) if (gtk_socket_id == 0 && gui.mainwin != NULL && gtk_widget_is_ancestor(target, gui.mainwin)) { -# if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.mainwin), "event", G_CALLBACK(mainwin_event_cb), beval); -# else - gtk_signal_connect((GtkObject*)(gui.mainwin), "event", - GTK_SIGNAL_FUNC(mainwin_event_cb), - beval); -# endif } } static void removeEventHandler(BalloonEval *beval) { - /* LINTED: avoid warning: dubious operation on enum */ -# if GTK_CHECK_VERSION(3,0,0) g_signal_handlers_disconnect_by_func(G_OBJECT(beval->target), FUNC2GENERIC(target_event_cb), beval); -# else - gtk_signal_disconnect_by_func((GtkObject*)(beval->target), - GTK_SIGNAL_FUNC(target_event_cb), - beval); -# endif if (gtk_socket_id == 0 && gui.mainwin != NULL && gtk_widget_is_ancestor(beval->target, gui.mainwin)) { - /* LINTED: avoid warning: dubious operation on enum */ -# if GTK_CHECK_VERSION(3,0,0) g_signal_handlers_disconnect_by_func(G_OBJECT(gui.mainwin), FUNC2GENERIC(mainwin_event_cb), beval); -# else - gtk_signal_disconnect_by_func((GtkObject*)(gui.mainwin), - GTK_SIGNAL_FUNC(mainwin_event_cb), - beval); -# endif } } @@ -433,13 +406,8 @@ pointer_event(BalloonEval *beval, int x, int y, unsigned state) } else { -# if GTK_CHECK_VERSION(3,0,0) beval->timerID = g_timeout_add((guint)p_bdlay, &timeout_cb, beval); -# else - beval->timerID = gtk_timeout_add((guint32)p_bdlay, - &timeout_cb, beval); -# endif } } } @@ -1039,11 +1007,7 @@ cancelBalloon(BalloonEval *beval) if (beval->timerID != 0) { -# if GTK_CHECK_VERSION(3,0,0) g_source_remove(beval->timerID); -# else - gtk_timeout_remove(beval->timerID); -# endif beval->timerID = 0; } beval->showState = ShS_NEUTRAL; @@ -1055,17 +1019,9 @@ createBalloonEvalWindow(BalloonEval *beval) beval->balloonShell = gtk_window_new(GTK_WINDOW_POPUP); gtk_widget_set_app_paintable(beval->balloonShell, TRUE); -# if GTK_CHECK_VERSION(3,0,0) gtk_window_set_resizable(GTK_WINDOW(beval->balloonShell), FALSE); -# else - gtk_window_set_policy(GTK_WINDOW(beval->balloonShell), FALSE, FALSE, TRUE); -# endif gtk_widget_set_name(beval->balloonShell, "gtk-tooltips"); -# if GTK_CHECK_VERSION(3,0,0) gtk_container_set_border_width(GTK_CONTAINER(beval->balloonShell), 4); -# else - gtk_container_border_width(GTK_CONTAINER(beval->balloonShell), 4); -# endif # if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(beval->balloonShell), "draw", diff --git a/src/gui_gtk.c b/src/gui_gtk.c index 5c47f5ae93..40b3db65e7 100644 --- a/src/gui_gtk.c +++ b/src/gui_gtk.c @@ -756,13 +756,8 @@ gui_mch_add_menu_item(vimmenu_T *menu, int idx) # endif if (gtk_socket_id != 0) -# if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(menu->id), "focus-in-event", G_CALLBACK(toolbar_button_focus_in_event), NULL); -# else - gtk_signal_connect(GTK_OBJECT(menu->id), "focus_in_event", - GTK_SIGNAL_FUNC(toolbar_button_focus_in_event), NULL); -# endif CONVERT_TO_UTF8_FREE(text); CONVERT_TO_UTF8_FREE(tooltip); @@ -792,12 +787,8 @@ gui_mch_add_menu_item(vimmenu_T *menu, int idx) gtk_widget_set_sensitive(menu->id, FALSE); # endif gtk_widget_show(menu->id); -# if GTK_CHECK_VERSION(3,0,0) gtk_menu_shell_insert(GTK_MENU_SHELL(parent->submenu_id), menu->id, idx); -# else - gtk_menu_insert(GTK_MENU(parent->submenu_id), menu->id, idx); -# endif return; } @@ -805,21 +796,12 @@ gui_mch_add_menu_item(vimmenu_T *menu, int idx) /* Add textual menu item. */ menu_item_new(menu, parent->submenu_id); gtk_widget_show(menu->id); -# if GTK_CHECK_VERSION(3,0,0) gtk_menu_shell_insert(GTK_MENU_SHELL(parent->submenu_id), menu->id, idx); -# else - gtk_menu_insert(GTK_MENU(parent->submenu_id), menu->id, idx); -# endif if (menu->id != NULL) -# if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(menu->id), "activate", G_CALLBACK(menu_item_activate), menu); -# else - gtk_signal_connect(GTK_OBJECT(menu->id), "activate", - GTK_SIGNAL_FUNC(menu_item_activate), menu); -# endif } } #endif /* FEAT_MENU */ @@ -1000,7 +982,6 @@ gui_mch_set_scrollbar_thumb(scrollbar_T *sb, long val, long size, long max) adjustment = gtk_range_get_adjustment(GTK_RANGE(sb->id)); -#if GTK_CHECK_VERSION(3,0,0) gtk_adjustment_set_lower(adjustment, 0.0); gtk_adjustment_set_value(adjustment, val); gtk_adjustment_set_upper(adjustment, max + 1); @@ -1008,34 +989,15 @@ gui_mch_set_scrollbar_thumb(scrollbar_T *sb, long val, long size, long max) gtk_adjustment_set_page_increment(adjustment, size < 3L ? 1L : size - 2L); gtk_adjustment_set_step_increment(adjustment, 1.0); -#else - adjustment->lower = 0.0; - adjustment->value = val; - adjustment->upper = max + 1; - adjustment->page_size = size; - adjustment->page_increment = size < 3L ? 1L : size - 2L; - adjustment->step_increment = 1.0; -#endif -#if GTK_CHECK_VERSION(3,0,0) - g_signal_handler_block(G_OBJECT(adjustment), - (gulong)sb->handler_id); -#else - g_signal_handler_block(GTK_OBJECT(adjustment), - (gulong)sb->handler_id); -#endif + g_signal_handler_block(G_OBJECT(adjustment), (gulong)sb->handler_id); #if !GTK_CHECK_VERSION(3,18,0) gtk_adjustment_changed(adjustment); #endif -#if GTK_CHECK_VERSION(3,0,0) g_signal_handler_unblock(G_OBJECT(adjustment), (gulong)sb->handler_id); -#else - g_signal_handler_unblock(GTK_OBJECT(adjustment), - (gulong)sb->handler_id); -#endif } } @@ -1063,11 +1025,7 @@ adjustment_value_changed(GtkAdjustment *adjustment, gpointer data) #endif sb = gui_find_scrollbar((long)data); -#if GTK_CHECK_VERSION(3,0,0) value = gtk_adjustment_get_value(adjustment); -#else - value = (long)adjustment->value; -#endif #if !GTK_CHECK_VERSION(3,0,0) /* * The dragging argument must be right for the scrollbar to work with @@ -1136,26 +1094,15 @@ gui_mch_create_scrollbar(scrollbar_T *sb, int orient) { GtkAdjustment *adjustment; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_can_focus(sb->id, FALSE); -#else - GTK_WIDGET_UNSET_FLAGS(sb->id, GTK_CAN_FOCUS); -#endif gtk_form_put(GTK_FORM(gui.formwin), sb->id, 0, 0); adjustment = gtk_range_get_adjustment(GTK_RANGE(sb->id)); -#if GTK_CHECK_VERSION(3,0,0) sb->handler_id = g_signal_connect( G_OBJECT(adjustment), "value-changed", G_CALLBACK(adjustment_value_changed), GINT_TO_POINTER(sb->ident)); -#else - sb->handler_id = gtk_signal_connect( - GTK_OBJECT(adjustment), "value_changed", - GTK_SIGNAL_FUNC(adjustment_value_changed), - GINT_TO_POINTER(sb->ident)); -#endif gui_mch_update(); } } @@ -1803,7 +1750,7 @@ gui_mch_dialog(int type, /* type of dialog */ /* Allow activation of mnemonic accelerators without pressing when * there is no textfield. Handle pressing Esc. */ - g_signal_connect(G_OBJECT(dialog), "key_press_event", + g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(&dialog_key_press_event_cb), &dialoginfo); if (def_but > 0) @@ -2203,17 +2150,10 @@ find_replace_dialog_create(char_u *arg, int do_replace) if (entry_text != NULL) { gtk_entry_set_text(GTK_ENTRY(frdp->what), (char *)entry_text); -#if GTK_CHECK_VERSION(3,0,0) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(frdp->wword), (gboolean)wword); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(frdp->mcase), (gboolean)mcase); -#else - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->wword), - (gboolean)wword); - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->mcase), - (gboolean)mcase); -#endif } gtk_window_present(GTK_WINDOW(frdp->dialog)); @@ -2278,11 +2218,7 @@ find_replace_dialog_create(char_u *arg, int do_replace) table = gtk_table_new(1024, 3, FALSE); #endif gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 0); -#if GTK_CHECK_VERSION(3,0,0) gtk_container_set_border_width(GTK_CONTAINER(table), 4); -#else - gtk_container_border_width(GTK_CONTAINER(table), 4); -#endif tmp = gtk_label_new(CONV(_("Find what:"))); #if GTK_CHECK_VERSION(3,16,0) @@ -2315,19 +2251,11 @@ find_replace_dialog_create(char_u *arg, int do_replace) sensitive = (entry_text != NULL && entry_text[0] != NUL); if (entry_text != NULL) gtk_entry_set_text(GTK_ENTRY(frdp->what), (char *)entry_text); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(frdp->what), "changed", G_CALLBACK(entry_changed_cb), frdp->dialog); g_signal_connect_after(G_OBJECT(frdp->what), "key-press-event", G_CALLBACK(find_key_press_event), (gpointer) frdp); -#else - gtk_signal_connect(GTK_OBJECT(frdp->what), "changed", - GTK_SIGNAL_FUNC(entry_changed_cb), frdp->dialog); - gtk_signal_connect_after(GTK_OBJECT(frdp->what), "key_press_event", - GTK_SIGNAL_FUNC(find_key_press_event), - (gpointer) frdp); -#endif #if GTK_CHECK_VERSION(3,4,0) gtk_grid_attach(GTK_GRID(table), frdp->what, 2, 0, 5, 1); #else @@ -2365,21 +2293,12 @@ find_replace_dialog_create(char_u *arg, int do_replace) GTK_FILL, GTK_EXPAND, 2, 2); #endif frdp->with = gtk_entry_new(); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(frdp->with), "activate", G_CALLBACK(find_replace_cb), GINT_TO_POINTER(FRD_R_FINDNEXT)); g_signal_connect_after(G_OBJECT(frdp->with), "key-press-event", G_CALLBACK(find_key_press_event), (gpointer) frdp); -#else - gtk_signal_connect(GTK_OBJECT(frdp->with), "activate", - GTK_SIGNAL_FUNC(find_replace_cb), - GINT_TO_POINTER(FRD_R_FINDNEXT)); - gtk_signal_connect_after(GTK_OBJECT(frdp->with), "key_press_event", - GTK_SIGNAL_FUNC(find_key_press_event), - (gpointer) frdp); -#endif #if GTK_CHECK_VERSION(3,4,0) gtk_grid_attach(GTK_GRID(table), frdp->with, 2, 1, 5, 1); #else @@ -2391,39 +2310,23 @@ find_replace_dialog_create(char_u *arg, int do_replace) * Make the entry activation only change the input focus onto the * with item. */ -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(frdp->what), "activate", G_CALLBACK(entry_activate_cb), frdp->with); -#else - gtk_signal_connect(GTK_OBJECT(frdp->what), "activate", - GTK_SIGNAL_FUNC(entry_activate_cb), frdp->with); -#endif } else { /* * Make the entry activation do the search. */ -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(frdp->what), "activate", G_CALLBACK(find_replace_cb), GINT_TO_POINTER(FRD_FINDNEXT)); -#else - gtk_signal_connect(GTK_OBJECT(frdp->what), "activate", - GTK_SIGNAL_FUNC(find_replace_cb), - GINT_TO_POINTER(FRD_FINDNEXT)); -#endif } /* whole word only button */ frdp->wword = gtk_check_button_new_with_label(CONV(_("Match whole word only"))); -#if GTK_CHECK_VERSION(3,0,0) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(frdp->wword), (gboolean)wword); -#else - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->wword), - (gboolean)wword); -#endif if (do_replace) #if GTK_CHECK_VERSION(3,4,0) gtk_grid_attach(GTK_GRID(table), frdp->wword, 0, 2, 5, 1); @@ -2441,13 +2344,8 @@ find_replace_dialog_create(char_u *arg, int do_replace) /* match case button */ frdp->mcase = gtk_check_button_new_with_label(CONV(_("Match case"))); -#if GTK_CHECK_VERSION(3,0,0) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(frdp->mcase), (gboolean)mcase); -#else - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->mcase), - (gboolean)mcase); -#endif if (do_replace) #if GTK_CHECK_VERSION(3,4,0) gtk_grid_attach(GTK_GRID(table), frdp->mcase, 0, 3, 5, 1); @@ -2484,30 +2382,16 @@ find_replace_dialog_create(char_u *arg, int do_replace) #else vbox = gtk_vbox_new(FALSE, 0); #endif -#if GTK_CHECK_VERSION(3,0,0) gtk_container_set_border_width(GTK_CONTAINER(vbox), 0); -#else - gtk_container_border_width(GTK_CONTAINER(vbox), 0); -#endif gtk_container_add(GTK_CONTAINER(tmp), vbox); /* 'Up' and 'Down' buttons */ frdp->up = gtk_radio_button_new_with_label(NULL, CONV(_("Up"))); gtk_box_pack_start(GTK_BOX(vbox), frdp->up, TRUE, TRUE, 0); -#if GTK_CHECK_VERSION(3,0,0) frdp->down = gtk_radio_button_new_with_label( gtk_radio_button_get_group(GTK_RADIO_BUTTON(frdp->up)), CONV(_("Down"))); -#else - frdp->down = gtk_radio_button_new_with_label( - gtk_radio_button_group(GTK_RADIO_BUTTON(frdp->up)), - CONV(_("Down"))); -#endif -#if GTK_CHECK_VERSION(3,0,0) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(frdp->down), TRUE); -#else - gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(frdp->down), TRUE); -#endif gtk_container_set_border_width(GTK_CONTAINER(vbox), 2); gtk_box_pack_start(GTK_BOX(vbox), frdp->down, TRUE, TRUE, 0); @@ -2517,11 +2401,7 @@ find_replace_dialog_create(char_u *arg, int do_replace) #else actionarea = gtk_vbutton_box_new(); #endif -#if GTK_CHECK_VERSION(3,0,0) gtk_container_set_border_width(GTK_CONTAINER(actionarea), 2); -#else - gtk_container_border_width(GTK_CONTAINER(actionarea), 2); -#endif gtk_box_pack_end(GTK_BOX(hbox), actionarea, FALSE, FALSE, 0); /* 'Find Next' button */ @@ -2532,23 +2412,12 @@ find_replace_dialog_create(char_u *arg, int do_replace) #endif gtk_widget_set_sensitive(frdp->find, sensitive); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(frdp->find), "clicked", G_CALLBACK(find_replace_cb), (do_replace) ? GINT_TO_POINTER(FRD_R_FINDNEXT) : GINT_TO_POINTER(FRD_FINDNEXT)); -#else - gtk_signal_connect(GTK_OBJECT(frdp->find), "clicked", - GTK_SIGNAL_FUNC(find_replace_cb), - (do_replace) ? GINT_TO_POINTER(FRD_R_FINDNEXT) - : GINT_TO_POINTER(FRD_FINDNEXT)); -#endif -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_can_default(frdp->find, TRUE); -#else - GTK_WIDGET_SET_FLAGS(frdp->find, GTK_CAN_DEFAULT); -#endif gtk_box_pack_start(GTK_BOX(actionarea), frdp->find, FALSE, FALSE, 0); gtk_widget_grab_default(frdp->find); @@ -2561,21 +2430,11 @@ find_replace_dialog_create(char_u *arg, int do_replace) frdp->replace = create_image_button(GTK_STOCK_CONVERT, _("Replace")); #endif gtk_widget_set_sensitive(frdp->replace, sensitive); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_can_default(frdp->find, TRUE); -#else - GTK_WIDGET_SET_FLAGS(frdp->replace, GTK_CAN_DEFAULT); -#endif gtk_box_pack_start(GTK_BOX(actionarea), frdp->replace, FALSE, FALSE, 0); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(frdp->replace), "clicked", G_CALLBACK(find_replace_cb), GINT_TO_POINTER(FRD_REPLACE)); -#else - gtk_signal_connect(GTK_OBJECT(frdp->replace), "clicked", - GTK_SIGNAL_FUNC(find_replace_cb), - GINT_TO_POINTER(FRD_REPLACE)); -#endif /* 'Replace All' button */ #if GTK_CHECK_VERSION(3,10,0) @@ -2584,21 +2443,11 @@ find_replace_dialog_create(char_u *arg, int do_replace) frdp->all = create_image_button(GTK_STOCK_CONVERT, _("Replace All")); #endif gtk_widget_set_sensitive(frdp->all, sensitive); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_can_default(frdp->all, TRUE); -#else - GTK_WIDGET_SET_FLAGS(frdp->all, GTK_CAN_DEFAULT); -#endif gtk_box_pack_start(GTK_BOX(actionarea), frdp->all, FALSE, FALSE, 0); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(frdp->all), "clicked", G_CALLBACK(find_replace_cb), GINT_TO_POINTER(FRD_REPLACEALL)); -#else - gtk_signal_connect(GTK_OBJECT(frdp->all), "clicked", - GTK_SIGNAL_FUNC(find_replace_cb), - GINT_TO_POINTER(FRD_REPLACEALL)); -#endif } /* 'Cancel' button */ @@ -2607,27 +2456,14 @@ find_replace_dialog_create(char_u *arg, int do_replace) #else tmp = gtk_button_new_from_stock(GTK_STOCK_CLOSE); #endif -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_can_default(tmp, TRUE); -#else - GTK_WIDGET_SET_FLAGS(tmp, GTK_CAN_DEFAULT); -#endif gtk_box_pack_end(GTK_BOX(actionarea), tmp, FALSE, FALSE, 0); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect_swapped(G_OBJECT(tmp), "clicked", G_CALLBACK(gtk_widget_hide), G_OBJECT(frdp->dialog)); g_signal_connect_swapped(G_OBJECT(frdp->dialog), "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), G_OBJECT(frdp->dialog)); -#else - gtk_signal_connect_object(GTK_OBJECT(tmp), - "clicked", GTK_SIGNAL_FUNC(gtk_widget_hide), - GTK_OBJECT(frdp->dialog)); - gtk_signal_connect_object(GTK_OBJECT(frdp->dialog), - "delete_event", GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), - GTK_OBJECT(frdp->dialog)); -#endif #if GTK_CHECK_VERSION(3,2,0) tmp = gtk_separator_new(GTK_ORIENTATION_VERTICAL); @@ -2693,23 +2529,11 @@ find_replace_cb(GtkWidget *widget UNUSED, gpointer data) } find_text = (char_u *)gtk_entry_get_text(GTK_ENTRY(sfr->what)); -#if GTK_CHECK_VERSION(3,0,0) direction_down = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sfr->down)); -#else - direction_down = GTK_TOGGLE_BUTTON(sfr->down)->active; -#endif -#if GTK_CHECK_VERSION(3,0,0) if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sfr->wword))) -#else - if (GTK_TOGGLE_BUTTON(sfr->wword)->active) -#endif flags |= FRD_WHOLE_WORD; -#if GTK_CHECK_VERSION(3,0,0) if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sfr->mcase))) -#else - if (GTK_TOGGLE_BUTTON(sfr->mcase)->active) -#endif flags |= FRD_MATCH_CASE; repl_text = CONVERT_FROM_UTF8(repl_text); diff --git a/src/gui_gtk_f.c b/src/gui_gtk_f.c index 04e25aa598..3f376c0484 100644 --- a/src/gui_gtk_f.c +++ b/src/gui_gtk_f.c @@ -150,21 +150,13 @@ gtk_form_put(GtkForm *form, * that gtk_widget_set_parent() realizes the widget if it's visible * and its parent is mapped. */ -#if GTK_CHECK_VERSION(3,0,0) if (gtk_widget_get_realized(GTK_WIDGET(form))) -#else - if (GTK_WIDGET_REALIZED(form)) -#endif gtk_form_attach_child_window(form, child); gtk_widget_set_parent(child_widget, GTK_WIDGET(form)); -#if GTK_CHECK_VERSION(3,0,0) if (gtk_widget_get_realized(GTK_WIDGET(form)) && !gtk_widget_get_realized(child_widget)) -#else - if (GTK_WIDGET_REALIZED(form) && !GTK_WIDGET_REALIZED(child_widget)) -#endif gtk_form_realize_child(form, child); gtk_form_position_child(form, child, TRUE); @@ -300,32 +292,19 @@ gtk_form_realize(GtkWidget *widget) GtkForm *form; GdkWindowAttr attributes; gint attributes_mask; + GtkAllocation allocation; g_return_if_fail(GTK_IS_FORM(widget)); form = GTK_FORM(widget); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_realized(widget, TRUE); -#else - GTK_WIDGET_SET_FLAGS(form, GTK_REALIZED); -#endif + gtk_widget_get_allocation(widget, &allocation); attributes.window_type = GDK_WINDOW_CHILD; -#if GTK_CHECK_VERSION(3,0,0) - { - GtkAllocation allocation; - gtk_widget_get_allocation(widget, &allocation); - attributes.x = allocation.x; - attributes.y = allocation.y; - attributes.width = allocation.width; - attributes.height = allocation.height; - } -#else - attributes.x = widget->allocation.x; - attributes.y = widget->allocation.y; - attributes.width = widget->allocation.width; - attributes.height = widget->allocation.height; -#endif + attributes.x = allocation.x; + attributes.y = allocation.y; + attributes.width = allocation.width; + attributes.height = allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual(widget); #if GTK_CHECK_VERSION(3,0,0) @@ -341,14 +320,9 @@ gtk_form_realize(GtkWidget *widget) attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; #endif -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_window(widget, gdk_window_new(gtk_widget_get_parent_window(widget), &attributes, attributes_mask)); -#else - widget->window = gdk_window_new(gtk_widget_get_parent_window(widget), - &attributes, attributes_mask); -#endif gdk_window_set_user_data(gtk_widget_get_window(widget), widget); attributes.x = 0; @@ -382,11 +356,7 @@ gtk_form_realize(GtkWidget *widget) gtk_form_attach_child_window(form, child); -#if GTK_CHECK_VERSION(3,0,0) if (gtk_widget_get_visible(child->widget)) -#else - if (GTK_WIDGET_VISIBLE(child->widget)) -#endif gtk_form_realize_child(form, child); } } @@ -410,11 +380,7 @@ gtk_form_map(GtkWidget *widget) form = GTK_FORM(widget); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_mapped(widget, TRUE); -#else - GTK_WIDGET_SET_FLAGS(widget, GTK_MAPPED); -#endif gdk_window_show(gtk_widget_get_window(widget)); gdk_window_show(form->bin_window); @@ -423,13 +389,8 @@ gtk_form_map(GtkWidget *widget) { GtkFormChild *child = tmp_list->data; -#if GTK_CHECK_VERSION(3,0,0) if (gtk_widget_get_visible(child->widget) && !gtk_widget_get_mapped(child->widget)) -#else - if (GTK_WIDGET_VISIBLE(child->widget) - && !GTK_WIDGET_MAPPED(child->widget)) -#endif gtk_widget_map(child->widget); } } @@ -456,21 +417,12 @@ gtk_form_unrealize(GtkWidget *widget) if (child->window != NULL) { -#if GTK_CHECK_VERSION(3,0,0) g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget), FUNC2GENERIC(gtk_form_child_map), child); g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget), FUNC2GENERIC(gtk_form_child_unmap), child); -#else - gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget), - GTK_SIGNAL_FUNC(gtk_form_child_map), - child); - gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget), - GTK_SIGNAL_FUNC(gtk_form_child_unmap), - child); -#endif gdk_window_set_user_data(child->window, NULL); gdk_window_destroy(child->window); @@ -534,34 +486,20 @@ gtk_form_size_allocate(GtkWidget *widget, GtkAllocation *allocation) GList *tmp_list; GtkForm *form; gboolean need_reposition; -#if GTK_CHECK_VERSION(3,0,0) GtkAllocation cur_alloc; -#endif g_return_if_fail(GTK_IS_FORM(widget)); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_allocation(widget, &cur_alloc); if (cur_alloc.x == allocation->x && cur_alloc.y == allocation->y && cur_alloc.width == allocation->width && cur_alloc.height == allocation->height) -#else - if (widget->allocation.x == allocation->x - && widget->allocation.y == allocation->y - && widget->allocation.width == allocation->width - && widget->allocation.height == allocation->height) -#endif return; -#if GTK_CHECK_VERSION(3,0,0) need_reposition = cur_alloc.width != allocation->width || cur_alloc.height != allocation->height; -#else - need_reposition = widget->allocation.width != allocation->width - || widget->allocation.height != allocation->height; -#endif form = GTK_FORM(widget); if (need_reposition) @@ -577,11 +515,7 @@ gtk_form_size_allocate(GtkWidget *widget, GtkAllocation *allocation) } } -#if GTK_CHECK_VERSION(3,0,0) if (gtk_widget_get_realized(widget)) -#else - if (GTK_WIDGET_REALIZED(widget)) -#endif { gdk_window_move_resize(gtk_widget_get_window(widget), allocation->x, allocation->y, @@ -590,11 +524,7 @@ gtk_form_size_allocate(GtkWidget *widget, GtkAllocation *allocation) 0, 0, allocation->width, allocation->height); } -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_allocation(widget, allocation); -#else - widget->allocation = *allocation; -#endif if (need_reposition) gtk_form_send_configure(form); } @@ -697,17 +627,10 @@ gtk_form_remove(GtkContainer *container, GtkWidget *widget) #endif if (child->window) { -#if GTK_CHECK_VERSION(3,0,0) g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget), FUNC2GENERIC(>k_form_child_map), child); g_signal_handlers_disconnect_by_func(G_OBJECT(child->widget), FUNC2GENERIC(>k_form_child_unmap), child); -#else - gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget), - GTK_SIGNAL_FUNC(>k_form_child_map), child); - gtk_signal_disconnect_by_func(GTK_OBJECT(child->widget), - GTK_SIGNAL_FUNC(>k_form_child_unmap), child); -#endif /* FIXME: This will cause problems for reparenting NO_WINDOW * widgets out of a GtkForm @@ -760,34 +683,25 @@ gtk_form_attach_child_window(GtkForm *form, GtkFormChild *child) if (child->window != NULL) return; /* been there, done that */ -#if GTK_CHECK_VERSION(3,0,0) if (!gtk_widget_get_has_window(child->widget)) -#else - if (GTK_WIDGET_NO_WINDOW(child->widget)) -#endif { GtkWidget *widget; GdkWindowAttr attributes; gint attributes_mask; + GtkRequisition requisition; widget = GTK_WIDGET(form); +#if GTK_CHECK_VERSION(3,0,0) + gtk_widget_get_preferred_size(child->widget, &requisition, NULL); +#else + requisition = child->widget->requisition; +#endif attributes.window_type = GDK_WINDOW_CHILD; attributes.x = child->x; attributes.y = child->y; -#if GTK_CHECK_VERSION(3,0,0) - { - GtkRequisition requisition; - - gtk_widget_get_preferred_size(child->widget, &requisition, NULL); - - attributes.width = requisition.width; - attributes.height = requisition.height; - } -#else - attributes.width = child->widget->requisition.width; - attributes.height = child->widget->requisition.height; -#endif + attributes.width = requisition.width; + attributes.height = requisition.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual(widget); #if !GTK_CHECK_VERSION(3,0,0) @@ -824,23 +738,12 @@ gtk_form_attach_child_window(GtkForm *form, GtkFormChild *child) * Install signal handlers to map/unmap child->window * alongside with the actual widget. */ -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(child->widget), "map", G_CALLBACK(>k_form_child_map), child); g_signal_connect(G_OBJECT(child->widget), "unmap", G_CALLBACK(>k_form_child_unmap), child); -#else - gtk_signal_connect(GTK_OBJECT(child->widget), "map", - GTK_SIGNAL_FUNC(>k_form_child_map), child); - gtk_signal_connect(GTK_OBJECT(child->widget), "unmap", - GTK_SIGNAL_FUNC(>k_form_child_unmap), child); -#endif } -#if GTK_CHECK_VERSION(3,0,0) else if (!gtk_widget_get_realized(child->widget)) -#else - else if (!GTK_WIDGET_REALIZED(child->widget)) -#endif { gtk_widget_set_parent_window(child->widget, form->bin_window); } @@ -868,18 +771,10 @@ gtk_form_position_child(GtkForm *form, GtkFormChild *child, { if (!child->mapped) { -#if GTK_CHECK_VERSION(3,0,0) if (gtk_widget_get_mapped(GTK_WIDGET(form)) && gtk_widget_get_visible(child->widget)) -#else - if (GTK_WIDGET_MAPPED(form) && GTK_WIDGET_VISIBLE(child->widget)) -#endif { -#if GTK_CHECK_VERSION(3,0,0) if (!gtk_widget_get_mapped(child->widget)) -#else - if (!GTK_WIDGET_MAPPED(child->widget)) -#endif gtk_widget_map(child->widget); child->mapped = TRUE; @@ -890,31 +785,22 @@ gtk_form_position_child(GtkForm *form, GtkFormChild *child, if (force_allocate) { GtkAllocation allocation; -#if GTK_CHECK_VERSION(3,0,0) GtkRequisition requisition; +#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_preferred_size(child->widget, &requisition, NULL); +#else + requisition = child->widget->requisition; #endif -#if GTK_CHECK_VERSION(3,0,0) if (!gtk_widget_get_has_window(child->widget)) -#else - if (GTK_WIDGET_NO_WINDOW(child->widget)) -#endif { if (child->window) { -#if GTK_CHECK_VERSION(3,0,0) gdk_window_move_resize(child->window, x, y, requisition.width, requisition.height); -#else - gdk_window_move_resize(child->window, - x, y, - child->widget->requisition.width, - child->widget->requisition.height); -#endif } allocation.x = 0; @@ -926,13 +812,8 @@ gtk_form_position_child(GtkForm *form, GtkFormChild *child, allocation.y = y; } -#if GTK_CHECK_VERSION(3,0,0) allocation.width = requisition.width; allocation.height = requisition.height; -#else - allocation.width = child->widget->requisition.width; - allocation.height = child->widget->requisition.height; -#endif gtk_widget_size_allocate(child->widget, &allocation); } @@ -943,11 +824,7 @@ gtk_form_position_child(GtkForm *form, GtkFormChild *child, { child->mapped = FALSE; -#if GTK_CHECK_VERSION(3,0,0) if (gtk_widget_get_mapped(child->widget)) -#else - if (GTK_WIDGET_MAPPED(child->widget)) -#endif gtk_widget_unmap(child->widget); } } @@ -981,28 +858,17 @@ gtk_form_send_configure(GtkForm *form) { GtkWidget *widget; GdkEventConfigure event; + GtkAllocation allocation; widget = GTK_WIDGET(form); + gtk_widget_get_allocation(widget, &allocation); event.type = GDK_CONFIGURE; -#if GTK_CHECK_VERSION(3,0,0) event.window = gtk_widget_get_window(widget); - { - GtkAllocation allocation; - - gtk_widget_get_allocation(widget, &allocation); - event.x = allocation.x; - event.y = allocation.y; - event.width = allocation.width; - event.height = allocation.height; - } -#else - event.window = widget->window; - event.x = widget->allocation.x; - event.y = widget->allocation.y; - event.width = widget->allocation.width; - event.height = widget->allocation.height; -#endif + event.x = allocation.x; + event.y = allocation.y; + event.width = allocation.width; + event.height = allocation.height; gtk_main_do_event((GdkEvent*)&event); } diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c index d1a705b992..2e9cae368f 100644 --- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -804,11 +804,7 @@ gtk_settings_xft_dpi_changed_cb(GtkSettings *gtk_settings UNUSED, } } -#if GTK_CHECK_VERSION(3,0,0) typedef gboolean timeout_cb_type; -#else -typedef gint timeout_cb_type; -#endif /* * Start a timer that will invoke the specified callback. @@ -817,21 +813,13 @@ typedef gint timeout_cb_type; static guint timeout_add(int time, timeout_cb_type (*callback)(gpointer), int *flagp) { -#if GTK_CHECK_VERSION(3,0,0) return g_timeout_add((guint)time, (GSourceFunc)callback, flagp); -#else - return gtk_timeout_add((guint32)time, (GtkFunction)callback, flagp); -#endif } static void timeout_remove(guint timer) { -#if GTK_CHECK_VERSION(3,0,0) g_source_remove(timer); -#else - gtk_timeout_remove(timer); -#endif } @@ -974,11 +962,7 @@ enter_notify_event(GtkWidget *widget UNUSED, gui_mch_start_blink(); /* make sure keyboard input goes there */ -#if GTK_CHECK_VERSION(3,0,0) if (gtk_socket_id == 0 || !gtk_widget_has_focus(gui.drawarea)) -#else - if (gtk_socket_id == 0 || !GTK_WIDGET_HAS_FOCUS(gui.drawarea)) -#endif gtk_widget_grab_focus(gui.drawarea); return FALSE; @@ -1418,22 +1402,13 @@ selection_received_cb(GtkWidget *widget UNUSED, int len; int motion_type = MAUTO; -#if GTK_CHECK_VERSION(3,0,0) if (gtk_selection_data_get_selection(data) == clip_plus.gtk_sel_atom) -#else - if (data->selection == clip_plus.gtk_sel_atom) -#endif cbd = &clip_plus; else cbd = &clip_star; -#if GTK_CHECK_VERSION(3,0,0) text = (char_u *)gtk_selection_data_get_data(data); len = gtk_selection_data_get_length(data); -#else - text = (char_u *)data->data; - len = data->length; -#endif if (text == NULL || len <= 0) { @@ -1443,20 +1418,12 @@ selection_received_cb(GtkWidget *widget UNUSED, return; } -#if GTK_CHECK_VERSION(3,0,0) if (gtk_selection_data_get_data_type(data) == vim_atom) -#else - if (data->type == vim_atom) -#endif { motion_type = *text++; --len; } -#if GTK_CHECK_VERSION(3,0,0) else if (gtk_selection_data_get_data_type(data) == vimenc_atom) -#else - else if (data->type == vimenc_atom) -#endif { char_u *enc; vimconv_T conv; @@ -1547,12 +1514,8 @@ selection_get_cb(GtkWidget *widget UNUSED, GdkAtom type; VimClipboard *cbd; -#if GTK_CHECK_VERSION(3,0,0) if (gtk_selection_data_get_selection(selection_data) == clip_plus.gtk_sel_atom) -#else - if (selection_data->selection == clip_plus.gtk_sel_atom) -#endif cbd = &clip_plus; else cbd = &clip_star; @@ -1785,9 +1748,7 @@ process_motion_notify(int x, int y, GdkModifierType state) { int button; int_u vim_modifiers; -#if GTK_CHECK_VERSION(3,0,0) GtkAllocation allocation; -#endif button = (state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK | GDK_BUTTON4_MASK | @@ -1814,17 +1775,11 @@ process_motion_notify(int x, int y, GdkModifierType state) /* * Auto repeat timer handling. */ -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_allocation(gui.drawarea, &allocation); if (x < 0 || y < 0 || x >= allocation.width || y >= allocation.height) -#else - if (x < 0 || y < 0 - || x >= gui.drawarea->allocation.width - || y >= gui.drawarea->allocation.height) -#endif { int dx; @@ -1835,13 +1790,8 @@ process_motion_notify(int x, int y, GdkModifierType state) /* Calculate the maximal distance of the cursor from the drawing area. * (offshoot can't become negative here!). */ -#if GTK_CHECK_VERSION(3,0,0) dx = x < 0 ? -x : x - allocation.width; dy = y < 0 ? -y : y - allocation.height; -#else - dx = x < 0 ? -x : x - gui.drawarea->allocation.width; - dy = y < 0 ? -y : y - gui.drawarea->allocation.height; -#endif offshoot = dx > dy ? dx : dy; @@ -1907,6 +1857,10 @@ gui_gtk_window_at_position(GtkWidget *widget, return gdk_device_get_window_at_position(dev, x, y); } # endif +#else /* !GTK_CHECK_VERSION(3,0,0) */ +# define gui_gtk_get_pointer(wid, x, y, s) \ + gdk_window_get_pointer((wid)->window, x, y, s) +# define gui_gtk_window_at_position(wid, x, y) gdk_window_at_pointer(x, y) #endif /* @@ -1919,11 +1873,7 @@ motion_repeat_timer_cb(gpointer data UNUSED) int y; GdkModifierType state; -#if GTK_CHECK_VERSION(3,0,0) gui_gtk_get_pointer(gui.drawarea, &x, &y, &state); -#else - gdk_window_get_pointer(gui.drawarea->window, &x, &y, &state); -#endif if (!(state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK | GDK_BUTTON4_MASK | @@ -1968,11 +1918,7 @@ motion_notify_event(GtkWidget *widget, int y; GdkModifierType state; -#if GTK_CHECK_VERSION(3,0,0) gui_gtk_get_pointer(widget, &x, &y, &state); -#else - gdk_window_get_pointer(widget->window, &x, &y, &state); -#endif process_motion_notify(x, y, state); } else @@ -2003,11 +1949,7 @@ button_press_event(GtkWidget *widget, gui.event_time = event->time; /* Make sure we have focus now we've been selected */ -#if GTK_CHECK_VERSION(3,0,0) if (gtk_socket_id != 0 && !gtk_widget_has_focus(widget)) -#else - if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget)) -#endif gtk_widget_grab_focus(widget); /* @@ -2069,11 +2011,7 @@ scroll_event(GtkWidget *widget, int button; int_u vim_modifiers; -#if GTK_CHECK_VERSION(3,0,0) if (gtk_socket_id != 0 && !gtk_widget_has_focus(widget)) -#else - if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget)) -#endif gtk_widget_grab_focus(widget); switch (event->direction) @@ -2239,13 +2177,9 @@ drag_handle_uri_list(GdkDragContext *context, char_u **fnames; int nfiles = 0; -# if GTK_CHECK_VERSION(3,0,0) fnames = parse_uri_list(&nfiles, (char_u *)gtk_selection_data_get_data(data), gtk_selection_data_get_length(data)); -# else - fnames = parse_uri_list(&nfiles, data->data, data->length); -# endif if (fnames != NULL && nfiles > 0) { @@ -2272,19 +2206,10 @@ drag_handle_text(GdkDragContext *context, int len; char_u *tmpbuf = NULL; -# if GTK_CHECK_VERSION(3,0,0) text = (char_u *)gtk_selection_data_get_data(data); len = gtk_selection_data_get_length(data); -# else - text = data->data; - len = data->length; -# endif -# if GTK_CHECK_VERSION(3,0,0) if (gtk_selection_data_get_data_type(data) == utf8_string_atom) -# else - if (data->type == utf8_string_atom) -# endif { if (input_conv.vc_type != CONV_NONE) tmpbuf = string_convert(&input_conv, text, &len); @@ -2320,7 +2245,6 @@ drag_data_received_cb(GtkWidget *widget, GdkModifierType state; /* Guard against trash */ -# if GTK_CHECK_VERSION(3,0,0) const guchar * const data_data = gtk_selection_data_get_data(data); const gint data_length = gtk_selection_data_get_length(data); const gint data_format = gtk_selection_data_get_format(data); @@ -2329,12 +2253,6 @@ drag_data_received_cb(GtkWidget *widget, || data_length <= 0 || data_format != 8 || data_data[data_length] != '\0') -# else - if (data->data == NULL - || data->length <= 0 - || data->format != 8 - || data->data[data->length] != '\0') -# endif { gtk_drag_finish(context, FALSE, FALSE, time_); return; @@ -2342,11 +2260,7 @@ drag_data_received_cb(GtkWidget *widget, /* Get the current modifier state for proper distinguishment between * different operations later. */ -#if GTK_CHECK_VERSION(3,0,0) gui_gtk_get_pointer(widget, NULL, NULL, &state); -# else - gdk_window_get_pointer(widget->window, NULL, NULL, &state); -# endif /* Not sure about the role of "text/plain" here... */ if (info == (guint)TARGET_TEXT_URI_LIST) @@ -2810,13 +2724,8 @@ mainwin_realize(GtkWidget *widget UNUSED, gpointer data UNUSED) GDK_WINDOW_XID(mainwin_win)); } gtk_widget_add_events(gui.mainwin, GDK_PROPERTY_CHANGE_MASK); -# if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.mainwin), "property-notify-event", G_CALLBACK(property_event), NULL); -# else - gtk_signal_connect(GTK_OBJECT(gui.mainwin), "property_notify_event", - GTK_SIGNAL_FUNC(property_event), NULL); -# endif #endif } @@ -2935,9 +2844,7 @@ mainwin_screen_changed_cb(GtkWidget *widget, drawarea_realize_cb(GtkWidget *widget, gpointer data UNUSED) { GtkWidget *sbar; -#if GTK_CHECK_VERSION(3,0,0) GtkAllocation allocation; -#endif #ifdef FEAT_XIM xim_init(); @@ -2962,23 +2869,13 @@ drawarea_realize_cb(GtkWidget *widget, gpointer data UNUSED) if (!sbar || (!gui.which_scrollbars[SBAR_LEFT] && firstwin->w_scrollbars[SBAR_RIGHT].id)) sbar = firstwin->w_scrollbars[SBAR_RIGHT].id; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_allocation(sbar, &allocation); if (sbar && gtk_widget_get_realized(sbar) && allocation.width) gui.scrollbar_width = allocation.width; -#else - if (sbar && GTK_WIDGET_REALIZED(sbar) && sbar->allocation.width) - gui.scrollbar_width = sbar->allocation.width; -#endif sbar = gui.bottom_sbar.id; -#if GTK_CHECK_VERSION(3,0,0) if (sbar && gtk_widget_get_realized(sbar) && allocation.height) gui.scrollbar_height = allocation.height; -#else - if (sbar && GTK_WIDGET_REALIZED(sbar) && sbar->allocation.height) - gui.scrollbar_height = sbar->allocation.height; -#endif } /* @@ -3142,32 +3039,21 @@ get_item_dimensions(GtkWidget *widget, GtkOrientation orientation) # define item_orientation GTK_ORIENTATION_HORIZONTAL # endif -# if GTK_CHECK_VERSION(3,0,0) if (widget != NULL && item_orientation == orientation && gtk_widget_get_realized(widget) && gtk_widget_get_visible(widget)) -# else - if (widget != NULL - && item_orientation == orientation - && GTK_WIDGET_REALIZED(widget) - && GTK_WIDGET_VISIBLE(widget)) -# endif { -# if GTK_CHECK_VERSION(3,0,0) +# if GTK_CHECK_VERSION(3,0,0) || !defined(FEAT_GUI_GNOME) GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); return allocation.height; # else -# ifdef FEAT_GUI_GNOME if (orientation == GTK_ORIENTATION_HORIZONTAL) return widget->allocation.height; else return widget->allocation.width; -# else - return widget->allocation.height; -# endif # endif } return 0; @@ -3438,15 +3324,9 @@ add_tabline_menu_item(GtkWidget *menu, char_u *text, int resp) CONVERT_TO_UTF8_FREE(utf_text); gtk_container_add(GTK_CONTAINER(menu), item); -# if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(tabline_menu_handler), GINT_TO_POINTER(resp)); -# else - gtk_signal_connect(GTK_OBJECT(item), "activate", - GTK_SIGNAL_FUNC(tabline_menu_handler), - (gpointer)(long)resp); -# endif } /* @@ -3488,20 +3368,11 @@ on_tabline_menu(GtkWidget *widget, GdkEvent *event) ) return TRUE; -# if GTK_CHECK_VERSION(3,0,0) tabwin = gui_gtk_window_at_position(gui.mainwin, &x, &y); -# else - tabwin = gdk_window_at_pointer(&x, &y); -# endif gdk_window_get_user_data(tabwin, (gpointer)&tabwidget); -# if GTK_CHECK_VERSION(3,0,0) clicked_page = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(tabwidget), "tab_num")); -# else - clicked_page = (int)(long)gtk_object_get_user_data( - GTK_OBJECT(tabwidget)); -# endif /* If the event was generated for 3rd button popup the menu. */ if (bevent->button == 3) @@ -3536,11 +3407,7 @@ on_tabline_menu(GtkWidget *widget, GdkEvent *event) static void on_select_tab( GtkNotebook *notebook UNUSED, -# if GTK_CHECK_VERSION(3,0,0) gpointer *page UNUSED, -# else - GtkNotebookPage *page UNUSED, -# endif gint idx, gpointer data UNUSED) { @@ -3554,11 +3421,7 @@ on_select_tab( static void on_tab_reordered( GtkNotebook *notebook UNUSED, -# if GTK_CHECK_VERSION(3,0,0) gpointer *page UNUSED, -# else - GtkNotebookPage *page UNUSED, -# endif gint idx, gpointer data UNUSED) { @@ -3586,11 +3449,7 @@ gui_mch_show_tabline(int showit) gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gui.tabline), showit); update_window_manager_hints(0, 0); if (showit) -# if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_can_focus(GTK_WIDGET(gui.tabline), FALSE); -# else - GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(gui.tabline), GTK_CAN_FOCUS); -# endif } gui_mch_update(); @@ -3663,18 +3522,9 @@ gui_mch_update_tabline(void) } event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gui.tabline), page); -# if GTK_CHECK_VERSION(3,0,0) g_object_set_data(G_OBJECT(event_box), "tab_num", GINT_TO_POINTER(tab_num)); -# else - gtk_object_set_user_data(GTK_OBJECT(event_box), - (gpointer)(long)tab_num); -# endif -# if GTK_CHECK_VERSION(3,0,0) label = gtk_bin_get_child(GTK_BIN(event_box)); -# 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); @@ -3695,13 +3545,8 @@ gui_mch_update_tabline(void) while (gtk_notebook_get_nth_page(GTK_NOTEBOOK(gui.tabline), nr) != NULL) gtk_notebook_remove_page(GTK_NOTEBOOK(gui.tabline), nr); -# if GTK_CHECK_VERSION(3,0,0) if (gtk_notebook_get_current_page(GTK_NOTEBOOK(gui.tabline)) != curtabidx) gtk_notebook_set_current_page(GTK_NOTEBOOK(gui.tabline), curtabidx); -# else - if (gtk_notebook_current_page(GTK_NOTEBOOK(gui.tabline)) != curtabidx) - gtk_notebook_set_page(GTK_NOTEBOOK(gui.tabline), curtabidx); -# endif /* Make sure everything is in place before drawing text. */ gui_mch_update(); @@ -3719,13 +3564,8 @@ gui_mch_set_curtab(int nr) return; ignore_tabline_evt = TRUE; -# if GTK_CHECK_VERSION(3,0,0) if (gtk_notebook_get_current_page(GTK_NOTEBOOK(gui.tabline)) != nr - 1) gtk_notebook_set_current_page(GTK_NOTEBOOK(gui.tabline), nr - 1); -# else - if (gtk_notebook_current_page(GTK_NOTEBOOK(gui.tabline)) != nr - 1) - gtk_notebook_set_page(GTK_NOTEBOOK(gui.tabline), nr - 1); -# endif ignore_tabline_evt = FALSE; } @@ -3872,11 +3712,7 @@ gui_mch_init(void) /* Use GtkSocket from another app. */ plug = gtk_plug_new_for_display(gdk_display_get_default(), gtk_socket_id); -#if GTK_CHECK_VERSION(3,0,0) if (plug != NULL && gtk_plug_get_socket_window(GTK_PLUG(plug)) != NULL) -#else - if (plug != NULL && GTK_PLUG(plug)->socket_window != NULL) -#endif { gui.mainwin = plug; } @@ -3911,26 +3747,14 @@ gui_mch_init(void) gui.text_context = gtk_widget_create_pango_context(gui.mainwin); pango_context_set_base_dir(gui.text_context, PANGO_DIRECTION_LTR); -#if GTK_CHECK_VERSION(3,0,0) gtk_container_set_border_width(GTK_CONTAINER(gui.mainwin), 0); -#else - gtk_container_border_width(GTK_CONTAINER(gui.mainwin), 0); -#endif gtk_widget_add_events(gui.mainwin, GDK_VISIBILITY_NOTIFY_MASK); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.mainwin), "delete-event", G_CALLBACK(&delete_event_cb), NULL); g_signal_connect(G_OBJECT(gui.mainwin), "realize", G_CALLBACK(&mainwin_realize), NULL); -#else - gtk_signal_connect(GTK_OBJECT(gui.mainwin), "delete_event", - GTK_SIGNAL_FUNC(&delete_event_cb), NULL); - - gtk_signal_connect(GTK_OBJECT(gui.mainwin), "realize", - GTK_SIGNAL_FUNC(&mainwin_realize), NULL); -#endif g_signal_connect(G_OBJECT(gui.mainwin), "screen-changed", G_CALLBACK(&mainwin_screen_changed_cb), NULL); @@ -4084,11 +3908,7 @@ gui_mch_init(void) gtk_widget_show(label); event_box = gtk_event_box_new(); gtk_widget_show(event_box); -# if GTK_CHECK_VERSION(3,0,0) g_object_set_data(G_OBJECT(event_box), "tab_num", GINT_TO_POINTER(1L)); -# else - gtk_object_set_user_data(GTK_OBJECT(event_box), (gpointer)1L); -# endif # if !GTK_CHECK_VERSION(3,14,0) gtk_misc_set_padding(GTK_MISC(label), 2, 2); # endif @@ -4097,35 +3917,19 @@ gui_mch_init(void) gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(gui.tabline), page, TRUE); } -# if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.tabline), "switch-page", G_CALLBACK(on_select_tab), NULL); g_signal_connect(G_OBJECT(gui.tabline), "page-reordered", G_CALLBACK(on_tab_reordered), NULL); -# else - gtk_signal_connect(GTK_OBJECT(gui.tabline), "switch_page", - GTK_SIGNAL_FUNC(on_select_tab), NULL); - gtk_signal_connect(GTK_OBJECT(gui.tabline), "page-reordered", - GTK_SIGNAL_FUNC(on_tab_reordered), NULL); -# endif /* Create a popup menu for the tab line and connect it. */ tabline_menu = create_tabline_menu(); -# if GTK_CHECK_VERSION(3,0,0) g_signal_connect_swapped(G_OBJECT(gui.tabline), "button-press-event", G_CALLBACK(on_tabline_menu), G_OBJECT(tabline_menu)); -# else - gtk_signal_connect_object(GTK_OBJECT(gui.tabline), "button_press_event", - GTK_SIGNAL_FUNC(on_tabline_menu), GTK_OBJECT(tabline_menu)); -# endif #endif /* FEAT_GUI_TABLINE */ gui.formwin = gtk_form_new(); -#if GTK_CHECK_VERSION(3,0,0) gtk_container_set_border_width(GTK_CONTAINER(gui.formwin), 0); -#else - gtk_container_border_width(GTK_CONTAINER(gui.formwin), 0); -#endif #if !GTK_CHECK_VERSION(3,0,0) gtk_widget_set_events(gui.formwin, GDK_EXPOSURE_MASK); #endif @@ -4159,17 +3963,10 @@ gui_mch_init(void) /* For GtkSockets, key-presses must go to the focus widget (drawarea) * and not the window. */ -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect((gtk_socket_id == 0) ? G_OBJECT(gui.mainwin) : G_OBJECT(gui.drawarea), "key-press-event", G_CALLBACK(key_press_event), NULL); -#else - gtk_signal_connect((gtk_socket_id == 0) ? GTK_OBJECT(gui.mainwin) - : GTK_OBJECT(gui.drawarea), - "key_press_event", - GTK_SIGNAL_FUNC(key_press_event), NULL); -#endif #if defined(FEAT_XIM) || GTK_CHECK_VERSION(3,0,0) /* Also forward key release events for the benefit of GTK+ 2 input * modules. Try CTRL-SHIFT-xdigits to enter a Unicode code point. */ @@ -4178,28 +3975,20 @@ gui_mch_init(void) "key-release-event", G_CALLBACK(&key_release_event), NULL); #endif -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.drawarea), "realize", G_CALLBACK(drawarea_realize_cb), NULL); g_signal_connect(G_OBJECT(gui.drawarea), "unrealize", G_CALLBACK(drawarea_unrealize_cb), NULL); +#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.drawarea), "configure-event", G_CALLBACK(drawarea_configure_event_cb), NULL); -# if GTK_CHECK_VERSION(3,22,2) +#endif +#if GTK_CHECK_VERSION(3,22,2) g_signal_connect_after(G_OBJECT(gui.drawarea), "style-updated", G_CALLBACK(&drawarea_style_updated_cb), NULL); -# else +#else g_signal_connect_after(G_OBJECT(gui.drawarea), "style-set", G_CALLBACK(&drawarea_style_set_cb), NULL); -# endif -#else - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "realize", - GTK_SIGNAL_FUNC(drawarea_realize_cb), NULL); - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "unrealize", - GTK_SIGNAL_FUNC(drawarea_unrealize_cb), NULL); - - gtk_signal_connect_after(GTK_OBJECT(gui.drawarea), "style_set", - GTK_SIGNAL_FUNC(&drawarea_style_set_cb), NULL); #endif #if !GTK_CHECK_VERSION(3,0,0) @@ -4213,11 +4002,7 @@ gui_mch_init(void) if (gtk_socket_id != 0) /* make sure keyboard input can go to the drawarea */ -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_can_focus(gui.drawarea, TRUE); -#else - GTK_WIDGET_SET_FLAGS(gui.drawarea, GTK_CAN_FOCUS); -#endif /* * Set clipboard specific atoms @@ -4248,17 +4033,10 @@ gui_mch_init(void) */ if (vim_strchr(p_go, GO_POINTER) != NULL) { -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.drawarea), "leave-notify-event", G_CALLBACK(leave_notify_event), NULL); g_signal_connect(G_OBJECT(gui.drawarea), "enter-notify-event", G_CALLBACK(enter_notify_event), NULL); -#else - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "leave_notify_event", - GTK_SIGNAL_FUNC(leave_notify_event), NULL); - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "enter_notify_event", - GTK_SIGNAL_FUNC(enter_notify_event), NULL); -#endif } /* Real windows can get focus ... GtkPlug, being a mere container can't, @@ -4267,47 +4045,25 @@ gui_mch_init(void) */ if (gtk_socket_id == 0) { -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.mainwin), "focus-out-event", G_CALLBACK(focus_out_event), NULL); g_signal_connect(G_OBJECT(gui.mainwin), "focus-in-event", G_CALLBACK(focus_in_event), NULL); -#else - gtk_signal_connect(GTK_OBJECT(gui.mainwin), "focus_out_event", - GTK_SIGNAL_FUNC(focus_out_event), NULL); - gtk_signal_connect(GTK_OBJECT(gui.mainwin), "focus_in_event", - GTK_SIGNAL_FUNC(focus_in_event), NULL); -#endif } else { -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.drawarea), "focus-out-event", G_CALLBACK(focus_out_event), NULL); g_signal_connect(G_OBJECT(gui.drawarea), "focus-in-event", G_CALLBACK(focus_in_event), NULL); -#else - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "focus_out_event", - GTK_SIGNAL_FUNC(focus_out_event), NULL); - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "focus_in_event", - GTK_SIGNAL_FUNC(focus_in_event), NULL); -#endif #ifdef FEAT_GUI_TABLINE -# if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.tabline), "focus-out-event", G_CALLBACK(focus_out_event), NULL); g_signal_connect(G_OBJECT(gui.tabline), "focus-in-event", G_CALLBACK(focus_in_event), NULL); -# else - gtk_signal_connect(GTK_OBJECT(gui.tabline), "focus_out_event", - GTK_SIGNAL_FUNC(focus_out_event), NULL); - gtk_signal_connect(GTK_OBJECT(gui.tabline), "focus_in_event", - GTK_SIGNAL_FUNC(focus_in_event), NULL); -# endif #endif /* FEAT_GUI_TABLINE */ } -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.drawarea), "motion-notify-event", G_CALLBACK(motion_notify_event), NULL); g_signal_connect(G_OBJECT(gui.drawarea), "button-press-event", @@ -4316,41 +4072,19 @@ gui_mch_init(void) G_CALLBACK(button_release_event), NULL); g_signal_connect(G_OBJECT(gui.drawarea), "scroll-event", G_CALLBACK(&scroll_event), NULL); -#else - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "motion_notify_event", - GTK_SIGNAL_FUNC(motion_notify_event), NULL); - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "button_press_event", - GTK_SIGNAL_FUNC(button_press_event), NULL); - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "button_release_event", - GTK_SIGNAL_FUNC(button_release_event), NULL); - g_signal_connect(G_OBJECT(gui.drawarea), "scroll_event", - G_CALLBACK(&scroll_event), NULL); -#endif /* * Add selection handler functions. */ -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.drawarea), "selection-clear-event", G_CALLBACK(selection_clear_event), NULL); g_signal_connect(G_OBJECT(gui.drawarea), "selection-received", G_CALLBACK(selection_received_cb), NULL); -#else - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_clear_event", - GTK_SIGNAL_FUNC(selection_clear_event), NULL); - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_received", - GTK_SIGNAL_FUNC(selection_received_cb), NULL); -#endif gui_gtk_set_selection_targets(); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.drawarea), "selection-get", G_CALLBACK(selection_get_cb), NULL); -#else - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "selection_get", - GTK_SIGNAL_FUNC(selection_get_cb), NULL); -#endif /* Pretend we don't have input focus, we will get an event if we do. */ gui.in_focus = FALSE; @@ -4415,16 +4149,12 @@ set_cairo_source_rgba_from_color(cairo_t *cr, guicolor_T color) void gui_mch_new_colors(void) { -#if GTK_CHECK_VERSION(3,0,0) -# if !GTK_CHECK_VERSION(3,22,2) - GdkWindow * const da_win = gtk_widget_get_window(gui.drawarea); -# endif - if (gui.drawarea != NULL && gtk_widget_get_window(gui.drawarea) != NULL) -#else - if (gui.drawarea != NULL && gui.drawarea->window != NULL) -#endif { +#if !GTK_CHECK_VERSION(3,22,2) + GdkWindow * const da_win = gtk_widget_get_window(gui.drawarea); +#endif + #if GTK_CHECK_VERSION(3,22,2) GtkStyleContext * const context = gtk_widget_get_style_context(gui.drawarea); @@ -4462,11 +4192,7 @@ gui_mch_new_colors(void) GdkColor color = { 0, 0, 0, 0 }; color.pixel = gui.back_pixel; -# if GTK_CHECK_VERSION(3,0,0) gdk_window_set_background(da_win, &color); -# else - gdk_window_set_background(gui.drawarea->window, &color); -# endif #endif /* !GTK_CHECK_VERSION(3,22,2) */ } } @@ -4524,13 +4250,8 @@ form_configure_event(GtkWidget *widget UNUSED, * We can't do much more here than to trying to preserve what had been done, * since the window is already inevitably going away. */ -#if GTK_CHECK_VERSION(3,0,0) static void mainwin_destroy_cb(GObject *object UNUSED, gpointer data UNUSED) -#else - static void -mainwin_destroy_cb(GtkObject *object UNUSED, gpointer data UNUSED) -#endif { /* Don't write messages to the GUI anymore */ full_screen = FALSE; @@ -4709,13 +4430,8 @@ gui_mch_open(void) * changed them). */ highlight_gui_started(); /* re-init colors and fonts */ -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.mainwin), "destroy", G_CALLBACK(mainwin_destroy_cb), NULL); -#else - gtk_signal_connect(GTK_OBJECT(gui.mainwin), "destroy", - GTK_SIGNAL_FUNC(mainwin_destroy_cb), NULL); -#endif #ifdef FEAT_HANGULIN hangul_keyboard_set(); @@ -4731,25 +4447,15 @@ gui_mch_open(void) * manager upon us and should not interfere with what VIM is requesting * upon startup. */ -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.formwin), "configure-event", G_CALLBACK(form_configure_event), NULL); -#else - gtk_signal_connect(GTK_OBJECT(gui.formwin), "configure_event", - GTK_SIGNAL_FUNC(form_configure_event), NULL); -#endif #ifdef FEAT_DND /* Set up for receiving DND items. */ gui_gtk_set_dnd_targets(); -# if GTK_CHECK_VERSION(3,0,0) g_signal_connect(G_OBJECT(gui.drawarea), "drag-data-received", G_CALLBACK(drag_data_received_cb), NULL); -# else - gtk_signal_connect(GTK_OBJECT(gui.drawarea), "drag_data_received", - GTK_SIGNAL_FUNC(drag_data_received_cb), NULL); -# endif #endif /* With GTK+ 2, we need to iconify the window before calling show() @@ -5036,11 +4742,7 @@ gui_mch_enable_menu(int showit) widget = gui.menubar; /* Do not disable the menu while starting up, otherwise F10 doesn't work. */ -# if GTK_CHECK_VERSION(3,0,0) if (!showit != !gtk_widget_get_visible(widget) && !gui.starting) -# else - if (!showit != !GTK_WIDGET_VISIBLE(widget) && !gui.starting) -# endif { if (showit) gtk_widget_show(widget); @@ -5071,11 +4773,7 @@ gui_mch_show_toolbar(int showit) if (showit) set_toolbar_style(GTK_TOOLBAR(gui.toolbar)); -# if GTK_CHECK_VERSION(3,0,0) if (!showit != !gtk_widget_get_visible(widget)) -# else - if (!showit != !GTK_WIDGET_VISIBLE(widget)) -# endif { if (showit) gtk_widget_show(widget); @@ -6336,11 +6034,7 @@ gui_mch_beep(void) { GdkDisplay *display; -#if GTK_CHECK_VERSION(3,0,0) if (gui.mainwin != NULL && gtk_widget_get_realized(gui.mainwin)) -#else - if (gui.mainwin != NULL && GTK_WIDGET_REALIZED(gui.mainwin)) -#endif display = gtk_widget_get_display(gui.mainwin); else display = gdk_display_get_default(); @@ -6700,11 +6394,7 @@ theend: void gui_mch_flush(void) { -#if GTK_CHECK_VERSION(3,0,0) if (gui.mainwin != NULL && gtk_widget_get_realized(gui.mainwin)) -#else - if (gui.mainwin != NULL && GTK_WIDGET_REALIZED(gui.mainwin)) -#endif gdk_display_flush(gtk_widget_get_display(gui.mainwin)); } @@ -7060,11 +6750,7 @@ gui_mch_menu_grey(vimmenu_T *menu, int grey) gui_mch_menu_hidden(menu, FALSE); /* Be clever about bitfields versus true booleans here! */ -# if GTK_CHECK_VERSION(3,0,0) if (!gtk_widget_get_sensitive(menu->id) == !grey) -# else - if (!GTK_WIDGET_SENSITIVE(menu->id) == !grey) -# endif { gtk_widget_set_sensitive(menu->id, !grey); gui_mch_update(); @@ -7082,11 +6768,7 @@ gui_mch_menu_hidden(vimmenu_T *menu, int hidden) if (hidden) { -# if GTK_CHECK_VERSION(3,0,0) if (gtk_widget_get_visible(menu->id)) -# else - if (GTK_WIDGET_VISIBLE(menu->id)) -# endif { gtk_widget_hide(menu->id); gui_mch_update(); @@ -7094,11 +6776,7 @@ gui_mch_menu_hidden(vimmenu_T *menu, int hidden) } else { -# if GTK_CHECK_VERSION(3,0,0) if (!gtk_widget_get_visible(menu->id)) -# else - if (!GTK_WIDGET_VISIBLE(menu->id)) -# endif { gtk_widget_show(menu->id); gui_mch_update(); @@ -7126,15 +6804,7 @@ gui_mch_enable_scrollbar(scrollbar_T *sb, int flag) if (sb->id == NULL) return; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_visible(sb->id, flag); -#else - if (flag) - gtk_widget_show(sb->id); - else - gtk_widget_hide(sb->id); -#endif - update_window_manager_hints(0, 0); } @@ -7166,11 +6836,7 @@ gui_mch_get_rgb(guicolor_T pixel) void gui_mch_getmouse(int *x, int *y) { -#if GTK_CHECK_VERSION(3,0,0) gui_gtk_get_pointer(gui.drawarea, x, y, NULL); -#else - gdk_window_get_pointer(gui.drawarea->window, x, y, NULL); -#endif } void diff --git a/src/version.c b/src/version.c index ec76b99de4..bfebd2409a 100644 --- a/src/version.c +++ b/src/version.c @@ -794,6 +794,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 405, /**/ 404, /**/ diff --git a/src/vim.h b/src/vim.h index 1210db5034..cb72711cc2 100644 --- a/src/vim.h +++ b/src/vim.h @@ -2330,6 +2330,55 @@ typedef enum { #ifdef FEAT_GUI_GTK # if !GTK_CHECK_VERSION(2,14,0) # define gtk_widget_get_window(wid) ((wid)->window) +# define gtk_plug_get_socket_window(wid) ((wid)->socket_window) +# define gtk_selection_data_get_data(sel) ((sel)->data) +# define gtk_selection_data_get_data_type(sel) ((sel)->type) +# define gtk_selection_data_get_format(sel) ((sel)->format) +# define gtk_selection_data_get_length(sel) ((sel)->length) +# define gtk_adjustment_set_lower(adj, low) \ + do { (adj)->lower = low; } while (0) +# define gtk_adjustment_set_upper(adj, up) \ + do { (adj)->upper = up; } while (0) +# define gtk_adjustment_set_page_size(adj, size) \ + do { (adj)->page_size = size; } while (0) +# define gtk_adjustment_set_page_increment(adj, inc) \ + do { (adj)->page_increment = inc; } while (0) +# define gtk_adjustment_set_step_increment(adj, inc) \ + do { (adj)->step_increment = inc; } while (0) +# endif +# if !GTK_CHECK_VERSION(2,16,0) +# define gtk_selection_data_get_selection(sel) ((sel)->selection) +# endif +# if !GTK_CHECK_VERSION(2,18,0) +# define gtk_widget_get_allocation(wid, alloc) \ + do { *(alloc) = (wid)->allocation; } while (0) +# define gtk_widget_set_allocation(wid, alloc) \ + do { (wid)->allocation = *(alloc); } while (0) +# define gtk_widget_get_has_window(wid) !GTK_WIDGET_NO_WINDOW(wid) +# define gtk_widget_get_sensitive(wid) GTK_WIDGET_SENSITIVE(wid) +# define gtk_widget_get_visible(wid) GTK_WIDGET_VISIBLE(wid) +# define gtk_widget_has_focus(wid) GTK_WIDGET_HAS_FOCUS(wid) +# define gtk_widget_set_window(wid, win) \ + do { (wid)->window = (win); } while (0) +# define gtk_widget_set_can_default(wid, can) \ + do { if (can) { GTK_WIDGET_SET_FLAGS(wid, GTK_CAN_DEFAULT); } \ + else { GTK_WIDGET_UNSET_FLAGS(wid, GTK_CAN_DEFAULT); } } while (0) +# define gtk_widget_set_can_focus(wid, can) \ + do { if (can) { GTK_WIDGET_SET_FLAGS(wid, GTK_CAN_FOCUS); } \ + else { GTK_WIDGET_UNSET_FLAGS(wid, GTK_CAN_FOCUS); } } while (0) +# define gtk_widget_set_visible(wid, vis) \ + do { if (vis) { gtk_widget_show(wid); } \ + else { gtk_widget_hide(wid); } } while (0) +# endif +# if !GTK_CHECK_VERSION(2,20,0) +# define gtk_widget_get_mapped(wid) GTK_WIDGET_MAPPED(wid) +# define gtk_widget_get_realized(wid) GTK_WIDGET_REALIZED(wid) +# define gtk_widget_set_mapped(wid, map) \ + do { if (map) { GTK_WIDGET_SET_FLAGS(wid, GTK_MAPPED); } \ + else { GTK_WIDGET_UNSET_FLAGS(wid, GTK_MAPPED); } } while (0) +# define gtk_widget_set_realized(wid, rea) \ + do { if (rea) { GTK_WIDGET_SET_FLAGS(wid, GTK_REALIZED); } \ + else { GTK_WIDGET_UNSET_FLAGS(wid, GTK_REALIZED); } } while (0) # endif #endif From 9e81db9742a35cc972ce5cae204e837093987692 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2018 22:37:31 +0200 Subject: [PATCH 5/7] patch 8.1.0406: several command line arguments are not tested Problem: Several command line arguments are not tested. Solution: Add tests for -A, -F, -H, -p and -V. (Dominique Pelle, closes #3446) --- src/testdir/test_startup.vim | 65 +++++++++++++++++++++++++++++++++++- src/version.c | 2 ++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/src/testdir/test_startup.vim b/src/testdir/test_startup.vim index 6e99b0285c..af7c5c96cd 100644 --- a/src/testdir/test_startup.vim +++ b/src/testdir/test_startup.vim @@ -199,7 +199,7 @@ func Test_o_arg() " - both windows should have the same height " - window height (+ 2 for the statusline and Ex command) should be equal " to the number of lines - " - buffer of both windowns should have no name + " - buffer of both windows should have no name let [wn, wh1, wh2, ln, ww1, ww2, cn, bn1, bn2] = readfile('Xtestout') call assert_equal('2', wn) call assert_inrange(0, 1, ww1 - ww2) @@ -225,6 +225,69 @@ func Test_o_arg() call delete('Xtestout') endfunc +" Test the -p[N] argument to open N tabpages. +func Test_p_arg() + let after = [ + \ 'call writefile(split(execute("tabs"), "\n"), "Xtestout")', + \ 'qall', + \ ] + if RunVim([], after, '-p2') + let lines = readfile('Xtestout') + call assert_equal(4, len(lines)) + call assert_equal('Tab page 1', lines[0]) + call assert_equal('> [No Name]', lines[1]) + call assert_equal('Tab page 2', lines[2]) + call assert_equal(' [No Name]', lines[3]) + endif + + if RunVim([], after, '-p foo bar') + let lines = readfile('Xtestout') + call assert_equal(4, len(lines)) + call assert_equal('Tab page 1', lines[0]) + call assert_equal('> foo', lines[1]) + call assert_equal('Tab page 2', lines[2]) + call assert_equal(' bar', lines[3]) + endif + + call delete('Xtestout') +endfunc + +" Test the -V[N] argument to set the 'version' option to [N] +func Test_V_arg() + let out = system(GetVimCommand() . ' --clean -es -X -V0 -c "set verbose?" -cq') + call assert_equal(" verbose=0\n", out) + + let out = system(GetVimCommand() . ' --clean -es -X -V2 -c "set verbose?" -cq') + call assert_match("^sourcing \"$VIMRUNTIME/defaults\.vim\"\r\nSearching for \"filetype\.vim\".*\n verbose=2\n$", out) + + let out = system(GetVimCommand() . ' --clean -es -X -V15 -c "set verbose?" -cq') + call assert_match("\+*\nsourcing \"$VIMRUNTIME/defaults\.vim\"\r\nline 1: \" The default vimrc file\..*\n verbose=15\n\+*", out) +endfunc + +" Test the -A, -F and -H arguments (Arabic, Farsi and Hebrew modes). +func Test_A_F_H_arg() + let after = [ + \ 'call writefile([&rightleft, &arabic, &fkmap, &hkmap], "Xtestout")', + \ 'qall', + \ ] + if has('arabic') && RunVim([], after, '-A') + let lines = readfile('Xtestout') + call assert_equal(['1', '1', '0', '0'], lines) + endif + + if has('farsi') && RunVim([], after, '-F') + let lines = readfile('Xtestout') + call assert_equal(['1', '0', '1', '0'], lines) + endif + + if has('rightleft') && RunVim([], after, '-H') + let lines = readfile('Xtestout') + call assert_equal(['1', '0', '0', '1'], lines) + endif + + call delete('Xtestout') +endfunc + func Test_file_args() let after = [ \ 'call writefile(argv(), "Xtestout")', diff --git a/src/version.c b/src/version.c index bfebd2409a..d14f0d4129 100644 --- a/src/version.c +++ b/src/version.c @@ -794,6 +794,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 406, /**/ 405, /**/ From fe15b7dfa628d4edd683dae9528194c0e5510128 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2018 22:50:06 +0200 Subject: [PATCH 6/7] patch 8.1.0407: quickfix code mixes using the stack and a list pointer Problem: Quickfix code mixes using the stack and a list pointer. Solution: Use a list pointer in more places. (Yegappan Lakshmanan, closes #3443) --- src/quickfix.c | 225 ++++++++++++++++++++++++------------------------- src/version.c | 2 + 2 files changed, 113 insertions(+), 114 deletions(-) diff --git a/src/quickfix.c b/src/quickfix.c index 58163196e0..c43ad60435 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -136,18 +136,17 @@ static efm_T *fmt_start = NULL; /* cached across qf_parse_line() calls */ static void qf_new_list(qf_info_T *qi, char_u *qf_title); static int qf_add_entry(qf_info_T *qi, int qf_idx, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid); -static void qf_free(qf_info_T *qi, int idx); +static void qf_free(qf_list_T *qfl); static char_u *qf_types(int, int); static int qf_get_fnum(qf_info_T *qi, int qf_idx, char_u *, char_u *); static char_u *qf_push_dir(char_u *, struct dir_stack_T **, int is_file_stack); static char_u *qf_pop_dir(struct dir_stack_T **); -static char_u *qf_guess_filepath(qf_info_T *qi, int qf_idx, char_u *); +static char_u *qf_guess_filepath(qf_list_T *qfl, char_u *); static void qf_fmt_text(char_u *text, char_u *buf, int bufsize); static int qf_win_pos_update(qf_info_T *qi, int old_qf_index); static win_T *qf_find_win(qf_info_T *qi); static buf_T *qf_find_buf(qf_info_T *qi); static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last); -static void qf_set_title_var(qf_info_T *qi); static void qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last); static char_u *get_mef_name(void); static buf_T *load_dummy_buffer(char_u *fname, char_u *dirname_start, char_u *resulting_dir); @@ -1757,7 +1756,7 @@ error2: if (!adding) { /* Error when creating a new list. Free the new list */ - qf_free(qi, qi->qf_curlist); + qf_free(&qi->qf_lists[qi->qf_curlist]); qi->qf_listcount--; if (qi->qf_curlist > 0) --qi->qf_curlist; @@ -1802,15 +1801,15 @@ qf_init(win_T *wp, * Prepends ':' to the title. */ static void -qf_store_title(qf_info_T *qi, int qf_idx, char_u *title) +qf_store_title(qf_list_T *qfl, char_u *title) { - VIM_CLEAR(qi->qf_lists[qf_idx].qf_title); + VIM_CLEAR(qfl->qf_title); if (title != NULL) { char_u *p = alloc((int)STRLEN(title) + 2); - qi->qf_lists[qf_idx].qf_title = p; + qfl->qf_title = p; if (p != NULL) STRCPY(p, title); } @@ -1847,7 +1846,7 @@ qf_new_list(qf_info_T *qi, char_u *qf_title) * way with ":grep'. */ while (qi->qf_listcount > qi->qf_curlist + 1) - qf_free(qi, --qi->qf_listcount); + qf_free(&qi->qf_lists[--qi->qf_listcount]); /* * When the stack is full, remove to oldest entry @@ -1855,7 +1854,7 @@ qf_new_list(qf_info_T *qi, char_u *qf_title) */ if (qi->qf_listcount == LISTCOUNT) { - qf_free(qi, 0); + qf_free(&qi->qf_lists[0]); for (i = 1; i < LISTCOUNT; ++i) qi->qf_lists[i - 1] = qi->qf_lists[i]; qi->qf_curlist = LISTCOUNT - 1; @@ -1863,12 +1862,12 @@ qf_new_list(qf_info_T *qi, char_u *qf_title) else qi->qf_curlist = qi->qf_listcount++; vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T))); - qf_store_title(qi, qi->qf_curlist, qf_title); + qf_store_title(&qi->qf_lists[qi->qf_curlist], qf_title); qi->qf_lists[qi->qf_curlist].qf_id = ++last_qf_id; } /* - * Free a location list + * Free a location list stack */ static void ll_free_all(qf_info_T **pqi) @@ -1886,7 +1885,7 @@ ll_free_all(qf_info_T **pqi) { /* No references to this location list */ for (i = 0; i < qi->qf_listcount; ++i) - qf_free(qi, i); + qf_free(&qi->qf_lists[i]); vim_free(qi); } } @@ -1909,7 +1908,7 @@ qf_free_all(win_T *wp) else /* quickfix list */ for (i = 0; i < qi->qf_listcount; ++i) - qf_free(qi, i); + qf_free(&qi->qf_lists[i]); } /* @@ -1933,6 +1932,7 @@ qf_add_entry( int type, /* type character */ int valid) /* valid entry */ { + qf_list_T *qfl = &qi->qf_lists[qf_idx]; qfline_T *qfp; qfline_T **lastp; /* pointer to qf_last or NULL */ @@ -1980,12 +1980,12 @@ qf_add_entry( qfp->qf_type = type; qfp->qf_valid = valid; - lastp = &qi->qf_lists[qf_idx].qf_last; + lastp = &qfl->qf_last; if (qf_list_empty(qi, qf_idx)) /* first element in the list */ { - qi->qf_lists[qf_idx].qf_start = qfp; - qi->qf_lists[qf_idx].qf_ptr = qfp; - qi->qf_lists[qf_idx].qf_index = 0; + qfl->qf_start = qfp; + qfl->qf_ptr = qfp; + qfl->qf_index = 0; qfp->qf_prev = NULL; } else @@ -1996,20 +1996,19 @@ qf_add_entry( qfp->qf_next = NULL; qfp->qf_cleared = FALSE; *lastp = qfp; - ++qi->qf_lists[qf_idx].qf_count; - if (qi->qf_lists[qf_idx].qf_index == 0 && qfp->qf_valid) + ++qfl->qf_count; + if (qfl->qf_index == 0 && qfp->qf_valid) /* first valid entry */ { - qi->qf_lists[qf_idx].qf_index = - qi->qf_lists[qf_idx].qf_count; - qi->qf_lists[qf_idx].qf_ptr = qfp; + qfl->qf_index = qfl->qf_count; + qfl->qf_ptr = qfp; } return OK; } /* - * Allocate a new location list + * Allocate a new location list stack */ static qf_info_T * ll_new_list(void) @@ -2023,8 +2022,8 @@ ll_new_list(void) } /* - * Return the location list for window 'wp'. - * If not present, allocate a location list + * Return the location list stack for window 'wp'. + * If not present, allocate a location list stack */ static qf_info_T * ll_get_or_alloc_list(win_T *wp) @@ -2197,7 +2196,7 @@ qf_get_fnum(qf_info_T *qi, int qf_idx, char_u *directory, char_u *fname) if (mch_getperm(ptr) < 0) { vim_free(ptr); - directory = qf_guess_filepath(qi, qf_idx, fname); + directory = qf_guess_filepath(&qi->qf_lists[qf_idx], fname); if (directory) ptr = concat_fnames(directory, fname, TRUE); else @@ -2365,12 +2364,11 @@ qf_clean_dir_stack(struct dir_stack_T **stackptr) * qf_guess_filepath will return NULL. */ static char_u * -qf_guess_filepath(qf_info_T *qi, int qf_idx, char_u *filename) +qf_guess_filepath(qf_list_T *qfl, char_u *filename) { struct dir_stack_T *ds_ptr; struct dir_stack_T *ds_tmp; char_u *fullname; - qf_list_T *qfl = &qi->qf_lists[qf_idx]; /* no dirs on the stack - there's nothing we can do */ if (qfl->qf_dir_stack == NULL) @@ -2436,14 +2434,11 @@ qflist_valid (win_T *wp, int_u qf_id) * Similar to location list. */ static int -is_qf_entry_present(qf_info_T *qi, qfline_T *qf_ptr) +is_qf_entry_present(qf_list_T *qfl, qfline_T *qf_ptr) { - qf_list_T *qfl; qfline_T *qfp; int i; - qfl = &qi->qf_lists[qi->qf_curlist]; - /* Search for the entry in the current list */ for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count; ++i, qfp = qfp->qf_next) @@ -2462,7 +2457,7 @@ is_qf_entry_present(qf_info_T *qi, qfline_T *qf_ptr) */ static qfline_T * get_next_valid_entry( - qf_info_T *qi, + qf_list_T *qfl, qfline_T *qf_ptr, int *qf_index, int dir) @@ -2475,13 +2470,11 @@ get_next_valid_entry( do { - if (idx == qi->qf_lists[qi->qf_curlist].qf_count - || qf_ptr->qf_next == NULL) + if (idx == qfl->qf_count || qf_ptr->qf_next == NULL) return NULL; ++idx; qf_ptr = qf_ptr->qf_next; - } while ((!qi->qf_lists[qi->qf_curlist].qf_nonevalid - && !qf_ptr->qf_valid) + } while ((!qfl->qf_nonevalid && !qf_ptr->qf_valid) || (dir == FORWARD_FILE && qf_ptr->qf_fnum == old_qf_fnum)); *qf_index = idx; @@ -2494,7 +2487,7 @@ get_next_valid_entry( */ static qfline_T * get_prev_valid_entry( - qf_info_T *qi, + qf_list_T *qfl, qfline_T *qf_ptr, int *qf_index, int dir) @@ -2511,8 +2504,7 @@ get_prev_valid_entry( return NULL; --idx; qf_ptr = qf_ptr->qf_prev; - } while ((!qi->qf_lists[qi->qf_curlist].qf_nonevalid - && !qf_ptr->qf_valid) + } while ((!qfl->qf_nonevalid && !qf_ptr->qf_valid) || (dir == BACKWARD_FILE && qf_ptr->qf_fnum == old_qf_fnum)); *qf_index = idx; @@ -2527,7 +2519,7 @@ get_prev_valid_entry( */ static qfline_T * get_nth_valid_entry( - qf_info_T *qi, + qf_list_T *qfl, int errornr, qfline_T *qf_ptr, int *qf_index, @@ -2544,9 +2536,9 @@ get_nth_valid_entry( prev_index = *qf_index; if (dir == FORWARD || dir == FORWARD_FILE) - qf_ptr = get_next_valid_entry(qi, qf_ptr, qf_index, dir); + qf_ptr = get_next_valid_entry(qfl, qf_ptr, qf_index, dir); else - qf_ptr = get_prev_valid_entry(qi, qf_ptr, qf_index, dir); + qf_ptr = get_prev_valid_entry(qfl, qf_ptr, qf_index, dir); if (qf_ptr == NULL) { qf_ptr = prev_qf_ptr; @@ -2570,7 +2562,7 @@ get_nth_valid_entry( */ static qfline_T * get_nth_entry( - qf_info_T *qi, + qf_list_T *qfl, int errornr, qfline_T *qf_ptr, int *cur_qfidx) @@ -2584,9 +2576,8 @@ get_nth_entry( qf_ptr = qf_ptr->qf_prev; } /* New error number is greater than the current error number */ - while (errornr > qf_idx && - qf_idx < qi->qf_lists[qi->qf_curlist].qf_count && - qf_ptr->qf_next != NULL) + while (errornr > qf_idx && qf_idx < qfl->qf_count && + qf_ptr->qf_next != NULL) { ++qf_idx; qf_ptr = qf_ptr->qf_next; @@ -2784,9 +2775,10 @@ qf_goto_win_with_ll_file(win_T *use_win, int qf_fnum, qf_info_T *ll_ref) } /* - * Go to a window that shows the specified file. If a window is not found, go - * to the window just above the quickfix window. This is used for opening a - * file from a quickfix window and not from a location window. + * Go to a window that contains the specified buffer 'qf_fnum'. If a window is + * not found, then go to the window just above the quickfix window. This is + * used for opening a file from a quickfix window and not from a location + * window. */ static void qf_goto_win_with_qfl_file(int qf_fnum) @@ -2899,6 +2891,7 @@ qf_jump_edit_buffer( int *opened_window, int *abort) { + qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist]; int retval = OK; if (qf_ptr->qf_type == 1) @@ -2918,7 +2911,7 @@ qf_jump_edit_buffer( else { int old_qf_curlist = qi->qf_curlist; - int save_qfid = qi->qf_lists[qi->qf_curlist].qf_id; + int save_qfid = qfl->qf_id; retval = buflist_getfile(qf_ptr->qf_fnum, (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit); @@ -2942,7 +2935,7 @@ qf_jump_edit_buffer( } } else if (old_qf_curlist != qi->qf_curlist - || !is_qf_entry_present(qi, qf_ptr)) + || !is_qf_entry_present(qfl, qf_ptr)) { if (IS_QF_STACK(qi)) EMSG(_("E925: Current quickfix was changed")); @@ -3087,6 +3080,7 @@ qf_jump(qf_info_T *qi, int errornr, int forceit) { + qf_list_T *qfl; qfline_T *qf_ptr; qfline_T *old_qf_ptr; int qf_index; @@ -3113,13 +3107,15 @@ qf_jump(qf_info_T *qi, return; } - qf_ptr = qi->qf_lists[qi->qf_curlist].qf_ptr; + qfl = &qi->qf_lists[qi->qf_curlist]; + + qf_ptr = qfl->qf_ptr; old_qf_ptr = qf_ptr; - qf_index = qi->qf_lists[qi->qf_curlist].qf_index; + qf_index = qfl->qf_index; old_qf_index = qf_index; if (dir != 0) /* next/prev valid entry */ { - qf_ptr = get_nth_valid_entry(qi, errornr, qf_ptr, &qf_index, dir); + qf_ptr = get_nth_valid_entry(qfl, errornr, qf_ptr, &qf_index, dir); if (qf_ptr == NULL) { qf_ptr = old_qf_ptr; @@ -3128,9 +3124,9 @@ qf_jump(qf_info_T *qi, } } else if (errornr != 0) /* go to specified number */ - qf_ptr = get_nth_entry(qi, errornr, qf_ptr, &qf_index); + qf_ptr = get_nth_entry(qfl, errornr, qf_ptr, &qf_index); - qi->qf_lists[qi->qf_curlist].qf_index = qf_index; + qfl->qf_index = qf_index; if (qf_win_pos_update(qi, old_qf_index)) /* No need to print the error message if it's visible in the error * window */ @@ -3215,8 +3211,8 @@ failed: theend: if (qi != NULL) { - qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr; - qi->qf_lists[qi->qf_curlist].qf_index = qf_index; + qfl->qf_ptr = qf_ptr; + qfl->qf_index = qf_index; } if (p_swb != old_swb && opened_window) { @@ -3242,9 +3238,11 @@ static int qfLineAttr; /* * Display information about a single entry from the quickfix/location list. * Used by ":clist/:llist" commands. + * 'cursel' will be set to TRUE for the currently selected entry in the + * quickfix list. */ static void -qf_list_entry(qf_info_T *qi, qfline_T *qfp, int qf_idx) +qf_list_entry(qfline_T *qfp, int qf_idx, int cursel) { char_u *fname; buf_T *buf; @@ -3285,8 +3283,7 @@ qf_list_entry(qf_info_T *qi, qfline_T *qfp, int qf_idx) return; msg_putchar('\n'); - msg_outtrans_attr(IObuff, qf_idx == qi->qf_lists[qi->qf_curlist].qf_index - ? HL_ATTR(HLF_QFL) : qfFileAttr); + msg_outtrans_attr(IObuff, cursel ? HL_ATTR(HLF_QFL) : qfFileAttr); if (qfp->qf_lnum != 0) msg_puts_attr((char_u *)":", qfSepAttr); @@ -3326,6 +3323,7 @@ qf_list_entry(qf_info_T *qi, qfline_T *qfp, int qf_idx) void qf_list(exarg_T *eap) { + qf_list_T *qfl; qfline_T *qfp; int i; int idx1 = 1; @@ -3362,15 +3360,16 @@ qf_list(exarg_T *eap) EMSG(_(e_trailing)); return; } + qfl = &qi->qf_lists[qi->qf_curlist]; if (plus) { - i = qi->qf_lists[qi->qf_curlist].qf_index; + i = qfl->qf_index; idx2 = i + idx1; idx1 = i; } else { - i = qi->qf_lists[qi->qf_curlist].qf_count; + i = qfl->qf_count; if (idx1 < 0) idx1 = (-idx1 > i) ? 0 : idx1 + i + 1; if (idx2 < 0) @@ -3394,17 +3393,17 @@ qf_list(exarg_T *eap) if (qfLineAttr == 0) qfLineAttr = HL_ATTR(HLF_N); - if (qi->qf_lists[qi->qf_curlist].qf_nonevalid) + if (qfl->qf_nonevalid) all = TRUE; - qfp = qi->qf_lists[qi->qf_curlist].qf_start; - for (i = 1; !got_int && i <= qi->qf_lists[qi->qf_curlist].qf_count; ) + qfp = qfl->qf_start; + for (i = 1; !got_int && i <= qfl->qf_count; ) { if ((qfp->qf_valid || all) && idx1 <= i && i <= idx2) { if (got_int) break; - qf_list_entry(qi, qfp, i); + qf_list_entry(qfp, i, i == qfl->qf_index); } qfp = qfp->qf_next; @@ -3547,12 +3546,11 @@ qf_history(exarg_T *eap) * associated with the list like context and title are not freed. */ static void -qf_free_items(qf_info_T *qi, int idx) +qf_free_items(qf_list_T *qfl) { qfline_T *qfp; qfline_T *qfpnext; int stop = FALSE; - qf_list_T *qfl = &qi->qf_lists[idx]; while (qfl->qf_count && qfl->qf_start != NULL) { @@ -3595,11 +3593,9 @@ qf_free_items(qf_info_T *qi, int idx) * associated context information and the title. */ static void -qf_free(qf_info_T *qi, int idx) +qf_free(qf_list_T *qfl) { - qf_list_T *qfl = &qi->qf_lists[idx]; - - qf_free_items(qi, idx); + qf_free_items(qfl); VIM_CLEAR(qfl->qf_title); free_tv(qfl->qf_ctx); @@ -3800,6 +3796,16 @@ ex_cclose(exarg_T *eap) win_close(win, FALSE); } +/* + * Set "w:quickfix_title" if "qi" has a title. + */ + static void +qf_set_title_var(qf_list_T *qfl) +{ + if (qfl->qf_title != NULL) + set_internal_string_var((char_u *)"w:quickfix_title", qfl->qf_title); +} + /* * ":copen": open a window that shows the list of errors. * ":lopen": open a window that shows the location list. @@ -3919,7 +3925,7 @@ ex_copen(exarg_T *eap) prevwin = win; } - qf_set_title_var(qi); + qf_set_title_var(&qi->qf_lists[qi->qf_curlist]); /* * Fill the buffer with the quickfix list. @@ -4033,7 +4039,7 @@ qf_win_pos_update( /* * Check whether the given window is displaying the specified quickfix/location - * list buffer + * stack. */ static int is_qf_win(win_T *win, qf_info_T *qi) @@ -4053,7 +4059,7 @@ is_qf_win(win_T *win, qf_info_T *qi) } /* - * Find a window displaying the quickfix/location list 'qi' + * Find a window displaying the quickfix/location stack 'qi' * Only searches in the current tabpage. */ static win_T * @@ -4097,7 +4103,7 @@ qf_update_win_titlevar(qf_info_T *qi) { curwin_save = curwin; curwin = win; - qf_set_title_var(qi); + qf_set_title_var(&qi->qf_lists[qi->qf_curlist]); curwin = curwin_save; } } @@ -4142,17 +4148,6 @@ qf_update_buffer(qf_info_T *qi, qfline_T *old_last) } } -/* - * Set "w:quickfix_title" if "qi" has a title. - */ - static void -qf_set_title_var(qf_info_T *qi) -{ - if (qi->qf_lists[qi->qf_curlist].qf_title != NULL) - set_internal_string_var((char_u *)"w:quickfix_title", - qi->qf_lists[qi->qf_curlist].qf_title); -} - /* * Add an error line to the quickfix buffer. */ @@ -4679,9 +4674,8 @@ qf_get_cur_valid_idx(exarg_T *eap) * For :cfdo and :lfdo returns the 'n'th valid file entry. */ static int -qf_get_nth_valid_entry(qf_info_T *qi, int n, int fdo) +qf_get_nth_valid_entry(qf_list_T *qfl, int n, int fdo) { - qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist]; qfline_T *qfp = qfl->qf_start; int i, eidx; int prev_fnum = 0; @@ -4762,7 +4756,7 @@ ex_cc(exarg_T *eap) */ if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo) - errornr = qf_get_nth_valid_entry(qi, + errornr = qf_get_nth_valid_entry(&qi->qf_lists[qi->qf_curlist], eap->addr_count > 0 ? (int)eap->line1 : 1, eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo); @@ -5712,7 +5706,7 @@ qf_get_list_from_lines(dict_T *what, dictitem_T *di, dict_T *retdict) TRUE, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0) { (void)get_errorlist(qi, NULL, 0, l); - qf_free(qi, 0); + qf_free(&qi->qf_lists[0]); } free(qi); } @@ -5983,6 +5977,7 @@ qf_getprop_idx(qf_info_T *qi, int qf_idx, dict_T *retdict) qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) { qf_info_T *qi = &ql_info; + qf_list_T *qfl; int status = OK; int qf_idx; dictitem_T *di; @@ -6003,6 +5998,8 @@ qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) if (qi == NULL || qi->qf_listcount == 0 || qf_idx == INVALID_QFIDX) return qf_getprop_defaults(qi, flags, retdict); + qfl = &qi->qf_lists[qf_idx]; + if (flags & QF_GETLIST_TITLE) status = qf_getprop_title(qi, qf_idx, retdict); if ((status == OK) && (flags & QF_GETLIST_NR)) @@ -6014,15 +6011,13 @@ qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) if ((status == OK) && (flags & QF_GETLIST_CONTEXT)) status = qf_getprop_ctx(qi, qf_idx, retdict); if ((status == OK) && (flags & QF_GETLIST_ID)) - status = dict_add_number(retdict, "id", qi->qf_lists[qf_idx].qf_id); + status = dict_add_number(retdict, "id", qfl->qf_id); if ((status == OK) && (flags & QF_GETLIST_IDX)) status = qf_getprop_idx(qi, qf_idx, retdict); if ((status == OK) && (flags & QF_GETLIST_SIZE)) - status = dict_add_number(retdict, "size", - qi->qf_lists[qf_idx].qf_count); + status = dict_add_number(retdict, "size", qfl->qf_count); if ((status == OK) && (flags & QF_GETLIST_TICK)) - status = dict_add_number(retdict, "changedtick", - qi->qf_lists[qf_idx].qf_changedtick); + status = dict_add_number(retdict, "changedtick", qfl->qf_changedtick); if ((status == OK) && (wp != NULL) && (flags & QF_GETLIST_FILEWINID)) status = qf_getprop_filewinid(wp, qi, retdict); @@ -6118,6 +6113,7 @@ qf_add_entries( char_u *title, int action) { + qf_list_T *qfl = &qi->qf_lists[qf_idx]; listitem_T *li; dict_T *d; qfline_T *old_last = NULL; @@ -6128,14 +6124,15 @@ qf_add_entries( /* make place for a new list */ qf_new_list(qi, title); qf_idx = qi->qf_curlist; + qfl = &qi->qf_lists[qf_idx]; } else if (action == 'a' && !qf_list_empty(qi, qf_idx)) /* Adding to existing list, use last entry. */ - old_last = qi->qf_lists[qf_idx].qf_last; + old_last = qfl->qf_last; else if (action == 'r') { - qf_free_items(qi, qf_idx); - qf_store_title(qi, qf_idx, title); + qf_free_items(qfl); + qf_store_title(qfl, title); } for (li = list->lv_first; li != NULL; li = li->li_next) @@ -6152,17 +6149,16 @@ qf_add_entries( break; } - if (qi->qf_lists[qf_idx].qf_index == 0) + if (qfl->qf_index == 0) /* no valid entry */ - qi->qf_lists[qf_idx].qf_nonevalid = TRUE; + qfl->qf_nonevalid = TRUE; else - qi->qf_lists[qf_idx].qf_nonevalid = FALSE; + qfl->qf_nonevalid = FALSE; if (action != 'a') { - qi->qf_lists[qf_idx].qf_ptr = - qi->qf_lists[qf_idx].qf_start; + qfl->qf_ptr = qfl->qf_start; if (!qf_list_empty(qi, qf_idx)) - qi->qf_lists[qf_idx].qf_index = 1; + qfl->qf_index = 1; } /* Don't update the cursor in quickfix window when appending entries */ @@ -6302,7 +6298,7 @@ qf_setprop_items_from_lines( return FAIL; if (action == 'r') - qf_free_items(qi, qf_idx); + qf_free_items(&qi->qf_lists[qf_idx]); if (qf_init_ext(qi, qf_idx, NULL, NULL, &di->di_tv, errorformat, FALSE, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0) retval = OK; @@ -6314,15 +6310,15 @@ qf_setprop_items_from_lines( * Set quickfix list context. */ static int -qf_setprop_context(qf_info_T *qi, int qf_idx, dictitem_T *di) +qf_setprop_context(qf_list_T *qfl, dictitem_T *di) { typval_T *ctx; - free_tv(qi->qf_lists[qf_idx].qf_ctx); + free_tv(qfl->qf_ctx); ctx = alloc_tv(); if (ctx != NULL) copy_tv(&di->di_tv, ctx); - qi->qf_lists[qf_idx].qf_ctx = ctx; + qfl->qf_ctx = ctx; return OK; } @@ -6361,7 +6357,7 @@ qf_set_properties(qf_info_T *qi, dict_T *what, int action, char_u *title) if ((di = dict_find(what, (char_u *)"lines", -1)) != NULL) retval = qf_setprop_items_from_lines(qi, qf_idx, what, di, action); if ((di = dict_find(what, (char_u *)"context", -1)) != NULL) - retval = qf_setprop_context(qi, qf_idx, di); + retval = qf_setprop_context(&qi->qf_lists[qf_idx], di); if (retval == OK) qf_list_changed(qi, qf_idx); @@ -6370,7 +6366,8 @@ qf_set_properties(qf_info_T *qi, dict_T *what, int action, char_u *title) } /* - * Find the non-location list window with the specified location list. + * Find the non-location list window with the specified location list in the + * current tabpage. */ static win_T * find_win_with_ll(qf_info_T *qi) @@ -6399,7 +6396,7 @@ qf_free_stack(win_T *wp, qf_info_T *qi) { /* If the quickfix/location list window is open, then clear it */ if (qi->qf_curlist < qi->qf_listcount) - qf_free(qi, qi->qf_curlist); + qf_free(&qi->qf_lists[qi->qf_curlist]); qf_update_buffer(qi, NULL); } diff --git a/src/version.c b/src/version.c index d14f0d4129..9f4a0ec321 100644 --- a/src/version.c +++ b/src/version.c @@ -794,6 +794,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 407, /**/ 406, /**/ From a87f8fd3fe8697d2b43da5c89e3079aaa0f1c9c7 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2018 22:58:41 +0200 Subject: [PATCH 7/7] patch 8.1.0408: MSVC: cannot use the "x64" native compiler option Problem: MSVC: cannot use the "x64" native compiler option. Solution: Ignore case for %Platform%. Improve documentation. (Ken Takata) --- src/INSTALLpc.txt | 32 ++++++++++++++++++++++++-------- src/msvc2015.bat | 6 +++++- src/version.c | 2 ++ 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/INSTALLpc.txt b/src/INSTALLpc.txt index 73d13dc90c..d170da05d9 100644 --- a/src/INSTALLpc.txt +++ b/src/INSTALLpc.txt @@ -3,7 +3,7 @@ INSTALLpc.txt - Installation of Vim on PC This file contains instructions for compiling Vim. If you already have an executable version of Vim, you don't need this. -You can find the lastest here: https://github.com/vim/vim-win32-installer +You can find the latest here: https://github.com/vim/vim-win32-installer This page also has links to install support for interfaces such as Perl, Python, Lua, etc. @@ -164,6 +164,11 @@ options: msvc2015 For x64 builds run this with the "x86_amd64" option: msvc2015 x86_amd64 +This enables x86_x64 cross compiler. This works on any editions including +Express edition. +If you use Community (or Professional) edition, you can enable the x64 native +compiler by using the "x64" option: + msvc2015 x64 The following Visual C++ team blog can serve as a reference page: http://blogs.msdn.com/b/vcblog/archive/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-2012.aspx @@ -182,7 +187,7 @@ Visual C++ Toolkit 2003 *msvc-2003-toolkit* You could download the Microsoft Visual C++ Toolkit 2003 from http://msdn.microsoft.com/visualc/vctoolkit2003/ -Unfortunately this URL is no longer valid. Inofficial downloads appear to be +Unfortunately this URL is no longer valid. Unofficial downloads appear to be available from links mentioned on these pages (use at your own risk): http://www.filewatcher.com/m/VCToolkitSetup.exe.32952488.0.0.html http://feargame.net/wiki/index.php?title=Building_Source_with_the_VC2003_Toolkit @@ -276,12 +281,12 @@ Download an installer: Execute the installer and follow the instructions to update basic packages. At the end keep the checkbox checked to run msys2 now. If needed, you can -open the window from the start menu, MSYS2 64 bit / MSYS2 MSYS +open the window from the start menu, MSYS2 64 bit / MSYS2 MSYS. Execute: $ pacman -Syu - -And restart MSYS2 window (select "MSYS2 MSYS" icon from the Start Menu). + +And restart MSYS2 console (select "MSYS2 MSYS" icon from the Start Menu). Then execute: $ pacman -Su @@ -297,6 +302,7 @@ The following package groups are required for building Vim: * mingw-w64-i686-toolchain (for building 32-bit Vim) * mingw-w64-x86_64-toolchain (for building 64-bit Vim) +(These groups also include some useful packages which are not used by Vim.) Use the following command to install them: $ pacman -S base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain @@ -305,8 +311,18 @@ Or you can use the `pacboy` command to avoid long package names: $ pacboy -S base-devel: toolchain:m +The suffix ":" means that it disables the package name translation. +The suffix ":m" means both i686 and x86_64. You can also use the ":i" suffix +to install only i686, and the ":x" suffix to install only x86_64. (See `pacboy help` for the help.) +See also the pacman page in ArchWiki for the general usage of pacman: + https://wiki.archlinux.org/index.php/pacman + +MSYS2 has its own git package, and you can also install it via pacman: + + $ pacman -S git + 2.3. Keep the build environment up-to-date @@ -316,7 +332,7 @@ In that case, you just need to execute the command: $ pacman -Syu -# Build Vim +2.4. Build Vim Select one of the following icon from the Start Menu: @@ -329,12 +345,12 @@ Go to the source directory of Vim, then execute the make command. E.g.: make -f Make_ming.mak GUI=no make -f Make_ming.mak GUI=no DEBUG=yes -NOTE: you can't execute the vim.exe in the MSYS console, open a normal Windows +NOTE: you can't execute vim.exe in the MSYS2 console, open a normal Windows console for that. You need to set $PATH to be able to build there, e.g.: set PATH=c:\msys64\mingw32\bin;c:\msys64\usr\bin;%PATH% -This command is in msys32.bat. Or or the 64 bit compiler use msys64.bat: +This command is in msys32.bat. Or for the 64 bit compiler use msys64.bat: set PATH=c:\msys64\mingw64\bin;c:\msys64\usr\bin;%PATH% diff --git a/src/msvc2015.bat b/src/msvc2015.bat index 5621fca752..41e6f9037a 100644 --- a/src/msvc2015.bat +++ b/src/msvc2015.bat @@ -7,6 +7,10 @@ rem For x86 builds run this without options: rem msvc2015 rem For x64 builds run this with "x86_amd64" option: rem msvc2015 x86_amd64 +rem This works on any editions including Express edition. +rem If you use Community (or Professional) edition, you can also use "x64" +rem option: +rem msvc2015 x64 @echo on call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" %* @@ -23,7 +27,7 @@ if not exist "%WinSdk71%" ( ) set INCLUDE=%WinSdk71%\Include;%INCLUDE% -if "%Platform%"=="x64" ( +if /i "%Platform%"=="x64" ( set "LIB=%WinSdk71%\Lib\x64;%LIB%" set SUBSYSTEM_VER=5.02 ) else ( diff --git a/src/version.c b/src/version.c index 9f4a0ec321..51601a028f 100644 --- a/src/version.c +++ b/src/version.c @@ -794,6 +794,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 408, /**/ 407, /**/