[Goodies-commits] r7435 - in gigolo/trunk: . po src

Enrico Troeger enrico at xfce.org
Fri May 29 00:05:15 CEST 2009


Author: enrico
Date: 2009-05-28 22:05:14 +0000 (Thu, 28 May 2009)
New Revision: 7435

Added:
   gigolo/trunk/src/bookmarkpanel.c
   gigolo/trunk/src/bookmarkpanel.h
Modified:
   gigolo/trunk/ChangeLog
   gigolo/trunk/po/POTFILES.in
   gigolo/trunk/src/Makefile.am
   gigolo/trunk/src/preferencesdialog.c
   gigolo/trunk/src/settings.c
   gigolo/trunk/src/window.c
   gigolo/trunk/wscript
Log:
Add a Bookmark side panel.

Modified: gigolo/trunk/ChangeLog
===================================================================
--- gigolo/trunk/ChangeLog	2009-05-28 20:24:49 UTC (rev 7434)
+++ gigolo/trunk/ChangeLog	2009-05-28 22:05:14 UTC (rev 7435)
@@ -1,9 +1,17 @@
-2009-04-18  Enrico Tröger  <enrico(at)xfce(dot)org>
+2009-05-28  Enrico Tröger  <enrico(at)xfce(dot)org>
 
+ * po/POTFILES.in, src/Makefile.am, src/bookmarkpanel.c,
+   src/bookmarkpanel.h, src/preferencesdialog.c, src/settings.c,
+   src/window.c, wscript:
+   Add a Bookmark side panel.
+
+
+2009-05-18  Enrico Tröger  <enrico(at)xfce(dot)org>
+
  * src/window.c, src/common.h:
    Make use of the G_GNUC_PRINTF() macro.
-   
 
+
 2009-05-17  Enrico Tröger  <enrico(at)xfce(dot)org>
 
  * src/backendgvfs.c:

Modified: gigolo/trunk/po/POTFILES.in
===================================================================
--- gigolo/trunk/po/POTFILES.in	2009-05-28 20:24:49 UTC (rev 7434)
+++ gigolo/trunk/po/POTFILES.in	2009-05-28 22:05:14 UTC (rev 7435)
@@ -14,5 +14,6 @@
 src/backendgvfs.c
 src/mountdialog.c
 src/browsenetworkpanel.c
+src/bookmarkpanel.c
 src/singleinstance.c
 gigolo.desktop.in

Modified: gigolo/trunk/src/Makefile.am
===================================================================
--- gigolo/trunk/src/Makefile.am	2009-05-28 20:24:49 UTC (rev 7434)
+++ gigolo/trunk/src/Makefile.am	2009-05-28 22:05:14 UTC (rev 7435)
@@ -12,6 +12,7 @@
 	menubuttonaction.c menubuttonaction.h		\
 	mountdialog.c mountdialog.h					\
 	mountoperation.c mountoperation.h			\
+	bookmarkpanel.c bookmarkpanel.h			\
 	bookmarkdialog.c bookmarkdialog.h			\
 	bookmarkeditdialog.c bookmarkeditdialog.h	\
 	browsenetworkpanel.c browsenetworkpanel.h	\

