mirror of https://github.com/GNOME/gimp.git
Bug 667169 - Single window mode: allow tabs position setting.
This commit is contained in:
parent
6ee77e5635
commit
b2e40c4ca7
|
@ -110,7 +110,10 @@ static const GimpActionEntry windows_actions[] =
|
|||
NC_("windows-action", "Previous Image"), "<alt><shift>Tab",
|
||||
NC_("windows-action", "Switch to the previous image"),
|
||||
G_CALLBACK (windows_show_display_previous_cmd_callback),
|
||||
NULL }
|
||||
NULL },
|
||||
|
||||
{ "windows-tab-position", NULL, NC_("windows-action",
|
||||
"_Tabs Position") },
|
||||
};
|
||||
|
||||
static const GimpToggleActionEntry windows_toggle_actions[] =
|
||||
|
@ -130,6 +133,28 @@ static const GimpToggleActionEntry windows_toggle_actions[] =
|
|||
GIMP_HELP_WINDOWS_USE_SINGLE_WINDOW_MODE }
|
||||
};
|
||||
|
||||
static const GimpRadioActionEntry windows_tabs_position_actions[] =
|
||||
{
|
||||
{ "windows-tabs-position-top", GTK_STOCK_GOTO_TOP,
|
||||
NC_("windows-tabs-position-action", "_Top"), NULL,
|
||||
NC_("windows-tabs-position-action", "Position the tabs to the top"),
|
||||
GIMP_POSITION_TOP, GIMP_HELP_WINDOWS_TABS_POSITION_TOP },
|
||||
|
||||
{ "windows-tabs-position-bottom", GTK_STOCK_GOTO_BOTTOM,
|
||||
NC_("windows-tabs-position-action", "_Bottom"), NULL,
|
||||
NC_("windows-tabs-position-action", "Position the tabs to the bottom"),
|
||||
GIMP_POSITION_BOTTOM, GIMP_HELP_WINDOWS_TABS_POSITION_BOTTOM },
|
||||
|
||||
{ "windows-tabs-position-left", GTK_STOCK_GOTO_FIRST,
|
||||
NC_("windows-tabs-position-action", "_Left"), NULL,
|
||||
NC_("windows-tabs-position-action", "Position the tabs to the left"),
|
||||
GIMP_POSITION_LEFT, GIMP_HELP_WINDOWS_TABS_POSITION_LEFT },
|
||||
|
||||
{ "windows-tabs-position-right", GTK_STOCK_GOTO_LAST,
|
||||
NC_("windows-tabs-position-action", "_Right"), NULL,
|
||||
NC_("windows-tabs-position-action", "Position the tabs to the right"),
|
||||
GIMP_POSITION_RIGHT, GIMP_HELP_WINDOWS_TABS_POSITION_RIGHT },
|
||||
};
|
||||
|
||||
void
|
||||
windows_actions_setup (GimpActionGroup *group)
|
||||
|
@ -144,6 +169,12 @@ windows_actions_setup (GimpActionGroup *group)
|
|||
windows_toggle_actions,
|
||||
G_N_ELEMENTS (windows_toggle_actions));
|
||||
|
||||
gimp_action_group_add_radio_actions (group, "windows-tabs-position-action",
|
||||
windows_tabs_position_actions,
|
||||
G_N_ELEMENTS (windows_tabs_position_actions),
|
||||
NULL, 0,
|
||||
G_CALLBACK (windows_set_tabs_position_cmd_callback));
|
||||
|
||||
gimp_action_group_set_action_hide_empty (group, "windows-docks-menu", FALSE);
|
||||
|
||||
g_signal_connect_object (group->gimp->displays, "add",
|
||||
|
@ -210,6 +241,7 @@ windows_actions_update (GimpActionGroup *group,
|
|||
gpointer data)
|
||||
{
|
||||
GimpGuiConfig *config = GIMP_GUI_CONFIG (group->gimp->config);
|
||||
const gchar *action = NULL;
|
||||
|
||||
#define SET_ACTIVE(action,condition) \
|
||||
gimp_action_group_set_action_active (group, action, (condition) != 0)
|
||||
|
@ -217,6 +249,27 @@ windows_actions_update (GimpActionGroup *group,
|
|||
SET_ACTIVE ("windows-use-single-window-mode", config->single_window_mode);
|
||||
SET_ACTIVE ("windows-hide-docks", config->hide_docks);
|
||||
|
||||
switch (config->tabs_position)
|
||||
{
|
||||
case GIMP_POSITION_TOP:
|
||||
action = "windows-tabs-position-top";
|
||||
break;
|
||||
case GIMP_POSITION_BOTTOM:
|
||||
action = "windows-tabs-position-bottom";
|
||||
break;
|
||||
case GIMP_POSITION_LEFT:
|
||||
action = "windows-tabs-position-left";
|
||||
break;
|
||||
case GIMP_POSITION_RIGHT:
|
||||
action = "windows-tabs-position-right";
|
||||
break;
|
||||
default:
|
||||
action = "windows-tabs-position-top";
|
||||
break;
|
||||
}
|
||||
|
||||
gimp_action_group_set_action_active (group, action, TRUE);
|
||||
|
||||
#undef SET_ACTIVE
|
||||
}
|
||||
|
||||
|
|
|
@ -65,6 +65,23 @@ windows_hide_docks_cmd_callback (GtkAction *action,
|
|||
NULL);
|
||||
}
|
||||
|
||||
void
|
||||
windows_set_tabs_position_cmd_callback (GtkAction *action,
|
||||
GtkAction *current,
|
||||
gpointer data)
|
||||
{
|
||||
GimpPosition value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
|
||||
Gimp *gimp;
|
||||
return_if_no_gimp (gimp, data);
|
||||
|
||||
if (GIMP_GUI_CONFIG (gimp->config)->tabs_position == value)
|
||||
return;
|
||||
|
||||
g_object_set (gimp->config,
|
||||
"tabs-position", value,
|
||||
NULL);
|
||||
}
|
||||
|
||||
void
|
||||
windows_use_single_window_mode_cmd_callback (GtkAction *action,
|
||||
gpointer data)
|
||||
|
|
|
@ -21,6 +21,9 @@
|
|||
|
||||
void windows_hide_docks_cmd_callback (GtkAction *action,
|
||||
gpointer data);
|
||||
void windows_set_tabs_position_cmd_callback (GtkAction *action,
|
||||
GtkAction *current,
|
||||
gpointer data);
|
||||
void windows_use_single_window_mode_cmd_callback (GtkAction *action,
|
||||
gpointer data);
|
||||
|
||||
|
|
|
@ -250,6 +250,39 @@ gimp_handedness_get_type (void)
|
|||
return type;
|
||||
}
|
||||
|
||||
GType
|
||||
gimp_position_get_type (void)
|
||||
{
|
||||
static const GEnumValue values[] =
|
||||
{
|
||||
{ GIMP_POSITION_TOP, "GIMP_POSITION_TOP", "top" },
|
||||
{ GIMP_POSITION_BOTTOM, "GIMP_POSITION_BOTTOM", "bottom" },
|
||||
{ GIMP_POSITION_LEFT, "GIMP_POSITION_LEFT", "left" },
|
||||
{ GIMP_POSITION_RIGHT, "GIMP_POSITION_RIGHT", "right" },
|
||||
{ 0, NULL, NULL }
|
||||
};
|
||||
|
||||
static const GimpEnumDesc descs[] =
|
||||
{
|
||||
{ GIMP_POSITION_TOP, NC_("position", "Top"), NULL },
|
||||
{ GIMP_POSITION_BOTTOM, NC_("position", "Bottom"), NULL },
|
||||
{ GIMP_POSITION_LEFT, NC_("position", "Left"), NULL },
|
||||
{ GIMP_POSITION_RIGHT, NC_("position", "Right"), NULL },
|
||||
{ 0, NULL, NULL }
|
||||
};
|
||||
|
||||
static GType type = 0;
|
||||
|
||||
if (G_UNLIKELY (! type))
|
||||
{
|
||||
type = g_enum_register_static ("GimpPosition", values);
|
||||
gimp_type_set_translation_context (type, "position");
|
||||
gimp_enum_set_value_descriptions (type, descs);
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
/* Generated data ends here */
|
||||
|
||||
|
|
|
@ -112,5 +112,16 @@ typedef enum
|
|||
GIMP_HANDEDNESS_RIGHT /*< desc="Right-handed" >*/
|
||||
} GimpHandedness;
|
||||
|
||||
#define GIMP_TYPE_POSITION (gimp_position_get_type ())
|
||||
|
||||
GType gimp_position_get_type (void) G_GNUC_CONST;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GIMP_POSITION_TOP, /*< desc="Top" >*/
|
||||
GIMP_POSITION_BOTTOM, /*< desc="Bottom" >*/
|
||||
GIMP_POSITION_LEFT, /*< desc="Left" >*/
|
||||
GIMP_POSITION_RIGHT /*< desc="Right" >*/
|
||||
} GimpPosition;
|
||||
|
||||
#endif /* __CONFIG_ENUMS_H__ */
|
||||
|
|
|
@ -74,6 +74,7 @@ enum
|
|||
|
||||
PROP_HIDE_DOCKS,
|
||||
PROP_SINGLE_WINDOW_MODE,
|
||||
PROP_TABS_POSITION,
|
||||
PROP_LAST_TIP_SHOWN,
|
||||
|
||||
/* ignored, only for backward compatibility: */
|
||||
|
@ -266,6 +267,11 @@ gimp_gui_config_class_init (GimpGuiConfigClass *klass)
|
|||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT |
|
||||
GIMP_PARAM_STATIC_STRINGS));
|
||||
GIMP_CONFIG_INSTALL_PROP_ENUM (object_class, PROP_TABS_POSITION,
|
||||
"tabs-position", WINDOWS_TABS_POSITION,
|
||||
GIMP_TYPE_POSITION,
|
||||
GIMP_POSITION_TOP,
|
||||
GIMP_PARAM_STATIC_STRINGS);
|
||||
g_object_class_install_property (object_class, PROP_LAST_TIP_SHOWN,
|
||||
g_param_spec_int ("last-tip-shown",
|
||||
NULL, NULL,
|
||||
|
@ -445,6 +451,9 @@ gimp_gui_config_set_property (GObject *object,
|
|||
case PROP_SINGLE_WINDOW_MODE:
|
||||
gui_config->single_window_mode = g_value_get_boolean (value);
|
||||
break;
|
||||
case PROP_TABS_POSITION:
|
||||
gui_config->tabs_position = g_value_get_enum (value);
|
||||
break;
|
||||
case PROP_LAST_TIP_SHOWN:
|
||||
gui_config->last_tip_shown = g_value_get_int (value);
|
||||
break;
|
||||
|
@ -567,6 +576,9 @@ gimp_gui_config_get_property (GObject *object,
|
|||
case PROP_SINGLE_WINDOW_MODE:
|
||||
g_value_set_boolean (value, gui_config->single_window_mode);
|
||||
break;
|
||||
case PROP_TABS_POSITION:
|
||||
g_value_set_enum (value, gui_config->tabs_position);
|
||||
break;
|
||||
case PROP_LAST_TIP_SHOWN:
|
||||
g_value_set_int (value, gui_config->last_tip_shown);
|
||||
break;
|
||||
|
|
|
@ -70,6 +70,7 @@ struct _GimpGuiConfig
|
|||
/* saved in sessionrc */
|
||||
gboolean hide_docks;
|
||||
gboolean single_window_mode;
|
||||
GimpPosition tabs_position;
|
||||
gint last_tip_shown;
|
||||
};
|
||||
|
||||
|
|
|
@ -366,6 +366,9 @@ N_("Show a tooltip when the pointer hovers over an item.")
|
|||
#define SINGLE_WINDOW_MODE_BLURB \
|
||||
N_("Use GIMP in a single-window mode.")
|
||||
|
||||
#define WINDOWS_TABS_POSITION \
|
||||
N_("Choose the position of the tabs.")
|
||||
|
||||
#define HIDE_DOCKS_BLURB \
|
||||
N_("Hide docks and other windows, leaving only image windows.")
|
||||
|
||||
|
|
|
@ -409,6 +409,8 @@ gimp_image_window_constructed (GObject *object)
|
|||
gtk_notebook_set_scrollable (GTK_NOTEBOOK (private->notebook), TRUE);
|
||||
gtk_notebook_set_show_border (GTK_NOTEBOOK (private->notebook), FALSE);
|
||||
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (private->notebook), FALSE);
|
||||
gtk_notebook_set_tab_pos (GTK_NOTEBOOK (private->notebook), GTK_POS_TOP);
|
||||
|
||||
gtk_paned_pack1 (GTK_PANED (private->right_hpane), private->notebook,
|
||||
TRUE, TRUE);
|
||||
g_signal_connect (private->notebook, "switch-page",
|
||||
|
@ -437,6 +439,9 @@ gimp_image_window_constructed (GObject *object)
|
|||
g_signal_connect_object (config, "notify::hide-docks",
|
||||
G_CALLBACK (gimp_image_window_config_notify),
|
||||
window, G_CONNECT_SWAPPED);
|
||||
g_signal_connect_object (config, "notify::tabs-position",
|
||||
G_CALLBACK (gimp_image_window_config_notify),
|
||||
window, G_CONNECT_SWAPPED);
|
||||
|
||||
gimp_image_window_session_update (window,
|
||||
NULL /*new_display*/,
|
||||
|
@ -1524,12 +1529,14 @@ gimp_image_window_update_tabs (GimpImageWindow *window)
|
|||
{
|
||||
GimpImageWindowPrivate *private;
|
||||
GimpGuiConfig *config;
|
||||
GtkPositionType position;
|
||||
|
||||
g_return_if_fail (GIMP_IS_IMAGE_WINDOW (window));
|
||||
|
||||
private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window);
|
||||
config = GIMP_GUI_CONFIG (private->gimp->config);
|
||||
|
||||
/* Tab visibility. */
|
||||
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (private->notebook),
|
||||
config->single_window_mode &&
|
||||
! config->hide_docks &&
|
||||
|
@ -1537,6 +1544,28 @@ gimp_image_window_update_tabs (GimpImageWindow *window)
|
|||
private->active_shell->display &&
|
||||
gimp_display_get_image (private->active_shell->display)) ||
|
||||
g_list_length (private->shells) > 1));
|
||||
|
||||
/* Tab position. */
|
||||
switch (config->tabs_position)
|
||||
{
|
||||
case GIMP_POSITION_TOP:
|
||||
position = GTK_POS_TOP;
|
||||
break;
|
||||
case GIMP_POSITION_BOTTOM:
|
||||
position = GTK_POS_BOTTOM;
|
||||
break;
|
||||
case GIMP_POSITION_LEFT:
|
||||
position = GTK_POS_LEFT;
|
||||
break;
|
||||
case GIMP_POSITION_RIGHT:
|
||||
position = GTK_POS_RIGHT;
|
||||
break;
|
||||
default:
|
||||
/* If we have any strange value, just reset to default. */
|
||||
position = GTK_POS_TOP;
|
||||
break;
|
||||
}
|
||||
gtk_notebook_set_tab_pos (GTK_NOTEBOOK (private->notebook), position);
|
||||
}
|
||||
|
||||
/* private functions */
|
||||
|
@ -1567,14 +1596,20 @@ gimp_image_window_config_notify (GimpImageWindow *window,
|
|||
|
||||
/* Dock column visibility */
|
||||
if (strcmp (pspec->name, "single-window-mode") == 0 ||
|
||||
strcmp (pspec->name, "hide-docks") == 0)
|
||||
strcmp (pspec->name, "hide-docks") == 0 ||
|
||||
strcmp (pspec->name, "tabs-position") == 0)
|
||||
{
|
||||
gboolean show_docks = (config->single_window_mode &&
|
||||
! config->hide_docks);
|
||||
if (strcmp (pspec->name, "single-window-mode") == 0 ||
|
||||
strcmp (pspec->name, "hide-docks") == 0)
|
||||
{
|
||||
gboolean show_docks = (config->single_window_mode &&
|
||||
! config->hide_docks);
|
||||
|
||||
gimp_image_window_keep_canvas_pos (window);
|
||||
gtk_widget_set_visible (private->left_docks, show_docks);
|
||||
gtk_widget_set_visible (private->right_docks, show_docks);
|
||||
}
|
||||
|
||||
gimp_image_window_keep_canvas_pos (window);
|
||||
gtk_widget_set_visible (private->left_docks, show_docks);
|
||||
gtk_widget_set_visible (private->right_docks, show_docks);
|
||||
gimp_image_window_update_tabs (window);
|
||||
}
|
||||
|
||||
|
|
|
@ -60,6 +60,7 @@ enum
|
|||
SESSION_INFO = 1,
|
||||
HIDE_DOCKS,
|
||||
SINGLE_WINDOW_MODE,
|
||||
TABS_POSITION,
|
||||
LAST_TIP_SHOWN
|
||||
};
|
||||
|
||||
|
@ -114,6 +115,8 @@ session_init (Gimp *gimp)
|
|||
GINT_TO_POINTER (HIDE_DOCKS));
|
||||
g_scanner_scope_add_symbol (scanner, 0, "single-window-mode",
|
||||
GINT_TO_POINTER (SINGLE_WINDOW_MODE));
|
||||
g_scanner_scope_add_symbol (scanner, 0, "tabs-position",
|
||||
GINT_TO_POINTER (TABS_POSITION));
|
||||
g_scanner_scope_add_symbol (scanner, 0, "last-tip-shown",
|
||||
GINT_TO_POINTER (LAST_TIP_SHOWN));
|
||||
|
||||
|
@ -252,6 +255,19 @@ session_init (Gimp *gimp)
|
|||
"single-window-mode", single_window_mode,
|
||||
NULL);
|
||||
}
|
||||
else if (scanner->value.v_symbol == GINT_TO_POINTER (TABS_POSITION))
|
||||
{
|
||||
gint tabs_position;
|
||||
|
||||
token = G_TOKEN_INT;
|
||||
|
||||
if (! gimp_scanner_parse_int (scanner, &tabs_position))
|
||||
break;
|
||||
|
||||
g_object_set (gimp->config,
|
||||
"tabs-position", tabs_position,
|
||||
NULL);
|
||||
}
|
||||
else if (scanner->value.v_symbol == GINT_TO_POINTER (LAST_TIP_SHOWN))
|
||||
{
|
||||
gint last_tip_shown;
|
||||
|
@ -365,6 +381,11 @@ session_save (Gimp *gimp,
|
|||
"yes" : "no");
|
||||
gimp_config_writer_close (writer);
|
||||
|
||||
gimp_config_writer_open (writer, "tabs-position");
|
||||
gimp_config_writer_printf (writer, "%d",
|
||||
GIMP_GUI_CONFIG (gimp->config)->tabs_position);
|
||||
gimp_config_writer_close (writer);
|
||||
|
||||
gimp_config_writer_open (writer, "last-tip-shown");
|
||||
gimp_config_writer_printf (writer, "%d",
|
||||
GIMP_GUI_CONFIG (gimp->config)->last_tip_shown);
|
||||
|
|
|
@ -525,6 +525,10 @@
|
|||
|
||||
#define GIMP_HELP_WINDOWS_SHOW_DOCK "gimp-windows-show-dock"
|
||||
#define GIMP_HELP_WINDOWS_HIDE_DOCKS "gimp-windows-hide-docks"
|
||||
#define GIMP_HELP_WINDOWS_TABS_POSITION_TOP "gimp-windows-tabs-position-top"
|
||||
#define GIMP_HELP_WINDOWS_TABS_POSITION_BOTTOM "gimp-windows-tabs-position-bottom"
|
||||
#define GIMP_HELP_WINDOWS_TABS_POSITION_LEFT "gimp-windows-tabs-position-left"
|
||||
#define GIMP_HELP_WINDOWS_TABS_POSITION_RIGHT "gimp-windows-tabs-position-right"
|
||||
#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"
|
||||
|
||||
|
|
|
@ -733,6 +733,12 @@
|
|||
</placeholder>
|
||||
<separator />
|
||||
<menuitem action="windows-hide-docks" />
|
||||
<menu action="windows-tab-position" name="Position">
|
||||
<menuitem action="windows-tabs-position-top" />
|
||||
<menuitem action="windows-tabs-position-bottom" />
|
||||
<menuitem action="windows-tabs-position-left" />
|
||||
<menuitem action="windows-tabs-position-right" />
|
||||
</menu>
|
||||
<menuitem action="windows-use-single-window-mode" />
|
||||
<separator />
|
||||
</menu>
|
||||
|
|
Loading…
Reference in New Issue