mirror of
https://github.com/brl/mutter.git
synced 2024-11-24 17:10:40 -05:00
Add frame type for attached modal dialogs
Add a new frame type META_FRAME_TYPE_ATTACHED which is used for attached modal dialogs. The theme format version is bumped to 3.2, and attached windows can have borders defined in a metacity-theme-3.xml as: <window version=">= 3.2" type="attached" style_set="[name]"/> If no style is defined for "attached", drawing will fall back to the "border" type. https://bugzilla.gnome.org/show_bug.cgi?id=592382
This commit is contained in:
parent
9f4942e9a7
commit
ed2fbcd13a
@ -22,6 +22,14 @@ This document has separate sections for each format version. You may
|
|||||||
want to read the document in reverse order, since the base features
|
want to read the document in reverse order, since the base features
|
||||||
are discussed under version 1.
|
are discussed under version 1.
|
||||||
|
|
||||||
|
New Features in Theme Format Version 3.2
|
||||||
|
========================================
|
||||||
|
|
||||||
|
A new window type 'attached' is added for modal dialogs which are
|
||||||
|
attached to their parent window. (When the attach_modal_dialogs preference
|
||||||
|
is turned on.) If no style is defined for the 'attached' window type,
|
||||||
|
the 'border' window type will be used instead.
|
||||||
|
|
||||||
New Features in Theme Format Version 3.1
|
New Features in Theme Format Version 3.1
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
|
@ -131,7 +131,11 @@ meta_core_get (Display *xdisplay,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case META_WINDOW_MODAL_DIALOG:
|
case META_WINDOW_MODAL_DIALOG:
|
||||||
base_type = META_FRAME_TYPE_MODAL_DIALOG;
|
if (meta_prefs_get_attach_modal_dialogs () &&
|
||||||
|
meta_window_get_transient_for (window) != NULL)
|
||||||
|
base_type = META_FRAME_TYPE_ATTACHED;
|
||||||
|
else
|
||||||
|
base_type = META_FRAME_TYPE_MODAL_DIALOG;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case META_WINDOW_MENU:
|
case META_WINDOW_MENU:
|
||||||
@ -164,7 +168,7 @@ meta_core_get (Display *xdisplay,
|
|||||||
/* can't add border if undecorated */
|
/* can't add border if undecorated */
|
||||||
*((MetaFrameType*)answer) = META_FRAME_TYPE_LAST;
|
*((MetaFrameType*)answer) = META_FRAME_TYPE_LAST;
|
||||||
}
|
}
|
||||||
else if (window->border_only)
|
else if (window->border_only && base_type != META_FRAME_TYPE_ATTACHED)
|
||||||
{
|
{
|
||||||
/* override base frame type */
|
/* override base frame type */
|
||||||
*((MetaFrameType*)answer) = META_FRAME_TYPE_BORDER;
|
*((MetaFrameType*)answer) = META_FRAME_TYPE_BORDER;
|
||||||
|
@ -195,6 +195,7 @@ typedef enum
|
|||||||
META_FRAME_TYPE_UTILITY,
|
META_FRAME_TYPE_UTILITY,
|
||||||
META_FRAME_TYPE_MENU,
|
META_FRAME_TYPE_MENU,
|
||||||
META_FRAME_TYPE_BORDER,
|
META_FRAME_TYPE_BORDER,
|
||||||
|
META_FRAME_TYPE_ATTACHED,
|
||||||
META_FRAME_TYPE_LAST
|
META_FRAME_TYPE_LAST
|
||||||
} MetaFrameType;
|
} MetaFrameType;
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
* look out for.
|
* look out for.
|
||||||
*/
|
*/
|
||||||
#define THEME_MAJOR_VERSION 3
|
#define THEME_MAJOR_VERSION 3
|
||||||
#define THEME_MINOR_VERSION 1
|
#define THEME_MINOR_VERSION 2
|
||||||
#define THEME_VERSION (1000 * THEME_MAJOR_VERSION + THEME_MINOR_VERSION)
|
#define THEME_VERSION (1000 * THEME_MAJOR_VERSION + THEME_MINOR_VERSION)
|
||||||
|
|
||||||
#define METACITY_THEME_FILENAME_FORMAT "metacity-theme-%d.xml"
|
#define METACITY_THEME_FILENAME_FORMAT "metacity-theme-%d.xml"
|
||||||
@ -1257,7 +1257,8 @@ parse_toplevel_element (GMarkupParseContext *context,
|
|||||||
|
|
||||||
type = meta_frame_type_from_string (type_name);
|
type = meta_frame_type_from_string (type_name);
|
||||||
|
|
||||||
if (type == META_FRAME_TYPE_LAST)
|
if (type == META_FRAME_TYPE_LAST ||
|
||||||
|
(type == META_FRAME_TYPE_ATTACHED && peek_required_version (info) < 3002))
|
||||||
{
|
{
|
||||||
set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE,
|
set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE,
|
||||||
_("Unknown type \"%s\" on <%s> element"),
|
_("Unknown type \"%s\" on <%s> element"),
|
||||||
|
@ -408,6 +408,10 @@ get_window_contents (MetaFrameType type,
|
|||||||
*title = _("Border");
|
*title = _("Border");
|
||||||
return border_only_contents ();
|
return border_only_contents ();
|
||||||
|
|
||||||
|
case META_FRAME_TYPE_ATTACHED:
|
||||||
|
*title = _("Attached Modal Dialog");
|
||||||
|
return dialog_contents ();
|
||||||
|
|
||||||
case META_FRAME_TYPE_LAST:
|
case META_FRAME_TYPE_LAST:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
break;
|
break;
|
||||||
@ -455,6 +459,9 @@ get_window_flags (MetaFrameType type)
|
|||||||
case META_FRAME_TYPE_BORDER:
|
case META_FRAME_TYPE_BORDER:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case META_FRAME_TYPE_ATTACHED:
|
||||||
|
break;
|
||||||
|
|
||||||
case META_FRAME_TYPE_LAST:
|
case META_FRAME_TYPE_LAST:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
break;
|
break;
|
||||||
|
@ -4992,7 +4992,7 @@ meta_theme_validate (MetaTheme *theme,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < (int)META_FRAME_TYPE_LAST; i++)
|
for (i = 0; i < (int)META_FRAME_TYPE_LAST; i++)
|
||||||
if (theme->style_sets_by_type[i] == NULL)
|
if (i != (int)META_FRAME_TYPE_ATTACHED && theme->style_sets_by_type[i] == NULL)
|
||||||
{
|
{
|
||||||
g_set_error (error, META_THEME_ERROR, META_THEME_ERROR_FAILED,
|
g_set_error (error, META_THEME_ERROR, META_THEME_ERROR_FAILED,
|
||||||
_("No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"),
|
_("No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"),
|
||||||
@ -5074,7 +5074,10 @@ theme_get_style (MetaTheme *theme,
|
|||||||
|
|
||||||
style_set = theme->style_sets_by_type[type];
|
style_set = theme->style_sets_by_type[type];
|
||||||
|
|
||||||
/* Right now the parser forces a style set for all types,
|
if (style_set == NULL && type == META_FRAME_TYPE_ATTACHED)
|
||||||
|
style_set = theme->style_sets_by_type[META_FRAME_TYPE_BORDER];
|
||||||
|
|
||||||
|
/* Right now the parser forces a style set for all other types,
|
||||||
* but this fallback code is here in case I take that out.
|
* but this fallback code is here in case I take that out.
|
||||||
*/
|
*/
|
||||||
if (style_set == NULL)
|
if (style_set == NULL)
|
||||||
@ -6004,6 +6007,8 @@ meta_frame_type_from_string (const char *str)
|
|||||||
return META_FRAME_TYPE_MENU;
|
return META_FRAME_TYPE_MENU;
|
||||||
else if (strcmp ("border", str) == 0)
|
else if (strcmp ("border", str) == 0)
|
||||||
return META_FRAME_TYPE_BORDER;
|
return META_FRAME_TYPE_BORDER;
|
||||||
|
else if (strcmp ("attached", str) == 0)
|
||||||
|
return META_FRAME_TYPE_ATTACHED;
|
||||||
#if 0
|
#if 0
|
||||||
else if (strcmp ("toolbar", str) == 0)
|
else if (strcmp ("toolbar", str) == 0)
|
||||||
return META_FRAME_TYPE_TOOLBAR;
|
return META_FRAME_TYPE_TOOLBAR;
|
||||||
@ -6029,6 +6034,8 @@ meta_frame_type_to_string (MetaFrameType type)
|
|||||||
return "menu";
|
return "menu";
|
||||||
case META_FRAME_TYPE_BORDER:
|
case META_FRAME_TYPE_BORDER:
|
||||||
return "border";
|
return "border";
|
||||||
|
case META_FRAME_TYPE_ATTACHED:
|
||||||
|
return "attached";
|
||||||
#if 0
|
#if 0
|
||||||
case META_FRAME_TYPE_TOOLBAR:
|
case META_FRAME_TYPE_TOOLBAR:
|
||||||
return "toolbar";
|
return "toolbar";
|
||||||
|
Loading…
Reference in New Issue
Block a user