Added: gigolo/trunk/src/bookmarkpanel.c
===================================================================
--- gigolo/trunk/src/bookmarkpanel.c	                        (rev 0)
+++ gigolo/trunk/src/bookmarkpanel.c	2009-05-28 22:05:14 UTC (rev 7435)
@@ -0,0 +1,295 @@
+/*
+ *      bookmarkpanel.c
+ *
+ *      Copyright 2009 Enrico Tröger <enrico(at)xfce(dot)org>
+ *
+ *      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
+ *      the Free Software Foundation; either version 2 of the License, or
+ *      (at your option) any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gio/gio.h>
+
+#include "common.h"
+#include "backendgvfs.h"
+#include "settings.h"
+#include "bookmark.h"
+#include "window.h"
+
+#include "bookmarkpanel.h"
+
+typedef struct _GigoloBookmarkPanelPrivate			GigoloBookmarkPanelPrivate;
+
+#define GIGOLO_BOOKMARK_PANEL_GET_PRIVATE(obj)		(G_TYPE_INSTANCE_GET_PRIVATE((obj),\
+			GIGOLO_BOOKMARK_PANEL_TYPE, GigoloBookmarkPanelPrivate))
+
+
+enum
+{
+	GIGOLO_BOOKMARK_PANEL_COL_NAME,
+	GIGOLO_BOOKMARK_PANEL_COL_REF,
+	GIGOLO_BOOKMARK_PANEL_N_COLUMNS
+};
+
+enum
+{
+	PROP_0,
+	PROP_SETTINGS
+};
+
+
+struct _GigoloBookmarkPanel
+{
+	GtkVBox parent;
+};
+
+struct _GigoloBookmarkPanelClass
+{
+	GtkVBoxClass parent_class;
+};
+
+struct _GigoloBookmarkPanelPrivate
+{
+	GigoloWindow *parent;
+
+	GtkWidget *button_connect;
+
+	GtkWidget *tree;
+	GtkListStore *store;
+};
+
+G_DEFINE_TYPE(GigoloBookmarkPanel, gigolo_bookmark_panel, GTK_TYPE_VBOX);
+
+
+
+static void update_store(GigoloBookmarkPanel *panel, GigoloSettings *settings)
+{
+	guint i;
+	GigoloBookmark *bm;
+	GigoloBookmarkList *bml = gigolo_settings_get_bookmarks(settings);
+	GigoloBookmarkPanelPrivate *priv = GIGOLO_BOOKMARK_PANEL_GET_PRIVATE(panel);
+
+	gtk_list_store_clear(priv->store);
+
+	if (bml->len == 0)
+	{
+		gtk_list_store_insert_with_values(priv->store, NULL, -1,
+			GIGOLO_BOOKMARK_PANEL_COL_NAME, _("No bookmarks"), -1);
+		return;
+	}
+
+	for (i = 0; i < bml->len; i++)
+	{
+		bm = g_ptr_array_index(bml, i);
+
+		gtk_list_store_insert_with_values(priv->store, NULL, -1,
+			GIGOLO_BOOKMARK_PANEL_COL_NAME, gigolo_bookmark_get_name(bm),
+			GIGOLO_BOOKMARK_PANEL_COL_REF, bm,
+			 -1);
+	}
+}
+
+
+static void gigolo_bookmark_panel_set_property(GObject *object, guint prop_id,
+											   const GValue *value, GParamSpec *pspec)
+{
+	GigoloBookmarkPanel *panel = GIGOLO_BOOKMARK_PANEL(object);
+
+	switch (prop_id)
+	{
+	case PROP_SETTINGS:
+		update_store(panel, g_value_get_object(value));
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+		break;
+	}
+}
+
+
+static void gigolo_bookmark_panel_class_init(GigoloBookmarkPanelClass *klass)
+{
+	GObjectClass *g_object_class;
+
+	g_object_class = G_OBJECT_CLASS(klass);
+
+	g_object_class->set_property = gigolo_bookmark_panel_set_property;
+
+	g_object_class_install_property(g_object_class,
+										PROP_SETTINGS,
+										g_param_spec_object (
+										"settings",
+										"Settings",
+										"The associated settings",
+										GIGOLO_SETTINGS_TYPE,
+										G_PARAM_WRITABLE));
+
+
+	g_type_class_add_private(klass, sizeof(GigoloBookmarkPanelPrivate));
+}
+
+
+static void button_close_click_cb(G_GNUC_UNUSED GtkToolButton *btn, GigoloBookmarkPanel *panel)
+{
+	GigoloBookmarkPanelPrivate *priv = GIGOLO_BOOKMARK_PANEL_GET_PRIVATE(panel);
+	GigoloSettings *settings = gigolo_window_get_settings(GIGOLO_WINDOW(priv->parent));
+
+	g_object_set(settings, "show-panel", FALSE, NULL);
+}
+
+
+static void button_connect_click_cb(G_GNUC_UNUSED GtkToolButton *btn, GigoloBookmarkPanel *panel)
+{
+	GigoloBookmarkPanelPrivate *priv = GIGOLO_BOOKMARK_PANEL_GET_PRIVATE(panel);
+	GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->tree));
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+
+	if (gtk_tree_selection_get_selected(selection, &model, &iter))
+	{
+		GigoloBookmark *bm;
+
+		gtk_tree_model_get(model, &iter, GIGOLO_BOOKMARK_PANEL_COL_REF, &bm, -1);
+		gigolo_window_mount_from_bookmark(priv->parent, bm, TRUE, TRUE);
+	}
+}
+
+
+static void tree_selection_changed_cb(GtkTreeSelection *selection, GigoloBookmarkPanel *panel)
+{
+	gboolean set;
+	GigoloBookmarkPanelPrivate *priv = GIGOLO_BOOKMARK_PANEL_GET_PRIVATE(panel);
+
+	set = (selection != NULL) ? gtk_tree_selection_get_selected(selection, NULL, NULL) : FALSE;
+
+	gtk_widget_set_sensitive(priv->button_connect, set);
+}
+
+
+static void tree_row_activated_cb(GtkTreeView *view, GtkTreePath *path,
+								  G_GNUC_UNUSED GtkTreeViewColumn *col,
+								  GigoloBookmarkPanel *panel)
+{
+	GigoloBookmarkPanelPrivate *priv = GIGOLO_BOOKMARK_PANEL_GET_PRIVATE(panel);
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+
+	model = gtk_tree_view_get_model(view);
+	if (gtk_tree_model_get_iter(model, &iter, path))
+	{
+		GigoloBookmark *bm;
+
+		gtk_tree_model_get(model, &iter, GIGOLO_BOOKMARK_PANEL_COL_REF, &bm, -1);
+		gigolo_window_mount_from_bookmark(priv->parent, bm, TRUE, TRUE);
+	}
+}
+
+
+static void tree_prepare(GigoloBookmarkPanel *panel)
+{
+	GtkCellRenderer *text_renderer;
+	GtkTreeViewColumn *column;
+	GtkTreeSelection *selection;
+	GtkWidget *tree;
+	GtkListStore *store;
+	GigoloBookmarkPanelPrivate *priv = GIGOLO_BOOKMARK_PANEL_GET_PRIVATE(panel);
+
+	tree = gtk_tree_view_new();
+	store = gtk_list_store_new(GIGOLO_BOOKMARK_PANEL_N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER);
+
+    column = gtk_tree_view_column_new();
+
+	text_renderer = gtk_cell_renderer_text_new();
+	gtk_tree_view_set_enable_search(GTK_TREE_VIEW(tree), FALSE);
+	gtk_tree_view_column_pack_start(column, text_renderer, TRUE);
+	gtk_tree_view_column_set_attributes(column, text_renderer,
+		"text", GIGOLO_BOOKMARK_PANEL_COL_NAME, NULL);
+
+	gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
+	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE);
+
+	gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store));
+	g_object_unref(store);
+
+	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
+	gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
+
+	g_signal_connect(tree, "row-activated", G_CALLBACK(tree_row_activated_cb), panel);
+	g_signal_connect(selection, "changed", G_CALLBACK(tree_selection_changed_cb), panel);
+
+	priv->tree = tree;
+	priv->store = store;
+
+	tree_selection_changed_cb(NULL, panel);
+}
+
+
+static void gigolo_bookmark_panel_init(GigoloBookmarkPanel *self)
+{
+	GtkWidget *swin, *toolbar;
+	GtkToolItem *toolitem;
+	GigoloBookmarkPanelPrivate *priv = GIGOLO_BOOKMARK_PANEL_GET_PRIVATE(self);
+
+	toolbar = gtk_toolbar_new();
+	gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH_HORIZ);
+	gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), GTK_ICON_SIZE_BUTTON);
+
+	toolitem = gtk_tool_button_new_from_stock(GTK_STOCK_CONNECT);
+	gtk_widget_set_tooltip_text(GTK_WIDGET(toolitem), _("Connect to the selected bookmark"));
+	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), toolitem, -1);
+	g_signal_connect(toolitem, "clicked", G_CALLBACK(button_connect_click_cb), self);
+	priv->button_connect = GTK_WIDGET(toolitem);
+
+	toolitem = gtk_separator_tool_item_new();
+	gtk_separator_tool_item_set_draw(GTK_SEPARATOR_TOOL_ITEM(toolitem), FALSE);
+	gtk_tool_item_set_expand(toolitem, TRUE);
+	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), toolitem, -1);
+
+	toolitem = gtk_tool_button_new_from_stock(GTK_STOCK_CLOSE);
+	gtk_widget_set_tooltip_text(GTK_WIDGET(toolitem), _("Close panel"));
+	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), toolitem, -1);
+	g_signal_connect(toolitem, "clicked", G_CALLBACK(button_close_click_cb), self);
+
+	tree_prepare(self);
+
+	swin = gtk_scrolled_window_new(NULL, NULL);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin),
+		GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(swin), GTK_SHADOW_IN);
+	gtk_container_add(GTK_CONTAINER(swin), priv->tree);
+
+	gtk_box_pack_start(GTK_BOX(self), toolbar, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(self), swin, TRUE, TRUE, 0);
+
+	gtk_widget_show_all(toolbar);
+	gtk_widget_show_all(swin);
+}
+
+
+GtkWidget *gigolo_bookmark_panel_new(GigoloWindow *parent)
+{
+	GtkWidget *self;
+	GigoloBookmarkPanelPrivate *priv;
+
+	self = g_object_new(GIGOLO_BOOKMARK_PANEL_TYPE, NULL);
+
+	priv = GIGOLO_BOOKMARK_PANEL_GET_PRIVATE(self);
+	priv->parent = parent;
+
+	return self;
+}
+


Property changes on: gigolo/trunk/src/bookmarkpanel.c
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Added: gigolo/trunk/src/bookmarkpanel.h
===================================================================
--- gigolo/trunk/src/bookmarkpanel.h	                        (rev 0)
+++ gigolo/trunk/src/bookmarkpanel.h	2009-05-28 22:05:14 UTC (rev 7435)
@@ -0,0 +1,45 @@
+/*
+ *      bookmarkpanel.h
+ *
+ *      Copyright 2009 Enrico Tröger <enrico(at)xfce(dot)org>
+ *
+ *      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
+ *      the Free Software Foundation; either version 2 of the License, or
+ *      (at your option) any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __BOOKMARKPANEL_H__
+#define __BOOKMARKPANEL_H__
+
+G_BEGIN_DECLS
+
+#define GIGOLO_BOOKMARK_PANEL_TYPE				(gigolo_bookmark_panel_get_type())
+#define GIGOLO_BOOKMARK_PANEL(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj),\
+			GIGOLO_BOOKMARK_PANEL_TYPE, GigoloBookmarkPanel))
+#define GIGOLO_BOOKMARK_PANEL_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass),\
+			GIGOLO_BOOKMARK_PANEL_TYPE, GigoloBookmarkPanelClass))
+#define IS_GIGOLO_BOOKMARK_PANEL(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj),\
+			GIGOLO_BOOKMARK_PANEL_TYPE))
+#define IS_GIGOLO_BOOKMARK_PANEL_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass),\
+			GIGOLO_BOOKMARK_PANEL_TYPE))
+
+typedef struct _GigoloBookmarkPanel			GigoloBookmarkPanel;
+typedef struct _GigoloBookmarkPanelClass		GigoloBookmarkPanelClass;
+
+GType		gigolo_bookmark_panel_get_type		(void);
+GtkWidget*	gigolo_bookmark_panel_new			(GigoloWindow *parent);
+
+G_END_DECLS
+
+#endif /* __BOOKMARKPANEL_H__ */


