[Xfce4-commits] r23758 - xarchiver/branches/xarchiver-psybsd/src

Stephan Arts stephan at xfce.org
Mon Nov 6 14:09:24 CET 2006


Author: stephan
Date: 2006-11-06 13:09:24 +0000 (Mon, 06 Nov 2006)
New Revision: 23758

Modified:
   xarchiver/branches/xarchiver-psybsd/src/application.c
   xarchiver/branches/xarchiver-psybsd/src/application.h
   xarchiver/branches/xarchiver-psybsd/src/main.c
   xarchiver/branches/xarchiver-psybsd/src/main_window.c
   xarchiver/branches/xarchiver-psybsd/src/main_window.h
   xarchiver/branches/xarchiver-psybsd/src/notebook.c
Log:
Implemented application object



Modified: xarchiver/branches/xarchiver-psybsd/src/application.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/application.c	2006-11-06 12:52:57 UTC (rev 23757)
+++ xarchiver/branches/xarchiver-psybsd/src/application.c	2006-11-06 13:09:24 UTC (rev 23758)
@@ -21,11 +21,18 @@
 #include <glib.h>
 #include <gtk/gtk.h>
 #include <libxarchiver/libxarchiver.h>
+
+#include <gettext.h>
+
+#include "new_dialog.h"
+#include "add_dialog.h"
+#include "extract_dialog.h"
+
 #include "settings.h"
 #include "archive_store.h"
 #include "navigation_bar.h"
+#include "application.h"
 #include "main_window.h"
-#include "application.h"
 
 static void
 xa_application_class_init(XAApplicationClass *archive_class);
@@ -34,11 +41,10 @@
 xa_application_init(XAApplication *archive);
 static void
 xa_application_finalize(GObject *object);
+static void
+xa_application_dispose(GObject *object);
 
-/* properties */
-enum {
-	XA_APPLICATION_NAV_HISTORY = 1
-};
+static gint xa_application_signals[1];
 
 GType
 xa_application_get_type ()
@@ -61,26 +67,51 @@
 			NULL
 		};
 
-		xa_application_type = g_type_register_static (GTK_TYPE_CONTAINER, "XAApplication", &xa_application_info, 0);
+		xa_application_type = g_type_register_static (G_TYPE_OBJECT, "XAApplication", &xa_application_info, 0);
 	}
 	return xa_application_type;
 }
 
+/* Destroy code was copied from gtk+-2.8.16 */
 static void
 xa_application_class_init(XAApplicationClass *application_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (application_class);
 	object_class->finalize     = xa_application_finalize;
+	object_class->dispose      = xa_application_dispose;
+
+	xa_application_signals[0] = g_signal_new("destroy",
+			G_TYPE_FROM_CLASS(application_class),
+			G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+			0,
+			NULL,
+			NULL,
+			g_cclosure_marshal_VOID__VOID,
+			G_TYPE_NONE,
+			0);
 }
 
 static void
 xa_application_init(XAApplication *application)
 {
+	application->settings = xa_settings_new();
+	xa_settings_set_group(application->settings, "Global");
+
+	application->props._tabs = xa_settings_read_bool_entry(application->settings, "UseTabs", TRUE);
 }
 
 static void
+xa_application_dispose(GObject *object)
+{
+	g_signal_emit(object, xa_application_signals[0], 0, object);
+}
+
+static void
 xa_application_finalize(GObject *object)
 {
+#ifdef DEBUG
+	g_debug("Application Destroyed");
+#endif
 }
 
 XAApplication *
@@ -98,5 +129,134 @@
 GtkWidget *
 xa_application_new_window(XAApplication *app)
 {
-	return xa_main_window_new(app->icon_theme);
+	GtkWidget *window = xa_main_window_new(app, app->icon_theme);
+	gtk_widget_set_size_request(window, 500, 300);
+	return window;
 }
