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