Property changes on: gigolo/trunk/src/bookmarkpanel.h
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Modified: gigolo/trunk/src/preferencesdialog.c
===================================================================
--- gigolo/trunk/src/preferencesdialog.c	2009-05-28 20:24:49 UTC (rev 7434)
+++ gigolo/trunk/src/preferencesdialog.c	2009-05-28 22:05:14 UTC (rev 7435)
@@ -416,7 +416,6 @@
 
 	checkbox = add_check_button(settings, "show-panel", _("Show 'Browse Network' side panel"));
 	gtk_widget_set_tooltip_text(checkbox, _("Whether to show a side panel for browsing the local network for available Samba shares"));
-	gtk_widget_set_sensitive(checkbox, gigolo_backend_gvfs_is_scheme_supported("smb"));
 	gtk_box_pack_start(GTK_BOX(frame_vbox), checkbox, FALSE, FALSE, 0);
 
 	checkbox = add_check_button(settings, "show-autoconnect-errors", _("Show auto-connect error messages"));

Modified: gigolo/trunk/src/settings.c
===================================================================
--- gigolo/trunk/src/settings.c	2009-05-28 20:24:49 UTC (rev 7434)
+++ gigolo/trunk/src/settings.c	2009-05-28 22:05:14 UTC (rev 7435)
@@ -51,6 +51,7 @@
 	gint		toolbar_orientation;
 	gint		view_mode;
 	gboolean	show_panel;