+
+void
+cb_xa_application_archive_status_changed(LXAArchive *archive, gpointer data)
+{
+	XAApplication *app = XA_APPLICATION(data);
+
+	switch(archive->status)
+	{
+		case LXA_ARCHIVESTATUS_IDLE:
+			lxa_close_archive(archive);
+		case LXA_ARCHIVESTATUS_ERROR:
+		case LXA_ARCHIVESTATUS_USERBREAK:
+			g_object_unref(app);
+			break;
+		default:
+			break;
+	}
+}
+
+gint
+xa_application_extract_archive(XAApplication *app, gchar *archive_path, gchar *dest_path)
+{
+	GtkWidget *dialog = NULL;
+	gint result = 0;
+	LXAArchive *lp_archive = NULL;
+	LXAArchiveSupport *lp_support = NULL;
+
+	if(!lxa_open_archive(archive_path, &lp_archive))
+	{
+		g_signal_connect(G_OBJECT(lp_archive), "lxa_status_changed", G_CALLBACK(cb_xa_application_archive_status_changed), app);
+		lp_support = lxa_get_support_for_mime(lxa_mime_info_get_name(lp_archive->mime_info));
+		if(!dest_path)
+		{
+			dialog = xa_extract_archive_dialog_new(lp_support, lp_archive, FALSE);
+			result = gtk_dialog_run (GTK_DIALOG (dialog) );
+			if(result == GTK_RESPONSE_CANCEL || result == GTK_RESPONSE_DELETE_EVENT)
+			{
+				gtk_widget_destroy (GTK_WIDGET (dialog) );
+				lxa_close_archive(lp_archive);
+			}
+			if(result == GTK_RESPONSE_OK)
+			{
+				dest_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+				lxa_archive_support_extract(lp_support, lp_archive, dest_path, NULL);
+				g_free(dest_path);
+				dest_path = NULL;
+			}
+		}
+		else
+			lxa_archive_support_extract(lp_support, lp_archive, dest_path, NULL);
+	}
+	g_object_ref(app);
+	return 0;
+}
+
+gint
+xa_application_new_archive(XAApplication *app, gchar *archive_path, GSList *files)
+{
+	GtkWidget *dialog = NULL;
+	gint result = 0;
+	LXAArchive *lp_archive = NULL;
+	LXAArchiveSupport *lp_support = NULL;
+
+	if(!archive_path)
+	{
+		dialog = xa_new_archive_dialog_new();
+		result = gtk_dialog_run (GTK_DIALOG (dialog) );
+		if(result == GTK_RESPONSE_CANCEL || result == GTK_RESPONSE_DELETE_EVENT)
+		{
+			gtk_widget_destroy (GTK_WIDGET (dialog) );
+			return 2;
+		}
+		if(result == GTK_RESPONSE_OK)
+		{
+			archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+			gtk_widget_destroy (GTK_WIDGET (dialog) );
+		}
+		if(lxa_new_archive(archive_path, TRUE, NULL, &lp_archive))
+		{
+			/* 
+			 * Could not create archive (mime type unsupported) 
+			 */
+			dialog = gtk_message_dialog_new (NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Could not create archive, MIME-type unsupported"));
+			gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+			gtk_dialog_run (GTK_DIALOG (dialog) );
+			gtk_widget_destroy (GTK_WIDGET (dialog) );
+			return 1;
+		}
+		g_free(archive_path);
+		archive_path = NULL;
+	}
+	else
+	{
+		if(lxa_open_archive(archive_path, &lp_archive))
+		{
+			/*
+			 * Could not open archive (mime type not supported or file did not exist)
+			 * Should be a more specific error message.
+			 */ 
+			dialog = gtk_message_dialog_new (NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Could not open archive, MIME-type unsupported or file did not exist"));
+			gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+			gtk_dialog_run (GTK_DIALOG (dialog) );
+			gtk_widget_destroy (GTK_WIDGET (dialog) );
+			return 1;
+		}
+	}
+	g_signal_connect(G_OBJECT(lp_archive), "lxa_status_changed", G_CALLBACK(cb_xa_application_archive_status_changed), NULL);
+	lp_support = lxa_get_support_for_mime(lxa_mime_info_get_name(lp_archive->mime_info));
+	lxa_archive_support_add(lp_support, lp_archive, files);
+	g_object_ref(app);
+	return 0;
+}
+
+gint
+xa_application_open_archive(XAApplication *app, GtkWidget *window, gchar *path)
+{
+	if(!window)
+	{
+		window = xa_application_new_window(app);
+	}
+	if(app->props._tabs)
+		xa_main_window_open_archive(XA_MAIN_WINDOW(window), path, -1);
+	else
+		xa_main_window_open_archive(XA_MAIN_WINDOW(window), path, 0);
+	gtk_widget_show_all(window);
+	return 0;
+}

Modified: xarchiver/branches/xarchiver-psybsd/src/application.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/application.h	2006-11-06 12:52:57 UTC (rev 23757)
+++ xarchiver/branches/xarchiver-psybsd/src/application.h	2006-11-06 13:09:24 UTC (rev 23758)
@@ -47,6 +47,9 @@
 	GObject parent;
 	GtkIconTheme *icon_theme;
 	XASettings *settings;
+	struct {
+		gboolean _tabs;
+	} props;
 };
 
 typedef struct _XAApplicationClass XAApplicationClass;
@@ -61,5 +64,10 @@
 
 GtkWidget *xa_application_new_window(XAApplication *);
 
+gint xa_application_extract_archive(XAApplication *, gchar *, gchar *);
+gint xa_application_new_archive(XAApplication *, gchar *, GSList *);
+
+gint xa_application_open_archive(XAApplication *, GtkWidget *, gchar *);
+
 G_END_DECLS
 #endif /* __XARCHIVER_APPLICATION_H__*/

Modified: xarchiver/branches/xarchiver-psybsd/src/main.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main.c	2006-11-06 12:52:57 UTC (rev 23757)
+++ xarchiver/branches/xarchiver-psybsd/src/main.c	2006-11-06 13:09:24 UTC (rev 23758)
@@ -1,4 +1,5 @@
-/* *  Copyright (c) 2006 Stephan Arts <psybsd at gmail.com>
+/*
+ *  Copyright (c) 2006 Stephan Arts <psybsd at gmail.com>
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -24,13 +25,11 @@
 #include <gettext.h>
 
 #include "settings.h"
-#include "new_dialog.h"
-#include "add_dialog.h"
-#include "extract_dialog.h"
 #include "main.h"
 #include "archive_store.h"
 #include "navigation_bar.h"
 #include "notebook.h"
+#include "application.h"
 #include "main_window.h"
 
 gboolean version = FALSE;
@@ -99,11 +98,8 @@
 
 int main(int argc, char **argv)
 {
-	gint result = 0;
-	GtkWidget *dialog = NULL;
 	GtkWidget *main_window = NULL;
-	LXAArchive *lp_archive;
-	LXAArchiveSupport *lpSupport;
+	XAApplication *xa_app;
 	GtkIconTheme *xa_icon_theme;
 	GError *cli_error = NULL;
 	gint i = 0;
@@ -136,6 +132,11 @@
 		return 0;
 	}
 
+	xa_icon_theme = gtk_icon_theme_get_default();
+	xa_app = xa_application_new(xa_icon_theme);
+
+	g_signal_connect(G_OBJECT(xa_app), "destroy", G_CALLBACK(gtk_main_quit), NULL);
+
 	if(extract_archive_path || extract_archive)
 	{
 		if(argc == 1)
@@ -144,119 +145,38 @@
 		}
 		for(i = 1; i < argc; i++)
 		{
-			if(!lxa_open_archive(argv[i], &lp_archive))
-			{
-				g_signal_connect(G_OBJECT(lp_archive), "lxa_status_changed", G_CALLBACK(xa_archive_status_changed), NULL);
-				opened_archives++;
-				lpSupport = lxa_get_support_for_mime(lxa_mime_info_get_name(lp_archive->mime_info));
-				if(!extract_archive_path)
-  			{
-					dialog = xa_extract_archive_dialog_new(lpSupport, lp_archive, FALSE);
-					result = gtk_dialog_run (GTK_DIALOG (dialog) );
-					if(result == GTK_RESPONSE_CANCEL || result == GTK_RESPONSE_DELETE_EVENT)
-					{
-						gtk_widget_destroy (GTK_WIDGET (dialog) );
-						lxa_close_archive(lp_archive);
-						opened_archives--;
-					}
-					if(result == GTK_RESPONSE_OK)
-					{
-						extract_archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
-						lxa_archive_support_extract(lpSupport, lp_archive, extract_archive_path, NULL);
-						g_free(extract_archive_path);
-						extract_archive_path = NULL;
-					}
-				}
-				else
-					lxa_archive_support_extract(lpSupport, lp_archive, extract_archive_path, NULL);
-			}
+			xa_application_extract_archive(xa_app, argv[i], extract_archive_path);
 		}
 	}
 	if(new_archive || add_archive_path)
 	{
-		if(!add_archive_path)
-		{
-			dialog = xa_new_archive_dialog_new();
-			result = gtk_dialog_run (GTK_DIALOG (dialog) );
-			if(result == GTK_RESPONSE_CANCEL || result == GTK_RESPONSE_DELETE_EVENT)
-			{
-				gtk_widget_destroy (GTK_WIDGET (dialog) );
-				return 2;
-			}
-			if(result == GTK_RESPONSE_OK)
-			{
-				add_archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
-				gtk_widget_destroy (GTK_WIDGET (dialog) );
-			}
-			if(lxa_new_archive(add_archive_path, TRUE, NULL, &lp_archive))
-			{
-				/* 
-				 * Could not create archive (mime type unsupported) 
-				 */
-				dialog = gtk_message_dialog_new (NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Could not create archive, MIME-type unsupported"));
-				gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
-				gtk_dialog_run (GTK_DIALOG (dialog) );
-				gtk_widget_destroy (GTK_WIDGET (dialog) );
-				return 1;
-			}
-			else
-				opened_archives++;
-		}
-		else
-		{
-			if(lxa_open_archive(add_archive_path, &lp_archive))
-			{
-				/*
-				 * Could not open archive (mime type not supported or file did not exist)
-				 * Should be a more specific error message.
-				 */ 
-				dialog = gtk_message_dialog_new (NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Could not open archive, MIME-type unsupported or file did not exist"));
-				gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
-				gtk_dialog_run (GTK_DIALOG (dialog) );
-				gtk_widget_destroy (GTK_WIDGET (dialog) );
-				return 1;
-			}
-			else
-				opened_archives++;
-		}
-		g_signal_connect(G_OBJECT(lp_archive), "lxa_status_changed", G_CALLBACK(xa_archive_status_changed), NULL);
 		GSList *files = NULL;
 		for(i = 1; i < argc; i++)
 		{
 			files = g_slist_prepend(files, argv[i]);
 		}
-		lpSupport = lxa_get_support_for_mime(lxa_mime_info_get_name(lp_archive->mime_info));
-		lxa_archive_support_add(lpSupport, lp_archive, files);
+		xa_application_new_archive(xa_app, add_archive_path, files);
 	}
 
 	if(!new_archive && !add_archive_path && !extract_archive && !extract_archive_path)
 	{
-		xa_icon_theme = gtk_icon_theme_get_default();
 		if(argc > 1)
 		{
-			opened_archives++;
+			if(xa_app->props._tabs)
+				main_window = xa_application_new_window(xa_app);
 			for(i = 1; i < argc; i++)
 			{
-				/* Show main window */
-				main_window = xa_main_window_new(xa_icon_theme);
-				g_signal_connect(G_OBJECT(main_window), "destroy", G_CALLBACK(cb_main_window_destroy), NULL);
-
+				xa_application_open_archive(xa_app, main_window, argv[i]);
 			}
-			opened_archives--;
-			if(opened_archives <= 0)
-				return 1;
 		} else
 		{
-			/* Show main window */
-			main_window = xa_main_window_new(xa_icon_theme);
-			g_signal_connect(G_OBJECT(main_window), "destroy", G_CALLBACK(cb_main_window_destroy), NULL);
-			gtk_widget_set_size_request(main_window, 500, 350);
-			gtk_widget_show_all(main_window);
+			main_window = xa_application_new_window(xa_app);
+			gtk_widget_show(GTK_WIDGET(main_window));
 		}
-	} else
-		if(!opened_archives)
-			return 0;
+	}
 
