[Xfce4-commits] <thunar:master> Add menu item to hide the menu bar.
Nick Schermer
noreply at xfce.org
Sat Sep 29 19:24:01 CEST 2012
Updating branch refs/heads/master
to d6dcddd3afdd0247c531818089abb878b2b4f73e (commit)
from 372d5d61b987c7fd1dfd5eed67955f90db9f125e (commit)
commit d6dcddd3afdd0247c531818089abb878b2b4f73e
Author: Nick Schermer <nick at xfce.org>
Date: Sat Sep 29 19:22:02 2012 +0200
Add menu item to hide the menu bar.
Option to hide the menu bar. You can temporarily toggle
the visibility with F10, which is also the key to focus
the first item (unfortunatly gtk_menu_shell_select_first
is broken).
thunar/thunar-preferences.c | 14 ++++++
thunar/thunar-window-ui.xml | 1 +
thunar/thunar-window.c | 99 ++++++++++++++++++++++++++++++++++++++++---
3 files changed, 108 insertions(+), 6 deletions(-)
diff --git a/thunar/thunar-preferences.c b/thunar/thunar-preferences.c
index 7e6acc6..d558221 100644
--- a/thunar/thunar-preferences.c
+++ b/thunar/thunar-preferences.c
@@ -58,6 +58,7 @@ enum
PROP_LAST_DETAILS_VIEW_ZOOM_LEVEL,
PROP_LAST_ICON_VIEW_ZOOM_LEVEL,
PROP_LAST_LOCATION_BAR,
+ PROP_LAST_MENUBAR_VISIBLE,
PROP_LAST_SEPARATOR_POSITION,
PROP_LAST_SHOW_HIDDEN,
PROP_LAST_SIDE_PANE,
@@ -279,6 +280,19 @@ thunar_preferences_class_init (ThunarPreferencesClass *klass)
EXO_PARAM_READWRITE));
/**
+ * ThunarPreferences:last-menubar-visible:
+ *
+ * Whether to display a menubar in new windows by default.
+ **/
+ g_object_class_install_property (gobject_class,
+ PROP_LAST_MENUBAR_VISIBLE,
+ g_param_spec_boolean ("last-menubar-visible",
+ "LastMenubarVisible",
+ "last-menubar-visible",
+ TRUE,
+ EXO_PARAM_READWRITE));
+
+ /**
* ThunarPreferences:last-separator-position:
*
* The last position of the gutter in the main window,
diff --git a/thunar/thunar-window-ui.xml b/thunar/thunar-window-ui.xml
index f88332e..017c8d6 100644
--- a/thunar/thunar-window-ui.xml
+++ b/thunar/thunar-window-ui.xml
@@ -53,6 +53,7 @@
<menuitem action="view-side-pane-tree" />
</menu>
<menuitem action="view-statusbar" />
+ <menuitem action="view-menubar" />
<separator />
<menuitem action="show-hidden" />
<separator />
diff --git a/thunar/thunar-window.c b/thunar/thunar-window.c
index 5908713..b1071e4 100644
--- a/thunar/thunar-window.c
+++ b/thunar/thunar-window.c
@@ -81,6 +81,7 @@ enum
BACK,
RELOAD,
TOGGLE_SIDEPANE,
+ TOGGLE_MENUBAR,
ZOOM_IN,
ZOOM_OUT,
ZOOM_RESET,
@@ -102,6 +103,9 @@ static void thunar_window_set_property (GObject
static gboolean thunar_window_back (ThunarWindow *window);
static gboolean thunar_window_reload (ThunarWindow *window);
static gboolean thunar_window_toggle_sidepane (ThunarWindow *window);
+static gboolean thunar_window_toggle_menubar (ThunarWindow *window);
+static void thunar_window_toggle_menubar_deactivate (GtkWidget *menubar,
+ ThunarWindow *window);
static gboolean thunar_window_zoom_in (ThunarWindow *window);
static gboolean thunar_window_zoom_out (ThunarWindow *window);
static gboolean thunar_window_zoom_reset (ThunarWindow *window);
@@ -139,6 +143,8 @@ static void thunar_window_action_tree_changed (GtkToggleAction
ThunarWindow *window);
static void thunar_window_action_statusbar_changed (GtkToggleAction *action,
ThunarWindow *window);
+static void thunar_window_action_menubar_changed (GtkToggleAction *action,
+ ThunarWindow *window);
static void thunar_window_action_zoom_in (GtkAction *action,
ThunarWindow *window);
static void thunar_window_action_zoom_out (GtkAction *action,
@@ -219,6 +225,7 @@ struct _ThunarWindowClass
gboolean (*back) (ThunarWindow *window);
gboolean (*reload) (ThunarWindow *window);
gboolean (*toggle_sidepane) (ThunarWindow *window);
+ gboolean (*toggle_menubar) (ThunarWindow *window);
gboolean (*zoom_in) (ThunarWindow *window);
gboolean (*zoom_out) (ThunarWindow *window);
gboolean (*zoom_reset) (ThunarWindow *window);
@@ -252,6 +259,7 @@ struct _ThunarWindow
GClosure *menu_item_deselected_closure;
GtkWidget *table;
+ GtkWidget *menubar;
GtkWidget *spinner;
GtkWidget *paned;
GtkWidget *sidepane;
@@ -331,6 +339,7 @@ static const GtkToggleActionEntry toggle_action_entries[] =
{ "view-side-pane-shortcuts", NULL, N_ ("_Shortcuts"), "<control>B", N_ ("Toggles the visibility of the shortcuts pane"), G_CALLBACK (thunar_window_action_shortcuts_changed), FALSE, },
{ "view-side-pane-tree", NULL, N_ ("_Tree"), "<control>T", N_ ("Toggles the visibility of the tree pane"), G_CALLBACK (thunar_window_action_tree_changed), FALSE, },
{ "view-statusbar", NULL, N_ ("St_atusbar"), NULL, N_ ("Change the visibility of this window's statusbar"), G_CALLBACK (thunar_window_action_statusbar_changed), FALSE, },
+ { "view-menubar", NULL, N_ ("_Menubar"), "<control>M", N_ ("Change the visibility of this window's menubar"), G_CALLBACK (thunar_window_action_menubar_changed), TRUE, },
};
@@ -365,6 +374,7 @@ thunar_window_class_init (ThunarWindowClass *klass)
klass->back = thunar_window_back;
klass->reload = thunar_window_reload;
klass->toggle_sidepane = thunar_window_toggle_sidepane;
+ klass->toggle_menubar = thunar_window_toggle_menubar;
klass->zoom_in = thunar_window_zoom_in;
klass->zoom_out = thunar_window_zoom_out;
klass->zoom_reset = thunar_window_zoom_reset;
@@ -461,7 +471,7 @@ thunar_window_class_init (ThunarWindowClass *klass)
G_TYPE_BOOLEAN, 0);
/**
- * ThunarWindow::reload:
+ * ThunarWindow::toggle-sidepane:
* @window : a #ThunarWindow instance.
*
* Emitted whenever the user toggles the visibility of the
@@ -478,6 +488,23 @@ thunar_window_class_init (ThunarWindowClass *klass)
G_TYPE_BOOLEAN, 0);
/**
+ * ThunarWindow::toggle-sidepane:
+ * @window : a #ThunarWindow instance.
+ *
+ * Emitted whenever the user toggles the visibility of the
+ * sidepane. This is an internal signal used to bind the
+ * action to keys.
+ **/
+ window_signals[TOGGLE_MENUBAR] =
+ g_signal_new (I_("toggle-menubar"),
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (ThunarWindowClass, toggle_menubar),
+ g_signal_accumulator_true_handled, NULL,
+ _thunar_marshal_BOOLEAN__VOID,
+ G_TYPE_BOOLEAN, 0);
+
+ /**
* ThunarWindow::zoom-in:
* @window : a #ThunarWindow instance.
*
@@ -530,6 +557,7 @@ thunar_window_class_init (ThunarWindowClass *klass)
gtk_binding_entry_add_signal (binding_set, GDK_BackSpace, 0, "back", 0);
gtk_binding_entry_add_signal (binding_set, GDK_F5, 0, "reload", 0);
gtk_binding_entry_add_signal (binding_set, GDK_F9, 0, "toggle-sidepane", 0);
+ gtk_binding_entry_add_signal (binding_set, GDK_F10, 0, "toggle-menubar", 0);
gtk_binding_entry_add_signal (binding_set, GDK_KP_Add, GDK_CONTROL_MASK, "zoom-in", 0);
gtk_binding_entry_add_signal (binding_set, GDK_KP_Subtract, GDK_CONTROL_MASK, "zoom-out", 0);
gtk_binding_entry_add_signal (binding_set, GDK_KP_0, GDK_CONTROL_MASK, "zoom-reset", 0);
@@ -666,7 +694,6 @@ thunar_window_init (ThunarWindow *window)
GtkRadioAction *radio_action;
GtkAccelGroup *accel_group;
GtkWidget *separator;
- GtkWidget *menubar;
GtkWidget *label;
GtkWidget *ebox;
GtkWidget *item;
@@ -780,15 +807,20 @@ thunar_window_init (ThunarWindow *window)
gtk_container_add (GTK_CONTAINER (window), window->table);
gtk_widget_show (window->table);
- menubar = gtk_ui_manager_get_widget (window->ui_manager, "/main-menu");
- gtk_table_attach (GTK_TABLE (window->table), menubar, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
- gtk_widget_show (menubar);
+ window->menubar = gtk_ui_manager_get_widget (window->ui_manager, "/main-menu");
+ gtk_table_attach (GTK_TABLE (window->table), window->menubar, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
+
+ /* update menubar visibiliy */
+ g_object_get (G_OBJECT (window->preferences), "last-menubar-visible", &visible, NULL);
+ action = gtk_action_group_get_action (window->action_group, "view-menubar");
+ g_signal_connect (G_OBJECT (window->menubar), "deactivate", G_CALLBACK (thunar_window_toggle_menubar_deactivate), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), visible);
/* append the menu item for the spinner */
item = gtk_menu_item_new ();
gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE);
gtk_menu_item_set_right_justified (GTK_MENU_ITEM (item), TRUE);
- gtk_menu_shell_append (GTK_MENU_SHELL (menubar), item);
+ gtk_menu_shell_append (GTK_MENU_SHELL (window->menubar), item);
gtk_widget_show (item);
/* place the spinner into the menu item */
@@ -1141,6 +1173,40 @@ thunar_window_toggle_sidepane (ThunarWindow *window)
static gboolean
+thunar_window_toggle_menubar (ThunarWindow *window)
+{
+ _thunar_return_val_if_fail (THUNAR_IS_WINDOW (window), FALSE);
+
+ if (!gtk_widget_get_visible (window->menubar))
+ {
+ /* temporarily show menu bar */
+ gtk_widget_show (window->menubar);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+
+static void
+thunar_window_toggle_menubar_deactivate (GtkWidget *menubar,
+ ThunarWindow *window)
+{
+ GtkAction *action;
+
+ _thunar_return_if_fail (THUNAR_IS_WINDOW (window));
+ _thunar_return_if_fail (window->menubar == menubar);
+
+ /* this was a temporarily show, hide the bar */
+ action = gtk_action_group_get_action (window->action_group, "view-menubar");
+ if (!gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)))
+ gtk_widget_hide (menubar);
+}
+
+
+
+static gboolean
thunar_window_zoom_in (ThunarWindow *window)
{
_thunar_return_val_if_fail (THUNAR_IS_WINDOW (window), FALSE);
@@ -1846,6 +1912,27 @@ thunar_window_action_statusbar_changed (GtkToggleAction *action,
static void
+thunar_window_action_menubar_changed (GtkToggleAction *action,
+ ThunarWindow *window)
+{
+ gboolean active;
+
+ _thunar_return_if_fail (GTK_IS_TOGGLE_ACTION (action));
+ _thunar_return_if_fail (THUNAR_IS_WINDOW (window));
+
+ /* determine the new state of the action */
+ active = gtk_toggle_action_get_active (action);
+
+ /* show or hide the bar */
+ gtk_widget_set_visible (window->menubar, active);
+
+ /* remember the setting */
+ g_object_set (G_OBJECT (window->preferences), "last-menubar-visible", active, NULL);
+}
+
+
+
+static void
thunar_window_action_zoom_in (GtkAction *action,
ThunarWindow *window)
{
More information about the Xfce4-commits
mailing list