+	guint		last_panel_page;
 	gboolean	show_autoconnect_errors;
 
 	gchar		*file_manager;
@@ -87,6 +88,7 @@
 	PROP_TOOLBAR_ORIENTATION,
 	PROP_VIEW_MODE,
 	PROP_SHOW_PANEL,
+	PROP_LAST_PANEL_PAGE,
 	PROP_SHOW_AUTOCONNECT_ERRORS
 };
 
@@ -131,6 +133,9 @@
 	case PROP_SHOW_PANEL:
 		priv->show_panel = g_value_get_boolean(value);
 		break;
+	case PROP_LAST_PANEL_PAGE:
+		priv->last_panel_page = g_value_get_uint(value);
+		break;
 	case PROP_SHOW_AUTOCONNECT_ERRORS:
 		priv->show_autoconnect_errors = g_value_get_boolean(value);
 		break;
@@ -179,6 +184,9 @@
 	case PROP_SHOW_PANEL:
 		g_value_set_boolean(value, priv->show_panel);
 		break;
+	case PROP_LAST_PANEL_PAGE:
+		g_value_set_uint(value, priv->last_panel_page);
+		break;
 	case PROP_SHOW_AUTOCONNECT_ERRORS:
 		g_value_set_boolean(value, priv->show_autoconnect_errors);
 		break;
