diff options
| author | Owen W. Taylor <[email protected]> | 2014-09-27 17:06:36 +0300 | 
|---|---|---|
| committer | Victor Kareh <[email protected]> | 2018-08-28 09:38:37 -0400 | 
| commit | c9c3f858e28edf0856a263941007401923adbabd (patch) | |
| tree | 702b2c5d7a41d8ea9b72ef5d2c11ad8116bab136 /src | |
| parent | 37fecf49392eb10ada1f4bf481d6ad6be56891dd (diff) | |
| download | marco-c9c3f858e28edf0856a263941007401923adbabd.tar.bz2 marco-c9c3f858e28edf0856a263941007401923adbabd.tar.xz | |
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
NOTE: Patch copied from mutter and adapted for metacity.
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/core.c | 8 | ||||
| -rw-r--r-- | src/include/common.h | 1 | ||||
| -rw-r--r-- | src/ui/theme-parser.c | 5 | ||||
| -rw-r--r-- | src/ui/theme-viewer.c | 7 | ||||
| -rw-r--r-- | src/ui/theme.c | 11 | 
5 files changed, 26 insertions, 6 deletions
| diff --git a/src/core/core.c b/src/core/core.c index 4ba62db7..535a3820 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -131,7 +131,11 @@ meta_core_get (Display *xdisplay,                break;              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;              case META_WINDOW_MENU: @@ -157,7 +161,7 @@ meta_core_get (Display *xdisplay,                /* can't add border if undecorated */                *((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 */                *((MetaFrameType*)answer) = META_FRAME_TYPE_BORDER; diff --git a/src/include/common.h b/src/include/common.h index fd7de17c..6e94c7a0 100644 --- a/src/include/common.h +++ b/src/include/common.h @@ -208,6 +208,7 @@ typedef enum    META_FRAME_TYPE_UTILITY,    META_FRAME_TYPE_MENU,    META_FRAME_TYPE_BORDER, +  META_FRAME_TYPE_ATTACHED,    META_FRAME_TYPE_LAST  } MetaFrameType; diff --git a/src/ui/theme-parser.c b/src/ui/theme-parser.c index 38c1e664..e3c044f9 100644 --- a/src/ui/theme-parser.c +++ b/src/ui/theme-parser.c @@ -38,7 +38,7 @@   * look out for.   */  #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 MARCO_THEME_FILENAME_FORMAT "metacity-theme-%d.xml" @@ -1277,7 +1277,8 @@ parse_toplevel_element (GMarkupParseContext  *context,        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,                       _("Unknown type \"%s\" on <%s> element"), diff --git a/src/ui/theme-viewer.c b/src/ui/theme-viewer.c index e6e4e097..65df34fa 100644 --- a/src/ui/theme-viewer.c +++ b/src/ui/theme-viewer.c @@ -427,6 +427,10 @@ get_window_contents (MetaFrameType  type,        *title = _("Border");        return border_only_contents (); +    case META_FRAME_TYPE_ATTACHED: +      *title = _("Attached Modal Dialog"); +      return dialog_contents (); +      case META_FRAME_TYPE_LAST:        g_assert_not_reached ();        break; @@ -474,6 +478,9 @@ get_window_flags (MetaFrameType type)      case META_FRAME_TYPE_BORDER:        break; +    case META_FRAME_TYPE_ATTACHED: +      break; +      case META_FRAME_TYPE_LAST:        g_assert_not_reached ();        break; diff --git a/src/ui/theme.c b/src/ui/theme.c index 4385b7c6..667e60ff 100644 --- a/src/ui/theme.c +++ b/src/ui/theme.c @@ -5193,7 +5193,7 @@ meta_theme_validate (MetaTheme *theme,      }    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,                       _("No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"), @@ -5271,7 +5271,10 @@ theme_get_style (MetaTheme     *theme,    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.     */    if (style_set == NULL) @@ -6229,6 +6232,8 @@ meta_frame_type_from_string (const char *str)      return META_FRAME_TYPE_MENU;    else if (strcmp ("border", str) == 0)      return META_FRAME_TYPE_BORDER; +  else if (strcmp ("attached", str) == 0) +    return META_FRAME_TYPE_ATTACHED;  #if 0    else if (strcmp ("toolbar", str) == 0)      return META_FRAME_TYPE_TOOLBAR; @@ -6254,6 +6259,8 @@ meta_frame_type_to_string (MetaFrameType type)        return "menu";      case META_FRAME_TYPE_BORDER:        return "border"; +    case META_FRAME_TYPE_ATTACHED: +      return "attached";  #if 0      case META_FRAME_TYPE_TOOLBAR:        return "toolbar"; | 