+
+	g_object_unref(xa_app);
 	gtk_main();
 	lxa_destroy();
 

Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-11-06 12:52:57 UTC (rev 23757)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-11-06 13:09:24 UTC (rev 23758)
@@ -37,6 +37,7 @@
 #endif /* ENABLE_TOOLBAR */
 
 #include "notebook.h"
+#include "application.h"
 #include "main_window.h"
 
 #include "new_dialog.h"
@@ -138,6 +139,7 @@
 	xa_settings_save(window->settings);
 
 	gtk_widget_unref(GTK_WIDGET(window->navigationbar));
+	g_object_unref(G_OBJECT(window->app));
 }
 
 static void
@@ -153,7 +155,7 @@
 	gboolean sort_case = TRUE;
 	gboolean sort_folders = TRUE;
 
-	window->settings = xa_settings_new(NULL);
+	window->settings = xa_settings_new();
 
 	main_vbox = gtk_vbox_new(FALSE, 0);
 
@@ -244,7 +246,10 @@
 	gtk_box_pack_start(GTK_BOX(main_vbox), toolbar, FALSE, FALSE, 0);
 
 	if(window->navigationbar)
+	{
 		gtk_box_pack_start(GTK_BOX(main_vbox), GTK_WIDGET(window->navigationbar), FALSE, FALSE, 0);
+		gtk_widget_show_all(GTK_WIDGET(window->navigationbar));
+	}
 
 	gtk_box_pack_start(GTK_BOX(main_vbox), window->notebook, TRUE, TRUE, 0);
 	gtk_box_pack_end(GTK_BOX(main_vbox), window->statusbar, FALSE, FALSE, 0);