@@ -279,6 +287,14 @@
 									TRUE,
 									G_PARAM_READWRITE));
 	g_object_class_install_property(gobject_class,
+									PROP_LAST_PANEL_PAGE,
+									g_param_spec_uint(
+									"last-panel-page",
+									"last-panel-page",
+									"Last displayed panel page",
+									0, G_MAXUINT, 0,
+									G_PARAM_READWRITE));
+	g_object_class_install_property(gobject_class,
 									PROP_SHOW_AUTOCONNECT_ERRORS,
 									g_param_spec_boolean(
 									"show-autoconnect-errors",
@@ -411,6 +427,7 @@
 	g_key_file_set_integer(k, SECTION_UI, "toolbar_orientation", priv->toolbar_orientation);
 	g_key_file_set_integer(k, SECTION_UI, "view_mode", priv->view_mode);
 	g_key_file_set_boolean(k, SECTION_UI, "show_panel", priv->show_panel);
+	g_key_file_set_integer(k, SECTION_UI, "last_panel_page", priv->last_panel_page);
 	g_key_file_set_boolean(k, SECTION_UI, "show_autoconnect_errors", priv->show_autoconnect_errors);
 
 	write_data(k, priv->config_filename);
@@ -516,6 +533,7 @@
 	priv->show_in_systray = get_setting_boolean(k, SECTION_UI, "show_in_systray", TRUE);
 	priv->start_in_systray = get_setting_boolean(k, SECTION_UI, "start_in_systray", FALSE);
 	priv->show_panel = get_setting_boolean(k, SECTION_UI, "show_panel", FALSE);
+	priv->last_panel_page = get_setting_int(k, SECTION_UI, "last_panel_page", 0);
 	priv->show_autoconnect_errors = get_setting_boolean(k, SECTION_UI, "show_autoconnect_errors", TRUE);
 	priv->show_toolbar = get_setting_boolean(k, SECTION_UI, "show_toolbar", TRUE);
 	priv->toolbar_style = get_setting_int(k, SECTION_UI, "toolbar_style", -1);

Modified: gigolo/trunk/src/window.c
===================================================================
--- gigolo/trunk/src/window.c	2009-05-28 20:24:49 UTC (rev 7434)
+++ gigolo/trunk/src/window.c	2009-05-28 22:05:14 UTC (rev 7435)
@@ -38,6 +38,7 @@
 #include "preferencesdialog.h"
 #include "mountdialog.h"
 #include "browsenetworkpanel.h"
+#include "bookmarkpanel.h"
 
 
 typedef struct _GigoloWindowPrivate			GigoloWindowPrivate;
@@ -59,6 +60,8 @@
 	GtkWidget		*hbox_view;
 
 	GtkWidget		*browse_panel;
+	GtkWidget		*bookmark_panel;
+	GtkWidget		*notebook_panel;
 	GtkWidget		*treeview;
 	GtkWidget		*iconview;
 	GtkWidget		*swin_treeview;
@@ -130,6 +133,9 @@
 
 		gigolo_settings_set_geometry(priv->settings, geo, 5);
 	}
+	g_object_set(priv->settings, "last-panel-page",
+		gtk_notebook_get_current_page(GTK_NOTEBOOK(priv->notebook_panel)), NULL);
+
 	gtk_widget_destroy(priv->tree_popup_menu);
 	gtk_widget_destroy(priv->systray_icon_popup_menu);
 	gtk_widget_destroy(priv->swin_treeview);
@@ -827,6 +833,7 @@
 
 	/* writing to the 'settings' property will update the menus */
 	g_object_set(priv->action_bookmarks, "settings", priv->settings, NULL);
+	g_object_set(priv->bookmark_panel, "settings", priv->settings, NULL);
 }
 
 
