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

Enrico Troeger enrico at xfce.org
Sun Mar 22 01:06:40 CET 2009


Author: enrico
Date: 2009-03-22 00:06:40 +0000 (Sun, 22 Mar 2009)
New Revision: 6970

Modified:
   gigolo/trunk/ChangeLog
   gigolo/trunk/src/window.c
Log:
Add a View menu to quickly change GUI preferences.

Modified: gigolo/trunk/ChangeLog
===================================================================
--- gigolo/trunk/ChangeLog	2009-03-22 00:06:35 UTC (rev 6969)
+++ gigolo/trunk/ChangeLog	2009-03-22 00:06:40 UTC (rev 6970)
@@ -5,6 +5,8 @@
    src/preferencesdialog.c, src/window.c, src/window.h:
    Add gigolo_window_get_settings() to not have to pass the settings
    object to so many other classes.
+ * src/window.c:
+   Add a View menu to quickly change GUI preferences.
 
 
 2009-03-20  Enrico Tröger  <enrico(at)xfce(dot)org>

Modified: gigolo/trunk/src/window.c
===================================================================
--- gigolo/trunk/src/window.c	2009-03-22 00:06:35 UTC (rev 6969)
+++ gigolo/trunk/src/window.c	2009-03-22 00:06:40 UTC (rev 6970)
@@ -363,6 +363,34 @@
 }
 
 
+static void action_toggle_view_cb(GtkToggleAction *action, GigoloWindow *window)
+{
+	GigoloWindowPrivate *priv = GIGOLO_WINDOW_GET_PRIVATE(window);
+	gboolean active = gtk_toggle_action_get_active(action);
+	const gchar *property = NULL;
+
+	if (gtk_action_get_name(GTK_ACTION(action)) == g_intern_string("ShowPanel"))
+		property = "show-panel";
+	else if (gtk_action_get_name(GTK_ACTION(action)) == g_intern_string("ShowToolbar"))
+		property = "show-toolbar";
+	else if (gtk_action_get_name(GTK_ACTION(action)) == g_intern_string("ShowInSystray"))
+		property = "show-in-systray";
+
+	if (property != NULL)
+		g_object_set(priv->settings, property, active, NULL);
+}
+
+
+static void action_view_mode_change_cb(G_GNUC_UNUSED GtkRadioAction *action,
+									   GtkRadioAction *current, GigoloWindow *window)
+{
+	GigoloWindowPrivate *priv = GIGOLO_WINDOW_GET_PRIVATE(window);
+	gint mode = gtk_radio_action_get_current_value(current);
+
+	g_object_set(priv->settings, "view-mode", mode, NULL);
+}
+
+
 static void action_unmount_cb(G_GNUC_UNUSED GtkAction *action, GigoloWindow *window)
 {
 	GigoloWindowPrivate *priv = GIGOLO_WINDOW_GET_PRIVATE(window);
@@ -998,6 +1026,33 @@
 }
 
 
+static void toggle_action_set_active(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_toggle_action_set_active(GTK_TOGGLE_ACTION(action), set);
+}
+
+
+static void view_mode_action_set_active(GigoloWindow *window, gint val)
+{
+	GigoloWindowPrivate *priv = GIGOLO_WINDOW_GET_PRIVATE(window);
+	GtkAction *action = gtk_action_group_get_action(priv->action_group, "ViewSymbols");
+
+	gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), val);
+}
+
+
+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_settings_notify_cb(GigoloSettings *settings, GParamSpec *pspec, GigoloWindow *window)
 {
 	const gchar *name;
@@ -1009,17 +1064,33 @@
 	g_object_get_property(G_OBJECT(settings), name, value);
 
 	if (name == g_intern_string("show-toolbar"))
-		gigolo_window_show_toolbar(window, g_value_get_boolean(value));
+	{
+		gboolean state = g_value_get_boolean(value);
+		gigolo_window_show_toolbar(window, state);
+		toggle_action_set_active(window, "ShowToolbar", state);
+	}
 	else if (name == g_intern_string("show-in-systray"))
-		gigolo_window_show_systray_icon(window, g_value_get_boolean(value));
+	{
+		gboolean state = g_value_get_boolean(value);
+		gigolo_window_show_systray_icon(window, state);
+		toggle_action_set_active(window, "ShowInSystray", state);
+	}
 	else if (name == g_intern_string("toolbar-style"))
 		gigolo_window_set_toolbar_style(window, g_value_get_int(value));
 	else if (name == g_intern_string("toolbar-orientation"))
 		gigolo_window_set_toolbar_orientation(window, g_value_get_int(value));
 	else if (name == g_intern_string("view-mode"))
-		gigolo_window_set_view_mode(window, g_value_get_int(value));
+	{
+		gint mode = g_value_get_int(value);
+		gigolo_window_set_view_mode(window, mode);
+		view_mode_action_set_active(GIGOLO_WINDOW(window), mode);
+	}
 	else if (name == g_intern_string("show-panel"))
-		gigolo_window_show_side_panel(window, g_value_get_boolean(value));
+	{
+		gboolean state = g_value_get_boolean(value);
+		gigolo_window_show_side_panel(window, state);
+		toggle_action_set_active(window, "ShowPanel", state);
+	}
 	else if (! g_object_class_find_property(G_OBJECT_GET_CLASS(settings), name))
 		 verbose("Unexpected setting '%s'", name);
 	g_value_unset(value);
@@ -1042,6 +1113,14 @@
 				"<separator/>"
 				"<menuitem action='Preferences'/>"
 			"</menu>"
+			"<menu action='View'>"
+				"<menuitem action='ShowToolbar'/>"
+				"<menuitem action='ShowPanel'/>"
+				"<menuitem action='ShowInSystray'/>"
+				"<separator/>"
+				"<menuitem action='ViewDetailed'/>"
+				"<menuitem action='ViewSymbols'/>"
+			"</menu>"
 			"<menu action='Actions'>"
 				"<menuitem action='Connect'/>"
 				"<menuitem action='Disconnect'/>"
@@ -1092,6 +1171,7 @@
 		{ "File", NULL, N_("_File"), NULL, NULL, NULL },
 		{ "Edit", NULL, N_("_Edit"), NULL, NULL, NULL },
 		{ "Actions", NULL, N_("_Actions"), NULL, NULL, NULL },
+		{ "View", NULL, N_("_View"), NULL, NULL, NULL },
 		{ "Help", NULL, N_("_Help"), NULL, NULL, NULL },
 		{ "Preferences", GTK_STOCK_PREFERENCES,
 			NULL, "<Ctrl>p", NULL, G_CALLBACK(action_preferences_cb) },
@@ -1114,7 +1194,23 @@
 	};
 	const guint entries_n = G_N_ELEMENTS(entries);
 
