[gimp] app: Add Windows→Hide docks menu item
- From: Martin Nordholts <martinn src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: Add Windows→Hide docks menu item
- Date: Sat, 20 Feb 2010 21:53:17 +0000 (UTC)
commit f9a2c5cfe108dc8a54890b5d349e9b931734e766
Author: Martin Nordholts <martinn src gnome org>
Date: Sat Feb 20 22:52:21 2010 +0100
app: Add Windowsâ??Hide docks menu item
Add Windowsâ??Hide docks menu item. We don't remove the hardcoding of
having Tab trigger it though, because gtk_accelerator_valid() returns
FALSE for GDK_tab. This means that if the user changes keyboard
shortcut for the menu item, both the user shortcut and the hardcoded
shortcut will work. We remove gimp_dialog_factories_toggle() and make
clients activate the action instead to toggle dock visibility.
app/actions/windows-actions.c | 16 ++++++++++++++++
app/actions/windows-commands.c | 18 ++++++++++++++++++
app/actions/windows-commands.h | 2 ++
app/display/gimpdisplayshell-callbacks.c | 16 ++++++++++++++--
app/widgets/gimpdialogfactory.c | 13 -------------
app/widgets/gimpdialogfactory.h | 1 -
app/widgets/gimphelp-ids.h | 1 +
menus/image-menu.xml.in | 1 +
8 files changed, 52 insertions(+), 16 deletions(-)
---
diff --git a/app/actions/windows-actions.c b/app/actions/windows-actions.c
index aea298f..8a9832c 100644
--- a/app/actions/windows-actions.c
+++ b/app/actions/windows-actions.c
@@ -97,6 +97,20 @@ static const GimpActionEntry windows_actions[] =
static const GimpToggleActionEntry windows_toggle_actions[] =
{
+ { "windows-hide-docks", NULL,
+ NC_("windows-action", "Hide docks"),
+ /* The only reason we have Tab here is to give away the hardcoded
+ * keyboard shortcut. If the user changes the shortcut to
+ * something else, both that shortcut and Tab will work. The
+ * reason we have the shortcut hardcoded is beccause
+ * gtk_accelerator_valid() returns FALSE for GDK_tab.
+ */
+ "Tab",
+ NC_("windows-action", "When enabled docks and other dialogs are hidden, leaving only image windows."),
+ G_CALLBACK (windows_hide_docks_cmd_callback),
+ FALSE,
+ GIMP_HELP_WINDOWS_HIDE_DOCKS },
+
{ "windows-use-single-window-mode", NULL,
NC_("windows-action", "Single-window mode"), NULL,
NC_("windows-action", "When enabled GIMP is in a single-window mode. Far from completely implemented!"),
@@ -187,6 +201,8 @@ windows_actions_update (GimpActionGroup *group,
gimp_action_group_set_action_active (group, action, (condition) != 0)
SET_ACTIVE ("windows-use-single-window-mode", config->single_window_mode);
+ SET_ACTIVE ("windows-hide-docks", (gimp_dialog_factories_get_state () !=
+ GIMP_DIALOGS_SHOWN));
#undef SET_ACTIVE
}
diff --git a/app/actions/windows-commands.c b/app/actions/windows-commands.c
index b06fd5c..7525c44 100644
--- a/app/actions/windows-commands.c
+++ b/app/actions/windows-commands.c
@@ -50,6 +50,24 @@ windows_show_toolbox_cmd_callback (GtkAction *action,
}
void
+windows_hide_docks_cmd_callback (GtkAction *action,
+ gpointer data)
+{
+ gboolean active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+ GimpDialogsState state = gimp_dialog_factories_get_state ();
+ GimpDialogsState new_state = state;
+
+ /* Make sure the state and toggle action are in sync */
+ if (active && state == GIMP_DIALOGS_SHOWN)
+ new_state = GIMP_DIALOGS_HIDDEN_EXPLICITLY;
+ else if (! active)
+ new_state = GIMP_DIALOGS_SHOWN;
+
+ if (state != new_state)
+ gimp_dialog_factories_set_state (new_state);
+}
+
+void
windows_use_single_window_mode_cmd_callback (GtkAction *action,
gpointer data)
{
diff --git a/app/actions/windows-commands.h b/app/actions/windows-commands.h
index f7727c1..4715033 100644
--- a/app/actions/windows-commands.h
+++ b/app/actions/windows-commands.h
@@ -21,6 +21,8 @@
void windows_show_toolbox_cmd_callback (GtkAction *action,
gpointer data);
+void windows_hide_docks_cmd_callback (GtkAction *action,
+ gpointer data);
void windows_use_single_window_mode_cmd_callback (GtkAction *action,
gpointer data);
void windows_show_display_cmd_callback (GtkAction *action,
diff --git a/app/display/gimpdisplayshell-callbacks.c b/app/display/gimpdisplayshell-callbacks.c
index bde7f79..b91396c 100644
--- a/app/display/gimpdisplayshell-callbacks.c
+++ b/app/display/gimpdisplayshell-callbacks.c
@@ -85,6 +85,7 @@
/* local function prototypes */
+static void gimp_display_shell_toggle_hide_docks (GimpDisplayShell *shell);
static void gimp_display_shell_vscrollbar_update (GtkAdjustment *adjustment,
GimpDisplayShell *shell);
static void gimp_display_shell_hscrollbar_update (GtkAdjustment *adjustment,
@@ -580,7 +581,7 @@ gimp_display_shell_canvas_no_image_events (GtkWidget *canvas,
if (kevent->keyval == GDK_Tab ||
kevent->keyval == GDK_ISO_Left_Tab)
{
- gimp_dialog_factories_toggle ();
+ gimp_display_shell_toggle_hide_docks (shell);
return TRUE;
}
}
@@ -1552,7 +1553,7 @@ gimp_display_shell_canvas_tool_events (GtkWidget *canvas,
}
else
{
- gimp_dialog_factories_toggle ();
+ gimp_display_shell_toggle_hide_docks (shell);
}
return_val = TRUE;
@@ -2011,6 +2012,17 @@ gimp_display_shell_process_tool_event_queue (GimpDisplayShell *shell,
}
static void
+gimp_display_shell_toggle_hide_docks (GimpDisplayShell *shell)
+{
+ GimpImageWindow *window = gimp_display_shell_get_window (shell);
+
+ if (window)
+ gimp_ui_manager_activate_action (gimp_image_window_get_ui_manager (window),
+ "windows",
+ "windows-hide-docks");
+}
+
+static void
gimp_display_shell_vscrollbar_update (GtkAdjustment *adjustment,
GimpDisplayShell *shell)
{
diff --git a/app/widgets/gimpdialogfactory.c b/app/widgets/gimpdialogfactory.c
index d978cb6..311b05f 100644
--- a/app/widgets/gimpdialogfactory.c
+++ b/app/widgets/gimpdialogfactory.c
@@ -1137,19 +1137,6 @@ gimp_dialog_factories_hide_with_display (void)
}
void
-gimp_dialog_factories_toggle (void)
-{
- if (dialogs_state == GIMP_DIALOGS_SHOWN)
- {
- gimp_dialog_factories_set_state (GIMP_DIALOGS_HIDDEN_EXPLICITLY);
- }
- else
- {
- gimp_dialog_factories_set_state (GIMP_DIALOGS_SHOWN);
- }
-}
-
-void
gimp_dialog_factories_set_busy (void)
{
GimpDialogFactoryClass *factory_class;
diff --git a/app/widgets/gimpdialogfactory.h b/app/widgets/gimpdialogfactory.h
index a8dfcb4..f2e0c59 100644
--- a/app/widgets/gimpdialogfactory.h
+++ b/app/widgets/gimpdialogfactory.h
@@ -165,7 +165,6 @@ void gimp_dialog_factories_set_state (GimpDialogsState
GimpDialogsState gimp_dialog_factories_get_state (void);
void gimp_dialog_factories_show_with_display (void);
void gimp_dialog_factories_hide_with_display (void);
-void gimp_dialog_factories_toggle (void);
void gimp_dialog_factories_set_busy (void);
void gimp_dialog_factories_unset_busy (void);
GimpDialogFactory * gimp_dialog_factory_from_widget (GtkWidget *dialog,
diff --git a/app/widgets/gimphelp-ids.h b/app/widgets/gimphelp-ids.h
index 8f49f7e..3eb2e85 100644
--- a/app/widgets/gimphelp-ids.h
+++ b/app/widgets/gimphelp-ids.h
@@ -497,6 +497,7 @@
#define GIMP_HELP_UNIT_DIALOG "gimp-unit-dialog"
#define GIMP_HELP_WINDOWS_SHOW_DOCK "gimp-windows-show-dock"
+#define GIMP_HELP_WINDOWS_HIDE_DOCKS "gimp-windows-hide-docks"
#define GIMP_HELP_WINDOWS_USE_SINGLE_WINDOW_MODE "gimp-windows-use-single-window-mode"
#define GIMP_HELP_WINDOWS_OPEN_RECENT_DOCK "gimp-windows-open-recent-dock"
diff --git a/menus/image-menu.xml.in b/menus/image-menu.xml.in
index 628e60c..105def3 100644
--- a/menus/image-menu.xml.in
+++ b/menus/image-menu.xml.in
@@ -643,6 +643,7 @@
<menuitem action="windows-show-toolbox" />
</placeholder>
<separator />
+ <menuitem action="windows-hide-docks" />
<menuitem action="windows-use-single-window-mode" />
<separator />
</menu>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]