@@ -928,7 +935,7 @@
 {
 	GigoloWindowPrivate *priv = GIGOLO_WINDOW_GET_PRIVATE(window);
 
-	if (show && gigolo_backend_gvfs_is_scheme_supported("smb"))
+	if (show)
 		gtk_widget_show(priv->hbox_pane);
 	else
 		gtk_widget_hide(priv->hbox_pane);
@@ -1027,15 +1034,6 @@
 }
 
 
-static void action_set_sensitive(GigoloWindow *window, const gchar *name, gboolean set)
-{
-	GigoloWindowPrivate *priv = GIGOLO_WINDOW_GET_PRIVATE(window);
-	GtkAction *action = gtk_action_group_get_action(priv->action_group, name);
-
-	gtk_action_set_sensitive(action, set);
-}
-
-
 static void gigolo_window_systray_notify_cb(GtkStatusIcon *sicon, GParamSpec *pspec, GtkWindow *window)
 {
 	const gchar *name;
@@ -1371,6 +1369,60 @@
 }
 
 
+static GtkWidget *gigolo_window_create_panel(GigoloWindow *window)
+{
+	GtkWidget *panel_pane, *label;
+	GigoloWindowPrivate *priv = GIGOLO_WINDOW_GET_PRIVATE(window);
+
+	panel_pane = gtk_hpaned_new();
+	gtk_paned_set_position(GTK_PANED(panel_pane), 200);
+
+	priv->notebook_panel = gtk_notebook_new();
+	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(priv->notebook_panel), GTK_POS_LEFT);
+	gtk_widget_show(priv->notebook_panel);
+
+	label = gtk_label_new(_("Bookmarks"));
+	gtk_label_set_angle(GTK_LABEL(label), 90.0);
+	gtk_widget_show(label);
+
+	priv->bookmark_panel = gigolo_bookmark_panel_new(window);
+	gtk_widget_show(priv->bookmark_panel);
+	gtk_notebook_append_page(GTK_NOTEBOOK(priv->notebook_panel), priv->bookmark_panel, label);
+
+	label = gtk_label_new(_("Network"));
+	gtk_label_set_angle(GTK_LABEL(label), 90.0);
+	gtk_widget_show(label);
+
+	priv->browse_panel = gigolo_browse_network_panel_new(window);
+	gtk_widget_show(priv->browse_panel);
+	gtk_notebook_append_page(GTK_NOTEBOOK(priv->notebook_panel), priv->browse_panel, label);
+
+	priv->hbox_view = gtk_hbox_new(FALSE, 0);
+	priv->hbox_pane = gtk_hbox_new(FALSE, 0);
+
+	gtk_paned_add1(GTK_PANED(panel_pane), priv->hbox_pane);
+	gtk_paned_add2(GTK_PANED(panel_pane), priv->hbox_view);
+	gtk_box_pack_start(GTK_BOX(priv->hbox_pane), priv->notebook_panel, TRUE, TRUE, 0);
+
+	return panel_pane;
+}
+
+
+static void update_side_panel(GigoloWindow *window)
+{
+	GigoloWindowPrivate *priv = GIGOLO_WINDOW_GET_PRIVATE(window);
+
+	if (! gigolo_backend_gvfs_is_scheme_supported("smb"))
+		gtk_widget_destroy(priv->browse_panel);
+
+	if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(priv->notebook_panel)) < 2)
+		gtk_notebook_set_show_tabs(GTK_NOTEBOOK(priv->notebook_panel), FALSE);
+
+	gtk_notebook_set_current_page(GTK_NOTEBOOK(priv->notebook_panel),
+		gigolo_settings_get_integer(priv->settings, "last-panel-page"));
+}
+
+
 static void gigolo_window_init(GigoloWindow *window)
 {
 	GtkWidget *menubar, *panel_pane;
@@ -1435,21 +1487,11 @@
 		"is-important", TRUE, NULL);
 
 	/* Panel */