+	const GtkToggleActionEntry toggle_entries[] = {
+		{ "ShowPanel", NULL, N_("Side _Panel"),
+			NULL, NULL, G_CALLBACK(action_toggle_view_cb), FALSE },
+		{ "ShowToolbar", NULL, N_("_Toolbar"),
+			NULL, NULL, G_CALLBACK(action_toggle_view_cb), FALSE },
+		{ "ShowInSystray", NULL, N_("Status _Icon"),
+			NULL, NULL, G_CALLBACK(action_toggle_view_cb), FALSE }
+	};
+	const guint toggle_entries_n = G_N_ELEMENTS(toggle_entries);
 
+	const GtkRadioActionEntry radio_entries[] = {
+		{ "ViewDetailed", NULL, N_("View as _Symbols"), NULL, NULL, 0 },
+		{ "ViewSymbols", NULL, N_("View as _Detailed List"), NULL, NULL, 1 },
+	};
+	const guint radio_entries_n = G_N_ELEMENTS(radio_entries);
+
+
 	priv->action_bookmarks = gigolo_menu_button_action_new(
 		"Bookmarks", _("_Bookmarks"), _("Choose a bookmark to connect to"),
 		gigolo_find_icon_name("bookmark-new", GTK_STOCK_EDIT));
@@ -1125,6 +1221,9 @@
 	priv->action_group = gtk_action_group_new("UI");
 	gtk_action_group_set_translation_domain(priv->action_group, GETTEXT_PACKAGE);
 	gtk_action_group_add_actions(priv->action_group, entries, entries_n, window);
+	gtk_action_group_add_toggle_actions(priv->action_group, toggle_entries, toggle_entries_n, window);
+	gtk_action_group_add_radio_actions(priv->action_group, radio_entries, radio_entries_n, -1,
+		G_CALLBACK(action_view_mode_change_cb), window);
 	gtk_action_group_add_action(priv->action_group, priv->action_bookmarks);
 	gtk_ui_manager_insert_action_group(ui_manager, priv->action_group, 0);
 	gtk_window_add_accel_group(GTK_WINDOW(window), gtk_ui_manager_get_accel_group(ui_manager));
@@ -1365,6 +1464,8 @@
 	GtkWidget *window;
 	GigoloWindowPrivate *priv;
 	const gint *geo;
+	gboolean state;
+	gint value;
 
 	window = g_object_new(GIGOLO_WINDOW_TYPE, NULL);
 	priv = GIGOLO_WINDOW_GET_PRIVATE(window);
@@ -1373,18 +1474,27 @@
 
 	g_object_set(priv->action_bookmarks, "settings", settings, NULL);
 
-	gigolo_window_show_systray_icon(GIGOLO_WINDOW(window),
-		gigolo_settings_get_boolean(settings, "show-in-systray"));
-	gigolo_window_show_toolbar(GIGOLO_WINDOW(window),
-		gigolo_settings_get_boolean(settings, "show-toolbar"));
 	gigolo_window_set_toolbar_style(GIGOLO_WINDOW(window),
 		gigolo_settings_get_integer(settings, "toolbar-style"));
 	gigolo_window_set_toolbar_orientation(GIGOLO_WINDOW(window),
 		gigolo_settings_get_integer(settings, "toolbar-orientation"));
-	gigolo_window_set_view_mode(GIGOLO_WINDOW(window),
-		gigolo_settings_get_integer(settings, "view-mode"));
-	gigolo_window_show_side_panel(GIGOLO_WINDOW(window),
-		gigolo_settings_get_integer(settings, "show-panel"));
+	/* Show Panel */
+	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"));
+	/* Show Toolbar */
+	state = gigolo_settings_get_boolean(settings, "show-toolbar");
+	gigolo_window_show_toolbar(GIGOLO_WINDOW(window), state);
+	toggle_action_set_active(GIGOLO_WINDOW(window), "ShowToolbar", state);
+	/* Show Status Icon */
+	state = gigolo_settings_get_boolean(settings, "show-in-systray");
+	gigolo_window_show_systray_icon(GIGOLO_WINDOW(window), state);
+	toggle_action_set_active(GIGOLO_WINDOW(window), "ShowInSystray", state);
+	/* View Mode */
+	value = gigolo_settings_get_integer(settings, "view-mode");
+	gigolo_window_set_view_mode(GIGOLO_WINDOW(window), value);
+	view_mode_action_set_active(GIGOLO_WINDOW(window), value);
 
 	if (gigolo_settings_get_boolean(settings, "save-geometry"))
 	{




More information about the Goodies-commits mailing list