@@ -258,24 +263,27 @@
 }
 
 GtkWidget *
-xa_main_window_new(GtkIconTheme *icon_theme)
+xa_main_window_new(XAApplication *app, GtkIconTheme *icon_theme)
 {
-	GtkWidget *window;
+	XAMainWindow *window;
 	GdkPixbuf *icon;
 
 	window = g_object_new(xa_main_window_get_type(),
 			"title", "Xarchiver " PACKAGE_VERSION,
 			NULL);
 
-	XA_MAIN_WINDOW(window)->icon_theme = icon_theme;
+	window->icon_theme = icon_theme;
 
-	xa_notebook_set_icon_theme(XA_NOTEBOOK(XA_MAIN_WINDOW(window)->notebook), icon_theme);
+	xa_notebook_set_icon_theme(XA_NOTEBOOK(window->notebook), icon_theme);
 
 	icon = gtk_icon_theme_load_icon(icon_theme, "xarchiver", 24, 0, NULL);
 
+	g_object_ref(app);
+	window->app = app;
+
 	gtk_window_set_icon(GTK_WINDOW(window), icon);
 
-	return window;
+	return GTK_WIDGET(window);
 }
 
 static void
@@ -483,7 +491,8 @@
 		support = lxa_get_support_for_mime(lxa_mime_info_get_name(archive->mime_info));
 		if(replace < 0)
 			xa_notebook_add_archive(XA_NOTEBOOK(window->notebook), archive, support);
