@@ -3567,8 +3567,29 @@ on_select_tab(
35673567 gpointer data UNUSED )
35683568{
35693569 if (!ignore_tabline_evt )
3570- {
35713570 send_tabline_event (idx + 1 );
3571+ }
3572+
3573+ /*
3574+ * Handle reordering the tabs (using D&D).
3575+ */
3576+ static void
3577+ on_tab_reordered (
3578+ GtkNotebook * notebook UNUSED ,
3579+ # if GTK_CHECK_VERSION (3 ,0 ,0 )
3580+ gpointer * page UNUSED ,
3581+ # else
3582+ GtkNotebookPage * page UNUSED ,
3583+ # endif
3584+ gint idx ,
3585+ gpointer data UNUSED )
3586+ {
3587+ if (!ignore_tabline_evt )
3588+ {
3589+ if ((tabpage_index (curtab ) - 1 ) < idx )
3590+ tabpage_move (idx + 1 );
3591+ else
3592+ tabpage_move (idx );
35723593 }
35733594}
35743595
@@ -3658,6 +3679,9 @@ gui_mch_update_tabline(void)
36583679 page ,
36593680 event_box ,
36603681 nr ++ );
3682+ gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (gui .tabline ),
3683+ page ,
3684+ TRUE);
36613685 }
36623686
36633687 event_box = gtk_notebook_get_tab_label (GTK_NOTEBOOK (gui .tabline ), page );
@@ -4093,14 +4117,19 @@ gui_mch_init(void)
40934117# endif
40944118 gtk_container_add (GTK_CONTAINER (event_box ), label );
40954119 gtk_notebook_set_tab_label (GTK_NOTEBOOK (gui .tabline ), page , event_box );
4120+ gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (gui .tabline ), page , TRUE);
40964121 }
40974122
40984123# if GTK_CHECK_VERSION (3 ,0 ,0 )
40994124 g_signal_connect (G_OBJECT (gui .tabline ), "switch-page" ,
41004125 G_CALLBACK (on_select_tab ), NULL );
4126+ g_signal_connect (G_OBJECT (gui .tabline ), "page-reordered" ,
4127+ G_CALLBACK (on_tab_reordered ), NULL );
41014128# else
41024129 gtk_signal_connect (GTK_OBJECT (gui .tabline ), "switch_page" ,
41034130 GTK_SIGNAL_FUNC (on_select_tab ), NULL );
4131+ gtk_signal_connect (GTK_OBJECT (gui .tabline ), "page-reordered" ,
4132+ GTK_SIGNAL_FUNC (on_tab_reordered ), NULL );
41044133# endif
41054134
41064135 /* Create a popup menu for the tab line and connect it. */
0 commit comments