Make tabs within one notebook reorderable by dnd for gtk>=2.10.

Fixes #343454.


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@14550 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Andreas Köhler 2006-07-21 17:20:49 +00:00
parent 29c95a94cb
commit 1ff9e38a42
3 changed files with 69 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2006-07-21 Andreas Köhler <andi5.py@gmx.net>
* configure.in:
* src/gnome-utils/gnc-main-window.c: Make tabs within one notebook
reorderable by dnd for gtk>=2.10. Fixes #343454.
2006-07-18 Christian Stimming <stimming@tuhh.de>
* src/gnc-module/gnc-module.c: On windows, deactivate gnucash's

View File

@ -1176,6 +1176,18 @@ then
AM_CONDITIONAL(HAVE_GTK26, test "x$HAVE_GTK26" = "xyes" )
AC_MSG_CHECKING(for GTK - version >= 2.10.0)
if $PKG_CONFIG 'gtk+-2.0 >= 2.10.0'
then
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_GTK_2_10,1,[System has gtk 2.10.0 or better])
HAVE_GTK_2_10=yes
else
AC_MSG_RESULT(no)
fi
AM_CONDITIONAL(HAVE_GTK_2_10, test "x$HAVE_GTK_2_10" = "xyes" )
AC_MSG_CHECKING(for pango version >= 1.8.0)
if $PKG_CONFIG 'pango >= 1.8.0'
then
@ -1887,6 +1899,7 @@ then
else
### A bunch of am conditionals that need to be set
AM_CONDITIONAL(HAVE_GTK26, false )
AM_CONDITIONAL(HAVE_GTK_2_10, false)
AM_CONDITIONAL(HAVE_PANGO18, false )
AM_CONDITIONAL(HAVE_LIBGSF, false)
AM_CONDITIONAL(HAVE_GOFFICE, false)

View File

@ -108,6 +108,9 @@ static void gnc_window_main_window_init (GncWindowIface *iface);
/* Callbacks */
static void gnc_main_window_add_widget (GtkUIManager *merge, GtkWidget *widget, GncMainWindow *window);
static void gnc_main_window_switch_page (GtkNotebook *notebook, GtkNotebookPage *notebook_page, gint pos, GncMainWindow *window);
#ifdef HAVE_GTK_2_10
static void gnc_main_window_page_reordered (GtkNotebook *notebook, GtkWidget *child, guint pos, GncMainWindow *window);
#endif
static void gnc_main_window_plugin_added (GncPlugin *manager, GncPlugin *plugin, GncMainWindow *window);
static void gnc_main_window_plugin_removed (GncPlugin *manager, GncPlugin *plugin, GncMainWindow *window);
@ -1889,6 +1892,9 @@ gnc_main_window_connect (GncMainWindow *window,
priv->usage_order = g_list_prepend (priv->usage_order, page);
gtk_notebook_append_page_menu (notebook, page->notebook_page,
tab_hbox, menu_label);
#ifdef HAVE_GTK_2_10
gtk_notebook_set_tab_reorderable (notebook, page->notebook_page, TRUE);
#endif
gnc_plugin_page_inserted (page);
gtk_notebook_set_current_page (notebook, -1);
if (GNC_PLUGIN_PAGE_GET_CLASS(page)->window_changed)
@ -2623,6 +2629,10 @@ gnc_main_window_setup_window (GncMainWindow *window)
gtk_widget_show (priv->notebook);
g_signal_connect (G_OBJECT (priv->notebook), "switch-page",
G_CALLBACK (gnc_main_window_switch_page), window);
#ifdef HAVE_GTK_2_10
g_signal_connect (G_OBJECT (priv->notebook), "page-reordered",
G_CALLBACK (gnc_main_window_page_reordered), window);
#endif
gtk_box_pack_start (GTK_BOX (main_vbox), priv->notebook,
TRUE, TRUE, 0);
@ -2843,6 +2853,46 @@ gnc_main_window_switch_page (GtkNotebook *notebook,
LEAVE(" ");
}
#ifdef HAVE_GTK_2_10
/** This function is invoked when a GtkNotebook tab gets reordered by
* drag and drop. It adjusts the list installed_pages to reflect the new
* ordering so that GnuCash saves and restores the tabs correctly.
*
* @internal
*/
static void
gnc_main_window_page_reordered (GtkNotebook *notebook,
GtkWidget *child,
guint pos,
GncMainWindow *window)
{
GncMainWindowPrivate *priv;
GncPluginPage *page;
GList *old_link;
ENTER("Notebook %p, child %p, index %d, window %p",
notebook, child, pos, window);
g_return_if_fail (GNC_IS_MAIN_WINDOW (window));
if (!child) return;
priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
page = g_object_get_data (G_OBJECT (child), PLUGIN_PAGE_LABEL);
if (!page) return;
old_link = g_list_find (priv->installed_pages, page);
if (!old_link) return;
priv->installed_pages = g_list_delete_link (priv->installed_pages,
old_link);
priv->installed_pages = g_list_insert (priv->installed_pages,
page, pos);
LEAVE(" ");
}
#endif
static void
gnc_main_window_plugin_added (GncPlugin *manager,
GncPlugin *plugin,