-		/* else */
+		else
+			xa_notebook_add_archive(XA_NOTEBOOK(window->notebook), archive, support);
 		return 0;
 	}
 	return 1;

Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.h	2006-11-06 12:52:57 UTC (rev 23757)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.h	2006-11-06 13:09:24 UTC (rev 23758)
@@ -97,6 +97,7 @@
 	XANavigationBar *navigationbar;
 	GtkWidget *notebook;
 	GtkWidget *statusbar;
+	XAApplication *app;
 };
 
 typedef struct _XAMainWindowClass XAMainWindowClass;
@@ -106,7 +107,7 @@
 	GtkWindowClass parent;
 };
 
-GtkWidget *xa_main_window_new(GtkIconTheme *icon_theme);
+GtkWidget *xa_main_window_new(XAApplication *, GtkIconTheme *icon_theme);
 GtkWidget *xa_main_window_find_image(gchar *, GtkIconSize);
 GType      xa_main_window_get_type ();
 

Modified: xarchiver/branches/xarchiver-psybsd/src/notebook.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/notebook.c	2006-11-06 12:52:57 UTC (rev 23757)
+++ xarchiver/branches/xarchiver-psybsd/src/notebook.c	2006-11-06 13:09:24 UTC (rev 23758)
@@ -197,7 +197,10 @@
 	GtkWidget *archive_image = gtk_image_new_from_icon_name(lxa_mime_info_get_icon_name(archive->mime_info, notebook->icon_theme), GTK_ICON_SIZE_MENU);
 	GtkWidget *close_button = gtk_button_new();
 	GtkWidget *close_image = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