-	panel_pane = gtk_hpaned_new();
-	gtk_paned_set_position(GTK_PANED(panel_pane), 200);
+	panel_pane = gigolo_window_create_panel(window);
 
-	priv->browse_panel = gigolo_browse_network_panel_new(window);
-	gtk_widget_show(priv->browse_panel);
-
 	/* Pack the widgets altogether */
 	priv->vbox = gtk_vbox_new(FALSE, 0);
-	priv->hbox_view = gtk_hbox_new(FALSE, 0);
-	priv->hbox_pane = gtk_hbox_new(FALSE, 0);
 
-	gtk_paned_add1(GTK_PANED(panel_pane), priv->hbox_pane);
-	gtk_paned_add2(GTK_PANED(panel_pane), priv->hbox_view);
-	gtk_box_pack_start(GTK_BOX(priv->hbox_pane), priv->browse_panel, TRUE, TRUE, 0);
-
 	gtk_box_pack_start(GTK_BOX(priv->vbox), menubar, FALSE, FALSE, 0);
 	gtk_box_pack_start(GTK_BOX(priv->vbox), priv->toolbar, FALSE, FALSE, 0);
 
@@ -1496,7 +1538,7 @@
 	state = gigolo_settings_get_boolean(settings, "show-panel");
 	gigolo_window_show_side_panel(GIGOLO_WINDOW(window), state);
 	toggle_action_set_active(GIGOLO_WINDOW(window), "ShowPanel", state);
-	action_set_sensitive(GIGOLO_WINDOW(window), "ShowPanel", gigolo_backend_gvfs_is_scheme_supported("smb"));
+	update_side_panel(GIGOLO_WINDOW(window));
 	/* Show Toolbar */
 	state = gigolo_settings_get_boolean(settings, "show-toolbar");
 	gigolo_window_show_toolbar(GIGOLO_WINDOW(window), state);

Modified: gigolo/trunk/wscript
===================================================================
--- gigolo/trunk/wscript	2009-05-28 20:24:49 UTC (rev 7434)
+++ gigolo/trunk/wscript	2009-05-28 22:05:14 UTC (rev 7435)
@@ -37,7 +37,7 @@
 			'src/menubuttonaction.c', 'src/mountoperation.c', 'src/bookmarkdialog.c',
 			'src/bookmarkeditdialog.c', 'src/preferencesdialog.c', 'src/backendgvfs.c',
 			'src/common.c', 'src/mountdialog.c', 'src/browsenetworkpanel.c',
-			'src/singleinstance.c' ]
+			'src/singleinstance.c', 'src/bookmarkpanel.c' ]
 
 
 




More information about the Goodies-commits mailing list