r14550 - gnucash/trunk - Make tabs within one notebook reorderable by dnd for gtk>=2.10.
Andreas Köhler
andi5 at cvs.gnucash.org
Fri Jul 21 13:20:50 EDT 2006
Author: andi5
Date: 2006-07-21 13:20:49 -0400 (Fri, 21 Jul 2006)
New Revision: 14550
Trac: http://svn.gnucash.org/trac/changeset/14550
Modified:
gnucash/trunk/ChangeLog
gnucash/trunk/configure.in
gnucash/trunk/src/gnome-utils/gnc-main-window.c
Log:
Make tabs within one notebook reorderable by dnd for gtk>=2.10.
Fixes #343454.
Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog 2006-07-21 14:05:04 UTC (rev 14549)
+++ gnucash/trunk/ChangeLog 2006-07-21 17:20:49 UTC (rev 14550)
@@ -1,3 +1,9 @@
+2006-07-21 Andreas Köhler <andi5.py at 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 at tuhh.de>
* src/gnc-module/gnc-module.c: On windows, deactivate gnucash's
Modified: gnucash/trunk/configure.in
===================================================================
--- gnucash/trunk/configure.in 2006-07-21 14:05:04 UTC (rev 14549)
+++ gnucash/trunk/configure.in 2006-07-21 17:20:49 UTC (rev 14550)
@@ -1176,6 +1176,18 @@
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 @@
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)
Modified: gnucash/trunk/src/gnome-utils/gnc-main-window.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-main-window.c 2006-07-21 14:05:04 UTC (rev 14549)
+++ gnucash/trunk/src/gnome-utils/gnc-main-window.c 2006-07-21 17:20:49 UTC (rev 14550)
@@ -108,6 +108,9 @@
/* 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 @@
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 @@
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,7 +2853,47 @@
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,
GncMainWindow *window)
More information about the gnucash-changes
mailing list