mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 15:40:41 -05:00
Reverse window buttons and align them to the left for RTL locales. (#92212)
svn path=/trunk/; revision=3271
This commit is contained in:
parent
9c2e546f53
commit
8bbccb91f7
17
ChangeLog
17
ChangeLog
@ -1,3 +1,18 @@
|
||||
2007-07-22 Yair Hershkovitz <yairhr@gmail.com>
|
||||
|
||||
Reverse window buttons and align them to the left for RTL locales.
|
||||
Fixed #92212.
|
||||
|
||||
* src/prefs.c (button_layout, init_button_layout, update_button_layout):
|
||||
Support reversing and left-aligning of buttons for both Gconf and
|
||||
NO-Gconf modes.
|
||||
* src/main.c (main): Call meta_ui_init() before meta_prefs_init().
|
||||
meta_prefs_init() check for RTL locales which is initialized in
|
||||
meta_ui_init().
|
||||
* src/theme.c (meta_frame_layout_calc_geometry): Fixed access to
|
||||
button_layout to stop iterating when getting to a
|
||||
META_BUTTON_FUNCTION_LAST value.
|
||||
|
||||
2007-06-23 Thomas Thurman <thomas@thurman.org.uk>
|
||||
|
||||
* src/window.c (MetaWindow): Put all bitfields together to
|
||||
@ -53,7 +68,7 @@
|
||||
Refactor thrice-duplicated queue code in window.c. Closes #376760.
|
||||
|
||||
* src/window.c (meta_window_queue, meta_window_unqueue):
|
||||
New functions.
|
||||
New functiortl.patchns.
|
||||
* src/window.[ch] (meta_window_unqueue_*, meta_window_queue_*):
|
||||
Removed functions.
|
||||
* src/window.c (meta_window_new_with_attrs, meta_window_free,
|
||||
|
@ -293,15 +293,16 @@ main (int argc, char **argv)
|
||||
|
||||
g_type_init ();
|
||||
|
||||
/* Load prefs */
|
||||
meta_prefs_init ();
|
||||
meta_prefs_add_listener (prefs_changed_callback, NULL);
|
||||
|
||||
meta_ui_init (&argc, &argv);
|
||||
|
||||
/* must be after UI init so we can override GDK handlers */
|
||||
meta_errors_init ();
|
||||
|
||||
/* Load prefs */
|
||||
meta_prefs_init ();
|
||||
meta_prefs_add_listener (prefs_changed_callback, NULL);
|
||||
|
||||
|
||||
#if 1
|
||||
g_log_set_handler (NULL,
|
||||
G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,
|
||||
|
85
src/prefs.c
85
src/prefs.c
@ -109,20 +109,7 @@ static int cursor_size = 24;
|
||||
static gboolean compositing_manager = FALSE;
|
||||
|
||||
static MetaVisualBellType visual_bell_type = META_VISUAL_BELL_FULLSCREEN_FLASH;
|
||||
static MetaButtonLayout button_layout = {
|
||||
{
|
||||
META_BUTTON_FUNCTION_MENU,
|
||||
META_BUTTON_FUNCTION_LAST,
|
||||
META_BUTTON_FUNCTION_LAST,
|
||||
META_BUTTON_FUNCTION_LAST
|
||||
},
|
||||
{
|
||||
META_BUTTON_FUNCTION_MINIMIZE,
|
||||
META_BUTTON_FUNCTION_MAXIMIZE,
|
||||
META_BUTTON_FUNCTION_CLOSE,
|
||||
META_BUTTON_FUNCTION_LAST
|
||||
}
|
||||
};
|
||||
static MetaButtonLayout button_layout;
|
||||
|
||||
/* The screenshot commands are at the end */
|
||||
static char *commands[MAX_COMMANDS] = { NULL, };
|
||||
@ -195,6 +182,7 @@ static gboolean update_list_binding (MetaKeyPref *binding,
|
||||
static void init_bindings (void);
|
||||
static void init_commands (void);
|
||||
static void init_workspace_names (void);
|
||||
static void init_button_layout (void);
|
||||
|
||||
|
||||
typedef struct
|
||||
@ -530,6 +518,8 @@ meta_prefs_init (void)
|
||||
*/
|
||||
titlebar_font = pango_font_description_from_string ("Sans Bold 10");
|
||||
current_theme = g_strdup ("Atlanta");
|
||||
|
||||
init_button_layout();
|
||||
#endif /* HAVE_GCONF */
|
||||
|
||||
/* Load keybindings prefs */
|
||||
@ -1461,14 +1451,6 @@ update_button_layout (const char *value)
|
||||
if (value == NULL)
|
||||
return FALSE;
|
||||
|
||||
i = 0;
|
||||
while (i < MAX_BUTTONS_PER_CORNER)
|
||||
{
|
||||
new_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
|
||||
new_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
|
||||
++i;
|
||||
}
|
||||
|
||||
/* We need to ignore unknown button functions, for
|
||||
* compat with future versions
|
||||
*/
|
||||
@ -1515,6 +1497,8 @@ update_button_layout (const char *value)
|
||||
++b;
|
||||
}
|
||||
|
||||
new_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
|
||||
|
||||
g_strfreev (buttons);
|
||||
}
|
||||
|
||||
@ -1558,11 +1542,32 @@ update_button_layout (const char *value)
|
||||
++b;
|
||||
}
|
||||
|
||||
new_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
|
||||
|
||||
g_strfreev (buttons);
|
||||
}
|
||||
|
||||
g_strfreev (sides);
|
||||
|
||||
/* Invert the button layout for RTL languages */
|
||||
if (meta_ui_get_direction() == META_UI_DIRECTION_RTL)
|
||||
{
|
||||
MetaButtonLayout rtl_layout;
|
||||
int j;
|
||||
|
||||
for (i = 0; new_layout.left_buttons[i] != META_BUTTON_FUNCTION_LAST; i++);
|
||||
for (j = 0; j < i; j++)
|
||||
rtl_layout.right_buttons[j] = new_layout.left_buttons[i - j - 1];
|
||||
rtl_layout.right_buttons[j] = META_BUTTON_FUNCTION_LAST;
|
||||
|
||||
for (i = 0; new_layout.right_buttons[i] != META_BUTTON_FUNCTION_LAST; i++);
|
||||
for (j = 0; j < i; j++)
|
||||
rtl_layout.left_buttons[j] = new_layout.right_buttons[i - j - 1];
|
||||
rtl_layout.left_buttons[j] = META_BUTTON_FUNCTION_LAST;
|
||||
|
||||
new_layout = rtl_layout;
|
||||
}
|
||||
|
||||
changed = !button_layout_equal (&button_layout, &new_layout);
|
||||
|
||||
button_layout = new_layout;
|
||||
@ -3036,3 +3041,39 @@ meta_prefs_get_compositing_manager (void)
|
||||
{
|
||||
return compositing_manager;
|
||||
}
|
||||
|
||||
static void
|
||||
init_button_layout(void)
|
||||
{
|
||||
MetaButtonLayout button_layout_ltr = {
|
||||
{
|
||||
/* buttons in the group on the left side */
|
||||
META_BUTTON_FUNCTION_MENU,
|
||||
META_BUTTON_FUNCTION_LAST
|
||||
},
|
||||
{
|
||||
/* buttons in the group on the right side */
|
||||
META_BUTTON_FUNCTION_MINIMIZE,
|
||||
META_BUTTON_FUNCTION_MAXIMIZE,
|
||||
META_BUTTON_FUNCTION_CLOSE,
|
||||
META_BUTTON_FUNCTION_LAST
|
||||
}
|
||||
};
|
||||
MetaButtonLayout button_layout_rtl = {
|
||||
{
|
||||
/* buttons in the group on the left side */
|
||||
META_BUTTON_FUNCTION_CLOSE,
|
||||
META_BUTTON_FUNCTION_MAXIMIZE,
|
||||
META_BUTTON_FUNCTION_MINIMIZE,
|
||||
META_BUTTON_FUNCTION_LAST
|
||||
},
|
||||
{
|
||||
/* buttons in the group on the right side */
|
||||
META_BUTTON_FUNCTION_MENU,
|
||||
META_BUTTON_FUNCTION_LAST
|
||||
}
|
||||
};
|
||||
|
||||
button_layout = meta_ui_get_direction() == META_UI_DIRECTION_LTR ?
|
||||
button_layout_ltr : button_layout_rtl;
|
||||
};
|
||||
|
11
src/theme.c
11
src/theme.c
@ -596,14 +596,11 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
||||
|
||||
n_left = 0;
|
||||
n_right = 0;
|
||||
for (i = 0; i < MAX_BUTTONS_PER_CORNER; i++)
|
||||
{
|
||||
/* NULL all unused */
|
||||
left_func_rects[i] = NULL;
|
||||
right_func_rects[i] = NULL;
|
||||
|
||||
if (!layout->hide_buttons)
|
||||
{
|
||||
/* Try to fill in rects */
|
||||
if (button_layout->left_buttons[i] != META_BUTTON_FUNCTION_LAST && !layout->hide_buttons)
|
||||
for (i = 0; i < MAX_BUTTONS_PER_CORNER && button_layout->left_buttons[i] != META_BUTTON_FUNCTION_LAST; i++)
|
||||
{
|
||||
left_func_rects[n_left] = rect_for_function (fgeom, flags,
|
||||
button_layout->left_buttons[i],
|
||||
@ -612,7 +609,7 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
|
||||
++n_left;
|
||||
}
|
||||
|
||||
if (button_layout->right_buttons[i] != META_BUTTON_FUNCTION_LAST && !layout->hide_buttons)
|
||||
for (i = 0; i < MAX_BUTTONS_PER_CORNER && button_layout->right_buttons[i] != META_BUTTON_FUNCTION_LAST; i++)
|
||||
{
|
||||
right_func_rects[n_right] = rect_for_function (fgeom, flags,
|
||||
button_layout->right_buttons[i],
|
||||
|
Loading…
Reference in New Issue
Block a user