+	GtkWidget *scroll_window = gtk_scrolled_window_new(NULL, NULL);
 
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
 	gtk_button_set_image(GTK_BUTTON(close_button), close_image);
 	gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE);
 
@@ -215,6 +218,7 @@
 	gtk_box_pack_start(GTK_BOX(lbl_hbox), close_button, FALSE, FALSE, 0);
 	gtk_widget_show_all(lbl_hbox);
 	gtk_widget_show_all(tree_view);
+	gtk_widget_show(scroll_window);
 
 	g_signal_connect(G_OBJECT(archive), "lxa_status_changed", G_CALLBACK(cb_notebook_archive_status_changed), notebook);
 	g_signal_connect(G_OBJECT(archive), "lxa_refreshed", G_CALLBACK(cb_notebook_archive_refreshed), tree_view);
@@ -231,7 +235,10 @@
 		gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), TRUE);
 	else
 		gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE);
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tree_view, lbl_hbox);
+
+	gtk_container_add(GTK_CONTAINER(scroll_window), tree_view);
+	
+	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scroll_window, lbl_hbox);
 }
 
 void
@@ -331,7 +338,8 @@
 static void
 cb_xa_notebook_page_switched(XANotebook *notebook, GtkNotebookPage *page, guint page_nr, gpointer data)
 {
-	GtkWidget *treeview = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page_nr);
+	GtkWidget *scrolledwindow = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), page_nr);
+	GtkWidget *treeview = gtk_bin_get_child(GTK_BIN(scrolledwindow));
 	GtkTreeModel *archive_store = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
 	xa_navigation_bar_set_store(notebook->navigation_bar, XA_ARCHIVE_STORE(archive_store));
 }
@@ -348,7 +356,8 @@
 {
 	gint n = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook));
 
-	GtkWidget *treeview = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), n);
+	GtkWidget *scrolledwindow = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), n);
+	GtkWidget *treeview = gtk_bin_get_child(GTK_BIN(scrolledwindow));
 	GtkTreeModel *archive_store = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
 
 	(*lp_archive) = xa_archive_store_get_archive(XA_ARCHIVE_STORE(archive_store));
@@ -366,7 +375,8 @@
 void
 xa_notebook_page_set_archive(XANotebook *notebook, LXAArchive *archive, LXAArchiveSupport *support, gint n)
 {
-	GtkWidget *treeview = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), n);
+	GtkWidget *scrolledwindow = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), n);
+	GtkWidget *treeview = gtk_bin_get_child(GTK_BIN(scrolledwindow));
 	GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
 
 	xa_archive_store_set_archive(XA_ARCHIVE_STORE(store), archive);



More information about the Xfce4-commits mailing list