mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 01:20:42 -05:00
put in some kind of distinctive frame for UTILITY, though it's ugly. Also
2002-02-09 Havoc Pennington <hp@pobox.com> * src/themes/Atlanta/metacity-theme-1.xml: put in some kind of distinctive frame for UTILITY, though it's ugly. Also put in the borderless look for maximized windows. * src/stack.c (compute_layer): put splash screen in the splash layer * src/stack.h (enum): create a splash screen layer * src/place.c (meta_window_place): center splashscreen, and fix a typo in the centering code * src/window.c (recalc_window_features): disable most features on splash screens * src/screen.c (set_supported_hint): add UTILITY and SPLASHSCREEN hints * src/window.c: add UTILITY, SPLASHSCREEN implementation * src/window.h (enum): add UTILITY, SPLASHSCREEN types * src/theme-parser.c (parse_toplevel_element): parser support for has_title attribute * src/theme.c (meta_frame_layout_get_borders): handle a has_title field in the layout, for utility windows that don't display a title (would be better to be able to shrink the title text, but that's kind of tricky to implement :-/)
This commit is contained in:
parent
844a8ac13f
commit
116fc5546f
32
ChangeLog
32
ChangeLog
@ -1,3 +1,35 @@
|
||||
2002-02-09 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* src/themes/Atlanta/metacity-theme-1.xml: put in some kind of
|
||||
distinctive frame for UTILITY, though it's ugly. Also put in the
|
||||
borderless look for maximized windows.
|
||||
|
||||
* src/stack.c (compute_layer): put splash screen in the splash
|
||||
layer
|
||||
|
||||
* src/stack.h (enum): create a splash screen layer
|
||||
|
||||
* src/place.c (meta_window_place): center splashscreen, and fix a
|
||||
typo in the centering code
|
||||
|
||||
* src/window.c (recalc_window_features): disable most features on
|
||||
splash screens
|
||||
|
||||
* src/screen.c (set_supported_hint): add UTILITY and SPLASHSCREEN
|
||||
hints
|
||||
|
||||
* src/window.c: add UTILITY, SPLASHSCREEN implementation
|
||||
|
||||
* src/window.h (enum): add UTILITY, SPLASHSCREEN types
|
||||
|
||||
* src/theme-parser.c (parse_toplevel_element): parser support
|
||||
for has_title attribute
|
||||
|
||||
* src/theme.c (meta_frame_layout_get_borders): handle a has_title
|
||||
field in the layout, for utility windows that don't display a
|
||||
title (would be better to be able to shrink the title text,
|
||||
but that's kind of tricky to implement :-/)
|
||||
|
||||
2002-02-08 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* src/screen.c (set_supported_hint): add _NET_WM_STATE_HIDDEN
|
||||
|
@ -91,9 +91,14 @@ meta_core_get_frame_type (Display *xdisplay,
|
||||
return META_FRAME_TYPE_MENU;
|
||||
break;
|
||||
|
||||
case META_WINDOW_UTILITY:
|
||||
return META_FRAME_TYPE_UTILITY;
|
||||
break;
|
||||
|
||||
case META_WINDOW_DESKTOP:
|
||||
case META_WINDOW_DOCK:
|
||||
case META_WINDOW_TOOLBAR:
|
||||
case META_WINDOW_SPLASHSCREEN:
|
||||
/* No frame */
|
||||
return META_FRAME_TYPE_LAST;
|
||||
break;
|
||||
|
@ -144,7 +144,9 @@ meta_display_open (const char *name)
|
||||
"_WIN_HINTS",
|
||||
"_METACITY_RELOAD_THEME_MESSAGE",
|
||||
"_METACITY_SET_KEYBINDINGS_MESSAGE",
|
||||
"_NET_WM_STATE_HIDDEN"
|
||||
"_NET_WM_STATE_HIDDEN",
|
||||
"_NET_WM_WINDOW_TYPE_UTILITY",
|
||||
"_NET_WM_WINDOW_TYPE_SPLASHSCREEN"
|
||||
};
|
||||
Atom atoms[G_N_ELEMENTS(atom_names)];
|
||||
|
||||
@ -243,6 +245,8 @@ meta_display_open (const char *name)
|
||||
display->atom_metacity_reload_theme_message = atoms[47];
|
||||
display->atom_metacity_set_keybindings_message = atoms[48];
|
||||
display->atom_net_wm_state_hidden = atoms[49];
|
||||
display->atom_net_wm_window_type_utility = atoms[50];
|
||||
display->atom_net_wm_window_type_splashscreen = atoms[51];
|
||||
|
||||
/* Offscreen unmapped window used for _NET_SUPPORTING_WM_CHECK,
|
||||
* created in screen_new
|
||||
|
@ -109,6 +109,8 @@ struct _MetaDisplay
|
||||
Atom atom_metacity_reload_theme_message;
|
||||
Atom atom_metacity_set_keybindings_message;
|
||||
Atom atom_net_wm_state_hidden;
|
||||
Atom atom_net_wm_window_type_utility;
|
||||
Atom atom_net_wm_window_type_splashscreen;
|
||||
|
||||
/* This is the actual window from focus events,
|
||||
* not the one we last set
|
||||
|
@ -253,7 +253,8 @@ meta_window_place (MetaWindow *window,
|
||||
}
|
||||
|
||||
if (window->type == META_WINDOW_DIALOG ||
|
||||
window->type == META_WINDOW_MODAL_DIALOG)
|
||||
window->type == META_WINDOW_MODAL_DIALOG ||
|
||||
window->type == META_WINDOW_SPLASHSCREEN)
|
||||
{
|
||||
/* Center on screen */
|
||||
int w, h;
|
||||
@ -263,14 +264,14 @@ meta_window_place (MetaWindow *window,
|
||||
h = window->screen->height;
|
||||
|
||||
x = (w - window->rect.width) / 2;
|
||||
y = (y - window->rect.height) / 2;
|
||||
y = (h - window->rect.height) / 2;
|
||||
|
||||
meta_topic (META_DEBUG_PLACEMENT, "Centered window %s on screen\n",
|
||||
window->desc);
|
||||
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
||||
/* Find windows that matter (not minimized, on same workspace
|
||||
* as placed window, may be shaded - if shaded we pretend it isn't
|
||||
* for placement purposes)
|
||||
|
@ -78,7 +78,7 @@ set_wm_check_hint (MetaScreen *screen)
|
||||
static int
|
||||
set_supported_hint (MetaScreen *screen)
|
||||
{
|
||||
#define N_SUPPORTED 24
|
||||
#define N_SUPPORTED 26
|
||||
#define N_WIN_SUPPORTED 1
|
||||
Atom atoms[N_SUPPORTED];
|
||||
|
||||
@ -106,6 +106,8 @@ set_supported_hint (MetaScreen *screen)
|
||||
atoms[21] = screen->display->atom_net_wm_icon;
|
||||
atoms[22] = screen->display->atom_net_wm_moveresize;
|
||||
atoms[23] = screen->display->atom_net_wm_state_hidden;
|
||||
atoms[24] = screen->display->atom_net_wm_window_type_utility;
|
||||
atoms[25] = screen->display->atom_net_wm_window_type_splashscreen;
|
||||
|
||||
XChangeProperty (screen->display->xdisplay, screen->xroot,
|
||||
screen->display->atom_net_supported,
|
||||
|
@ -588,6 +588,12 @@ window_type_to_string (MetaWindowType type)
|
||||
case META_WINDOW_MENU:
|
||||
return "menu";
|
||||
break;
|
||||
case META_WINDOW_SPLASHSCREEN:
|
||||
return "splashscreen";
|
||||
break;
|
||||
case META_WINDOW_UTILITY:
|
||||
return "utility";
|
||||
break;
|
||||
}
|
||||
|
||||
return "";
|
||||
@ -610,6 +616,10 @@ window_type_from_string (const char *str)
|
||||
return META_WINDOW_TOOLBAR;
|
||||
else if (strcmp (str, "menu") == 0)
|
||||
return META_WINDOW_MENU;
|
||||
else if (strcmp (str, "utility") == 0)
|
||||
return META_WINDOW_UTILITY;
|
||||
else if (strcmp (str, "splashscreen") == 0)
|
||||
return META_WINDOW_SPLASHSCREEN;
|
||||
else
|
||||
return META_WINDOW_NORMAL;
|
||||
}
|
||||
|
@ -269,6 +269,10 @@ compute_layer (MetaWindow *window)
|
||||
/* still experimenting here */
|
||||
window->layer = META_LAYER_NORMAL;
|
||||
break;
|
||||
|
||||
case META_WINDOW_SPLASHSCREEN:
|
||||
window->layer = META_LAYER_SPLASH;
|
||||
break;
|
||||
|
||||
default:
|
||||
window->layer = META_LAYER_NORMAL;
|
||||
|
@ -38,7 +38,8 @@ typedef enum
|
||||
META_LAYER_TOP = 3,
|
||||
META_LAYER_DOCK = 4,
|
||||
META_LAYER_FULLSCREEN = 5,
|
||||
META_LAYER_LAST = 6
|
||||
META_LAYER_SPLASH = 6,
|
||||
META_LAYER_LAST = 7
|
||||
} MetaStackLayer;
|
||||
|
||||
struct _MetaStack
|
||||
|
@ -656,11 +656,14 @@ parse_toplevel_element (GMarkupParseContext *context,
|
||||
{
|
||||
const char *name = NULL;
|
||||
const char *parent = NULL;
|
||||
const char *has_title = NULL;
|
||||
gboolean has_title_val;
|
||||
MetaFrameLayout *parent_layout;
|
||||
|
||||
if (!locate_attributes (context, element_name, attribute_names, attribute_values,
|
||||
error,
|
||||
"name", &name, "parent", &parent,
|
||||
"has_title", &has_title,
|
||||
NULL))
|
||||
return;
|
||||
|
||||
@ -672,6 +675,10 @@ parse_toplevel_element (GMarkupParseContext *context,
|
||||
return;
|
||||
}
|
||||
|
||||
has_title_val = TRUE;
|
||||
if (has_title && !parse_boolean (has_title, &has_title_val, context, error))
|
||||
return;
|
||||
|
||||
if (meta_theme_lookup_layout (info->theme, name))
|
||||
{
|
||||
set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE,
|
||||
@ -700,6 +707,9 @@ parse_toplevel_element (GMarkupParseContext *context,
|
||||
else
|
||||
info->layout = meta_frame_layout_new ();
|
||||
|
||||
if (has_title) /* only if explicit, otherwise inherit */
|
||||
info->layout->has_title = has_title_val;
|
||||
|
||||
meta_theme_insert_layout (info->theme, name, info->layout);
|
||||
|
||||
push_state (info, STATE_FRAME_GEOMETRY);
|
||||
|
@ -333,6 +333,8 @@ meta_frame_layout_new (void)
|
||||
layout->button_width = -1;
|
||||
layout->button_height = -1;
|
||||
|
||||
layout->has_title = TRUE;
|
||||
|
||||
init_border (&layout->button_border);
|
||||
|
||||
return layout;
|
||||
@ -468,12 +470,15 @@ meta_frame_layout_get_borders (const MetaFrameLayout *layout,
|
||||
int *right_width)
|
||||
{
|
||||
int buttons_height, title_height;
|
||||
|
||||
|
||||
g_return_if_fail (top_height != NULL);
|
||||
g_return_if_fail (bottom_height != NULL);
|
||||
g_return_if_fail (left_width != NULL);
|
||||
g_return_if_fail (right_width != NULL);
|
||||
|
||||
if (!layout->has_title)
|
||||
text_height = 0;
|
||||
|
||||
buttons_height = layout->button_height +
|
||||
layout->button_border.top + layout->button_border.bottom;
|
||||
title_height = text_height +
|
||||
|
@ -78,6 +78,9 @@ struct _MetaFrameLayout
|
||||
|
||||
/* Space around buttons */
|
||||
GtkBorder button_border;
|
||||
|
||||
/* Whether title text will be displayed */
|
||||
guint has_title : 1;
|
||||
};
|
||||
|
||||
|
||||
|
@ -23,11 +23,24 @@
|
||||
|
||||
<!-- strip borders off the normal geometry -->
|
||||
<frame_geometry name="normal_borderless" parent="normal">
|
||||
<distance name="left_width" value="0"/>
|
||||
<distance name="right_width" value="0"/>
|
||||
<distance name="bottom_height" value="0"/>
|
||||
<distance name="left_titlebar_edge" value="0"/>
|
||||
<distance name="right_titlebar_edge" value="0"/>
|
||||
<distance name="left_width" value="4"/>
|
||||
<distance name="right_width" value="4"/>
|
||||
<distance name="bottom_height" value="5"/>
|
||||
<distance name="left_titlebar_edge" value="4"/>
|
||||
<distance name="right_titlebar_edge" value="4"/>
|
||||
</frame_geometry>
|
||||
|
||||
<frame_geometry name="utility" has_title="false">
|
||||
<distance name="left_width" value="3"/>
|
||||
<distance name="right_width" value="3"/>
|
||||
<distance name="bottom_height" value="4"/>
|
||||
<distance name="left_titlebar_edge" value="3"/>
|
||||
<distance name="right_titlebar_edge" value="3"/>
|
||||
<distance name="button_width" value="11"/>
|
||||
<distance name="button_height" value="11"/>
|
||||
<distance name="title_vertical_pad" value="11"/>
|
||||
<border name="title_border" left="3" right="4" top="3" bottom="3"/>
|
||||
<border name="button_border" left="0" right="0" top="1" bottom="1"/>
|
||||
</frame_geometry>
|
||||
|
||||
<!-- define constants -->
|
||||
@ -136,19 +149,30 @@
|
||||
x1="1" y1="height-2" x2="width-2" y2="height-2"/>
|
||||
</draw_ops>
|
||||
|
||||
<draw_ops name="focus_background">
|
||||
<include name="outer_bevel"/>
|
||||
<draw_ops name="blank">
|
||||
<!-- nothing -->
|
||||
</draw_ops>
|
||||
|
||||
<draw_ops name="focus_outline">
|
||||
<rectangle color="#000000"
|
||||
x="left_width-1" y="top_height-1"
|
||||
width="width-left_width-right_width+1"
|
||||
height="height-top_height-bottom_height+1"/>
|
||||
</draw_ops>
|
||||
|
||||
<draw_ops name="focus_background">
|
||||
<include name="outer_bevel"/>
|
||||
<include name="focus_outline"/>
|
||||
</draw_ops>
|
||||
|
||||
<draw_ops name="title_gradient">
|
||||
<gradient type="diagonal" x="0" y="0" width="width-SpacerWidth" height="height">
|
||||
<color value="blend/gtk:bg[NORMAL]/gtk:bg[SELECTED]/0.6"/>
|
||||
<color value="gtk:bg[SELECTED]"/>
|
||||
</gradient>
|
||||
</draw_ops>
|
||||
|
||||
<draw_ops name="title_spacer">
|
||||
<gtk_vline state="normal" x="width+1-SpacerWidth/2"
|
||||
y1="(height-SpacerHeight)/2"
|
||||
y2="height - (height-SpacerHeight)/2"/>
|
||||
@ -175,14 +199,25 @@
|
||||
</draw_ops>
|
||||
|
||||
<draw_ops name="title_normal">
|
||||
<include name="title_spacer"/>
|
||||
<include name="title_text"/>
|
||||
</draw_ops>
|
||||
|
||||
<draw_ops name="title_focused">
|
||||
<include name="title_gradient"/>
|
||||
<include name="title_spacer"/>
|
||||
<include name="title_text_focused"/>
|
||||
</draw_ops>
|
||||
|
||||
<draw_ops name="title_utility">
|
||||
<include name="title_spacer"/>
|
||||
</draw_ops>
|
||||
|
||||
<draw_ops name="title_utility_focused">
|
||||
<include name="title_gradient"/>
|
||||
<include name="title_spacer"/>
|
||||
</draw_ops>
|
||||
|
||||
<frame_style name="normal_unfocused" geometry="normal">
|
||||
<piece position="entire_background" draw_ops="outer_bevel"/>
|
||||
<piece position="title" draw_ops="title_normal"/>
|
||||
@ -203,16 +238,25 @@
|
||||
<piece position="title" draw_ops="title_focused"/>
|
||||
</frame_style>
|
||||
|
||||
<frame_style name="maximized_unfocused" parent="normal_unfocused">
|
||||
<frame_style name="maximized_unfocused" geometry="normal_borderless" parent="normal_unfocused">
|
||||
<piece position="entire_background" draw_ops="blank"/>
|
||||
<button function="maximize" state="normal" draw_ops="restore_button"/>
|
||||
<button function="maximize" state="pressed" draw_ops="restore_button_pressed"/>
|
||||
</frame_style>
|
||||
|
||||
<frame_style name="maximized_focused" parent="normal_focused">
|
||||
<frame_style name="maximized_focused" geometry="normal_borderless" parent="normal_focused">
|
||||
<piece position="entire_background" draw_ops="focus_outline"/>
|
||||
<button function="maximize" state="normal" draw_ops="restore_button"/>
|
||||
<button function="maximize" state="pressed" draw_ops="restore_button_pressed"/>
|
||||
</frame_style>
|
||||
|
||||
<frame_style name="utility_unfocused" geometry="utility" parent="normal_unfocused">
|
||||
<piece position="title" draw_ops="title_utility"/>
|
||||
</frame_style>
|
||||
|
||||
<frame_style name="utility_focused" geometry="utility" parent="normal_focused">
|
||||
<piece position="title" draw_ops="title_utility_focused"/>
|
||||
</frame_style>
|
||||
|
||||
<frame_style_set name="normal">
|
||||
<frame focus="yes" state="normal" resize="both" style="normal_focused"/>
|
||||
@ -225,11 +269,23 @@
|
||||
<frame focus="no" state="maximized_and_shaded" style="maximized_unfocused"/>
|
||||
</frame_style_set>
|
||||
|
||||
<frame_style_set name="utility" parent="normal">
|
||||
<frame focus="yes" state="normal" resize="both" style="utility_focused"/>
|
||||
<frame focus="no" state="normal" resize="both" style="utility_unfocused"/>
|
||||
<!-- this is a bunch of crack since utility windows shouldn't be maximized -->
|
||||
<frame focus="yes" state="maximized" style="utility_focused"/>
|
||||
<frame focus="no" state="maximized" style="utility_unfocused"/>
|
||||
<frame focus="yes" state="shaded" style="utility_focused"/>
|
||||
<frame focus="no" state="shaded" style="utility_unfocused"/>
|
||||
<frame focus="yes" state="maximized_and_shaded" style="utility_focused"/>
|
||||
<frame focus="no" state="maximized_and_shaded" style="utility_unfocused"/>
|
||||
</frame_style_set>
|
||||
|
||||
<window type="normal" style_set="normal"/>
|
||||
<window type="dialog" style_set="normal"/>
|
||||
<window type="modal_dialog" style_set="normal"/>
|
||||
<window type="menu" style_set="normal"/>
|
||||
<window type="utility" style_set="normal"/>
|
||||
<window type="utility" style_set="utility"/>
|
||||
|
||||
<menu_icon function="close" state="normal" draw_ops="close_button"/>
|
||||
<menu_icon function="maximize" state="normal" draw_ops="maximize_button"/>
|
||||
|
24
src/window.c
24
src/window.c
@ -526,7 +526,8 @@ meta_window_new (MetaDisplay *display, Window xwindow,
|
||||
if (window->type == META_WINDOW_DESKTOP ||
|
||||
window->type == META_WINDOW_DOCK ||
|
||||
window->type == META_WINDOW_TOOLBAR ||
|
||||
window->type == META_WINDOW_MENU)
|
||||
window->type == META_WINDOW_MENU ||
|
||||
window->type == META_WINDOW_UTILITY)
|
||||
{
|
||||
if (window->size_hints.flags & PPosition)
|
||||
{
|
||||
@ -2645,7 +2646,8 @@ meta_window_configure_request (MetaWindow *window,
|
||||
window->type == META_WINDOW_DOCK ||
|
||||
window->type == META_WINDOW_TOOLBAR ||
|
||||
window->type == META_WINDOW_MENU ||
|
||||
window->type == META_WINDOW_NORMAL) &&
|
||||
window->type == META_WINDOW_NORMAL ||
|
||||
window->type == META_WINDOW_UTILITY) &&
|
||||
(window->size_hints.flags & PPosition)) ||
|
||||
(window->size_hints.flags & USPosition))
|
||||
{
|
||||
@ -2666,7 +2668,8 @@ meta_window_configure_request (MetaWindow *window,
|
||||
window->type == META_WINDOW_DOCK ||
|
||||
window->type == META_WINDOW_TOOLBAR ||
|
||||
window->type == META_WINDOW_MENU ||
|
||||
window->type == META_WINDOW_NORMAL)
|
||||
window->type == META_WINDOW_NORMAL ||
|
||||
window->type == META_WINDOW_UTILITY)
|
||||
{
|
||||
if (event->xconfigurerequest.value_mask & CWWidth)
|
||||
width = event->xconfigurerequest.width;
|
||||
@ -4135,13 +4138,14 @@ update_net_wm_type (MetaWindow *window)
|
||||
/* We break as soon as we find one we recognize,
|
||||
* supposed to prefer those near the front of the list
|
||||
*/
|
||||
/* FIXME modal dialog (? see if it's in spec), utility, splashscreen */
|
||||
if (atoms[i] == window->display->atom_net_wm_window_type_desktop ||
|
||||
atoms[i] == window->display->atom_net_wm_window_type_dock ||
|
||||
atoms[i] == window->display->atom_net_wm_window_type_toolbar ||
|
||||
atoms[i] == window->display->atom_net_wm_window_type_menu ||
|
||||
atoms[i] == window->display->atom_net_wm_window_type_dialog ||
|
||||
atoms[i] == window->display->atom_net_wm_window_type_normal)
|
||||
atoms[i] == window->display->atom_net_wm_window_type_normal ||
|
||||
atoms[i] == window->display->atom_net_wm_window_type_utility ||
|
||||
atoms[i] == window->display->atom_net_wm_window_type_splashscreen)
|
||||
{
|
||||
window->type_atom = atoms[i];
|
||||
break;
|
||||
@ -4974,8 +4978,13 @@ recalc_window_type (MetaWindow *window)
|
||||
window->type = META_WINDOW_DIALOG;
|
||||
else if (window->type_atom == window->display->atom_net_wm_window_type_normal)
|
||||
window->type = META_WINDOW_NORMAL;
|
||||
else if (window->type_atom == window->display->atom_net_wm_window_type_utility)
|
||||
window->type = META_WINDOW_UTILITY;
|
||||
else if (window->type_atom == window->display->atom_net_wm_window_type_splashscreen)
|
||||
window->type = META_WINDOW_SPLASHSCREEN;
|
||||
else
|
||||
meta_bug ("Set a type atom for %s that wasn't handled in recalc_window_type\n");
|
||||
meta_bug ("Set a type atom for %s that wasn't handled in recalc_window_type\n",
|
||||
window->desc);
|
||||
}
|
||||
else if (window->xtransient_for != None)
|
||||
{
|
||||
@ -5026,7 +5035,8 @@ recalc_window_features (MetaWindow *window)
|
||||
/* Semantic category overrides the MWM hints */
|
||||
|
||||
if (window->type == META_WINDOW_DESKTOP ||
|
||||
window->type == META_WINDOW_DOCK)
|
||||
window->type == META_WINDOW_DOCK ||
|
||||
window->type == META_WINDOW_SPLASHSCREEN)
|
||||
{
|
||||
window->decorated = FALSE;
|
||||
window->has_close_func = FALSE;
|
||||
|
@ -37,8 +37,9 @@ typedef enum
|
||||
META_WINDOW_DIALOG,
|
||||
META_WINDOW_MODAL_DIALOG,
|
||||
META_WINDOW_TOOLBAR,
|
||||
META_WINDOW_MENU
|
||||
/* FIXME add UTILITY, SPLASHSCREEN */
|
||||
META_WINDOW_MENU,
|
||||
META_WINDOW_UTILITY,
|
||||
META_WINDOW_SPLASHSCREEN
|
||||
} MetaWindowType;
|
||||
|
||||
struct _MetaWindow
|
||||
|
Loading…
Reference in New Issue
Block a user